From 3f510d8d76c950cc1996eec175999471338a8de5 Mon Sep 17 00:00:00 2001 From: Petru Paler Date: Thu, 8 Jan 2026 08:44:28 +0000 Subject: [PATCH] Add animal_id filter support for registry selection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/animaltrack/selection/parser.py | 2 +- src/animaltrack/selection/resolver.py | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/animaltrack/selection/parser.py b/src/animaltrack/selection/parser.py index 13bd984..6c673f5 100644 --- a/src/animaltrack/selection/parser.py +++ b/src/animaltrack/selection/parser.py @@ -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) diff --git a/src/animaltrack/selection/resolver.py b/src/animaltrack/selection/resolver.py index b2da665..7bc2ab9 100644 --- a/src/animaltrack/selection/resolver.py +++ b/src/animaltrack/selection/resolver.py @@ -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"""