Add animal_id filter support for registry selection
The registry selection feature builds filters like animal_id:X|Y|Z but the parser didn't recognize animal_id as a valid field. - Add animal_id to VALID_FIELDS in parser.py - Add animal_id handler in resolver.py _build_filter_clause 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -7,7 +7,7 @@ from animaltrack.selection.ast import FieldFilter, FilterAST
|
|||||||
|
|
||||||
# Supported filter fields
|
# Supported filter fields
|
||||||
VALID_FIELDS = frozenset(
|
VALID_FIELDS = frozenset(
|
||||||
{"location", "species", "sex", "life_stage", "identified", "tag", "status"}
|
{"animal_id", "location", "species", "sex", "life_stage", "identified", "tag", "status"}
|
||||||
)
|
)
|
||||||
|
|
||||||
# Fields that can be used as flags (without :value)
|
# Fields that can be used as flags (without :value)
|
||||||
|
|||||||
@@ -148,7 +148,16 @@ def _build_filter_clause(field_filter: FieldFilter, ts_utc: int) -> tuple[str, l
|
|||||||
field = field_filter.field
|
field = field_filter.field
|
||||||
values = list(field_filter.values)
|
values = list(field_filter.values)
|
||||||
|
|
||||||
if field == "species":
|
if field == "animal_id":
|
||||||
|
# Direct animal ID filter
|
||||||
|
placeholders = ",".join("?" * len(values))
|
||||||
|
query = f"""
|
||||||
|
SELECT animal_id FROM animal_registry
|
||||||
|
WHERE animal_id IN ({placeholders})
|
||||||
|
"""
|
||||||
|
return query, values
|
||||||
|
|
||||||
|
elif field == "species":
|
||||||
# Species from animal_registry (current state)
|
# Species from animal_registry (current state)
|
||||||
placeholders = ",".join("?" * len(values))
|
placeholders = ",".join("?" * len(values))
|
||||||
query = f"""
|
query = f"""
|
||||||
|
|||||||
Reference in New Issue
Block a user