feat(trip-cluster): cluster review operations (approve/non-trip/skip/split/merge/bulk)
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
from photoflow.core import Store
|
||||
from photoflow.core.models import Asset, Cluster, ClusterMember
|
||||
from app import review
|
||||
|
||||
|
||||
def _store(tmp_path):
|
||||
s = Store(str(tmp_path / "t.db")).connect()
|
||||
for i, t in [("a", "2019-06-01"), ("b", "2019-06-02"), ("c", "2019-06-03")]:
|
||||
s.upsert_asset(Asset(immich_id=i, taken_at=t))
|
||||
return s
|
||||
|
||||
|
||||
def _cluster(s, name="Trip", conf=0.9, kind="trip", ids=("a", "b")):
|
||||
return s.insert_cluster(
|
||||
Cluster(start_at="2019-06-01", end_at="2019-06-03", suggested_name=name,
|
||||
confidence=conf, kind_guess=kind, status="pending"),
|
||||
[ClusterMember(cluster_id=0, immich_id=i) for i in ids])
|
||||
|
||||
|
||||
def test_approve_uses_suggested_when_no_name(tmp_path):
|
||||
s = _store(tmp_path)
|
||||
cid = _cluster(s, name="Venice")
|
||||
review.approve(s, cid)
|
||||
c = s.get_cluster(cid)
|
||||
assert c.status == "approved" and c.decided_name == "Venice" and c.reviewed_at
|
||||
review.approve(s, cid, name="Venezia")
|
||||
assert s.get_cluster(cid).decided_name == "Venezia"
|
||||
s.close()
|
||||
|
||||
|
||||
def test_non_trip_skip(tmp_path):
|
||||
s = _store(tmp_path)
|
||||
cid = _cluster(s)
|
||||
review.mark_non_trip(s, cid)
|
||||
assert s.get_cluster(cid).status == "non_trip"
|
||||
c2 = _cluster(s)
|
||||
review.skip(s, c2)
|
||||
assert s.get_cluster(c2).status == "skipped"
|
||||
s.close()
|
||||
|
||||
|
||||
def test_set_member(tmp_path):
|
||||
s = _store(tmp_path)
|
||||
cid = _cluster(s, ids=("a", "b"))
|
||||
review.set_member(s, cid, "b", False)
|
||||
inc = {m.immich_id: m.included for _, m in s.cluster_members(cid)}
|
||||
assert inc["b"] is False
|
||||
s.close()
|
||||
|
||||
|
||||
def test_approve_high_confidence_only_trips(tmp_path):
|
||||
s = _store(tmp_path)
|
||||
hi = _cluster(s, conf=0.9, kind="trip")
|
||||
_cluster(s, conf=0.3, kind="trip") # too low
|
||||
_cluster(s, conf=0.9, kind="everyday") # everyday excluded
|
||||
n = review.approve_high_confidence(s, threshold=0.75)
|
||||
assert n == 1
|
||||
assert s.get_cluster(hi).status == "approved"
|
||||
s.close()
|
||||
Reference in New Issue
Block a user