sqlspec 0.36.0__cp310-cp310-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.
- ac8f31065839703b4e70__mypyc.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/__init__.py +140 -0
- sqlspec/__main__.py +12 -0
- sqlspec/__metadata__.py +14 -0
- sqlspec/_serialization.py +315 -0
- sqlspec/_typing.py +700 -0
- sqlspec/adapters/__init__.py +0 -0
- sqlspec/adapters/adbc/__init__.py +5 -0
- sqlspec/adapters/adbc/_typing.py +82 -0
- sqlspec/adapters/adbc/adk/__init__.py +5 -0
- sqlspec/adapters/adbc/adk/store.py +1273 -0
- sqlspec/adapters/adbc/config.py +295 -0
- sqlspec/adapters/adbc/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/adbc/core.py +735 -0
- sqlspec/adapters/adbc/data_dictionary.py +334 -0
- sqlspec/adapters/adbc/driver.py +529 -0
- sqlspec/adapters/adbc/events/__init__.py +5 -0
- sqlspec/adapters/adbc/events/store.py +285 -0
- sqlspec/adapters/adbc/litestar/__init__.py +5 -0
- sqlspec/adapters/adbc/litestar/store.py +502 -0
- sqlspec/adapters/adbc/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/adbc/type_converter.py +140 -0
- sqlspec/adapters/aiosqlite/__init__.py +25 -0
- sqlspec/adapters/aiosqlite/_typing.py +82 -0
- sqlspec/adapters/aiosqlite/adk/__init__.py +5 -0
- sqlspec/adapters/aiosqlite/adk/store.py +818 -0
- sqlspec/adapters/aiosqlite/config.py +334 -0
- sqlspec/adapters/aiosqlite/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/aiosqlite/core.py +315 -0
- sqlspec/adapters/aiosqlite/data_dictionary.py +208 -0
- sqlspec/adapters/aiosqlite/driver.py +313 -0
- sqlspec/adapters/aiosqlite/events/__init__.py +5 -0
- sqlspec/adapters/aiosqlite/events/store.py +20 -0
- sqlspec/adapters/aiosqlite/litestar/__init__.py +5 -0
- sqlspec/adapters/aiosqlite/litestar/store.py +279 -0
- sqlspec/adapters/aiosqlite/pool.py +533 -0
- sqlspec/adapters/asyncmy/__init__.py +21 -0
- sqlspec/adapters/asyncmy/_typing.py +87 -0
- sqlspec/adapters/asyncmy/adk/__init__.py +5 -0
- sqlspec/adapters/asyncmy/adk/store.py +703 -0
- sqlspec/adapters/asyncmy/config.py +302 -0
- sqlspec/adapters/asyncmy/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/asyncmy/core.py +360 -0
- sqlspec/adapters/asyncmy/data_dictionary.py +124 -0
- sqlspec/adapters/asyncmy/driver.py +383 -0
- sqlspec/adapters/asyncmy/events/__init__.py +5 -0
- sqlspec/adapters/asyncmy/events/store.py +104 -0
- sqlspec/adapters/asyncmy/litestar/__init__.py +5 -0
- sqlspec/adapters/asyncmy/litestar/store.py +296 -0
- sqlspec/adapters/asyncpg/__init__.py +19 -0
- sqlspec/adapters/asyncpg/_typing.py +88 -0
- sqlspec/adapters/asyncpg/adk/__init__.py +5 -0
- sqlspec/adapters/asyncpg/adk/store.py +748 -0
- sqlspec/adapters/asyncpg/config.py +569 -0
- sqlspec/adapters/asyncpg/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/asyncpg/core.py +367 -0
- sqlspec/adapters/asyncpg/data_dictionary.py +162 -0
- sqlspec/adapters/asyncpg/driver.py +487 -0
- sqlspec/adapters/asyncpg/events/__init__.py +6 -0
- sqlspec/adapters/asyncpg/events/backend.py +286 -0
- sqlspec/adapters/asyncpg/events/store.py +40 -0
- sqlspec/adapters/asyncpg/litestar/__init__.py +5 -0
- sqlspec/adapters/asyncpg/litestar/store.py +251 -0
- sqlspec/adapters/bigquery/__init__.py +14 -0
- sqlspec/adapters/bigquery/_typing.py +86 -0
- sqlspec/adapters/bigquery/adk/__init__.py +5 -0
- sqlspec/adapters/bigquery/adk/store.py +827 -0
- sqlspec/adapters/bigquery/config.py +353 -0
- sqlspec/adapters/bigquery/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/bigquery/core.py +715 -0
- sqlspec/adapters/bigquery/data_dictionary.py +128 -0
- sqlspec/adapters/bigquery/driver.py +548 -0
- sqlspec/adapters/bigquery/events/__init__.py +5 -0
- sqlspec/adapters/bigquery/events/store.py +139 -0
- sqlspec/adapters/bigquery/litestar/__init__.py +5 -0
- sqlspec/adapters/bigquery/litestar/store.py +325 -0
- sqlspec/adapters/bigquery/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/bigquery/type_converter.py +107 -0
- sqlspec/adapters/cockroach_asyncpg/__init__.py +24 -0
- sqlspec/adapters/cockroach_asyncpg/_typing.py +72 -0
- sqlspec/adapters/cockroach_asyncpg/adk/__init__.py +3 -0
- sqlspec/adapters/cockroach_asyncpg/adk/store.py +410 -0
- sqlspec/adapters/cockroach_asyncpg/config.py +238 -0
- sqlspec/adapters/cockroach_asyncpg/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/cockroach_asyncpg/core.py +55 -0
- sqlspec/adapters/cockroach_asyncpg/data_dictionary.py +107 -0
- sqlspec/adapters/cockroach_asyncpg/driver.py +144 -0
- sqlspec/adapters/cockroach_asyncpg/events/__init__.py +3 -0
- sqlspec/adapters/cockroach_asyncpg/events/store.py +20 -0
- sqlspec/adapters/cockroach_asyncpg/litestar/__init__.py +3 -0
- sqlspec/adapters/cockroach_asyncpg/litestar/store.py +142 -0
- sqlspec/adapters/cockroach_psycopg/__init__.py +38 -0
- sqlspec/adapters/cockroach_psycopg/_typing.py +129 -0
- sqlspec/adapters/cockroach_psycopg/adk/__init__.py +13 -0
- sqlspec/adapters/cockroach_psycopg/adk/store.py +868 -0
- sqlspec/adapters/cockroach_psycopg/config.py +484 -0
- sqlspec/adapters/cockroach_psycopg/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/cockroach_psycopg/core.py +63 -0
- sqlspec/adapters/cockroach_psycopg/data_dictionary.py +215 -0
- sqlspec/adapters/cockroach_psycopg/driver.py +284 -0
- sqlspec/adapters/cockroach_psycopg/events/__init__.py +6 -0
- sqlspec/adapters/cockroach_psycopg/events/store.py +34 -0
- sqlspec/adapters/cockroach_psycopg/litestar/__init__.py +3 -0
- sqlspec/adapters/cockroach_psycopg/litestar/store.py +325 -0
- sqlspec/adapters/duckdb/__init__.py +25 -0
- sqlspec/adapters/duckdb/_typing.py +81 -0
- sqlspec/adapters/duckdb/adk/__init__.py +14 -0
- sqlspec/adapters/duckdb/adk/store.py +850 -0
- sqlspec/adapters/duckdb/config.py +463 -0
- sqlspec/adapters/duckdb/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/duckdb/core.py +257 -0
- sqlspec/adapters/duckdb/data_dictionary.py +140 -0
- sqlspec/adapters/duckdb/driver.py +430 -0
- sqlspec/adapters/duckdb/events/__init__.py +5 -0
- sqlspec/adapters/duckdb/events/store.py +57 -0
- sqlspec/adapters/duckdb/litestar/__init__.py +5 -0
- sqlspec/adapters/duckdb/litestar/store.py +330 -0
- sqlspec/adapters/duckdb/pool.py +293 -0
- sqlspec/adapters/duckdb/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/duckdb/type_converter.py +118 -0
- sqlspec/adapters/mock/__init__.py +72 -0
- sqlspec/adapters/mock/_typing.py +147 -0
- sqlspec/adapters/mock/config.py +483 -0
- sqlspec/adapters/mock/core.py +319 -0
- sqlspec/adapters/mock/data_dictionary.py +366 -0
- sqlspec/adapters/mock/driver.py +721 -0
- sqlspec/adapters/mysqlconnector/__init__.py +36 -0
- sqlspec/adapters/mysqlconnector/_typing.py +141 -0
- sqlspec/adapters/mysqlconnector/adk/__init__.py +15 -0
- sqlspec/adapters/mysqlconnector/adk/store.py +1060 -0
- sqlspec/adapters/mysqlconnector/config.py +394 -0
- sqlspec/adapters/mysqlconnector/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/mysqlconnector/core.py +303 -0
- sqlspec/adapters/mysqlconnector/data_dictionary.py +235 -0
- sqlspec/adapters/mysqlconnector/driver.py +483 -0
- sqlspec/adapters/mysqlconnector/events/__init__.py +8 -0
- sqlspec/adapters/mysqlconnector/events/store.py +98 -0
- sqlspec/adapters/mysqlconnector/litestar/__init__.py +5 -0
- sqlspec/adapters/mysqlconnector/litestar/store.py +426 -0
- sqlspec/adapters/oracledb/__init__.py +60 -0
- sqlspec/adapters/oracledb/_numpy_handlers.py +141 -0
- sqlspec/adapters/oracledb/_typing.py +182 -0
- sqlspec/adapters/oracledb/_uuid_handlers.py +166 -0
- sqlspec/adapters/oracledb/adk/__init__.py +10 -0
- sqlspec/adapters/oracledb/adk/store.py +2369 -0
- sqlspec/adapters/oracledb/config.py +550 -0
- sqlspec/adapters/oracledb/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/oracledb/core.py +543 -0
- sqlspec/adapters/oracledb/data_dictionary.py +536 -0
- sqlspec/adapters/oracledb/driver.py +1229 -0
- sqlspec/adapters/oracledb/events/__init__.py +16 -0
- sqlspec/adapters/oracledb/events/backend.py +347 -0
- sqlspec/adapters/oracledb/events/store.py +420 -0
- sqlspec/adapters/oracledb/litestar/__init__.py +5 -0
- sqlspec/adapters/oracledb/litestar/store.py +781 -0
- sqlspec/adapters/oracledb/migrations.py +535 -0
- sqlspec/adapters/oracledb/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/oracledb/type_converter.py +211 -0
- sqlspec/adapters/psqlpy/__init__.py +17 -0
- sqlspec/adapters/psqlpy/_typing.py +79 -0
- sqlspec/adapters/psqlpy/adk/__init__.py +5 -0
- sqlspec/adapters/psqlpy/adk/store.py +766 -0
- sqlspec/adapters/psqlpy/config.py +304 -0
- sqlspec/adapters/psqlpy/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/psqlpy/core.py +480 -0
- sqlspec/adapters/psqlpy/data_dictionary.py +126 -0
- sqlspec/adapters/psqlpy/driver.py +438 -0
- sqlspec/adapters/psqlpy/events/__init__.py +6 -0
- sqlspec/adapters/psqlpy/events/backend.py +310 -0
- sqlspec/adapters/psqlpy/events/store.py +20 -0
- sqlspec/adapters/psqlpy/litestar/__init__.py +5 -0
- sqlspec/adapters/psqlpy/litestar/store.py +270 -0
- sqlspec/adapters/psqlpy/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/psqlpy/type_converter.py +113 -0
- sqlspec/adapters/psycopg/__init__.py +32 -0
- sqlspec/adapters/psycopg/_typing.py +164 -0
- sqlspec/adapters/psycopg/adk/__init__.py +10 -0
- sqlspec/adapters/psycopg/adk/store.py +1387 -0
- sqlspec/adapters/psycopg/config.py +576 -0
- sqlspec/adapters/psycopg/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/psycopg/core.py +450 -0
- sqlspec/adapters/psycopg/data_dictionary.py +289 -0
- sqlspec/adapters/psycopg/driver.py +975 -0
- sqlspec/adapters/psycopg/events/__init__.py +20 -0
- sqlspec/adapters/psycopg/events/backend.py +458 -0
- sqlspec/adapters/psycopg/events/store.py +42 -0
- sqlspec/adapters/psycopg/litestar/__init__.py +5 -0
- sqlspec/adapters/psycopg/litestar/store.py +552 -0
- sqlspec/adapters/psycopg/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/psycopg/type_converter.py +93 -0
- sqlspec/adapters/pymysql/__init__.py +21 -0
- sqlspec/adapters/pymysql/_typing.py +71 -0
- sqlspec/adapters/pymysql/adk/__init__.py +5 -0
- sqlspec/adapters/pymysql/adk/store.py +540 -0
- sqlspec/adapters/pymysql/config.py +195 -0
- sqlspec/adapters/pymysql/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/pymysql/core.py +299 -0
- sqlspec/adapters/pymysql/data_dictionary.py +122 -0
- sqlspec/adapters/pymysql/driver.py +259 -0
- sqlspec/adapters/pymysql/events/__init__.py +5 -0
- sqlspec/adapters/pymysql/events/store.py +50 -0
- sqlspec/adapters/pymysql/litestar/__init__.py +5 -0
- sqlspec/adapters/pymysql/litestar/store.py +232 -0
- sqlspec/adapters/pymysql/pool.py +137 -0
- sqlspec/adapters/spanner/__init__.py +40 -0
- sqlspec/adapters/spanner/_typing.py +86 -0
- sqlspec/adapters/spanner/adk/__init__.py +5 -0
- sqlspec/adapters/spanner/adk/store.py +732 -0
- sqlspec/adapters/spanner/config.py +352 -0
- sqlspec/adapters/spanner/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/spanner/core.py +188 -0
- sqlspec/adapters/spanner/data_dictionary.py +120 -0
- sqlspec/adapters/spanner/dialect/__init__.py +6 -0
- sqlspec/adapters/spanner/dialect/_spangres.py +57 -0
- sqlspec/adapters/spanner/dialect/_spanner.py +130 -0
- sqlspec/adapters/spanner/driver.py +373 -0
- sqlspec/adapters/spanner/events/__init__.py +5 -0
- sqlspec/adapters/spanner/events/store.py +187 -0
- sqlspec/adapters/spanner/litestar/__init__.py +5 -0
- sqlspec/adapters/spanner/litestar/store.py +291 -0
- sqlspec/adapters/spanner/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/spanner/type_converter.py +331 -0
- sqlspec/adapters/sqlite/__init__.py +19 -0
- sqlspec/adapters/sqlite/_typing.py +80 -0
- sqlspec/adapters/sqlite/adk/__init__.py +5 -0
- sqlspec/adapters/sqlite/adk/store.py +958 -0
- sqlspec/adapters/sqlite/config.py +280 -0
- sqlspec/adapters/sqlite/core.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/sqlite/core.py +312 -0
- sqlspec/adapters/sqlite/data_dictionary.py +202 -0
- sqlspec/adapters/sqlite/driver.py +359 -0
- sqlspec/adapters/sqlite/events/__init__.py +5 -0
- sqlspec/adapters/sqlite/events/store.py +20 -0
- sqlspec/adapters/sqlite/litestar/__init__.py +5 -0
- sqlspec/adapters/sqlite/litestar/store.py +316 -0
- sqlspec/adapters/sqlite/pool.py +198 -0
- sqlspec/adapters/sqlite/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/adapters/sqlite/type_converter.py +114 -0
- sqlspec/base.py +747 -0
- sqlspec/builder/__init__.py +179 -0
- sqlspec/builder/_base.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_base.py +1022 -0
- sqlspec/builder/_column.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_column.py +521 -0
- sqlspec/builder/_ddl.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_ddl.py +1642 -0
- sqlspec/builder/_delete.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_delete.py +95 -0
- sqlspec/builder/_dml.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_dml.py +365 -0
- sqlspec/builder/_explain.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_explain.py +579 -0
- sqlspec/builder/_expression_wrappers.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_expression_wrappers.py +46 -0
- sqlspec/builder/_factory.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_factory.py +1697 -0
- sqlspec/builder/_insert.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_insert.py +328 -0
- sqlspec/builder/_join.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_join.py +499 -0
- sqlspec/builder/_merge.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_merge.py +821 -0
- sqlspec/builder/_parsing_utils.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_parsing_utils.py +297 -0
- sqlspec/builder/_select.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_select.py +1660 -0
- sqlspec/builder/_temporal.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_temporal.py +139 -0
- sqlspec/builder/_update.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/builder/_update.py +173 -0
- sqlspec/builder/_vector_expressions.py +267 -0
- sqlspec/cli.py +911 -0
- sqlspec/config.py +1755 -0
- sqlspec/core/__init__.py +374 -0
- sqlspec/core/_correlation.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/_correlation.py +176 -0
- sqlspec/core/cache.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/cache.py +1069 -0
- sqlspec/core/compiler.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/compiler.py +954 -0
- sqlspec/core/explain.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/explain.py +275 -0
- sqlspec/core/filters.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/filters.py +952 -0
- sqlspec/core/hashing.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/hashing.py +262 -0
- sqlspec/core/metrics.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/metrics.py +83 -0
- sqlspec/core/parameters/__init__.py +71 -0
- sqlspec/core/parameters/_alignment.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_alignment.py +270 -0
- sqlspec/core/parameters/_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_converter.py +543 -0
- sqlspec/core/parameters/_processor.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_processor.py +505 -0
- sqlspec/core/parameters/_registry.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_registry.py +206 -0
- sqlspec/core/parameters/_transformers.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_transformers.py +292 -0
- sqlspec/core/parameters/_types.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_types.py +499 -0
- sqlspec/core/parameters/_validator.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/parameters/_validator.py +180 -0
- sqlspec/core/pipeline.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/pipeline.py +319 -0
- sqlspec/core/query_modifiers.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/query_modifiers.py +437 -0
- sqlspec/core/result/__init__.py +23 -0
- sqlspec/core/result/_base.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/result/_base.py +1121 -0
- sqlspec/core/result/_io.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/result/_io.py +28 -0
- sqlspec/core/splitter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/splitter.py +966 -0
- sqlspec/core/stack.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/stack.py +163 -0
- sqlspec/core/statement.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/statement.py +1503 -0
- sqlspec/core/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/core/type_converter.py +339 -0
- sqlspec/data_dictionary/__init__.py +22 -0
- sqlspec/data_dictionary/_loader.py +123 -0
- sqlspec/data_dictionary/_registry.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/_registry.py +74 -0
- sqlspec/data_dictionary/_types.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/_types.py +121 -0
- sqlspec/data_dictionary/dialects/__init__.py +21 -0
- sqlspec/data_dictionary/dialects/bigquery.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/bigquery.py +49 -0
- sqlspec/data_dictionary/dialects/cockroachdb.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/cockroachdb.py +43 -0
- sqlspec/data_dictionary/dialects/duckdb.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/duckdb.py +47 -0
- sqlspec/data_dictionary/dialects/mysql.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/mysql.py +42 -0
- sqlspec/data_dictionary/dialects/oracle.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/oracle.py +34 -0
- sqlspec/data_dictionary/dialects/postgres.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/postgres.py +46 -0
- sqlspec/data_dictionary/dialects/spanner.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/spanner.py +37 -0
- sqlspec/data_dictionary/dialects/sqlite.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/data_dictionary/dialects/sqlite.py +42 -0
- sqlspec/data_dictionary/sql/.gitkeep +0 -0
- sqlspec/data_dictionary/sql/bigquery/columns.sql +23 -0
- sqlspec/data_dictionary/sql/bigquery/foreign_keys.sql +34 -0
- sqlspec/data_dictionary/sql/bigquery/indexes.sql +19 -0
- sqlspec/data_dictionary/sql/bigquery/tables.sql +33 -0
- sqlspec/data_dictionary/sql/bigquery/version.sql +3 -0
- sqlspec/data_dictionary/sql/cockroachdb/columns.sql +34 -0
- sqlspec/data_dictionary/sql/cockroachdb/foreign_keys.sql +40 -0
- sqlspec/data_dictionary/sql/cockroachdb/indexes.sql +32 -0
- sqlspec/data_dictionary/sql/cockroachdb/tables.sql +44 -0
- sqlspec/data_dictionary/sql/cockroachdb/version.sql +3 -0
- sqlspec/data_dictionary/sql/duckdb/columns.sql +23 -0
- sqlspec/data_dictionary/sql/duckdb/foreign_keys.sql +36 -0
- sqlspec/data_dictionary/sql/duckdb/indexes.sql +19 -0
- sqlspec/data_dictionary/sql/duckdb/tables.sql +38 -0
- sqlspec/data_dictionary/sql/duckdb/version.sql +3 -0
- sqlspec/data_dictionary/sql/mysql/columns.sql +23 -0
- sqlspec/data_dictionary/sql/mysql/foreign_keys.sql +28 -0
- sqlspec/data_dictionary/sql/mysql/indexes.sql +26 -0
- sqlspec/data_dictionary/sql/mysql/tables.sql +33 -0
- sqlspec/data_dictionary/sql/mysql/version.sql +3 -0
- sqlspec/data_dictionary/sql/oracle/columns.sql +23 -0
- sqlspec/data_dictionary/sql/oracle/foreign_keys.sql +48 -0
- sqlspec/data_dictionary/sql/oracle/indexes.sql +44 -0
- sqlspec/data_dictionary/sql/oracle/tables.sql +25 -0
- sqlspec/data_dictionary/sql/oracle/version.sql +20 -0
- sqlspec/data_dictionary/sql/postgres/columns.sql +34 -0
- sqlspec/data_dictionary/sql/postgres/foreign_keys.sql +40 -0
- sqlspec/data_dictionary/sql/postgres/indexes.sql +56 -0
- sqlspec/data_dictionary/sql/postgres/tables.sql +44 -0
- sqlspec/data_dictionary/sql/postgres/version.sql +3 -0
- sqlspec/data_dictionary/sql/spanner/columns.sql +23 -0
- sqlspec/data_dictionary/sql/spanner/foreign_keys.sql +70 -0
- sqlspec/data_dictionary/sql/spanner/indexes.sql +30 -0
- sqlspec/data_dictionary/sql/spanner/tables.sql +9 -0
- sqlspec/data_dictionary/sql/spanner/version.sql +3 -0
- sqlspec/data_dictionary/sql/sqlite/columns.sql +23 -0
- sqlspec/data_dictionary/sql/sqlite/foreign_keys.sql +22 -0
- sqlspec/data_dictionary/sql/sqlite/indexes.sql +7 -0
- sqlspec/data_dictionary/sql/sqlite/tables.sql +28 -0
- sqlspec/data_dictionary/sql/sqlite/version.sql +3 -0
- sqlspec/driver/__init__.py +32 -0
- sqlspec/driver/_async.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/driver/_async.py +1737 -0
- sqlspec/driver/_common.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/driver/_common.py +1478 -0
- sqlspec/driver/_sql_helpers.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/driver/_sql_helpers.py +148 -0
- sqlspec/driver/_storage_helpers.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/driver/_storage_helpers.py +144 -0
- sqlspec/driver/_sync.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/driver/_sync.py +1710 -0
- sqlspec/exceptions.py +338 -0
- sqlspec/extensions/__init__.py +0 -0
- sqlspec/extensions/adk/__init__.py +70 -0
- sqlspec/extensions/adk/_types.py +51 -0
- sqlspec/extensions/adk/converters.py +172 -0
- sqlspec/extensions/adk/memory/__init__.py +69 -0
- sqlspec/extensions/adk/memory/_types.py +30 -0
- sqlspec/extensions/adk/memory/converters.py +149 -0
- sqlspec/extensions/adk/memory/service.py +217 -0
- sqlspec/extensions/adk/memory/store.py +569 -0
- sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +246 -0
- sqlspec/extensions/adk/migrations/__init__.py +0 -0
- sqlspec/extensions/adk/service.py +225 -0
- sqlspec/extensions/adk/store.py +567 -0
- sqlspec/extensions/events/__init__.py +51 -0
- sqlspec/extensions/events/_channel.py +703 -0
- sqlspec/extensions/events/_hints.py +45 -0
- sqlspec/extensions/events/_models.py +23 -0
- sqlspec/extensions/events/_payload.py +69 -0
- sqlspec/extensions/events/_protocols.py +134 -0
- sqlspec/extensions/events/_queue.py +461 -0
- sqlspec/extensions/events/_store.py +209 -0
- sqlspec/extensions/events/migrations/0001_create_event_queue.py +59 -0
- sqlspec/extensions/events/migrations/__init__.py +3 -0
- sqlspec/extensions/fastapi/__init__.py +19 -0
- sqlspec/extensions/fastapi/extension.py +351 -0
- sqlspec/extensions/fastapi/providers.py +607 -0
- sqlspec/extensions/flask/__init__.py +37 -0
- sqlspec/extensions/flask/_state.py +76 -0
- sqlspec/extensions/flask/_utils.py +71 -0
- sqlspec/extensions/flask/extension.py +519 -0
- sqlspec/extensions/litestar/__init__.py +28 -0
- sqlspec/extensions/litestar/_utils.py +52 -0
- sqlspec/extensions/litestar/channels.py +165 -0
- sqlspec/extensions/litestar/cli.py +102 -0
- sqlspec/extensions/litestar/config.py +90 -0
- sqlspec/extensions/litestar/handlers.py +316 -0
- sqlspec/extensions/litestar/migrations/0001_create_session_table.py +137 -0
- sqlspec/extensions/litestar/migrations/__init__.py +3 -0
- sqlspec/extensions/litestar/plugin.py +671 -0
- sqlspec/extensions/litestar/providers.py +526 -0
- sqlspec/extensions/litestar/store.py +296 -0
- sqlspec/extensions/otel/__init__.py +58 -0
- sqlspec/extensions/prometheus/__init__.py +113 -0
- sqlspec/extensions/starlette/__init__.py +19 -0
- sqlspec/extensions/starlette/_state.py +30 -0
- sqlspec/extensions/starlette/_utils.py +96 -0
- sqlspec/extensions/starlette/extension.py +346 -0
- sqlspec/extensions/starlette/middleware.py +235 -0
- sqlspec/loader.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/loader.py +702 -0
- sqlspec/migrations/__init__.py +36 -0
- sqlspec/migrations/base.py +731 -0
- sqlspec/migrations/commands.py +1232 -0
- sqlspec/migrations/context.py +157 -0
- sqlspec/migrations/fix.py +204 -0
- sqlspec/migrations/loaders.py +443 -0
- sqlspec/migrations/runner.py +1172 -0
- sqlspec/migrations/templates.py +234 -0
- sqlspec/migrations/tracker.py +611 -0
- sqlspec/migrations/utils.py +256 -0
- sqlspec/migrations/validation.py +207 -0
- sqlspec/migrations/version.py +446 -0
- sqlspec/observability/__init__.py +55 -0
- sqlspec/observability/_common.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_common.py +77 -0
- sqlspec/observability/_config.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_config.py +348 -0
- sqlspec/observability/_diagnostics.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_diagnostics.py +74 -0
- sqlspec/observability/_dispatcher.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_dispatcher.py +152 -0
- sqlspec/observability/_formatters/__init__.py +13 -0
- sqlspec/observability/_formatters/_aws.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_formatters/_aws.py +102 -0
- sqlspec/observability/_formatters/_azure.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_formatters/_azure.py +96 -0
- sqlspec/observability/_formatters/_base.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_formatters/_base.py +57 -0
- sqlspec/observability/_formatters/_gcp.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_formatters/_gcp.py +131 -0
- sqlspec/observability/_formatting.py +58 -0
- sqlspec/observability/_observer.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_observer.py +357 -0
- sqlspec/observability/_runtime.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_runtime.py +420 -0
- sqlspec/observability/_sampling.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_sampling.py +188 -0
- sqlspec/observability/_spans.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/observability/_spans.py +161 -0
- sqlspec/protocols.py +916 -0
- sqlspec/py.typed +0 -0
- sqlspec/storage/__init__.py +48 -0
- sqlspec/storage/_utils.py +104 -0
- sqlspec/storage/backends/__init__.py +1 -0
- sqlspec/storage/backends/base.py +253 -0
- sqlspec/storage/backends/fsspec.py +529 -0
- sqlspec/storage/backends/local.py +441 -0
- sqlspec/storage/backends/obstore.py +916 -0
- sqlspec/storage/errors.py +104 -0
- sqlspec/storage/pipeline.py +582 -0
- sqlspec/storage/registry.py +301 -0
- sqlspec/typing.py +395 -0
- sqlspec/utils/__init__.py +7 -0
- sqlspec/utils/arrow_helpers.py +318 -0
- sqlspec/utils/config_tools.py +332 -0
- sqlspec/utils/correlation.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/correlation.py +134 -0
- sqlspec/utils/deprecation.py +190 -0
- sqlspec/utils/fixtures.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/fixtures.py +258 -0
- sqlspec/utils/logging.py +222 -0
- sqlspec/utils/module_loader.py +306 -0
- sqlspec/utils/portal.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/portal.py +375 -0
- sqlspec/utils/schema.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/schema.py +485 -0
- sqlspec/utils/serializers.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/serializers.py +408 -0
- sqlspec/utils/singleton.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/singleton.py +41 -0
- sqlspec/utils/sync_tools.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/sync_tools.py +311 -0
- sqlspec/utils/text.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/text.py +108 -0
- sqlspec/utils/type_converters.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/type_converters.py +128 -0
- sqlspec/utils/type_guards.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/type_guards.py +1360 -0
- sqlspec/utils/uuids.cpython-310-aarch64-linux-gnu.so +0 -0
- sqlspec/utils/uuids.py +225 -0
- sqlspec-0.36.0.dist-info/METADATA +205 -0
- sqlspec-0.36.0.dist-info/RECORD +531 -0
- sqlspec-0.36.0.dist-info/WHEEL +7 -0
- sqlspec-0.36.0.dist-info/entry_points.txt +2 -0
- sqlspec-0.36.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
import contextlib
|
|
2
|
+
import inspect
|
|
3
|
+
from collections.abc import AsyncGenerator, Callable
|
|
4
|
+
from contextlib import AbstractAsyncContextManager, AbstractContextManager
|
|
5
|
+
from typing import TYPE_CHECKING, Any, cast
|
|
6
|
+
|
|
7
|
+
from litestar.constants import HTTP_DISCONNECT, HTTP_RESPONSE_START, WEBSOCKET_CLOSE, WEBSOCKET_DISCONNECT
|
|
8
|
+
from litestar.params import Dependency
|
|
9
|
+
|
|
10
|
+
from sqlspec.exceptions import ImproperConfigurationError
|
|
11
|
+
from sqlspec.extensions.litestar._utils import (
|
|
12
|
+
delete_sqlspec_scope_state,
|
|
13
|
+
get_sqlspec_scope_state,
|
|
14
|
+
set_sqlspec_scope_state,
|
|
15
|
+
)
|
|
16
|
+
from sqlspec.utils.sync_tools import ensure_async_, with_ensure_async_
|
|
17
|
+
|
|
18
|
+
if TYPE_CHECKING:
|
|
19
|
+
from collections.abc import Awaitable, Coroutine
|
|
20
|
+
|
|
21
|
+
from litestar import Litestar
|
|
22
|
+
from litestar.datastructures.state import State
|
|
23
|
+
from litestar.types import Message, Scope
|
|
24
|
+
|
|
25
|
+
from sqlspec.config import DatabaseConfigProtocol, DriverT
|
|
26
|
+
from sqlspec.typing import ConnectionT, PoolT
|
|
27
|
+
|
|
28
|
+
SESSION_TERMINUS_ASGI_EVENTS = {HTTP_RESPONSE_START, HTTP_DISCONNECT, WEBSOCKET_DISCONNECT, WEBSOCKET_CLOSE}
|
|
29
|
+
|
|
30
|
+
__all__ = (
|
|
31
|
+
"SESSION_TERMINUS_ASGI_EVENTS",
|
|
32
|
+
"autocommit_handler_maker",
|
|
33
|
+
"connection_provider_maker",
|
|
34
|
+
"lifespan_handler_maker",
|
|
35
|
+
"manual_handler_maker",
|
|
36
|
+
"pool_provider_maker",
|
|
37
|
+
"session_provider_maker",
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def manual_handler_maker(
|
|
42
|
+
connection_scope_key: str, is_async: bool = False
|
|
43
|
+
) -> "Callable[[Message, Scope], Coroutine[Any, Any, None]]":
|
|
44
|
+
"""Create handler for manual connection management.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
connection_scope_key: The key used to store the connection in the ASGI scope.
|
|
48
|
+
is_async: Whether the database driver is async (uses direct await) or sync (uses ensure_async_).
|
|
49
|
+
|
|
50
|
+
Returns:
|
|
51
|
+
The handler callable.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
async def handler(message: "Message", scope: "Scope") -> None:
|
|
55
|
+
"""Handle closing and cleaning up connections before sending the response.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
message: ASGI Message.
|
|
59
|
+
scope: ASGI Scope.
|
|
60
|
+
"""
|
|
61
|
+
connection = get_sqlspec_scope_state(scope, connection_scope_key)
|
|
62
|
+
if connection and message["type"] in SESSION_TERMINUS_ASGI_EVENTS:
|
|
63
|
+
if is_async:
|
|
64
|
+
await connection.close()
|
|
65
|
+
else:
|
|
66
|
+
await ensure_async_(connection.close)()
|
|
67
|
+
delete_sqlspec_scope_state(scope, connection_scope_key)
|
|
68
|
+
|
|
69
|
+
return handler
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def autocommit_handler_maker(
|
|
73
|
+
connection_scope_key: str,
|
|
74
|
+
is_async: bool = False,
|
|
75
|
+
commit_on_redirect: bool = False,
|
|
76
|
+
extra_commit_statuses: "set[int] | None" = None,
|
|
77
|
+
extra_rollback_statuses: "set[int] | None" = None,
|
|
78
|
+
) -> "Callable[[Message, Scope], Coroutine[Any, Any, None]]":
|
|
79
|
+
"""Create handler for automatic transaction commit/rollback based on response status.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
connection_scope_key: The key used to store the connection in the ASGI scope.
|
|
83
|
+
is_async: Whether the database driver is async (uses direct await) or sync (uses ensure_async_).
|
|
84
|
+
commit_on_redirect: Issue a commit when the response status is a redirect (3XX).
|
|
85
|
+
extra_commit_statuses: A set of additional status codes that trigger a commit.
|
|
86
|
+
extra_rollback_statuses: A set of additional status codes that trigger a rollback.
|
|
87
|
+
|
|
88
|
+
Raises:
|
|
89
|
+
ImproperConfigurationError: If extra_commit_statuses and extra_rollback_statuses share status codes.
|
|
90
|
+
|
|
91
|
+
Returns:
|
|
92
|
+
The handler callable.
|
|
93
|
+
"""
|
|
94
|
+
if extra_commit_statuses is None:
|
|
95
|
+
extra_commit_statuses = set()
|
|
96
|
+
|
|
97
|
+
if extra_rollback_statuses is None:
|
|
98
|
+
extra_rollback_statuses = set()
|
|
99
|
+
|
|
100
|
+
if len(extra_commit_statuses & extra_rollback_statuses) > 0:
|
|
101
|
+
msg = "Extra rollback statuses and commit statuses must not share any status codes"
|
|
102
|
+
raise ImproperConfigurationError(msg)
|
|
103
|
+
|
|
104
|
+
commit_range = range(200, 400 if commit_on_redirect else 300)
|
|
105
|
+
|
|
106
|
+
async def handler(message: "Message", scope: "Scope") -> None:
|
|
107
|
+
"""Handle commit/rollback, closing and cleaning up connections before sending.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
message: ASGI Message.
|
|
111
|
+
scope: ASGI Scope.
|
|
112
|
+
"""
|
|
113
|
+
connection = get_sqlspec_scope_state(scope, connection_scope_key)
|
|
114
|
+
try:
|
|
115
|
+
if connection is not None and message["type"] == HTTP_RESPONSE_START:
|
|
116
|
+
if (message["status"] in commit_range or message["status"] in extra_commit_statuses) and message[
|
|
117
|
+
"status"
|
|
118
|
+
] not in extra_rollback_statuses:
|
|
119
|
+
if is_async:
|
|
120
|
+
await connection.commit()
|
|
121
|
+
else:
|
|
122
|
+
await ensure_async_(connection.commit)()
|
|
123
|
+
elif is_async:
|
|
124
|
+
await connection.rollback()
|
|
125
|
+
else:
|
|
126
|
+
await ensure_async_(connection.rollback)()
|
|
127
|
+
finally:
|
|
128
|
+
if connection and message["type"] in SESSION_TERMINUS_ASGI_EVENTS:
|
|
129
|
+
if is_async:
|
|
130
|
+
await connection.close()
|
|
131
|
+
else:
|
|
132
|
+
await ensure_async_(connection.close)()
|
|
133
|
+
delete_sqlspec_scope_state(scope, connection_scope_key)
|
|
134
|
+
|
|
135
|
+
return handler
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def lifespan_handler_maker(
|
|
139
|
+
config: "DatabaseConfigProtocol[Any, Any, Any]", pool_key: str
|
|
140
|
+
) -> "Callable[[Litestar], AbstractAsyncContextManager[None]]":
|
|
141
|
+
"""Create lifespan handler for managing database connection pool lifecycle.
|
|
142
|
+
|
|
143
|
+
Args:
|
|
144
|
+
config: The database configuration object.
|
|
145
|
+
pool_key: The key under which the connection pool will be stored in `app.state`.
|
|
146
|
+
|
|
147
|
+
Returns:
|
|
148
|
+
The lifespan handler function.
|
|
149
|
+
"""
|
|
150
|
+
|
|
151
|
+
@contextlib.asynccontextmanager
|
|
152
|
+
async def lifespan_handler(app: "Litestar") -> "AsyncGenerator[None, None]":
|
|
153
|
+
"""Manage database pool lifecycle for the application.
|
|
154
|
+
|
|
155
|
+
Args:
|
|
156
|
+
app: The Litestar application instance.
|
|
157
|
+
|
|
158
|
+
Yields:
|
|
159
|
+
Control to application during pool lifetime.
|
|
160
|
+
"""
|
|
161
|
+
db_pool: Any
|
|
162
|
+
if config.is_async:
|
|
163
|
+
db_pool = await config.create_pool()
|
|
164
|
+
else:
|
|
165
|
+
db_pool = await ensure_async_(config.create_pool)()
|
|
166
|
+
app.state.update({pool_key: db_pool})
|
|
167
|
+
try:
|
|
168
|
+
yield
|
|
169
|
+
finally:
|
|
170
|
+
app.state.pop(pool_key, None)
|
|
171
|
+
try:
|
|
172
|
+
if config.is_async:
|
|
173
|
+
close_result = config.close_pool()
|
|
174
|
+
if close_result is not None:
|
|
175
|
+
await close_result
|
|
176
|
+
else:
|
|
177
|
+
await ensure_async_(config.close_pool)()
|
|
178
|
+
except Exception as e:
|
|
179
|
+
if app.logger:
|
|
180
|
+
app.logger.warning("Error closing database pool for %s. Error: %s", pool_key, e)
|
|
181
|
+
|
|
182
|
+
return lifespan_handler
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def pool_provider_maker(
|
|
186
|
+
config: "DatabaseConfigProtocol[ConnectionT, PoolT, DriverT]", pool_key: str
|
|
187
|
+
) -> "Callable[[State, Scope], Awaitable[PoolT]]":
|
|
188
|
+
"""Create provider for injecting the application-level database pool.
|
|
189
|
+
|
|
190
|
+
Args:
|
|
191
|
+
config: The database configuration object.
|
|
192
|
+
pool_key: The key used to store the connection pool in `app.state`.
|
|
193
|
+
|
|
194
|
+
Returns:
|
|
195
|
+
The pool provider function.
|
|
196
|
+
"""
|
|
197
|
+
|
|
198
|
+
async def provide_pool(state: "State", scope: "Scope") -> "PoolT":
|
|
199
|
+
"""Provide the database pool from application state.
|
|
200
|
+
|
|
201
|
+
Args:
|
|
202
|
+
state: The Litestar application State object.
|
|
203
|
+
scope: The ASGI scope (unused for app-level pool).
|
|
204
|
+
|
|
205
|
+
Returns:
|
|
206
|
+
The database connection pool.
|
|
207
|
+
|
|
208
|
+
Raises:
|
|
209
|
+
ImproperConfigurationError: If the pool is not found in `app.state`.
|
|
210
|
+
"""
|
|
211
|
+
if (db_pool := state.get(pool_key)) is None:
|
|
212
|
+
msg = (
|
|
213
|
+
f"Database pool with key '{pool_key}' not found in application state. "
|
|
214
|
+
"Ensure the SQLSpec lifespan handler is correctly configured and has run."
|
|
215
|
+
)
|
|
216
|
+
raise ImproperConfigurationError(msg)
|
|
217
|
+
return cast("PoolT", db_pool)
|
|
218
|
+
|
|
219
|
+
return provide_pool
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
def connection_provider_maker(
|
|
223
|
+
config: "DatabaseConfigProtocol[ConnectionT, PoolT, DriverT]", pool_key: str, connection_key: str
|
|
224
|
+
) -> "Callable[[State, Scope], AsyncGenerator[ConnectionT, None]]":
|
|
225
|
+
"""Create provider for database connections with proper lifecycle management.
|
|
226
|
+
|
|
227
|
+
Args:
|
|
228
|
+
config: The database configuration object.
|
|
229
|
+
pool_key: The key used to retrieve the connection pool from `app.state`.
|
|
230
|
+
connection_key: The key used to store the connection in the ASGI scope.
|
|
231
|
+
|
|
232
|
+
Returns:
|
|
233
|
+
The connection provider function.
|
|
234
|
+
"""
|
|
235
|
+
|
|
236
|
+
async def provide_connection(state: "State", scope: "Scope") -> "AsyncGenerator[ConnectionT, None]":
|
|
237
|
+
if (db_pool := state.get(pool_key)) is None:
|
|
238
|
+
msg = f"Database pool with key '{pool_key}' not found. Cannot create a connection."
|
|
239
|
+
raise ImproperConfigurationError(msg)
|
|
240
|
+
|
|
241
|
+
connection_cm: Any = config.provide_connection(db_pool)
|
|
242
|
+
context_manager: AbstractAsyncContextManager[ConnectionT] | None = None
|
|
243
|
+
|
|
244
|
+
if isinstance(connection_cm, AbstractAsyncContextManager):
|
|
245
|
+
context_manager = connection_cm
|
|
246
|
+
elif isinstance(connection_cm, AbstractContextManager):
|
|
247
|
+
context_manager = with_ensure_async_(connection_cm)
|
|
248
|
+
|
|
249
|
+
if context_manager is None:
|
|
250
|
+
conn_instance: ConnectionT
|
|
251
|
+
if inspect.isawaitable(connection_cm):
|
|
252
|
+
conn_instance = await cast("Awaitable[ConnectionT]", connection_cm)
|
|
253
|
+
else:
|
|
254
|
+
conn_instance = cast("ConnectionT", connection_cm)
|
|
255
|
+
set_sqlspec_scope_state(scope, connection_key, conn_instance)
|
|
256
|
+
yield conn_instance
|
|
257
|
+
return
|
|
258
|
+
|
|
259
|
+
entered_connection = await context_manager.__aenter__()
|
|
260
|
+
try:
|
|
261
|
+
set_sqlspec_scope_state(scope, connection_key, entered_connection)
|
|
262
|
+
yield entered_connection
|
|
263
|
+
finally:
|
|
264
|
+
await context_manager.__aexit__(None, None, None)
|
|
265
|
+
delete_sqlspec_scope_state(scope, connection_key)
|
|
266
|
+
|
|
267
|
+
return provide_connection
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
def session_provider_maker(
|
|
271
|
+
config: "DatabaseConfigProtocol[ConnectionT, PoolT, DriverT]", connection_dependency_key: str
|
|
272
|
+
) -> "Callable[[Any], AsyncGenerator[DriverT, None]]":
|
|
273
|
+
"""Create provider for database driver sessions.
|
|
274
|
+
|
|
275
|
+
Args:
|
|
276
|
+
config: The database configuration object.
|
|
277
|
+
connection_dependency_key: The key used for connection dependency injection.
|
|
278
|
+
|
|
279
|
+
Returns:
|
|
280
|
+
The session provider function.
|
|
281
|
+
"""
|
|
282
|
+
|
|
283
|
+
async def provide_session(*args: Any, **kwargs: Any) -> "AsyncGenerator[DriverT, None]":
|
|
284
|
+
connection_obj = args[0] if args else kwargs.get(connection_dependency_key)
|
|
285
|
+
yield cast(
|
|
286
|
+
"DriverT",
|
|
287
|
+
config.driver_type(
|
|
288
|
+
connection=connection_obj,
|
|
289
|
+
statement_config=config.statement_config,
|
|
290
|
+
driver_features=config.driver_features,
|
|
291
|
+
),
|
|
292
|
+
) # pyright: ignore
|
|
293
|
+
|
|
294
|
+
conn_type_annotation = config.connection_type
|
|
295
|
+
|
|
296
|
+
db_conn_param = inspect.Parameter(
|
|
297
|
+
name=connection_dependency_key,
|
|
298
|
+
kind=inspect.Parameter.POSITIONAL_OR_KEYWORD,
|
|
299
|
+
annotation=conn_type_annotation,
|
|
300
|
+
default=Dependency(skip_validation=True),
|
|
301
|
+
)
|
|
302
|
+
|
|
303
|
+
provider_signature = inspect.Signature(
|
|
304
|
+
parameters=[db_conn_param],
|
|
305
|
+
return_annotation=AsyncGenerator[config.driver_type, None], # type: ignore[name-defined]
|
|
306
|
+
)
|
|
307
|
+
|
|
308
|
+
provide_session.__signature__ = provider_signature # type: ignore[attr-defined]
|
|
309
|
+
|
|
310
|
+
if provide_session.__annotations__ is None:
|
|
311
|
+
provide_session.__annotations__ = {}
|
|
312
|
+
|
|
313
|
+
provide_session.__annotations__[connection_dependency_key] = conn_type_annotation
|
|
314
|
+
provide_session.__annotations__["return"] = AsyncGenerator[config.driver_type, None] # type: ignore[name-defined]
|
|
315
|
+
|
|
316
|
+
return provide_session
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"""Create Litestar session table migration using store DDL definitions."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, NoReturn
|
|
4
|
+
|
|
5
|
+
from sqlspec.exceptions import SQLSpecError
|
|
6
|
+
from sqlspec.utils.logging import get_logger
|
|
7
|
+
from sqlspec.utils.module_loader import import_string
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from sqlspec.extensions.litestar.store import BaseSQLSpecStore
|
|
11
|
+
from sqlspec.migrations.context import MigrationContext
|
|
12
|
+
|
|
13
|
+
logger = get_logger("sqlspec.migrations.litestar.session")
|
|
14
|
+
|
|
15
|
+
__all__ = ("down", "up")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _get_store_class(context: "MigrationContext | None") -> "type[BaseSQLSpecStore]":
|
|
19
|
+
"""Get the appropriate store class based on the config's module path.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
context: Migration context containing config.
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
Store class matching the config's adapter.
|
|
26
|
+
|
|
27
|
+
Notes:
|
|
28
|
+
Dynamically imports the store class from the config's module path.
|
|
29
|
+
For example, AsyncpgConfig at 'sqlspec.adapters.asyncpg.config'
|
|
30
|
+
maps to AsyncpgStore at 'sqlspec.adapters.asyncpg.litestar.store.AsyncpgStore'.
|
|
31
|
+
"""
|
|
32
|
+
if not context or not context.config:
|
|
33
|
+
_raise_missing_config()
|
|
34
|
+
|
|
35
|
+
config_class = type(context.config)
|
|
36
|
+
config_module = config_class.__module__
|
|
37
|
+
config_name = config_class.__name__
|
|
38
|
+
|
|
39
|
+
if not config_module.startswith("sqlspec.adapters."):
|
|
40
|
+
_raise_unsupported_config(f"{config_module}.{config_name}")
|
|
41
|
+
|
|
42
|
+
adapter_name = config_module.split(".")[2]
|
|
43
|
+
store_class_name = config_name.replace("Config", "Store")
|
|
44
|
+
|
|
45
|
+
store_path = f"sqlspec.adapters.{adapter_name}.litestar.store.{store_class_name}"
|
|
46
|
+
|
|
47
|
+
try:
|
|
48
|
+
store_class: type[BaseSQLSpecStore] = import_string(store_path)
|
|
49
|
+
except ImportError as e:
|
|
50
|
+
_raise_store_import_failed(store_path, e)
|
|
51
|
+
|
|
52
|
+
return store_class
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _raise_missing_config() -> NoReturn:
|
|
56
|
+
"""Raise error when migration context has no config.
|
|
57
|
+
|
|
58
|
+
Raises:
|
|
59
|
+
SQLSpecError: Always raised.
|
|
60
|
+
"""
|
|
61
|
+
msg = "Migration context must have a config to determine store class"
|
|
62
|
+
raise SQLSpecError(msg)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def _raise_unsupported_config(config_type: str) -> NoReturn:
|
|
66
|
+
"""Raise error for unsupported config type.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
config_type: The unsupported config type name.
|
|
70
|
+
|
|
71
|
+
Raises:
|
|
72
|
+
SQLSpecError: Always raised with config type info.
|
|
73
|
+
"""
|
|
74
|
+
msg = f"Unsupported config type for Litestar session migration: {config_type}"
|
|
75
|
+
raise SQLSpecError(msg)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def _raise_store_import_failed(store_path: str, error: ImportError) -> NoReturn:
|
|
79
|
+
"""Raise error when store class import fails.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
store_path: The import path that failed.
|
|
83
|
+
error: The original import error.
|
|
84
|
+
|
|
85
|
+
Raises:
|
|
86
|
+
SQLSpecError: Always raised with import details.
|
|
87
|
+
"""
|
|
88
|
+
msg = f"Failed to import Litestar store class from {store_path}: {error}"
|
|
89
|
+
raise SQLSpecError(msg) from error
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
async def up(context: "MigrationContext | None" = None) -> "list[str]":
|
|
93
|
+
"""Create the litestar session table using store DDL definitions.
|
|
94
|
+
|
|
95
|
+
This migration delegates to the appropriate store class to generate
|
|
96
|
+
dialect-specific DDL. The store classes contain the single source of
|
|
97
|
+
truth for session table schemas.
|
|
98
|
+
|
|
99
|
+
Args:
|
|
100
|
+
context: Migration context containing config.
|
|
101
|
+
|
|
102
|
+
Returns:
|
|
103
|
+
List of SQL statements to execute for upgrade.
|
|
104
|
+
|
|
105
|
+
Notes:
|
|
106
|
+
Table configuration is read from context.config.extension_config["litestar"].
|
|
107
|
+
"""
|
|
108
|
+
store_class = _get_store_class(context)
|
|
109
|
+
if context is None or context.config is None:
|
|
110
|
+
_raise_missing_config()
|
|
111
|
+
store = store_class(config=context.config)
|
|
112
|
+
|
|
113
|
+
return [store._get_create_table_sql()] # pyright: ignore[reportPrivateUsage]
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
async def down(context: "MigrationContext | None" = None) -> "list[str]":
|
|
117
|
+
"""Drop the litestar session table using store DDL definitions.
|
|
118
|
+
|
|
119
|
+
This migration delegates to the appropriate store class to generate
|
|
120
|
+
dialect-specific DROP statements. The store classes contain the single
|
|
121
|
+
source of truth for session table schemas.
|
|
122
|
+
|
|
123
|
+
Args:
|
|
124
|
+
context: Migration context containing config.
|
|
125
|
+
|
|
126
|
+
Returns:
|
|
127
|
+
List of SQL statements to execute for downgrade.
|
|
128
|
+
|
|
129
|
+
Notes:
|
|
130
|
+
Table configuration is read from context.config.extension_config["litestar"].
|
|
131
|
+
"""
|
|
132
|
+
store_class = _get_store_class(context)
|
|
133
|
+
if context is None or context.config is None:
|
|
134
|
+
_raise_missing_config()
|
|
135
|
+
store = store_class(config=context.config)
|
|
136
|
+
|
|
137
|
+
return store._get_drop_table_sql() # pyright: ignore[reportPrivateUsage]
|