Coverage for polar/external_event/repository.py: 31%
29 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 15:52 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 15:52 +0000
1from collections.abc import Sequence 1ab
2from datetime import datetime 1ab
3from uuid import UUID 1ab
5from polar.kit.repository import ( 1ab
6 RepositoryBase,
7 RepositoryIDMixin,
8 RepositorySortingMixin,
9 SortingClause,
10)
11from polar.models.external_event import ExternalEvent, ExternalEventSource 1ab
13from .sorting import ExternalEventSortProperty 1ab
16class ExternalEventRepository( 1ab
17 RepositorySortingMixin[ExternalEvent, ExternalEventSortProperty],
18 RepositoryBase[ExternalEvent],
19 RepositoryIDMixin[ExternalEvent, UUID],
20):
21 model = ExternalEvent 1ab
23 async def get_by_source_and_id( 1ab
24 self, source: ExternalEventSource, id: UUID
25 ) -> ExternalEvent | None:
26 statement = self.get_base_statement().where(
27 ExternalEvent.source == source, ExternalEvent.id == id
28 )
29 return await self.get_one_or_none(statement)
31 async def get_by_source_and_external_id( 1ab
32 self, source: ExternalEventSource, external_id: str
33 ) -> ExternalEvent | None:
34 statement = self.get_base_statement().where(
35 ExternalEvent.source == source, ExternalEvent.external_id == external_id
36 )
37 return await self.get_one_or_none(statement)
39 async def get_all_unhandled( 1ab
40 self, older_than: datetime | None = None
41 ) -> Sequence[ExternalEvent]:
42 statement = self.get_base_statement().where(ExternalEvent.handled_at.is_(None))
43 if older_than is not None:
44 statement = statement.where(ExternalEvent.created_at < older_than)
45 return await self.get_all(statement)
47 def get_sorting_clause(self, property: ExternalEventSortProperty) -> SortingClause: 1ab
48 match property:
49 case ExternalEventSortProperty.created_at:
50 return self.model.created_at
51 case ExternalEventSortProperty.handled_at:
52 return self.model.handled_at
53 case ExternalEventSortProperty.source:
54 return self.model.source
55 case ExternalEventSortProperty.task_name:
56 return self.model.task_name