Coverage for src / lexigram / contracts / data / sql / __init__.py: 93%
15 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-19 05:41 +0800
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-19 05:41 +0800
1"""SQL data contracts."""
3from __future__ import annotations
5from typing import TYPE_CHECKING, Any
7if TYPE_CHECKING:
8 from lexigram.contracts.data.sql.append_log import (
9 AppendLogProtocol,
10 AppendLogSnapshotStore,
11 )
12 from lexigram.contracts.data.sql.database import (
13 ConnectionPoolProtocol,
14 ConnectionProtocol,
15 CrudOperationsProtocol,
16 DatabaseMetricsProtocol,
17 DatabaseProviderProtocol,
18 DeleteResult,
19 HealthMonitorProtocol,
20 InsertResult,
21 IsolationLevel,
22 MigrationManagerProtocol,
23 MigrationRecord,
24 QueryResult,
25 SchemaManagerProtocol,
26 TransactionManagerProtocol,
27 UpdateResult,
28 )
29 from lexigram.contracts.data.sql.mapper import (
30 DataMapperProtocol,
31 ReadOnlyMapperProtocol,
32 )
33 from lexigram.contracts.data.sql.migrations import MigrationRunnerProtocol
34 from lexigram.contracts.data.sql.query_log import QueryLogEntry, QueryLoggerProtocol
35 from lexigram.contracts.data.sql.sql import InvalidIdentifierError, RawSQL
36 from lexigram.contracts.data.sql.sql_dialect import (
37 DEFAULT_MAX_IDENTIFIER_LENGTH,
38 MAX_IDENTIFIER_LENGTHS,
39 SQLDialect,
40 )
41 from lexigram.contracts.data.sql.unit_of_work import UnitOfWorkProtocol
43_LAZY_IMPORTS: dict[str, tuple[str, str]] = {
44 "DEFAULT_MAX_IDENTIFIER_LENGTH": (
45 "lexigram.contracts.data.sql.sql_dialect",
46 "DEFAULT_MAX_IDENTIFIER_LENGTH",
47 ),
48 "MAX_IDENTIFIER_LENGTHS": (
49 "lexigram.contracts.data.sql.sql_dialect",
50 "MAX_IDENTIFIER_LENGTHS",
51 ),
52 "AppendLogProtocol": (
53 "lexigram.contracts.data.sql.append_log",
54 "AppendLogProtocol",
55 ),
56 "AppendLogSnapshotStore": (
57 "lexigram.contracts.data.sql.append_log",
58 "AppendLogSnapshotStore",
59 ),
60 "ConnectionPoolProtocol": (
61 "lexigram.contracts.data.sql.database",
62 "ConnectionPoolProtocol",
63 ),
64 "ConnectionProtocol": (
65 "lexigram.contracts.data.sql.database",
66 "ConnectionProtocol",
67 ),
68 "CrudOperationsProtocol": (
69 "lexigram.contracts.data.sql.database",
70 "CrudOperationsProtocol",
71 ),
72 "DataMapperProtocol": (
73 "lexigram.contracts.data.sql.mapper",
74 "DataMapperProtocol",
75 ),
76 "DatabaseMetricsProtocol": (
77 "lexigram.contracts.data.sql.database",
78 "DatabaseMetricsProtocol",
79 ),
80 "DatabaseProviderProtocol": (
81 "lexigram.contracts.data.sql.database",
82 "DatabaseProviderProtocol",
83 ),
84 "DeleteResult": (
85 "lexigram.contracts.data.sql.database",
86 "DeleteResult",
87 ),
88 "HealthMonitorProtocol": (
89 "lexigram.contracts.data.sql.database",
90 "HealthMonitorProtocol",
91 ),
92 "InsertResult": (
93 "lexigram.contracts.data.sql.database",
94 "InsertResult",
95 ),
96 "InvalidIdentifierError": (
97 "lexigram.contracts.data.sql.sql",
98 "InvalidIdentifierError",
99 ),
100 "IsolationLevel": (
101 "lexigram.contracts.data.sql.database",
102 "IsolationLevel",
103 ),
104 "MigrationManagerProtocol": (
105 "lexigram.contracts.data.sql.database",
106 "MigrationManagerProtocol",
107 ),
108 "MigrationRecord": (
109 "lexigram.contracts.data.sql.database",
110 "MigrationRecord",
111 ),
112 "MigrationRunnerProtocol": (
113 "lexigram.contracts.data.sql.migrations",
114 "MigrationRunnerProtocol",
115 ),
116 "QueryLogEntry": (
117 "lexigram.contracts.data.sql.query_log",
118 "QueryLogEntry",
119 ),
120 "QueryLoggerProtocol": (
121 "lexigram.contracts.data.sql.query_log",
122 "QueryLoggerProtocol",
123 ),
124 "QueryResult": (
125 "lexigram.contracts.data.sql.database",
126 "QueryResult",
127 ),
128 "RawSQL": (
129 "lexigram.contracts.data.sql.sql",
130 "RawSQL",
131 ),
132 "ReadOnlyMapperProtocol": (
133 "lexigram.contracts.data.sql.mapper",
134 "ReadOnlyMapperProtocol",
135 ),
136 "SQLDialect": (
137 "lexigram.contracts.data.sql.sql_dialect",
138 "SQLDialect",
139 ),
140 "SchemaManagerProtocol": (
141 "lexigram.contracts.data.sql.database",
142 "SchemaManagerProtocol",
143 ),
144 "TransactionManagerProtocol": (
145 "lexigram.contracts.data.sql.database",
146 "TransactionManagerProtocol",
147 ),
148 "UnitOfWorkProtocol": (
149 "lexigram.contracts.data.sql.unit_of_work",
150 "UnitOfWorkProtocol",
151 ),
152 "UpdateResult": (
153 "lexigram.contracts.data.sql.database",
154 "UpdateResult",
155 ),
156}
159def __getattr__(name: str) -> Any:
160 """Lazy-load symbols on first access."""
161 if name in _LAZY_IMPORTS:
162 import importlib
164 module_path, attr_name = _LAZY_IMPORTS[name]
165 module = importlib.import_module(module_path)
166 value = getattr(module, attr_name)
167 globals()[name] = value
168 return value
169 raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
172def __dir__() -> list[str]:
173 """Enumerate available attributes for IDE support."""
174 return sorted(set(__all__) | set(_LAZY_IMPORTS.keys()))
177__all__ = [
178 "DEFAULT_MAX_IDENTIFIER_LENGTH",
179 "MAX_IDENTIFIER_LENGTHS",
180 "AppendLogProtocol",
181 "AppendLogSnapshotStore",
182 "ConnectionPoolProtocol",
183 "ConnectionProtocol",
184 "CrudOperationsProtocol",
185 "DataMapperProtocol",
186 "DatabaseMetricsProtocol",
187 "DatabaseProviderProtocol",
188 "DeleteResult",
189 "HealthMonitorProtocol",
190 "InsertResult",
191 "InvalidIdentifierError",
192 "IsolationLevel",
193 "MigrationManagerProtocol",
194 "MigrationRecord",
195 "MigrationRunnerProtocol",
196 "QueryLogEntry",
197 "QueryLoggerProtocol",
198 "QueryResult",
199 "RawSQL",
200 "ReadOnlyMapperProtocol",
201 "SQLDialect",
202 "SchemaManagerProtocol",
203 "TransactionManagerProtocol",
204 "UnitOfWorkProtocol",
205 "UpdateResult",
206]