Add api support for filtering on zones

This commit is contained in:
Nicolas Mowen 2024-06-11 07:49:45 -06:00
parent b3b4f049c9
commit 951f36d1c1
2 changed files with 16 additions and 0 deletions

View File

@ -450,6 +450,7 @@ Reviews from the database. Accepts the following query string parameters:
| `after` | int | Epoch time | | `after` | int | Epoch time |
| `cameras` | str | , separated list of cameras | | `cameras` | str | , separated list of cameras |
| `labels` | str | , separated list of labels | | `labels` | str | , separated list of labels |
| `zones` | str | , separated list of zones |
| `reviewed` | int | Include items that have been reviewed (0 or 1) | | `reviewed` | int | Include items that have been reviewed (0 or 1) |
| `limit` | int | Limit the number of events returned | | `limit` | int | Limit the number of events returned |
| `severity` | str | Limit items to severity (alert, detection, significant_motion) | | `severity` | str | Limit items to severity (alert, detection, significant_motion) |

View File

@ -22,6 +22,7 @@ ReviewBp = Blueprint("reviews", __name__)
def review(): def review():
cameras = request.args.get("cameras", "all") cameras = request.args.get("cameras", "all")
labels = request.args.get("labels", "all") labels = request.args.get("labels", "all")
zones = request.args.get("zones", "all")
reviewed = request.args.get("reviewed", type=int, default=0) reviewed = request.args.get("reviewed", type=int, default=0)
limit = request.args.get("limit", type=int, default=None) limit = request.args.get("limit", type=int, default=None)
severity = request.args.get("severity", None) severity = request.args.get("severity", None)
@ -60,6 +61,20 @@ def review():
label_clause = reduce(operator.or_, label_clauses) label_clause = reduce(operator.or_, label_clauses)
clauses.append((label_clause)) clauses.append((label_clause))
if zones != "all":
# use matching so segments with multiple zones
# still match on a search where any zone matches
zone_clauses = []
filtered_zones = zones.split(",")
for zone in filtered_zones:
zone_clauses.append(
(ReviewSegment.data["zones"].cast("text") % f'*"{zone}"*')
)
zone_clause = reduce(operator.or_, zone_clauses)
clauses.append((zone_clause))
if reviewed == 0: if reviewed == 0:
clauses.append((ReviewSegment.has_been_reviewed == False)) clauses.append((ReviewSegment.has_been_reviewed == False))