sqlspec 0.16.2__cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of sqlspec might be problematic. Click here for more details.

Files changed (148) hide show
  1. 51ff5a9eadfdefd49f98__mypyc.cpython-39-aarch64-linux-gnu.so +0 -0
  2. sqlspec/__init__.py +92 -0
  3. sqlspec/__main__.py +12 -0
  4. sqlspec/__metadata__.py +14 -0
  5. sqlspec/_serialization.py +77 -0
  6. sqlspec/_sql.py +1782 -0
  7. sqlspec/_typing.py +680 -0
  8. sqlspec/adapters/__init__.py +0 -0
  9. sqlspec/adapters/adbc/__init__.py +5 -0
  10. sqlspec/adapters/adbc/_types.py +12 -0
  11. sqlspec/adapters/adbc/config.py +361 -0
  12. sqlspec/adapters/adbc/driver.py +512 -0
  13. sqlspec/adapters/aiosqlite/__init__.py +19 -0
  14. sqlspec/adapters/aiosqlite/_types.py +13 -0
  15. sqlspec/adapters/aiosqlite/config.py +253 -0
  16. sqlspec/adapters/aiosqlite/driver.py +248 -0
  17. sqlspec/adapters/asyncmy/__init__.py +19 -0
  18. sqlspec/adapters/asyncmy/_types.py +12 -0
  19. sqlspec/adapters/asyncmy/config.py +180 -0
  20. sqlspec/adapters/asyncmy/driver.py +274 -0
  21. sqlspec/adapters/asyncpg/__init__.py +21 -0
  22. sqlspec/adapters/asyncpg/_types.py +17 -0
  23. sqlspec/adapters/asyncpg/config.py +229 -0
  24. sqlspec/adapters/asyncpg/driver.py +344 -0
  25. sqlspec/adapters/bigquery/__init__.py +18 -0
  26. sqlspec/adapters/bigquery/_types.py +12 -0
  27. sqlspec/adapters/bigquery/config.py +298 -0
  28. sqlspec/adapters/bigquery/driver.py +558 -0
  29. sqlspec/adapters/duckdb/__init__.py +22 -0
  30. sqlspec/adapters/duckdb/_types.py +12 -0
  31. sqlspec/adapters/duckdb/config.py +504 -0
  32. sqlspec/adapters/duckdb/driver.py +368 -0
  33. sqlspec/adapters/oracledb/__init__.py +32 -0
  34. sqlspec/adapters/oracledb/_types.py +14 -0
  35. sqlspec/adapters/oracledb/config.py +317 -0
  36. sqlspec/adapters/oracledb/driver.py +538 -0
  37. sqlspec/adapters/psqlpy/__init__.py +16 -0
  38. sqlspec/adapters/psqlpy/_types.py +11 -0
  39. sqlspec/adapters/psqlpy/config.py +214 -0
  40. sqlspec/adapters/psqlpy/driver.py +530 -0
  41. sqlspec/adapters/psycopg/__init__.py +32 -0
  42. sqlspec/adapters/psycopg/_types.py +17 -0
  43. sqlspec/adapters/psycopg/config.py +426 -0
  44. sqlspec/adapters/psycopg/driver.py +796 -0
  45. sqlspec/adapters/sqlite/__init__.py +15 -0
  46. sqlspec/adapters/sqlite/_types.py +11 -0
  47. sqlspec/adapters/sqlite/config.py +240 -0
  48. sqlspec/adapters/sqlite/driver.py +294 -0
  49. sqlspec/base.py +571 -0
  50. sqlspec/builder/__init__.py +62 -0
  51. sqlspec/builder/_base.py +473 -0
  52. sqlspec/builder/_column.py +320 -0
  53. sqlspec/builder/_ddl.py +1346 -0
  54. sqlspec/builder/_ddl_utils.py +103 -0
  55. sqlspec/builder/_delete.py +76 -0
  56. sqlspec/builder/_insert.py +421 -0
  57. sqlspec/builder/_merge.py +71 -0
  58. sqlspec/builder/_parsing_utils.py +164 -0
  59. sqlspec/builder/_select.py +170 -0
  60. sqlspec/builder/_update.py +188 -0
  61. sqlspec/builder/mixins/__init__.py +55 -0
  62. sqlspec/builder/mixins/_cte_and_set_ops.py +222 -0
  63. sqlspec/builder/mixins/_delete_operations.py +41 -0
  64. sqlspec/builder/mixins/_insert_operations.py +244 -0
  65. sqlspec/builder/mixins/_join_operations.py +149 -0
  66. sqlspec/builder/mixins/_merge_operations.py +562 -0
  67. sqlspec/builder/mixins/_order_limit_operations.py +135 -0
  68. sqlspec/builder/mixins/_pivot_operations.py +153 -0
  69. sqlspec/builder/mixins/_select_operations.py +604 -0
  70. sqlspec/builder/mixins/_update_operations.py +202 -0
  71. sqlspec/builder/mixins/_where_clause.py +644 -0
  72. sqlspec/cli.py +247 -0
  73. sqlspec/config.py +395 -0
  74. sqlspec/core/__init__.py +63 -0
  75. sqlspec/core/cache.cpython-39-aarch64-linux-gnu.so +0 -0
  76. sqlspec/core/cache.py +871 -0
  77. sqlspec/core/compiler.cpython-39-aarch64-linux-gnu.so +0 -0
  78. sqlspec/core/compiler.py +417 -0
  79. sqlspec/core/filters.cpython-39-aarch64-linux-gnu.so +0 -0
  80. sqlspec/core/filters.py +830 -0
  81. sqlspec/core/hashing.cpython-39-aarch64-linux-gnu.so +0 -0
  82. sqlspec/core/hashing.py +310 -0
  83. sqlspec/core/parameters.cpython-39-aarch64-linux-gnu.so +0 -0
  84. sqlspec/core/parameters.py +1237 -0
  85. sqlspec/core/result.cpython-39-aarch64-linux-gnu.so +0 -0
  86. sqlspec/core/result.py +677 -0
  87. sqlspec/core/splitter.cpython-39-aarch64-linux-gnu.so +0 -0
  88. sqlspec/core/splitter.py +819 -0
  89. sqlspec/core/statement.cpython-39-aarch64-linux-gnu.so +0 -0
  90. sqlspec/core/statement.py +676 -0
  91. sqlspec/driver/__init__.py +19 -0
  92. sqlspec/driver/_async.py +502 -0
  93. sqlspec/driver/_common.py +631 -0
  94. sqlspec/driver/_sync.py +503 -0
  95. sqlspec/driver/mixins/__init__.py +6 -0
  96. sqlspec/driver/mixins/_result_tools.py +193 -0
  97. sqlspec/driver/mixins/_sql_translator.py +86 -0
  98. sqlspec/exceptions.py +193 -0
  99. sqlspec/extensions/__init__.py +0 -0
  100. sqlspec/extensions/aiosql/__init__.py +10 -0
  101. sqlspec/extensions/aiosql/adapter.py +461 -0
  102. sqlspec/extensions/litestar/__init__.py +6 -0
  103. sqlspec/extensions/litestar/_utils.py +52 -0
  104. sqlspec/extensions/litestar/cli.py +48 -0
  105. sqlspec/extensions/litestar/config.py +92 -0
  106. sqlspec/extensions/litestar/handlers.py +260 -0
  107. sqlspec/extensions/litestar/plugin.py +145 -0
  108. sqlspec/extensions/litestar/providers.py +454 -0
  109. sqlspec/loader.cpython-39-aarch64-linux-gnu.so +0 -0
  110. sqlspec/loader.py +760 -0
  111. sqlspec/migrations/__init__.py +35 -0
  112. sqlspec/migrations/base.py +414 -0
  113. sqlspec/migrations/commands.py +443 -0
  114. sqlspec/migrations/loaders.py +402 -0
  115. sqlspec/migrations/runner.py +213 -0
  116. sqlspec/migrations/tracker.py +140 -0
  117. sqlspec/migrations/utils.py +129 -0
  118. sqlspec/protocols.py +407 -0
  119. sqlspec/py.typed +0 -0
  120. sqlspec/storage/__init__.py +23 -0
  121. sqlspec/storage/backends/__init__.py +0 -0
  122. sqlspec/storage/backends/base.py +163 -0
  123. sqlspec/storage/backends/fsspec.py +386 -0
  124. sqlspec/storage/backends/obstore.py +459 -0
  125. sqlspec/storage/capabilities.py +102 -0
  126. sqlspec/storage/registry.py +239 -0
  127. sqlspec/typing.py +299 -0
  128. sqlspec/utils/__init__.py +3 -0
  129. sqlspec/utils/correlation.py +150 -0
  130. sqlspec/utils/deprecation.py +106 -0
  131. sqlspec/utils/fixtures.cpython-39-aarch64-linux-gnu.so +0 -0
  132. sqlspec/utils/fixtures.py +58 -0
  133. sqlspec/utils/logging.py +127 -0
  134. sqlspec/utils/module_loader.py +89 -0
  135. sqlspec/utils/serializers.py +4 -0
  136. sqlspec/utils/singleton.py +32 -0
  137. sqlspec/utils/sync_tools.cpython-39-aarch64-linux-gnu.so +0 -0
  138. sqlspec/utils/sync_tools.py +237 -0
  139. sqlspec/utils/text.cpython-39-aarch64-linux-gnu.so +0 -0
  140. sqlspec/utils/text.py +96 -0
  141. sqlspec/utils/type_guards.cpython-39-aarch64-linux-gnu.so +0 -0
  142. sqlspec/utils/type_guards.py +1139 -0
  143. sqlspec-0.16.2.dist-info/METADATA +365 -0
  144. sqlspec-0.16.2.dist-info/RECORD +148 -0
  145. sqlspec-0.16.2.dist-info/WHEEL +7 -0
  146. sqlspec-0.16.2.dist-info/entry_points.txt +2 -0
  147. sqlspec-0.16.2.dist-info/licenses/LICENSE +21 -0
  148. sqlspec-0.16.2.dist-info/licenses/NOTICE +29 -0
@@ -0,0 +1,214 @@
1
+ """Psqlpy database configuration with direct field-based configuration."""
2
+
3
+ import logging
4
+ from collections.abc import AsyncGenerator
5
+ from contextlib import asynccontextmanager
6
+ from typing import TYPE_CHECKING, Any, ClassVar, Optional, TypedDict, Union
7
+
8
+ from psqlpy import ConnectionPool
9
+ from typing_extensions import NotRequired
10
+
11
+ from sqlspec.adapters.psqlpy._types import PsqlpyConnection
12
+ from sqlspec.adapters.psqlpy.driver import PsqlpyCursor, PsqlpyDriver, psqlpy_statement_config
13
+ from sqlspec.config import AsyncDatabaseConfig
14
+ from sqlspec.core.statement import StatementConfig
15
+
16
+ if TYPE_CHECKING:
17
+ from collections.abc import Callable
18
+
19
+
20
+ logger = logging.getLogger("sqlspec.adapters.psqlpy")
21
+
22
+
23
+ class PsqlpyConnectionParams(TypedDict, total=False):
24
+ """Psqlpy connection parameters."""
25
+
26
+ dsn: NotRequired[str]
27
+ username: NotRequired[str]
28
+ password: NotRequired[str]
29
+ db_name: NotRequired[str]
30
+ host: NotRequired[str]
31
+ port: NotRequired[int]
32
+ connect_timeout_sec: NotRequired[int]
33
+ connect_timeout_nanosec: NotRequired[int]
34
+ tcp_user_timeout_sec: NotRequired[int]
35
+ tcp_user_timeout_nanosec: NotRequired[int]
36
+ keepalives: NotRequired[bool]
37
+ keepalives_idle_sec: NotRequired[int]
38
+ keepalives_idle_nanosec: NotRequired[int]
39
+ keepalives_interval_sec: NotRequired[int]
40
+ keepalives_interval_nanosec: NotRequired[int]
41
+ keepalives_retries: NotRequired[int]
42
+ ssl_mode: NotRequired[str]
43
+ ca_file: NotRequired[str]
44
+ target_session_attrs: NotRequired[str]
45
+ options: NotRequired[str]
46
+ application_name: NotRequired[str]
47
+ client_encoding: NotRequired[str]
48
+ gssencmode: NotRequired[str]
49
+ sslnegotiation: NotRequired[str]
50
+ sslcompression: NotRequired[str]
51
+ sslcert: NotRequired[str]
52
+ sslkey: NotRequired[str]
53
+ sslpassword: NotRequired[str]
54
+ sslrootcert: NotRequired[str]
55
+ sslcrl: NotRequired[str]
56
+ require_auth: NotRequired[str]
57
+ channel_binding: NotRequired[str]
58
+ krbsrvname: NotRequired[str]
59
+ gsslib: NotRequired[str]
60
+ gssdelegation: NotRequired[str]
61
+ service: NotRequired[str]
62
+ load_balance_hosts: NotRequired[str]
63
+
64
+
65
+ class PsqlpyPoolParams(PsqlpyConnectionParams, total=False):
66
+ """Psqlpy pool parameters."""
67
+
68
+ hosts: NotRequired[list[str]]
69
+ ports: NotRequired[list[int]]
70
+ conn_recycling_method: NotRequired[str]
71
+ max_db_pool_size: NotRequired[int]
72
+ configure: NotRequired["Callable[..., Any]"]
73
+ extra: NotRequired[dict[str, Any]]
74
+
75
+
76
+ __all__ = ("PsqlpyConfig", "PsqlpyConnectionParams", "PsqlpyCursor", "PsqlpyPoolParams")
77
+
78
+
79
+ class PsqlpyConfig(AsyncDatabaseConfig[PsqlpyConnection, ConnectionPool, PsqlpyDriver]):
80
+ """Configuration for Psqlpy asynchronous database connections with direct field-based configuration."""
81
+
82
+ driver_type: ClassVar[type[PsqlpyDriver]] = PsqlpyDriver
83
+ connection_type: "ClassVar[type[PsqlpyConnection]]" = PsqlpyConnection
84
+
85
+ def __init__(
86
+ self,
87
+ *,
88
+ pool_config: Optional[Union[PsqlpyPoolParams, dict[str, Any]]] = None,
89
+ statement_config: Optional[StatementConfig] = None,
90
+ pool_instance: Optional[ConnectionPool] = None,
91
+ migration_config: Optional[dict[str, Any]] = None,
92
+ ) -> None:
93
+ """Initialize Psqlpy asynchronous configuration.
94
+
95
+ Args:
96
+ pool_config: Pool configuration parameters (TypedDict or dict)
97
+ pool_instance: Existing connection pool instance to use
98
+ statement_config: Default SQL statement configuration
99
+ migration_config: Migration configuration
100
+ """
101
+ processed_pool_config: dict[str, Any] = dict(pool_config) if pool_config else {}
102
+ if "extra" in processed_pool_config:
103
+ extras = processed_pool_config.pop("extra")
104
+ processed_pool_config.update(extras)
105
+ super().__init__(
106
+ pool_config=processed_pool_config,
107
+ pool_instance=pool_instance,
108
+ migration_config=migration_config,
109
+ statement_config=statement_config or psqlpy_statement_config,
110
+ )
111
+
112
+ def _get_pool_config_dict(self) -> dict[str, Any]:
113
+ """Get pool configuration as plain dict for external library.
114
+
115
+ Returns:
116
+ Dictionary with pool parameters, filtering out None values.
117
+ """
118
+ return {k: v for k, v in self.pool_config.items() if v is not None}
119
+
120
+ async def _create_pool(self) -> "ConnectionPool":
121
+ """Create the actual async connection pool."""
122
+ logger.info("Creating psqlpy connection pool", extra={"adapter": "psqlpy"})
123
+
124
+ try:
125
+ config = self._get_pool_config_dict()
126
+
127
+ pool = ConnectionPool(**config)
128
+ logger.info("Psqlpy connection pool created successfully", extra={"adapter": "psqlpy"})
129
+ except Exception as e:
130
+ logger.exception("Failed to create psqlpy connection pool", extra={"adapter": "psqlpy", "error": str(e)})
131
+ raise
132
+ return pool
133
+
134
+ async def _close_pool(self) -> None:
135
+ """Close the actual async connection pool."""
136
+ if not self.pool_instance:
137
+ return
138
+
139
+ logger.info("Closing psqlpy connection pool", extra={"adapter": "psqlpy"})
140
+
141
+ try:
142
+ self.pool_instance.close()
143
+ logger.info("Psqlpy connection pool closed successfully", extra={"adapter": "psqlpy"})
144
+ except Exception as e:
145
+ logger.exception("Failed to close psqlpy connection pool", extra={"adapter": "psqlpy", "error": str(e)})
146
+ raise
147
+
148
+ async def create_connection(self) -> "PsqlpyConnection":
149
+ """Create a single async connection (not from pool).
150
+
151
+ Returns:
152
+ A psqlpy Connection instance.
153
+ """
154
+ if not self.pool_instance:
155
+ self.pool_instance = await self._create_pool()
156
+
157
+ return await self.pool_instance.connection()
158
+
159
+ @asynccontextmanager
160
+ async def provide_connection(self, *args: Any, **kwargs: Any) -> AsyncGenerator[PsqlpyConnection, None]:
161
+ """Provide an async connection context manager.
162
+
163
+ Args:
164
+ *args: Additional arguments.
165
+ **kwargs: Additional keyword arguments.
166
+
167
+ Yields:
168
+ A psqlpy Connection instance.
169
+ """
170
+ if not self.pool_instance:
171
+ self.pool_instance = await self._create_pool()
172
+
173
+ async with self.pool_instance.acquire() as conn:
174
+ yield conn
175
+
176
+ @asynccontextmanager
177
+ async def provide_session(
178
+ self, *args: Any, statement_config: "Optional[StatementConfig]" = None, **kwargs: Any
179
+ ) -> AsyncGenerator[PsqlpyDriver, None]:
180
+ """Provide an async driver session context manager.
181
+
182
+ Args:
183
+ *args: Additional arguments.
184
+ statement_config: Optional statement configuration override.
185
+ **kwargs: Additional keyword arguments.
186
+
187
+ Yields:
188
+ A PsqlpyDriver instance.
189
+ """
190
+ async with self.provide_connection(*args, **kwargs) as conn:
191
+ yield self.driver_type(connection=conn, statement_config=statement_config or self.statement_config)
192
+
193
+ async def provide_pool(self, *args: Any, **kwargs: Any) -> ConnectionPool:
194
+ """Provide async pool instance.
195
+
196
+ Returns:
197
+ The async connection pool.
198
+ """
199
+ if not self.pool_instance:
200
+ self.pool_instance = await self.create_pool()
201
+ return self.pool_instance
202
+
203
+ def get_signature_namespace(self) -> "dict[str, type[Any]]":
204
+ """Get the signature namespace for Psqlpy types.
205
+
206
+ This provides all Psqlpy-specific types that Litestar needs to recognize
207
+ to avoid serialization attempts.
208
+
209
+ Returns:
210
+ Dictionary mapping type names to types.
211
+ """
212
+ namespace = super().get_signature_namespace()
213
+ namespace.update({"PsqlpyConnection": PsqlpyConnection, "PsqlpyCursor": PsqlpyCursor})
214
+ return namespace