sqlspec 0.7.1__py3-none-any.whl → 0.9.0__py3-none-any.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 (54) hide show
  1. sqlspec/__init__.py +15 -0
  2. sqlspec/_serialization.py +16 -2
  3. sqlspec/_typing.py +40 -7
  4. sqlspec/adapters/adbc/__init__.py +7 -0
  5. sqlspec/adapters/adbc/config.py +183 -17
  6. sqlspec/adapters/adbc/driver.py +392 -0
  7. sqlspec/adapters/aiosqlite/__init__.py +5 -1
  8. sqlspec/adapters/aiosqlite/config.py +24 -6
  9. sqlspec/adapters/aiosqlite/driver.py +264 -0
  10. sqlspec/adapters/asyncmy/__init__.py +7 -2
  11. sqlspec/adapters/asyncmy/config.py +71 -11
  12. sqlspec/adapters/asyncmy/driver.py +246 -0
  13. sqlspec/adapters/asyncpg/__init__.py +9 -0
  14. sqlspec/adapters/asyncpg/config.py +102 -25
  15. sqlspec/adapters/asyncpg/driver.py +444 -0
  16. sqlspec/adapters/duckdb/__init__.py +5 -1
  17. sqlspec/adapters/duckdb/config.py +194 -12
  18. sqlspec/adapters/duckdb/driver.py +225 -0
  19. sqlspec/adapters/oracledb/__init__.py +7 -4
  20. sqlspec/adapters/oracledb/config/__init__.py +4 -4
  21. sqlspec/adapters/oracledb/config/_asyncio.py +96 -12
  22. sqlspec/adapters/oracledb/config/_common.py +1 -1
  23. sqlspec/adapters/oracledb/config/_sync.py +96 -12
  24. sqlspec/adapters/oracledb/driver.py +571 -0
  25. sqlspec/adapters/psqlpy/__init__.py +0 -0
  26. sqlspec/adapters/psqlpy/config.py +258 -0
  27. sqlspec/adapters/psqlpy/driver.py +335 -0
  28. sqlspec/adapters/psycopg/__init__.py +16 -0
  29. sqlspec/adapters/psycopg/config/__init__.py +6 -6
  30. sqlspec/adapters/psycopg/config/_async.py +107 -15
  31. sqlspec/adapters/psycopg/config/_common.py +2 -2
  32. sqlspec/adapters/psycopg/config/_sync.py +107 -15
  33. sqlspec/adapters/psycopg/driver.py +578 -0
  34. sqlspec/adapters/sqlite/__init__.py +7 -0
  35. sqlspec/adapters/sqlite/config.py +24 -6
  36. sqlspec/adapters/sqlite/driver.py +305 -0
  37. sqlspec/base.py +565 -63
  38. sqlspec/exceptions.py +30 -0
  39. sqlspec/extensions/litestar/__init__.py +19 -0
  40. sqlspec/extensions/litestar/_utils.py +56 -0
  41. sqlspec/extensions/litestar/config.py +87 -0
  42. sqlspec/extensions/litestar/handlers.py +213 -0
  43. sqlspec/extensions/litestar/plugin.py +105 -11
  44. sqlspec/statement.py +373 -0
  45. sqlspec/typing.py +81 -17
  46. sqlspec/utils/__init__.py +3 -0
  47. sqlspec/utils/fixtures.py +4 -5
  48. sqlspec/utils/sync_tools.py +335 -0
  49. {sqlspec-0.7.1.dist-info → sqlspec-0.9.0.dist-info}/METADATA +4 -1
  50. sqlspec-0.9.0.dist-info/RECORD +61 -0
  51. sqlspec-0.7.1.dist-info/RECORD +0 -46
  52. {sqlspec-0.7.1.dist-info → sqlspec-0.9.0.dist-info}/WHEEL +0 -0
  53. {sqlspec-0.7.1.dist-info → sqlspec-0.9.0.dist-info}/licenses/LICENSE +0 -0
  54. {sqlspec-0.7.1.dist-info → sqlspec-0.9.0.dist-info}/licenses/NOTICE +0 -0
@@ -0,0 +1,335 @@
1
+ import asyncio
2
+ import functools
3
+ import inspect
4
+ import sys
5
+ from contextlib import AbstractAsyncContextManager, AbstractContextManager
6
+ from typing import (
7
+ TYPE_CHECKING,
8
+ Any,
9
+ Generic,
10
+ Optional,
11
+ TypeVar,
12
+ Union,
13
+ cast,
14
+ )
15
+
16
+ from typing_extensions import ParamSpec
17
+
18
+ if TYPE_CHECKING:
19
+ from collections.abc import Awaitable, Callable, Coroutine
20
+ from types import TracebackType
21
+
22
+ try:
23
+ import uvloop # pyright: ignore[reportMissingImports]
24
+ except ImportError:
25
+ uvloop = None
26
+
27
+
28
+ ReturnT = TypeVar("ReturnT")
29
+ ParamSpecT = ParamSpec("ParamSpecT")
30
+ T = TypeVar("T")
31
+
32
+
33
+ class PendingType:
34
+ def __repr__(self) -> str:
35
+ return "AsyncPending"
36
+
37
+
38
+ Pending = PendingType()
39
+
40
+
41
+ class PendingValueError(Exception):
42
+ """Exception raised when a value is accessed before it is ready."""
43
+
44
+
45
+ class SoonValue(Generic[T]):
46
+ """Holds a value that will be available soon after an async operation."""
47
+
48
+ def __init__(self) -> None:
49
+ self._stored_value: Union[T, PendingType] = Pending
50
+
51
+ @property
52
+ def value(self) -> "T":
53
+ if isinstance(self._stored_value, PendingType):
54
+ msg = "The return value of this task is still pending."
55
+ raise PendingValueError(msg)
56
+ return self._stored_value
57
+
58
+ @property
59
+ def ready(self) -> bool:
60
+ return not isinstance(self._stored_value, PendingType)
61
+
62
+
63
+ class TaskGroup:
64
+ """Manages a group of asyncio tasks, allowing them to be run concurrently."""
65
+
66
+ def __init__(self) -> None:
67
+ self._tasks: set[asyncio.Task[Any]] = set()
68
+ self._exceptions: list[BaseException] = []
69
+ self._closed = False
70
+
71
+ async def __aenter__(self) -> "TaskGroup":
72
+ if self._closed:
73
+ msg = "Cannot enter a task group that has already been closed."
74
+ raise RuntimeError(msg)
75
+ return self
76
+
77
+ async def __aexit__(
78
+ self,
79
+ exc_type: "Optional[type[BaseException]]", # noqa: PYI036
80
+ exc_val: "Optional[BaseException]", # noqa: PYI036
81
+ exc_tb: "Optional[TracebackType]", # noqa: PYI036
82
+ ) -> None:
83
+ self._closed = True
84
+ if exc_val:
85
+ self._exceptions.append(exc_val)
86
+
87
+ if self._tasks:
88
+ await asyncio.wait(self._tasks)
89
+
90
+ if self._exceptions:
91
+ # Re-raise the first exception encountered.
92
+ raise self._exceptions[0]
93
+
94
+ def create_task(self, coro: "Coroutine[Any, Any, Any]") -> "asyncio.Task[Any]":
95
+ """Create and add a coroutine as a task to the task group.
96
+
97
+ Args:
98
+ coro (Coroutine): The coroutine to be added as a task.
99
+
100
+ Returns:
101
+ asyncio.Task: The created asyncio task.
102
+
103
+ Raises:
104
+ RuntimeError: If the task group has already been closed.
105
+ """
106
+ if self._closed:
107
+ msg = "Cannot create a task in a task group that has already been closed."
108
+ raise RuntimeError(msg)
109
+ task = asyncio.create_task(coro)
110
+ self._tasks.add(task)
111
+ task.add_done_callback(self._tasks.discard)
112
+ task.add_done_callback(self._check_result)
113
+ return task
114
+
115
+ def _check_result(self, task: "asyncio.Task[Any]") -> None:
116
+ """Check and store exceptions from a completed task.
117
+
118
+ Args:
119
+ task (asyncio.Task): The task to check for exceptions.
120
+ """
121
+ try:
122
+ task.result() # This will raise the exception if one occurred.
123
+ except Exception as e: # noqa: BLE001
124
+ self._exceptions.append(e)
125
+
126
+ def start_soon_(
127
+ self,
128
+ async_function: "Callable[ParamSpecT, Awaitable[T]]",
129
+ name: object = None,
130
+ ) -> "Callable[ParamSpecT, SoonValue[T]]":
131
+ """Create a function to start a new task in this task group.
132
+
133
+ Args:
134
+ async_function (Callable): An async function to call soon.
135
+ name (object, optional): Name of the task for introspection and debugging.
136
+
137
+ Returns:
138
+ Callable: A function that starts the task and returns a SoonValue object.
139
+ """
140
+
141
+ @functools.wraps(async_function)
142
+ def wrapper(*args: "ParamSpecT.args", **kwargs: "ParamSpecT.kwargs") -> "SoonValue[T]":
143
+ partial_f = functools.partial(async_function, *args, **kwargs)
144
+ soon_value: SoonValue[T] = SoonValue()
145
+
146
+ @functools.wraps(partial_f)
147
+ async def value_wrapper(*args: "Any") -> None:
148
+ value = await partial_f()
149
+ soon_value._stored_value = value # pyright: ignore[reportPrivateUsage] # noqa: SLF001
150
+
151
+ self.create_task(value_wrapper) # type: ignore[arg-type]
152
+ return soon_value
153
+
154
+ return wrapper
155
+
156
+
157
+ def create_task_group() -> "TaskGroup":
158
+ """Create a TaskGroup for managing multiple concurrent async tasks.
159
+
160
+ Returns:
161
+ TaskGroup: A new TaskGroup instance.
162
+ """
163
+ return TaskGroup()
164
+
165
+
166
+ class CapacityLimiter:
167
+ """Limits the number of concurrent operations using a semaphore."""
168
+
169
+ def __init__(self, total_tokens: int) -> None:
170
+ self._semaphore = asyncio.Semaphore(total_tokens)
171
+
172
+ async def acquire(self) -> None:
173
+ await self._semaphore.acquire()
174
+
175
+ def release(self) -> None:
176
+ self._semaphore.release()
177
+
178
+ @property
179
+ def total_tokens(self) -> int:
180
+ return self._semaphore._value # noqa: SLF001
181
+
182
+ @total_tokens.setter
183
+ def total_tokens(self, value: int) -> None:
184
+ self._semaphore = asyncio.Semaphore(value)
185
+
186
+ async def __aenter__(self) -> None:
187
+ await self.acquire()
188
+
189
+ async def __aexit__(
190
+ self,
191
+ exc_type: "Optional[type[BaseException]]", # noqa: PYI036
192
+ exc_val: "Optional[BaseException]", # noqa: PYI036
193
+ exc_tb: "Optional[TracebackType]", # noqa: PYI036
194
+ ) -> None:
195
+ self.release()
196
+
197
+
198
+ _default_limiter = CapacityLimiter(40)
199
+
200
+
201
+ def run_(async_function: "Callable[ParamSpecT, Coroutine[Any, Any, ReturnT]]") -> "Callable[ParamSpecT, ReturnT]":
202
+ """Convert an async function to a blocking function using asyncio.run().
203
+
204
+ Args:
205
+ async_function (Callable): The async function to convert.
206
+
207
+ Returns:
208
+ Callable: A blocking function that runs the async function.
209
+
210
+ """
211
+
212
+ @functools.wraps(async_function)
213
+ def wrapper(*args: "ParamSpecT.args", **kwargs: "ParamSpecT.kwargs") -> "ReturnT":
214
+ partial_f = functools.partial(async_function, *args, **kwargs)
215
+ try:
216
+ loop = asyncio.get_running_loop()
217
+ except RuntimeError:
218
+ loop = None
219
+
220
+ if loop is not None:
221
+ # Running in an existing event loop
222
+ return asyncio.run(partial_f())
223
+ # Create a new event loop and run the function
224
+ if uvloop and sys.platform != "win32":
225
+ uvloop.install() # pyright: ignore[reportUnknownMemberType]
226
+ return asyncio.run(partial_f())
227
+
228
+ return wrapper
229
+
230
+
231
+ def await_(
232
+ async_function: "Callable[ParamSpecT, Coroutine[Any, Any, ReturnT]]",
233
+ raise_sync_error: bool = True,
234
+ ) -> "Callable[ParamSpecT, ReturnT]":
235
+ """Convert an async function to a blocking one, running in the main async loop.
236
+
237
+ Args:
238
+ async_function (Callable): The async function to convert.
239
+ raise_sync_error (bool, optional): If False, runs in a new event loop if no loop is present.
240
+
241
+ Returns:
242
+ Callable: A blocking function that runs the async function.
243
+ """
244
+
245
+ @functools.wraps(async_function)
246
+ def wrapper(*args: "ParamSpecT.args", **kwargs: "ParamSpecT.kwargs") -> "ReturnT":
247
+ partial_f = functools.partial(async_function, *args, **kwargs)
248
+ try:
249
+ loop = asyncio.get_running_loop()
250
+ except RuntimeError:
251
+ loop = None
252
+
253
+ if loop is None and raise_sync_error is False:
254
+ return asyncio.run(partial_f())
255
+ # Running in an existing event loop
256
+ return asyncio.run(partial_f())
257
+
258
+ return wrapper
259
+
260
+
261
+ def async_(
262
+ function: "Callable[ParamSpecT, ReturnT]",
263
+ *,
264
+ limiter: "Optional[CapacityLimiter]" = None,
265
+ ) -> "Callable[ParamSpecT, Awaitable[ReturnT]]":
266
+ """Convert a blocking function to an async one using asyncio.to_thread().
267
+
268
+ Args:
269
+ function (Callable): The blocking function to convert.
270
+ cancellable (bool, optional): Allow cancellation of the operation.
271
+ limiter (CapacityLimiter, optional): Limit the total number of threads.
272
+
273
+ Returns:
274
+ Callable: An async function that runs the original function in a thread.
275
+ """
276
+
277
+ async def wrapper(
278
+ *args: "ParamSpecT.args",
279
+ **kwargs: "ParamSpecT.kwargs",
280
+ ) -> "ReturnT":
281
+ partial_f = functools.partial(function, *args, **kwargs)
282
+ used_limiter = limiter or _default_limiter
283
+ async with used_limiter:
284
+ return await asyncio.to_thread(partial_f)
285
+
286
+ return wrapper
287
+
288
+
289
+ def maybe_async_(
290
+ function: "Callable[ParamSpecT, Union[Awaitable[ReturnT], ReturnT]]",
291
+ ) -> "Callable[ParamSpecT, Awaitable[ReturnT]]":
292
+ if inspect.iscoroutinefunction(function):
293
+ return function
294
+
295
+ async def wrapper(*args: "ParamSpecT.args", **kwargs: "ParamSpecT.kwargs") -> "ReturnT":
296
+ result = function(*args, **kwargs)
297
+ if inspect.isawaitable(result):
298
+ return await result
299
+ return await async_(lambda: result)()
300
+
301
+ return wrapper
302
+
303
+
304
+ def wrap_sync(fn: "Callable[ParamSpecT, ReturnT]") -> "Callable[ParamSpecT, Awaitable[ReturnT]]":
305
+ if inspect.iscoroutinefunction(fn):
306
+ return fn
307
+
308
+ async def wrapped(*args: "ParamSpecT.args", **kwargs: "ParamSpecT.kwargs") -> ReturnT:
309
+ return await async_(functools.partial(fn, *args, **kwargs))()
310
+
311
+ return wrapped
312
+
313
+
314
+ class _ContextManagerWrapper(Generic[T]):
315
+ def __init__(self, cm: AbstractContextManager[T]) -> None:
316
+ self._cm = cm
317
+
318
+ async def __aenter__(self) -> T:
319
+ return self._cm.__enter__()
320
+
321
+ async def __aexit__(
322
+ self,
323
+ exc_type: "Optional[type[BaseException]]", # noqa: PYI036
324
+ exc_val: "Optional[BaseException]", # noqa: PYI036
325
+ exc_tb: "Optional[TracebackType]", # noqa: PYI036
326
+ ) -> "Optional[bool]":
327
+ return self._cm.__exit__(exc_type, exc_val, exc_tb)
328
+
329
+
330
+ def maybe_async_context(
331
+ obj: "Union[AbstractContextManager[T], AbstractAsyncContextManager[T]]",
332
+ ) -> "AbstractAsyncContextManager[T]":
333
+ if isinstance(obj, AbstractContextManager):
334
+ return cast("AbstractAsyncContextManager[T]", _ContextManagerWrapper(obj))
335
+ return obj
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlspec
3
- Version: 0.7.1
3
+ Version: 0.9.0
4
4
  Summary: SQL Experiments in Python
5
5
  Author-email: Cody Fincher <cody@litestar.dev>
6
6
  Maintainer-email: Litestar Developers <hello@litestar.dev>
@@ -42,6 +42,8 @@ Provides-Extra: orjson
42
42
  Requires-Dist: orjson; extra == 'orjson'
43
43
  Provides-Extra: performance
44
44
  Requires-Dist: sqlglot[rs]; extra == 'performance'
45
+ Provides-Extra: psqlpy
46
+ Requires-Dist: psqlpy; extra == 'psqlpy'
45
47
  Provides-Extra: psycopg
46
48
  Requires-Dist: psycopg[binary,pool]; extra == 'psycopg'
47
49
  Provides-Extra: pydantic
@@ -102,6 +104,7 @@ This list is not final. If you have a driver you'd like to see added, please ope
102
104
  | [`asyncpg`](https://magicstack.github.io/asyncpg/current/) | PostgreSQL | Async | ✅ |
103
105
  | [`psycopg`](https://www.psycopg.org/) | PostgreSQL | Sync | ✅ |
104
106
  | [`psycopg`](https://www.psycopg.org/) | PostgreSQL | Async | ✅ |
107
+ | [`psqlpy`](https://psqlpy-python.github.io/) | PostgreSQL | Async | ✅ |
105
108
  | [`aiosqlite`](https://github.com/omnilib/aiosqlite) | SQLite | Async | ✅ |
106
109
  | `sqlite3` | SQLite | Sync | ✅ |
107
110
  | [`oracledb`](https://oracle.github.io/python-oracledb/) | Oracle | Async | ✅ |
@@ -0,0 +1,61 @@
1
+ sqlspec/__init__.py,sha256=dsOivB7SmZhOcWkZQT12L4LHC6fQhWBk2s_3j85KkgQ,316
2
+ sqlspec/__metadata__.py,sha256=hNP3wXvtk8fQVPKGjRLpZ9mP-gaPJqzrmgm3UqpDIXQ,460
3
+ sqlspec/_serialization.py,sha256=tSwWwFImlYviC6ARdXRz0Bp4QXbCdc8cKGgZr33OglY,2657
4
+ sqlspec/_typing.py,sha256=6ukndnNu_XWKf2OW-HP1x1L7YmqohMwjg2HF4Hq3xdU,7111
5
+ sqlspec/base.py,sha256=vYXMVrdxEhaRfeAD4MVz9izY_mbCg5G3rbNchJ7vp0Q,24539
6
+ sqlspec/exceptions.py,sha256=EyS7B9qyyTo78CdkC5iQDYFW9eXILDA6xiSS4ABr0Ws,4033
7
+ sqlspec/filters.py,sha256=Gqwt4VQ7e8ffphkuR-jBfqW4m0OWGGUPiYWyEQ0Xn7M,3620
8
+ sqlspec/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ sqlspec/statement.py,sha256=lbnF_flv4sWPPiZtHX-53d72eCFcceBYB4BgQQYjnCU,17451
10
+ sqlspec/typing.py,sha256=AI-72LFQcwwPoW5oEdEFkNHzxnWQv6I7lxcZRoZd88U,15428
11
+ sqlspec/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ sqlspec/adapters/adbc/__init__.py,sha256=_mIoHMCXYWLCqGtnN8YEylhkNt3goTAvZgsT1dfEL6g,155
13
+ sqlspec/adapters/adbc/config.py,sha256=e2lrNsr8VN6R1ZBY16qusNj_W7npy7jp730NXCnhbBI,9866
14
+ sqlspec/adapters/adbc/driver.py,sha256=lP9YEf5sUmeWRBULVZurfiRvE1sMuYdGzvCibzQPALw,16255
15
+ sqlspec/adapters/aiosqlite/__init__.py,sha256=TQME6tGSPswTkZBjW2oH39lbxpzSwwWG5SQfgFpSe00,185
16
+ sqlspec/adapters/aiosqlite/config.py,sha256=EjDJq9-Jn6MKnqlpL4ZwXYxaCKD0wE5GxrSYa2Ck1bA,4788
17
+ sqlspec/adapters/aiosqlite/driver.py,sha256=D6kTpRxcfD_NSH7ThcVq2VbYZz0iriCh_CMjPQBl_Z8,11466
18
+ sqlspec/adapters/asyncmy/__init__.py,sha256=w0hjokFrsBgYS0EnIv8Dorb7jz8M3ZBZYKMUXCUYEQg,247
19
+ sqlspec/adapters/asyncmy/config.py,sha256=5ILV46FWjc9Cy46aMuhinpfc70b_708h9ubHj9HRCmE,9412
20
+ sqlspec/adapters/asyncmy/driver.py,sha256=RICHrYxv2jOUk0m4bex0k2YVc5GMnSnOdrMIp4p4fNo,8507
21
+ sqlspec/adapters/asyncpg/__init__.py,sha256=iR-vJYxImcw5hLaDgMqPLLRxW_vOYylEpemSg5G4dP4,261
22
+ sqlspec/adapters/asyncpg/config.py,sha256=DH6ZLkL4iHmRbW80VFQK1kzWIFRyGkFAZdtF3_f13AQ,9987
23
+ sqlspec/adapters/asyncpg/driver.py,sha256=G6CSo3k1EzmPTZr2cCnTchR7J_O-1_uNC5eKylFMysY,18557
24
+ sqlspec/adapters/duckdb/__init__.py,sha256=b_4QWZC0emTsbuBjcDZrxoEc83hGuBMx7Wwha3fFTAE,167
25
+ sqlspec/adapters/duckdb/config.py,sha256=GJTzKp1cEFhKSe94n5wOXvrT4Sz3Md8mKRxmCBnfvsM,15731
26
+ sqlspec/adapters/duckdb/driver.py,sha256=e91Iu84FbZ7NefqxkhmWZcwICav0lxJpAxxD08sFqUk,10160
27
+ sqlspec/adapters/oracledb/__init__.py,sha256=g54_WLVzZhvD1sLC2uV0nfUs6WnYUJv2vqvvG34L7v0,398
28
+ sqlspec/adapters/oracledb/driver.py,sha256=1YCj0pyaIMB-WXi_2w0ywRR0DlAlz5Q6k4gjGkY2yDE,23081
29
+ sqlspec/adapters/oracledb/config/__init__.py,sha256=emx5jWXqw3ifoW-m_tNI7sTz_duq2vRkubc0J2QqEQ4,306
30
+ sqlspec/adapters/oracledb/config/_asyncio.py,sha256=hu4o5q_d1O7svR_XrylWcmMrvmBzOp0T1m_Ybrbbr_o,7293
31
+ sqlspec/adapters/oracledb/config/_common.py,sha256=UJZL2DQQZM3uOn1E1A_gnsB8nX3-yCDXGd66PDI29_s,5691
32
+ sqlspec/adapters/oracledb/config/_sync.py,sha256=wvmC8bX2FhSD3W-k4RUBXnMP6cvEThsO6-vA-q5flUY,7016
33
+ sqlspec/adapters/psqlpy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ sqlspec/adapters/psqlpy/config.py,sha256=SFa40Fp0HyrAAT49nNoH9gYovzk0iEhm6qMmqS9OgDI,10590
35
+ sqlspec/adapters/psqlpy/driver.py,sha256=8DnLXFwIUkGtlu-xpj2O4lAaERIIRVVbNgkL6GQ7Qgk,12844
36
+ sqlspec/adapters/psycopg/__init__.py,sha256=_aCZRfDiC4lXM5UdkYEQEHZq-bqY1nyS_sioTM91Ul0,408
37
+ sqlspec/adapters/psycopg/driver.py,sha256=4hQfw_hHuzZJYz1gKVECRAAdchop-ZIVWg9fZjY-NUM,21296
38
+ sqlspec/adapters/psycopg/config/__init__.py,sha256=TIFGht0TdHKC7NTJwaJPpG-6-BRRGzWfc2Bu756R-A4,310
39
+ sqlspec/adapters/psycopg/config/_async.py,sha256=6YpxNLxHwvI7r7ZBKKjWnd0xbEG1i4HLOOimiiDUr6w,6631
40
+ sqlspec/adapters/psycopg/config/_common.py,sha256=UqqvqPE9zlSO9G_Gh6fI190cHfCDG98S0GaznGAHpdU,2181
41
+ sqlspec/adapters/psycopg/config/_sync.py,sha256=QIybrGVkuu45GlAcYBzpcsRq7VW6EnHff4fcNATAgsw,6443
42
+ sqlspec/adapters/sqlite/__init__.py,sha256=cGsMyN4_ZWApbhtwmYG18PYEBRiO-NdOU6eecBxTwRQ,167
43
+ sqlspec/adapters/sqlite/config.py,sha256=m2TV-3jcjxIeMSCTsvvrTm50L6uE3007WVPluvqIX3Q,4447
44
+ sqlspec/adapters/sqlite/driver.py,sha256=quh0Bazho05QVRWxy_Jww02I6HKLFg8Q0jUWMtfBjEU,11293
45
+ sqlspec/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
+ sqlspec/extensions/litestar/__init__.py,sha256=vJf0co-AUM75c7ZLil_TUCYilVNDtmVsdeVLbm9_xn8,512
47
+ sqlspec/extensions/litestar/_utils.py,sha256=UgwFxqLnjDw9S8G0H24DP2GsbMGas81W1lfhfTY68m8,1969
48
+ sqlspec/extensions/litestar/config.py,sha256=zq_mlwNubDhRAtAivi2d5S5ippJ1A5xhw19XC6yPC60,4443
49
+ sqlspec/extensions/litestar/handlers.py,sha256=6FNqIEWHUltnNuhcp8QNktK0j6-UB4isMpzoP7qCc3g,7932
50
+ sqlspec/extensions/litestar/plugin.py,sha256=TOXz5Np17DbNaPhPp09-88reDHE29kmMjmRe4W5_-zE,4904
51
+ sqlspec/utils/__init__.py,sha256=nVIUuMaHhhC1vXydoSBvnc-xTArqwWJaAtpjHhiM84Q,159
52
+ sqlspec/utils/deprecation.py,sha256=4pwGxoQYI3dAc3L1lh4tszZG6e2jp5m4e0ICk8SJx5M,3886
53
+ sqlspec/utils/fixtures.py,sha256=ni51rAuen6S1wuSi1kUwn6Qh25B-XrewPEsjV8G4gQ0,2029
54
+ sqlspec/utils/module_loader.py,sha256=tmMy9JcTTQETcwT8Wt8adCIuqr4zinQnPbCiBJ6JTSQ,2703
55
+ sqlspec/utils/sync_tools.py,sha256=xxHZ-5rnTrPEUNr7gxQUVvJd0NGJeO_MgisR8X7sI3c,10425
56
+ sqlspec/utils/text.py,sha256=Ya-fWBcfkQRhguNs7MNFIYtAUiArBo62w8sRPHavMWM,1476
57
+ sqlspec-0.9.0.dist-info/METADATA,sha256=zKfhk4Zk5WwoRzWlGqFTERFpN5kDOaFW77k7gU52tBo,9616
58
+ sqlspec-0.9.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
59
+ sqlspec-0.9.0.dist-info/licenses/LICENSE,sha256=MdujfZ6l5HuLz4mElxlu049itenOR3gnhN1_Nd3nVcM,1078
60
+ sqlspec-0.9.0.dist-info/licenses/NOTICE,sha256=Lyir8ozXWov7CyYS4huVaOCNrtgL17P-bNV-5daLntQ,1634
61
+ sqlspec-0.9.0.dist-info/RECORD,,
@@ -1,46 +0,0 @@
1
- sqlspec/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- sqlspec/__metadata__.py,sha256=hNP3wXvtk8fQVPKGjRLpZ9mP-gaPJqzrmgm3UqpDIXQ,460
3
- sqlspec/_serialization.py,sha256=yOOefq6u-7WMagLcCrHKdnI7aveWiPlyr5_JSGjrZCM,2445
4
- sqlspec/_typing.py,sha256=aKCbEcBDgbw77umRspaE0yiCS70lZYIYkDJfPtOWK84,5985
5
- sqlspec/base.py,sha256=kjvW12tN0RJ_WQeFDZXIY7ylF1wQb55AuxE67zJh_xU,7778
6
- sqlspec/exceptions.py,sha256=i8pGJGWdGdTZVrYkapQ8VbcPtyA6JND_roHjd70l0W8,3022
7
- sqlspec/filters.py,sha256=Gqwt4VQ7e8ffphkuR-jBfqW4m0OWGGUPiYWyEQ0Xn7M,3620
8
- sqlspec/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- sqlspec/typing.py,sha256=r22T4EpteefnEOHdPkynVefwQ8Fg9XVUIM463LhtMu8,13717
10
- sqlspec/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- sqlspec/adapters/adbc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- sqlspec/adapters/adbc/config.py,sha256=d72GOPZTYf0YEGLVjbDhay7NDcVhAH3uUu8VY_WRyAg,1601
13
- sqlspec/adapters/aiosqlite/__init__.py,sha256=hBxp5X8A9qAO3OjxZXAJ1Tk-sJKCPIRCyGySTxgXYIY,94
14
- sqlspec/adapters/aiosqlite/config.py,sha256=miK6pnmVK9SxgG__rPbMzFc1S1lNf5TKFzpA3uukpp4,4026
15
- sqlspec/adapters/asyncmy/__init__.py,sha256=y_ziNrReA4XJze5y0sHdDbptCY3IVNRM847NufyvOzU,127
16
- sqlspec/adapters/asyncmy/config.py,sha256=froLNUsk8cbCaQDtm8nIAB257oMk9klTaw0V3h4Yji4,6676
17
- sqlspec/adapters/asyncpg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- sqlspec/adapters/asyncpg/config.py,sha256=sghB1fexlIKRQ8PVnjRC4eMT6fs5cbZMgEp7OH0mkPs,6868
19
- sqlspec/adapters/duckdb/__init__.py,sha256=-IC44IEsRPbz16HpQFAGkV7Bfbow8CGMruBsdMEIEf4,85
20
- sqlspec/adapters/duckdb/config.py,sha256=r9PxxoVo3KGulsp38k9U7wGZLxtJOJurEDIT7Ok81W4,7954
21
- sqlspec/adapters/oracledb/__init__.py,sha256=f7P24wnDhDoEwgO0pJbutqqN2L0WUZWqVJIAcvphb4M,300
22
- sqlspec/adapters/oracledb/config/__init__.py,sha256=XoHgInT4IbXjDg5ax3ncuUoVvnYB5qQjI-Ib7gwSycU,338
23
- sqlspec/adapters/oracledb/config/_asyncio.py,sha256=2-x03Y-3OLeippJrMga_JfeRIbV8L5OW-xk2GnNR0RY,4027
24
- sqlspec/adapters/oracledb/config/_common.py,sha256=9AJ408RxpTScevyk060M-sXDwgDeqvyguS27aAHfyOk,5691
25
- sqlspec/adapters/oracledb/config/_sync.py,sha256=oU9x5UewbzlVrBD1lkWrWxT4Ns-tIjR8BTvZupzDEKg,3916
26
- sqlspec/adapters/psycopg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
- sqlspec/adapters/psycopg/config/__init__.py,sha256=y4s9ezhFu764yQIqm_qlE_HYJiumTRN_dDfewwRGSkI,342
28
- sqlspec/adapters/psycopg/config/_async.py,sha256=mP_pd-KXY3G8sgEfhW-hn93Z2VeOGIVOHtEDY70lcbg,3203
29
- sqlspec/adapters/psycopg/config/_common.py,sha256=7CqZHDcwdJFvFWF2drDe03_69ie-H6CgqVUp-zgyh6I,2181
30
- sqlspec/adapters/psycopg/config/_sync.py,sha256=2OdUu6QvGFHvfbYIiKkfhAwHpLgzcB47iPUBM3a9by4,3078
31
- sqlspec/adapters/sqlite/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- sqlspec/adapters/sqlite/config.py,sha256=Qxx2AvYD8WzPESGDH6NZzD7qgLIN8fvepHeXf0TXuOg,3762
33
- sqlspec/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- sqlspec/extensions/litestar/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- sqlspec/extensions/litestar/config.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- sqlspec/extensions/litestar/plugin.py,sha256=wfKyufEhmO5GeOXyXcB0qNCGufUN6VBSJloaTnSn3s8,1150
37
- sqlspec/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- sqlspec/utils/deprecation.py,sha256=4pwGxoQYI3dAc3L1lh4tszZG6e2jp5m4e0ICk8SJx5M,3886
39
- sqlspec/utils/fixtures.py,sha256=Tll6jBMrJeargRa0f4Ru87i_q8oObDdyYfDhEbF9-I0,2187
40
- sqlspec/utils/module_loader.py,sha256=tmMy9JcTTQETcwT8Wt8adCIuqr4zinQnPbCiBJ6JTSQ,2703
41
- sqlspec/utils/text.py,sha256=Ya-fWBcfkQRhguNs7MNFIYtAUiArBo62w8sRPHavMWM,1476
42
- sqlspec-0.7.1.dist-info/METADATA,sha256=kl5fSNJx57EYbuPDhvlpOmTLasayselYhVHFPqmiaSc,9402
43
- sqlspec-0.7.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
44
- sqlspec-0.7.1.dist-info/licenses/LICENSE,sha256=MdujfZ6l5HuLz4mElxlu049itenOR3gnhN1_Nd3nVcM,1078
45
- sqlspec-0.7.1.dist-info/licenses/NOTICE,sha256=Lyir8ozXWov7CyYS4huVaOCNrtgL17P-bNV-5daLntQ,1634
46
- sqlspec-0.7.1.dist-info/RECORD,,