mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-01-25 21:48:30 +03:00
event endpoints
This commit is contained in:
parent
3c18921c47
commit
cb9dee3dc9
@ -12,6 +12,7 @@ class EventsQueryParams(BaseModel):
|
|||||||
labels: Optional[str] = "all"
|
labels: Optional[str] = "all"
|
||||||
sub_label: Optional[str] = "all"
|
sub_label: Optional[str] = "all"
|
||||||
sub_labels: Optional[str] = "all"
|
sub_labels: Optional[str] = "all"
|
||||||
|
attributes: Optional[str] = "all"
|
||||||
zone: Optional[str] = "all"
|
zone: Optional[str] = "all"
|
||||||
zones: Optional[str] = "all"
|
zones: Optional[str] = "all"
|
||||||
limit: Optional[int] = 100
|
limit: Optional[int] = 100
|
||||||
@ -58,6 +59,8 @@ class EventsSearchQueryParams(BaseModel):
|
|||||||
limit: Optional[int] = 50
|
limit: Optional[int] = 50
|
||||||
cameras: Optional[str] = "all"
|
cameras: Optional[str] = "all"
|
||||||
labels: Optional[str] = "all"
|
labels: Optional[str] = "all"
|
||||||
|
sub_labels: Optional[str] = "all"
|
||||||
|
attributes: Optional[str] = "all"
|
||||||
zones: Optional[str] = "all"
|
zones: Optional[str] = "all"
|
||||||
after: Optional[float] = None
|
after: Optional[float] = None
|
||||||
before: Optional[float] = None
|
before: Optional[float] = None
|
||||||
|
|||||||
@ -99,6 +99,8 @@ def events(
|
|||||||
if sub_labels == "all" and sub_label != "all":
|
if sub_labels == "all" and sub_label != "all":
|
||||||
sub_labels = sub_label
|
sub_labels = sub_label
|
||||||
|
|
||||||
|
attributes = unquote(params.attributes)
|
||||||
|
|
||||||
zone = params.zone
|
zone = params.zone
|
||||||
zones = params.zones
|
zones = params.zones
|
||||||
|
|
||||||
@ -187,6 +189,17 @@ def events(
|
|||||||
sub_label_clause = reduce(operator.or_, sub_label_clauses)
|
sub_label_clause = reduce(operator.or_, sub_label_clauses)
|
||||||
clauses.append((sub_label_clause))
|
clauses.append((sub_label_clause))
|
||||||
|
|
||||||
|
if attributes != "all":
|
||||||
|
# Custom classification results are stored as data[model_name] = result_value
|
||||||
|
filtered_attributes = attributes.split(",")
|
||||||
|
attribute_clauses = []
|
||||||
|
|
||||||
|
for attr in filtered_attributes:
|
||||||
|
attribute_clauses.append(Event.data.cast("text") % f'*:"{attr}"*')
|
||||||
|
|
||||||
|
attribute_clause = reduce(operator.or_, attribute_clauses)
|
||||||
|
clauses.append(attribute_clause)
|
||||||
|
|
||||||
if recognized_license_plate != "all":
|
if recognized_license_plate != "all":
|
||||||
filtered_recognized_license_plates = recognized_license_plate.split(",")
|
filtered_recognized_license_plates = recognized_license_plate.split(",")
|
||||||
|
|
||||||
@ -492,6 +505,8 @@ def events_search(
|
|||||||
# Filters
|
# Filters
|
||||||
cameras = params.cameras
|
cameras = params.cameras
|
||||||
labels = params.labels
|
labels = params.labels
|
||||||
|
sub_labels = params.sub_labels
|
||||||
|
attributes = params.attributes
|
||||||
zones = params.zones
|
zones = params.zones
|
||||||
after = params.after
|
after = params.after
|
||||||
before = params.before
|
before = params.before
|
||||||
@ -566,6 +581,38 @@ def events_search(
|
|||||||
if labels != "all":
|
if labels != "all":
|
||||||
event_filters.append((Event.label << labels.split(",")))
|
event_filters.append((Event.label << labels.split(",")))
|
||||||
|
|
||||||
|
if sub_labels != "all":
|
||||||
|
# use matching so joined sub labels are included
|
||||||
|
# for example a sub label 'bob' would get events
|
||||||
|
# with sub labels 'bob' and 'bob, john'
|
||||||
|
sub_label_clauses = []
|
||||||
|
filtered_sub_labels = sub_labels.split(",")
|
||||||
|
|
||||||
|
if "None" in filtered_sub_labels:
|
||||||
|
filtered_sub_labels.remove("None")
|
||||||
|
sub_label_clauses.append((Event.sub_label.is_null()))
|
||||||
|
|
||||||
|
for label in filtered_sub_labels:
|
||||||
|
sub_label_clauses.append(
|
||||||
|
(Event.sub_label.cast("text") == label)
|
||||||
|
) # include exact matches
|
||||||
|
|
||||||
|
# include this label when part of a list
|
||||||
|
sub_label_clauses.append((Event.sub_label.cast("text") % f"*{label},*"))
|
||||||
|
sub_label_clauses.append((Event.sub_label.cast("text") % f"*, {label}*"))
|
||||||
|
|
||||||
|
event_filters.append((reduce(operator.or_, sub_label_clauses)))
|
||||||
|
|
||||||
|
if attributes != "all":
|
||||||
|
# Custom classification results are stored as data[model_name] = result_value
|
||||||
|
filtered_attributes = attributes.split(",")
|
||||||
|
attribute_clauses = []
|
||||||
|
|
||||||
|
for attr in filtered_attributes:
|
||||||
|
attribute_clauses.append(Event.data.cast("text") % f'*:"{attr}"*')
|
||||||
|
|
||||||
|
event_filters.append(reduce(operator.or_, attribute_clauses))
|
||||||
|
|
||||||
if zones != "all":
|
if zones != "all":
|
||||||
zone_clauses = []
|
zone_clauses = []
|
||||||
filtered_zones = zones.split(",")
|
filtered_zones = zones.split(",")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user