Coverage for session_buddy / utils / search / models.py: 100.00%
25 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-04 00:43 -0800
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-04 00:43 -0800
1"""Data models for advanced search functionality.
3This module provides data models for search filters, facets, and results
4used throughout the advanced search system.
5"""
7from __future__ import annotations
9from dataclasses import dataclass, field
10from typing import TYPE_CHECKING, Any
12if TYPE_CHECKING:
13 from datetime import datetime
16@dataclass
17class SearchFilter:
18 """Represents a search filter criterion."""
20 field: str
21 operator: str # 'eq', 'ne', 'in', 'not_in', 'contains', 'starts_with', 'ends_with', 'range'
22 value: str | list[str] | tuple[Any, Any]
23 negate: bool = False
26@dataclass
27class SearchFacet:
28 """Represents a search facet with possible values."""
30 name: str
31 values: list[tuple[str, int]] # (value, count) tuples
32 facet_type: str = "terms" # 'terms', 'range', 'date'
35@dataclass
36class SearchResult:
37 """Enhanced search result with metadata."""
39 content_id: str
40 content_type: str
41 title: str
42 content: str
43 score: float
44 project: str | None = None
45 timestamp: datetime | None = None
46 metadata: dict[str, Any] = field(default_factory=dict)
47 highlights: list[str] = field(default_factory=list)
48 facets: dict[str, Any] = field(default_factory=dict)