sqlspec 0.7.1__py3-none-any.whl → 0.8.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 (49) hide show
  1. sqlspec/__init__.py +15 -0
  2. sqlspec/_serialization.py +16 -2
  3. sqlspec/_typing.py +1 -1
  4. sqlspec/adapters/adbc/__init__.py +7 -0
  5. sqlspec/adapters/adbc/config.py +160 -17
  6. sqlspec/adapters/adbc/driver.py +333 -0
  7. sqlspec/adapters/aiosqlite/__init__.py +6 -2
  8. sqlspec/adapters/aiosqlite/config.py +25 -7
  9. sqlspec/adapters/aiosqlite/driver.py +275 -0
  10. sqlspec/adapters/asyncmy/__init__.py +7 -2
  11. sqlspec/adapters/asyncmy/config.py +75 -14
  12. sqlspec/adapters/asyncmy/driver.py +255 -0
  13. sqlspec/adapters/asyncpg/__init__.py +9 -0
  14. sqlspec/adapters/asyncpg/config.py +99 -20
  15. sqlspec/adapters/asyncpg/driver.py +288 -0
  16. sqlspec/adapters/duckdb/__init__.py +6 -2
  17. sqlspec/adapters/duckdb/config.py +195 -13
  18. sqlspec/adapters/duckdb/driver.py +225 -0
  19. sqlspec/adapters/oracledb/__init__.py +11 -8
  20. sqlspec/adapters/oracledb/config/__init__.py +6 -6
  21. sqlspec/adapters/oracledb/config/_asyncio.py +98 -13
  22. sqlspec/adapters/oracledb/config/_common.py +1 -1
  23. sqlspec/adapters/oracledb/config/_sync.py +99 -14
  24. sqlspec/adapters/oracledb/driver.py +498 -0
  25. sqlspec/adapters/psycopg/__init__.py +11 -0
  26. sqlspec/adapters/psycopg/config/__init__.py +6 -6
  27. sqlspec/adapters/psycopg/config/_async.py +105 -13
  28. sqlspec/adapters/psycopg/config/_common.py +2 -2
  29. sqlspec/adapters/psycopg/config/_sync.py +105 -13
  30. sqlspec/adapters/psycopg/driver.py +616 -0
  31. sqlspec/adapters/sqlite/__init__.py +7 -0
  32. sqlspec/adapters/sqlite/config.py +25 -7
  33. sqlspec/adapters/sqlite/driver.py +303 -0
  34. sqlspec/base.py +416 -36
  35. sqlspec/extensions/litestar/__init__.py +19 -0
  36. sqlspec/extensions/litestar/_utils.py +56 -0
  37. sqlspec/extensions/litestar/config.py +81 -0
  38. sqlspec/extensions/litestar/handlers.py +188 -0
  39. sqlspec/extensions/litestar/plugin.py +100 -11
  40. sqlspec/typing.py +72 -17
  41. sqlspec/utils/__init__.py +3 -0
  42. sqlspec/utils/fixtures.py +4 -5
  43. sqlspec/utils/sync_tools.py +335 -0
  44. {sqlspec-0.7.1.dist-info → sqlspec-0.8.0.dist-info}/METADATA +1 -1
  45. sqlspec-0.8.0.dist-info/RECORD +57 -0
  46. sqlspec-0.7.1.dist-info/RECORD +0 -46
  47. {sqlspec-0.7.1.dist-info → sqlspec-0.8.0.dist-info}/WHEEL +0 -0
  48. {sqlspec-0.7.1.dist-info → sqlspec-0.8.0.dist-info}/licenses/LICENSE +0 -0
  49. {sqlspec-0.7.1.dist-info → sqlspec-0.8.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.8.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>
@@ -0,0 +1,57 @@
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=soCl97IyIUqfIiIZlXBJuYd97yV6M45VHpSld7E46Eg,6026
5
+ sqlspec/base.py,sha256=vmhhs2bLqNjWfL5eSqej-t455p2cpWpy_e5wYbpGmtI,20639
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=Rho16Vzz-cg3iuYQUB4_Ebj5GpPLpBFutavjubSSGPA,15190
10
+ sqlspec/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ sqlspec/adapters/adbc/__init__.py,sha256=nRry16NCO52X9qtF4loOhvDCaIRIQKSJnXEpSLXTUDg,143
12
+ sqlspec/adapters/adbc/config.py,sha256=838ZtrLzYHXf3oBuvk8XTtNsw9IG6_hH6YzDUqzmOys,9299
13
+ sqlspec/adapters/adbc/driver.py,sha256=UsUqeufq6fairswyySjK11dn-17XE7QX940A8Fcdw_0,14935
14
+ sqlspec/adapters/aiosqlite/__init__.py,sha256=KZ5rkNByrc2YvRhOuVM5KxcvN9Ow8H3laL3LKMA8qHA,173
15
+ sqlspec/adapters/aiosqlite/config.py,sha256=L-W6md_t4542dUe7zgrQ0Gkie1sJ2v7FNppFjGzU33w,4776
16
+ sqlspec/adapters/aiosqlite/driver.py,sha256=zT1PYFzld6a4yFm47vSJ2sYOGad0H1z1J1FqA9FEvxM,12277
17
+ sqlspec/adapters/asyncmy/__init__.py,sha256=M5f0oz5EwEduNX7Fv3g1QCZTzPLRY1-MoH4yUbHwkGQ,223
18
+ sqlspec/adapters/asyncmy/config.py,sha256=efDUGRDpmhJxAkM-p2iA_cER6vDc9Dm4Ul99A0SDekA,9393
19
+ sqlspec/adapters/asyncmy/driver.py,sha256=Dxe11Pnvdr-AC4nQA3IcJNI9_wg_1lhGESIoGuRRgsA,9134
20
+ sqlspec/adapters/asyncpg/__init__.py,sha256=MTFZVXHYaOr0vNLo8puivzL0M8eR_gzVgG_IAtDbB8g,227
21
+ sqlspec/adapters/asyncpg/config.py,sha256=wG6jg4Qn6pTQg-1jAPl8QgE2IPNr09-HnVQ6JUHiR_o,9939
22
+ sqlspec/adapters/asyncpg/driver.py,sha256=tr3nrip9Rhr6BB0m_ug5NMRlQZjaURFxqpiKYMc8jlI,11377
23
+ sqlspec/adapters/duckdb/__init__.py,sha256=cXOKO5T-1lfaX-9wD9c2qLYftll3rh7CzHk7Zw5cHhM,155
24
+ sqlspec/adapters/duckdb/config.py,sha256=8I-3_yzcHq7If-1nWj_JkvHPaytlB_Yq7nCQm4gQods,15719
25
+ sqlspec/adapters/duckdb/driver.py,sha256=_AN4NiVIIJjdCGLWCXK_7UUpAzcrp_UQN244V42Xmpk,10407
26
+ sqlspec/adapters/oracledb/__init__.py,sha256=ZKmlCLknOBLbN-mvKSqK3DCwGyBuffngxWWEccZsdWY,350
27
+ sqlspec/adapters/oracledb/driver.py,sha256=aQTFJUnLQ2EeD6T_NpUGdPHPuh6FsWS4Fae5NAM9PpM,20799
28
+ sqlspec/adapters/oracledb/config/__init__.py,sha256=LBZ6qdX4yyJfEcmNlCsWmQRYBNpWj8zfoZdl1NtMVx0,258
29
+ sqlspec/adapters/oracledb/config/_asyncio.py,sha256=GAPH_VlHWOKK3j-PbVVf8mxdjul4lkFp8BtAe-R-z-I,7227
30
+ sqlspec/adapters/oracledb/config/_common.py,sha256=UJZL2DQQZM3uOn1E1A_gnsB8nX3-yCDXGd66PDI29_s,5691
31
+ sqlspec/adapters/oracledb/config/_sync.py,sha256=kwuyJNEtsXYNYSQHnFmNUetVCLEuQjkx_1RxttxX2so,6995
32
+ sqlspec/adapters/psycopg/__init__.py,sha256=G-7ZS7e9sr14AVSCixANQkZuFu3brk6jSz4I3mPRLe8,339
33
+ sqlspec/adapters/psycopg/driver.py,sha256=g3vo5-WAATBA1poJgPsI7sfPLYNvt-uM0FaKY8iJ0bk,23095
34
+ sqlspec/adapters/psycopg/config/__init__.py,sha256=1bvEp1CphubDxQUcxCtPqb2AiDXebekiuZpWOj-c8Rs,262
35
+ sqlspec/adapters/psycopg/config/_async.py,sha256=qB94FFlAZYhsfTXomT2Aa7PzomdPPLRjxMgWbGeT5t8,6565
36
+ sqlspec/adapters/psycopg/config/_common.py,sha256=UqqvqPE9zlSO9G_Gh6fI190cHfCDG98S0GaznGAHpdU,2181
37
+ sqlspec/adapters/psycopg/config/_sync.py,sha256=vjUEmTFTyOu4W5gBgsuAVIZXUm7IV12G-GtUpg-Jros,6357
38
+ sqlspec/adapters/sqlite/__init__.py,sha256=b-JM-82PlwALjuGYIL-MUDARtdh02pJRKrjfeDOp4fk,155
39
+ sqlspec/adapters/sqlite/config.py,sha256=Ni6xJnZGPkRlyyjfEdaQPZX_T2QgTvivA5q09L3378U,4435
40
+ sqlspec/adapters/sqlite/driver.py,sha256=ofitI6owJcKOiFd_ijfN5x5PQHCBy_axCXRm_G2wK3o,11802
41
+ sqlspec/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ sqlspec/extensions/litestar/__init__.py,sha256=vJf0co-AUM75c7ZLil_TUCYilVNDtmVsdeVLbm9_xn8,512
43
+ sqlspec/extensions/litestar/_utils.py,sha256=UgwFxqLnjDw9S8G0H24DP2GsbMGas81W1lfhfTY68m8,1969
44
+ sqlspec/extensions/litestar/config.py,sha256=LsKFO9SfPjsHZvUV9Sek6857PzuF0QjTaleEB-FBK_g,4044
45
+ sqlspec/extensions/litestar/handlers.py,sha256=144rcGAXcuxvod7y4r1kn1agmupu2UlV_vLzKa-cX58,7009
46
+ sqlspec/extensions/litestar/plugin.py,sha256=lxFzRqPkLXAdUr9z2aQWdoiyxgzA9mm5RXyG_wZ56ak,4746
47
+ sqlspec/utils/__init__.py,sha256=nVIUuMaHhhC1vXydoSBvnc-xTArqwWJaAtpjHhiM84Q,159
48
+ sqlspec/utils/deprecation.py,sha256=4pwGxoQYI3dAc3L1lh4tszZG6e2jp5m4e0ICk8SJx5M,3886
49
+ sqlspec/utils/fixtures.py,sha256=ni51rAuen6S1wuSi1kUwn6Qh25B-XrewPEsjV8G4gQ0,2029
50
+ sqlspec/utils/module_loader.py,sha256=tmMy9JcTTQETcwT8Wt8adCIuqr4zinQnPbCiBJ6JTSQ,2703
51
+ sqlspec/utils/sync_tools.py,sha256=xxHZ-5rnTrPEUNr7gxQUVvJd0NGJeO_MgisR8X7sI3c,10425
52
+ sqlspec/utils/text.py,sha256=Ya-fWBcfkQRhguNs7MNFIYtAUiArBo62w8sRPHavMWM,1476
53
+ sqlspec-0.8.0.dist-info/METADATA,sha256=IpDN4SPp1-FddDQqI4w6uyeTLratU2bjuii60UoNd4I,9402
54
+ sqlspec-0.8.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
55
+ sqlspec-0.8.0.dist-info/licenses/LICENSE,sha256=MdujfZ6l5HuLz4mElxlu049itenOR3gnhN1_Nd3nVcM,1078
56
+ sqlspec-0.8.0.dist-info/licenses/NOTICE,sha256=Lyir8ozXWov7CyYS4huVaOCNrtgL17P-bNV-5daLntQ,1634
57
+ sqlspec-0.8.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,,