feat: Add date processed filter to Identify component and API
This commit introduces a new date processed filter in the Identify component, allowing users to filter faces based on the date they were processed. The API has been updated to support this new parameter, ensuring seamless integration with the frontend. Additionally, the date filters for date taken have been renamed for clarity. Documentation has been updated to reflect these changes.
This commit is contained in:
+21
-7
@@ -100,10 +100,11 @@ def process_faces(request: ProcessFacesRequest) -> ProcessFacesResponse:
|
||||
@router.get("/unidentified", response_model=UnidentifiedFacesResponse)
|
||||
def get_unidentified_faces(
|
||||
page: int = Query(1, ge=1),
|
||||
page_size: int = Query(50, ge=1, le=200),
|
||||
page_size: int = Query(50, ge=1, le=2000),
|
||||
min_quality: float = Query(0.0, ge=0.0, le=1.0),
|
||||
date_from: str | None = Query(None),
|
||||
date_to: str | None = Query(None),
|
||||
date_taken_from: str | None = Query(None, description="Filter by date taken (from)"),
|
||||
date_taken_to: str | None = Query(None, description="Filter by date taken (to)"),
|
||||
date_processed: str | None = Query(None, description="Filter by date processed (exact date)"),
|
||||
sort_by: str = Query("quality"),
|
||||
sort_dir: str = Query("desc"),
|
||||
tag_names: str | None = Query(None, description="Comma-separated tag names for filtering"),
|
||||
@@ -113,8 +114,20 @@ def get_unidentified_faces(
|
||||
"""Get unidentified faces with filters and pagination."""
|
||||
from datetime import date as _date
|
||||
|
||||
df = _date.fromisoformat(date_from) if date_from else None
|
||||
dt = _date.fromisoformat(date_to) if date_to else None
|
||||
try:
|
||||
dtf = _date.fromisoformat(date_taken_from) if date_taken_from and date_taken_from.strip() else None
|
||||
except (ValueError, AttributeError, TypeError):
|
||||
dtf = None
|
||||
|
||||
try:
|
||||
dtt = _date.fromisoformat(date_taken_to) if date_taken_to and date_taken_to.strip() else None
|
||||
except (ValueError, AttributeError, TypeError):
|
||||
dtt = None
|
||||
|
||||
try:
|
||||
dp = _date.fromisoformat(date_processed) if date_processed and date_processed.strip() else None
|
||||
except (ValueError, AttributeError, TypeError):
|
||||
dp = None
|
||||
|
||||
# Parse tag names
|
||||
tag_names_list = None
|
||||
@@ -126,8 +139,9 @@ def get_unidentified_faces(
|
||||
page=page,
|
||||
page_size=page_size,
|
||||
min_quality=min_quality,
|
||||
date_from=df,
|
||||
date_to=dt,
|
||||
date_taken_from=dtf,
|
||||
date_taken_to=dtt,
|
||||
date_processed=dp,
|
||||
sort_by=sort_by,
|
||||
sort_dir=sort_dir,
|
||||
tag_names=tag_names_list,
|
||||
|
||||
@@ -1200,6 +1200,7 @@ def list_unidentified_faces(
|
||||
date_to: Optional[date] = None,
|
||||
date_taken_from: Optional[date] = None,
|
||||
date_taken_to: Optional[date] = None,
|
||||
date_processed: Optional[date] = None,
|
||||
date_processed_from: Optional[date] = None,
|
||||
date_processed_to: Optional[date] = None,
|
||||
sort_by: str = "quality",
|
||||
@@ -1263,6 +1264,9 @@ def list_unidentified_faces(
|
||||
query = query.filter(Photo.date_taken <= date_taken_to)
|
||||
|
||||
# Date processed filters (uses photo.date_added)
|
||||
if date_processed is not None:
|
||||
# Filter by exact date processed
|
||||
query = query.filter(func.date(Photo.date_added) == date_processed)
|
||||
if date_processed_from is not None:
|
||||
query = query.filter(func.date(Photo.date_added) >= date_processed_from)
|
||||
if date_processed_to is not None:
|
||||
|
||||
Reference in New Issue
Block a user