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:
2026-01-08 08:44:28 +00:00
parent abb1c87e6c
commit 3f510d8d76
2 changed files with 11 additions and 2 deletions

View File

@@ -7,7 +7,7 @@ from animaltrack.selection.ast import FieldFilter, FilterAST
# Supported filter fields
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)

View File

@@ -148,7 +148,16 @@ def _build_filter_clause(field_filter: FieldFilter, ts_utc: int) -> tuple[str, l
field = field_filter.field
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)
placeholders = ",".join("?" * len(values))
query = f"""