[docs]classRecordManager(ABC):"""Abstract base class for a record manager."""
[docs]def__init__(self,namespace:str,)->None:"""Initialize the record manager. Args: namespace (str): The namespace for the record manager. """self.namespace=namespace
[docs]@abstractmethoddefcreate_schema(self)->None:"""Create the database schema for the record manager."""
[docs]@abstractmethodasyncdefacreate_schema(self)->None:"""Create the database schema for the record manager."""
[docs]@abstractmethoddefget_time(self)->float:"""Get the current server time as a high resolution timestamp! It's important to get this from the server to ensure a monotonic clock, otherwise there may be data loss when cleaning up old documents! Returns: The current server time as a float timestamp. """
[docs]@abstractmethodasyncdefaget_time(self)->float:"""Get the current server time as a high resolution timestamp! It's important to get this from the server to ensure a monotonic clock, otherwise there may be data loss when cleaning up old documents! Returns: The current server time as a float timestamp. """
[docs]@abstractmethoddefupdate(self,keys:Sequence[str],*,group_ids:Optional[Sequence[Optional[str]]]=None,time_at_least:Optional[float]=None,)->None:"""Upsert records into the database. Args: keys: A list of record keys to upsert. group_ids: A list of group IDs corresponding to the keys. time_at_least: if provided, updates should only happen if the updated_at field is at least this time. Raises: ValueError: If the length of keys doesn't match the length of group_ids. """
[docs]@abstractmethodasyncdefaupdate(self,keys:Sequence[str],*,group_ids:Optional[Sequence[Optional[str]]]=None,time_at_least:Optional[float]=None,)->None:"""Upsert records into the database. Args: keys: A list of record keys to upsert. group_ids: A list of group IDs corresponding to the keys. time_at_least: if provided, updates should only happen if the updated_at field is at least this time. Raises: ValueError: If the length of keys doesn't match the length of group_ids. """
[docs]@abstractmethoddefexists(self,keys:Sequence[str])->List[bool]:"""Check if the provided keys exist in the database. Args: keys: A list of keys to check. Returns: A list of boolean values indicating the existence of each key. """
[docs]@abstractmethodasyncdefaexists(self,keys:Sequence[str])->List[bool]:"""Check if the provided keys exist in the database. Args: keys: A list of keys to check. Returns: A list of boolean values indicating the existence of each key. """
[docs]@abstractmethoddeflist_keys(self,*,before:Optional[float]=None,after:Optional[float]=None,group_ids:Optional[Sequence[str]]=None,limit:Optional[int]=None,)->List[str]:"""List records in the database based on the provided filters. Args: before: Filter to list records updated before this time. after: Filter to list records updated after this time. group_ids: Filter to list records with specific group IDs. limit: optional limit on the number of records to return. Returns: A list of keys for the matching records. """
[docs]@abstractmethodasyncdefalist_keys(self,*,before:Optional[float]=None,after:Optional[float]=None,group_ids:Optional[Sequence[str]]=None,limit:Optional[int]=None,)->List[str]:"""List records in the database based on the provided filters. Args: before: Filter to list records updated before this time. after: Filter to list records updated after this time. group_ids: Filter to list records with specific group IDs. limit: optional limit on the number of records to return. Returns: A list of keys for the matching records. """
[docs]@abstractmethoddefdelete_keys(self,keys:Sequence[str])->None:"""Delete specified records from the database. Args: keys: A list of keys to delete. """
[docs]@abstractmethodasyncdefadelete_keys(self,keys:Sequence[str])->None:"""Delete specified records from the database. Args: keys: A list of keys to delete. """