1 """Queries for logbook."""
3 from __future__
import annotations
5 from collections.abc
import Collection
6 from datetime
import datetime
as dt
8 from sqlalchemy.sql.lambdas
import StatementLambdaElement
14 from .all
import all_stmt
15 from .devices
import devices_stmt
16 from .entities
import entities_stmt
17 from .entities_and_devices
import entities_devices_stmt
23 event_type_ids: tuple[int, ...],
24 entity_ids: list[str] |
None =
None,
25 states_metadata_ids: Collection[int] |
None =
None,
26 device_ids: list[str] |
None =
None,
27 filters: Filters |
None =
None,
28 context_id: str |
None =
None,
29 ) -> StatementLambdaElement:
30 """Generate the logbook statement for a logbook request."""
31 start_day = start_day_dt.timestamp()
32 end_day = end_day_dt.timestamp()
35 if not entity_ids
and not device_ids:
36 context_id_bin = ulid_to_bytes_or_none(context_id)
51 if entity_ids
and device_ids:
56 states_metadata_ids
or [],
57 [
json_dumps(entity_id)
for entity_id
in entity_ids],
58 [
json_dumps(device_id)
for device_id
in device_ids],
67 states_metadata_ids
or [],
68 [
json_dumps(entity_id)
for entity_id
in entity_ids],
72 assert device_ids
is not None
77 [
json_dumps(device_id)
for device_id
in device_ids],
StatementLambdaElement all_stmt(float start_day, float end_day, tuple[int,...] event_type_ids, Filters|None filters, bytes|None context_id_bin=None)
StatementLambdaElement devices_stmt(float start_day, float end_day, tuple[int,...] event_type_ids, list[str] json_quotable_device_ids)
StatementLambdaElement entities_devices_stmt(float start_day, float end_day, tuple[int,...] event_type_ids, Collection[int] states_metadata_ids, list[str] json_quoted_entity_ids, list[str] json_quoted_device_ids)
StatementLambdaElement entities_stmt(float start_day, float end_day, tuple[int,...] event_type_ids, Collection[int] states_metadata_ids, list[str] json_quoted_entity_ids)
StatementLambdaElement statement_for_request(dt start_day_dt, dt end_day_dt, tuple[int,...] event_type_ids, list[str]|None entity_ids=None, Collection[int]|None states_metadata_ids=None, list[str]|None device_ids=None, Filters|None filters=None, str|None context_id=None)