Implement Review Filters (#10031)

* Get cameras filter working

* Implement label and review filters

* Fix

* Add time selection

* Cleanup

* Cleanup

* cleanup

* remove commented code

* Fix
This commit is contained in:
Nicolas Mowen
2024-02-25 12:04:44 -07:00
committed by GitHub
parent 4a7c159a44
commit 9801534f11
11 changed files with 473 additions and 533 deletions

View File

@@ -2395,7 +2395,9 @@ def vod_event(id):
@bp.route("/review")
def review():
camera = request.args.get("camera", "all")
cameras = request.args.get("cameras", "all")
labels = request.args.get("labels", "all")
reviewed = request.args.get("reviewed", default=False)
limit = request.args.get("limit", 100)
severity = request.args.get("severity", None)
@@ -2406,8 +2408,26 @@ def review():
clauses = [((ReviewSegment.start_time > after) & (ReviewSegment.end_time < before))]
if camera != "all":
clauses.append((ReviewSegment.camera == camera))
if cameras != "all":
camera_list = cameras.split(",")
clauses.append((ReviewSegment.camera << camera_list))
if labels != "all":
# use matching so segments with multiple labels
# still match on a search where any label matches
label_clauses = []
filtered_labels = labels.split(",")
for label in filtered_labels:
label_clauses.append(
(ReviewSegment.data["objects"].cast("text") % f'*"{label}"*')
)
label_clause = reduce(operator.or_, label_clauses)
clauses.append((label_clause))
if not reviewed:
clauses.append((ReviewSegment.has_been_reviewed == False))
if severity:
clauses.append((ReviewSegment.severity == severity))