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

1"""Data models for advanced search functionality. 

2 

3This module provides data models for search filters, facets, and results 

4used throughout the advanced search system. 

5""" 

6 

7from __future__ import annotations 

8 

9from dataclasses import dataclass, field 

10from typing import TYPE_CHECKING, Any 

11 

12if TYPE_CHECKING: 

13 from datetime import datetime 

14 

15 

16@dataclass 

17class SearchFilter: 

18 """Represents a search filter criterion.""" 

19 

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 

24 

25 

26@dataclass 

27class SearchFacet: 

28 """Represents a search facet with possible values.""" 

29 

30 name: str 

31 values: list[tuple[str, int]] # (value, count) tuples 

32 facet_type: str = "terms" # 'terms', 'range', 'date' 

33 

34 

35@dataclass 

36class SearchResult: 

37 """Enhanced search result with metadata.""" 

38 

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)