sqlspec 0.16.1__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.
- 51ff5a9eadfdefd49f98__mypyc.cpython-39-aarch64-linux-gnu.so +0 -0
- sqlspec/__init__.py +92 -0
- sqlspec/__main__.py +12 -0
- sqlspec/__metadata__.py +14 -0
- sqlspec/_serialization.py +77 -0
- sqlspec/_sql.py +1780 -0
- sqlspec/_typing.py +680 -0
- sqlspec/adapters/__init__.py +0 -0
- sqlspec/adapters/adbc/__init__.py +5 -0
- sqlspec/adapters/adbc/_types.py +12 -0
- sqlspec/adapters/adbc/config.py +361 -0
- sqlspec/adapters/adbc/driver.py +512 -0
- sqlspec/adapters/aiosqlite/__init__.py +19 -0
- sqlspec/adapters/aiosqlite/_types.py +13 -0
- sqlspec/adapters/aiosqlite/config.py +253 -0
- sqlspec/adapters/aiosqlite/driver.py +248 -0
- sqlspec/adapters/asyncmy/__init__.py +19 -0
- sqlspec/adapters/asyncmy/_types.py +12 -0
- sqlspec/adapters/asyncmy/config.py +180 -0
- sqlspec/adapters/asyncmy/driver.py +274 -0
- sqlspec/adapters/asyncpg/__init__.py +21 -0
- sqlspec/adapters/asyncpg/_types.py +17 -0
- sqlspec/adapters/asyncpg/config.py +229 -0
- sqlspec/adapters/asyncpg/driver.py +344 -0
- sqlspec/adapters/bigquery/__init__.py +18 -0
- sqlspec/adapters/bigquery/_types.py +12 -0
- sqlspec/adapters/bigquery/config.py +298 -0
- sqlspec/adapters/bigquery/driver.py +558 -0
- sqlspec/adapters/duckdb/__init__.py +22 -0
- sqlspec/adapters/duckdb/_types.py +12 -0
- sqlspec/adapters/duckdb/config.py +504 -0
- sqlspec/adapters/duckdb/driver.py +368 -0
- sqlspec/adapters/oracledb/__init__.py +32 -0
- sqlspec/adapters/oracledb/_types.py +14 -0
- sqlspec/adapters/oracledb/config.py +317 -0
- sqlspec/adapters/oracledb/driver.py +538 -0
- sqlspec/adapters/psqlpy/__init__.py +16 -0
- sqlspec/adapters/psqlpy/_types.py +11 -0
- sqlspec/adapters/psqlpy/config.py +214 -0
- sqlspec/adapters/psqlpy/driver.py +530 -0
- sqlspec/adapters/psycopg/__init__.py +32 -0
- sqlspec/adapters/psycopg/_types.py +17 -0
- sqlspec/adapters/psycopg/config.py +426 -0
- sqlspec/adapters/psycopg/driver.py +796 -0
- sqlspec/adapters/sqlite/__init__.py +15 -0
- sqlspec/adapters/sqlite/_types.py +11 -0
- sqlspec/adapters/sqlite/config.py +240 -0
- sqlspec/adapters/sqlite/driver.py +294 -0
- sqlspec/base.py +571 -0
- sqlspec/builder/__init__.py +62 -0
- sqlspec/builder/_base.py +473 -0
- sqlspec/builder/_column.py +320 -0
- sqlspec/builder/_ddl.py +1346 -0
- sqlspec/builder/_ddl_utils.py +103 -0
- sqlspec/builder/_delete.py +76 -0
- sqlspec/builder/_insert.py +256 -0
- sqlspec/builder/_merge.py +71 -0
- sqlspec/builder/_parsing_utils.py +140 -0
- sqlspec/builder/_select.py +170 -0
- sqlspec/builder/_update.py +188 -0
- sqlspec/builder/mixins/__init__.py +55 -0
- sqlspec/builder/mixins/_cte_and_set_ops.py +222 -0
- sqlspec/builder/mixins/_delete_operations.py +41 -0
- sqlspec/builder/mixins/_insert_operations.py +244 -0
- sqlspec/builder/mixins/_join_operations.py +122 -0
- sqlspec/builder/mixins/_merge_operations.py +476 -0
- sqlspec/builder/mixins/_order_limit_operations.py +135 -0
- sqlspec/builder/mixins/_pivot_operations.py +153 -0
- sqlspec/builder/mixins/_select_operations.py +603 -0
- sqlspec/builder/mixins/_update_operations.py +187 -0
- sqlspec/builder/mixins/_where_clause.py +621 -0
- sqlspec/cli.py +247 -0
- sqlspec/config.py +395 -0
- sqlspec/core/__init__.py +63 -0
- sqlspec/core/cache.cpython-39-aarch64-linux-gnu.so +0 -0
- sqlspec/core/cache.py +871 -0
- sqlspec/core/compiler.cpython-39-aarch64-linux-gnu.so +0 -0
- sqlspec/core/compiler.py +417 -0
- sqlspec/core/filters.cpython-39-aarch64-linux-gnu.so +0 -0
- sqlspec/core/filters.py +830 -0
- sqlspec/core/hashing.cpython-39-aarch64-linux-gnu.so +0 -0
- sqlspec/core/hashing.py +310 -0
- sqlspec/core/parameters.cpython-39-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters.py +1237 -0
- sqlspec/core/result.cpython-39-aarch64-linux-gnu.so +0 -0
- sqlspec/core/result.py +677 -0
- sqlspec/core/splitter.cpython-39-aarch64-linux-gnu.so +0 -0
- sqlspec/core/splitter.py +819 -0
- sqlspec/core/statement.cpython-39-aarch64-linux-gnu.so +0 -0
- sqlspec/core/statement.py +676 -0
- sqlspec/driver/__init__.py +19 -0
- sqlspec/driver/_async.py +502 -0
- sqlspec/driver/_common.py +631 -0
- sqlspec/driver/_sync.py +503 -0
- sqlspec/driver/mixins/__init__.py +6 -0
- sqlspec/driver/mixins/_result_tools.py +193 -0
- sqlspec/driver/mixins/_sql_translator.py +86 -0
- sqlspec/exceptions.py +193 -0
- sqlspec/extensions/__init__.py +0 -0
- sqlspec/extensions/aiosql/__init__.py +10 -0
- sqlspec/extensions/aiosql/adapter.py +461 -0
- sqlspec/extensions/litestar/__init__.py +6 -0
- sqlspec/extensions/litestar/_utils.py +52 -0
- sqlspec/extensions/litestar/cli.py +48 -0
- sqlspec/extensions/litestar/config.py +92 -0
- sqlspec/extensions/litestar/handlers.py +260 -0
- sqlspec/extensions/litestar/plugin.py +145 -0
- sqlspec/extensions/litestar/providers.py +454 -0
- sqlspec/loader.cpython-39-aarch64-linux-gnu.so +0 -0
- sqlspec/loader.py +760 -0
- sqlspec/migrations/__init__.py +35 -0
- sqlspec/migrations/base.py +414 -0
- sqlspec/migrations/commands.py +443 -0
- sqlspec/migrations/loaders.py +402 -0
- sqlspec/migrations/runner.py +213 -0
- sqlspec/migrations/tracker.py +140 -0
- sqlspec/migrations/utils.py +129 -0
- sqlspec/protocols.py +407 -0
- sqlspec/py.typed +0 -0
- sqlspec/storage/__init__.py +23 -0
- sqlspec/storage/backends/__init__.py +0 -0
- sqlspec/storage/backends/base.py +163 -0
- sqlspec/storage/backends/fsspec.py +386 -0
- sqlspec/storage/backends/obstore.py +459 -0
- sqlspec/storage/capabilities.py +102 -0
- sqlspec/storage/registry.py +239 -0
- sqlspec/typing.py +299 -0
- sqlspec/utils/__init__.py +3 -0
- sqlspec/utils/correlation.py +150 -0
- sqlspec/utils/deprecation.py +106 -0
- sqlspec/utils/fixtures.cpython-39-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/fixtures.py +58 -0
- sqlspec/utils/logging.py +127 -0
- sqlspec/utils/module_loader.py +89 -0
- sqlspec/utils/serializers.py +4 -0
- sqlspec/utils/singleton.py +32 -0
- sqlspec/utils/sync_tools.cpython-39-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/sync_tools.py +237 -0
- sqlspec/utils/text.cpython-39-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/text.py +96 -0
- sqlspec/utils/type_guards.cpython-39-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/type_guards.py +1139 -0
- sqlspec-0.16.1.dist-info/METADATA +365 -0
- sqlspec-0.16.1.dist-info/RECORD +148 -0
- sqlspec-0.16.1.dist-info/WHEEL +7 -0
- sqlspec-0.16.1.dist-info/entry_points.txt +2 -0
- sqlspec-0.16.1.dist-info/licenses/LICENSE +21 -0
- sqlspec-0.16.1.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
|