make sub label query for events API endpoints case insensitive

This commit is contained in:
Josh Hawkins 2026-04-08 08:16:14 -05:00
parent dcc8744399
commit 1a708a3748
2 changed files with 21 additions and 11 deletions

View File

@ -407,7 +407,7 @@ async def _execute_search_objects(
query_params = EventsQueryParams( query_params = EventsQueryParams(
cameras=arguments.get("camera", "all"), cameras=arguments.get("camera", "all"),
labels=arguments.get("label", "all"), labels=arguments.get("label", "all"),
sub_labels=arguments.get("sub_label", "all").lower(), sub_labels=arguments.get("sub_label", "all"), # case-insensitive on the backend
zones=zones, zones=zones,
zone=zones, zone=zones,
after=after, after=after,

View File

@ -199,13 +199,18 @@ def events(
sub_label_clauses.append((Event.sub_label.is_null())) sub_label_clauses.append((Event.sub_label.is_null()))
for label in filtered_sub_labels: for label in filtered_sub_labels:
lowered = label.lower()
sub_label_clauses.append( sub_label_clauses.append(
(Event.sub_label.cast("text") == label) (fn.LOWER(Event.sub_label.cast("text")) == lowered)
) # include exact matches ) # include exact matches (case-insensitive)
# include this label when part of a list # include this label when part of a list (LIKE is case-insensitive in sqlite for ASCII)
sub_label_clauses.append((Event.sub_label.cast("text") % f"*{label},*")) sub_label_clauses.append(
sub_label_clauses.append((Event.sub_label.cast("text") % f"*, {label}*")) (fn.LOWER(Event.sub_label.cast("text")) % f"*{lowered},*")
)
sub_label_clauses.append(
(fn.LOWER(Event.sub_label.cast("text")) % f"*, {lowered}*")
)
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))
@ -609,13 +614,18 @@ def events_search(
sub_label_clauses.append((Event.sub_label.is_null())) sub_label_clauses.append((Event.sub_label.is_null()))
for label in filtered_sub_labels: for label in filtered_sub_labels:
lowered = label.lower()
sub_label_clauses.append( sub_label_clauses.append(
(Event.sub_label.cast("text") == label) (fn.LOWER(Event.sub_label.cast("text")) == lowered)
) # include exact matches ) # include exact matches (case-insensitive)
# include this label when part of a list # include this label when part of a list (LIKE is case-insensitive in sqlite for ASCII)
sub_label_clauses.append((Event.sub_label.cast("text") % f"*{label},*")) sub_label_clauses.append(
sub_label_clauses.append((Event.sub_label.cast("text") % f"*, {label}*")) (fn.LOWER(Event.sub_label.cast("text")) % f"*{lowered},*")
)
sub_label_clauses.append(
(fn.LOWER(Event.sub_label.cast("text")) % f"*, {lowered}*")
)
event_filters.append((reduce(operator.or_, sub_label_clauses))) event_filters.append((reduce(operator.or_, sub_label_clauses)))