sqlspec 0.7.0__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.
- sqlspec/__init__.py +15 -0
- sqlspec/_serialization.py +16 -2
- sqlspec/_typing.py +1 -1
- sqlspec/adapters/adbc/__init__.py +7 -0
- sqlspec/adapters/adbc/config.py +160 -17
- sqlspec/adapters/adbc/driver.py +333 -0
- sqlspec/adapters/aiosqlite/__init__.py +6 -2
- sqlspec/adapters/aiosqlite/config.py +25 -7
- sqlspec/adapters/aiosqlite/driver.py +275 -0
- sqlspec/adapters/asyncmy/__init__.py +7 -2
- sqlspec/adapters/asyncmy/config.py +75 -14
- sqlspec/adapters/asyncmy/driver.py +255 -0
- sqlspec/adapters/asyncpg/__init__.py +9 -0
- sqlspec/adapters/asyncpg/config.py +99 -20
- sqlspec/adapters/asyncpg/driver.py +288 -0
- sqlspec/adapters/duckdb/__init__.py +6 -2
- sqlspec/adapters/duckdb/config.py +197 -15
- sqlspec/adapters/duckdb/driver.py +225 -0
- sqlspec/adapters/oracledb/__init__.py +11 -8
- sqlspec/adapters/oracledb/config/__init__.py +6 -6
- sqlspec/adapters/oracledb/config/_asyncio.py +98 -13
- sqlspec/adapters/oracledb/config/_common.py +1 -1
- sqlspec/adapters/oracledb/config/_sync.py +99 -14
- sqlspec/adapters/oracledb/driver.py +498 -0
- sqlspec/adapters/psycopg/__init__.py +11 -0
- sqlspec/adapters/psycopg/config/__init__.py +6 -6
- sqlspec/adapters/psycopg/config/_async.py +105 -13
- sqlspec/adapters/psycopg/config/_common.py +2 -2
- sqlspec/adapters/psycopg/config/_sync.py +105 -13
- sqlspec/adapters/psycopg/driver.py +616 -0
- sqlspec/adapters/sqlite/__init__.py +7 -0
- sqlspec/adapters/sqlite/config.py +25 -7
- sqlspec/adapters/sqlite/driver.py +303 -0
- sqlspec/base.py +416 -36
- sqlspec/extensions/litestar/__init__.py +19 -0
- sqlspec/extensions/litestar/_utils.py +56 -0
- sqlspec/extensions/litestar/config.py +81 -0
- sqlspec/extensions/litestar/handlers.py +188 -0
- sqlspec/extensions/litestar/plugin.py +103 -11
- sqlspec/typing.py +72 -17
- sqlspec/utils/__init__.py +3 -0
- sqlspec/utils/deprecation.py +1 -1
- sqlspec/utils/fixtures.py +4 -5
- sqlspec/utils/sync_tools.py +335 -0
- {sqlspec-0.7.0.dist-info → sqlspec-0.8.0.dist-info}/METADATA +1 -1
- sqlspec-0.8.0.dist-info/RECORD +57 -0
- sqlspec-0.7.0.dist-info/RECORD +0 -46
- {sqlspec-0.7.0.dist-info → sqlspec-0.8.0.dist-info}/WHEEL +0 -0
- {sqlspec-0.7.0.dist-info → sqlspec-0.8.0.dist-info}/licenses/LICENSE +0 -0
- {sqlspec-0.7.0.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
|
|
@@ -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,,
|
sqlspec-0.7.0.dist-info/RECORD
DELETED
|
@@ -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=pOlCWmxBYzkCsZd6Ru3Mn2DF0XTzs35xk7d2uNcUu3Q,7922
|
|
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=_Trw2zdJSs2fvdDlpBAWyxXN5SHJakwitr5iMj_XCFw,1055
|
|
37
|
-
sqlspec/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
|
-
sqlspec/utils/deprecation.py,sha256=OpEiWZwoZNA6YPhrq1MN39N3g8hd6F23yPeCYAwghKA,3895
|
|
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.0.dist-info/METADATA,sha256=rYDAZgNkBZbJ8FyzFKsTNfi6IWwwOgawmfN1OQ93ozQ,9402
|
|
43
|
-
sqlspec-0.7.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
44
|
-
sqlspec-0.7.0.dist-info/licenses/LICENSE,sha256=MdujfZ6l5HuLz4mElxlu049itenOR3gnhN1_Nd3nVcM,1078
|
|
45
|
-
sqlspec-0.7.0.dist-info/licenses/NOTICE,sha256=Lyir8ozXWov7CyYS4huVaOCNrtgL17P-bNV-5daLntQ,1634
|
|
46
|
-
sqlspec-0.7.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|