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
|
Binary file
|
sqlspec/__init__.py
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"""SQLSpec: Type-safe SQL query mapper for Python."""
|
|
2
|
+
|
|
3
|
+
from sqlspec import adapters, base, builder, core, driver, exceptions, extensions, loader, migrations, typing, utils
|
|
4
|
+
from sqlspec.__metadata__ import __version__
|
|
5
|
+
from sqlspec.base import SQLSpec
|
|
6
|
+
from sqlspec.builder import (
|
|
7
|
+
Column,
|
|
8
|
+
ColumnExpression,
|
|
9
|
+
CreateTable,
|
|
10
|
+
Delete,
|
|
11
|
+
DropTable,
|
|
12
|
+
FunctionColumn,
|
|
13
|
+
Insert,
|
|
14
|
+
Merge,
|
|
15
|
+
QueryBuilder,
|
|
16
|
+
Select,
|
|
17
|
+
SQLFactory,
|
|
18
|
+
Update,
|
|
19
|
+
sql,
|
|
20
|
+
)
|
|
21
|
+
from sqlspec.config import AsyncDatabaseConfig, SyncDatabaseConfig
|
|
22
|
+
from sqlspec.core import (
|
|
23
|
+
SQL,
|
|
24
|
+
ArrowResult,
|
|
25
|
+
CacheConfig,
|
|
26
|
+
CacheStats,
|
|
27
|
+
ParameterConverter,
|
|
28
|
+
ParameterProcessor,
|
|
29
|
+
ParameterStyle,
|
|
30
|
+
ParameterStyleConfig,
|
|
31
|
+
ProcessedState,
|
|
32
|
+
SQLResult,
|
|
33
|
+
StackOperation,
|
|
34
|
+
StackResult,
|
|
35
|
+
Statement,
|
|
36
|
+
StatementConfig,
|
|
37
|
+
StatementStack,
|
|
38
|
+
)
|
|
39
|
+
from sqlspec.core import filters as filters
|
|
40
|
+
from sqlspec.driver import AsyncDriverAdapterBase, ExecutionResult, SyncDriverAdapterBase
|
|
41
|
+
from sqlspec.exceptions import StackExecutionError
|
|
42
|
+
from sqlspec.extensions.events import (
|
|
43
|
+
AsyncEventChannel,
|
|
44
|
+
AsyncEventListener,
|
|
45
|
+
EventMessage,
|
|
46
|
+
SyncEventChannel,
|
|
47
|
+
SyncEventListener,
|
|
48
|
+
)
|
|
49
|
+
from sqlspec.loader import SQLFile, SQLFileLoader
|
|
50
|
+
from sqlspec.observability import (
|
|
51
|
+
LoggingConfig,
|
|
52
|
+
ObservabilityConfig,
|
|
53
|
+
ObservabilityRuntime,
|
|
54
|
+
RedactionConfig,
|
|
55
|
+
StatementEvent,
|
|
56
|
+
StatementObserver,
|
|
57
|
+
TelemetryConfig,
|
|
58
|
+
create_event,
|
|
59
|
+
create_statement_observer,
|
|
60
|
+
default_statement_observer,
|
|
61
|
+
format_statement_event,
|
|
62
|
+
)
|
|
63
|
+
from sqlspec.typing import ConnectionT, PoolT, SchemaT, StatementParameters, SupportedSchemaModel
|
|
64
|
+
from sqlspec.utils.logging import suppress_erroneous_sqlglot_log_messages
|
|
65
|
+
|
|
66
|
+
suppress_erroneous_sqlglot_log_messages()
|
|
67
|
+
|
|
68
|
+
__all__ = (
|
|
69
|
+
"SQL",
|
|
70
|
+
"ArrowResult",
|
|
71
|
+
"AsyncDatabaseConfig",
|
|
72
|
+
"AsyncDriverAdapterBase",
|
|
73
|
+
"AsyncEventChannel",
|
|
74
|
+
"AsyncEventListener",
|
|
75
|
+
"CacheConfig",
|
|
76
|
+
"CacheStats",
|
|
77
|
+
"Column",
|
|
78
|
+
"ColumnExpression",
|
|
79
|
+
"ConnectionT",
|
|
80
|
+
"CreateTable",
|
|
81
|
+
"Delete",
|
|
82
|
+
"DropTable",
|
|
83
|
+
"EventMessage",
|
|
84
|
+
"ExecutionResult",
|
|
85
|
+
"FunctionColumn",
|
|
86
|
+
"Insert",
|
|
87
|
+
"LoggingConfig",
|
|
88
|
+
"Merge",
|
|
89
|
+
"ObservabilityConfig",
|
|
90
|
+
"ObservabilityRuntime",
|
|
91
|
+
"ParameterConverter",
|
|
92
|
+
"ParameterProcessor",
|
|
93
|
+
"ParameterStyle",
|
|
94
|
+
"ParameterStyleConfig",
|
|
95
|
+
"PoolT",
|
|
96
|
+
"ProcessedState",
|
|
97
|
+
"QueryBuilder",
|
|
98
|
+
"RedactionConfig",
|
|
99
|
+
"SQLFactory",
|
|
100
|
+
"SQLFile",
|
|
101
|
+
"SQLFileLoader",
|
|
102
|
+
"SQLResult",
|
|
103
|
+
"SQLSpec",
|
|
104
|
+
"SchemaT",
|
|
105
|
+
"Select",
|
|
106
|
+
"StackExecutionError",
|
|
107
|
+
"StackOperation",
|
|
108
|
+
"StackResult",
|
|
109
|
+
"Statement",
|
|
110
|
+
"StatementConfig",
|
|
111
|
+
"StatementEvent",
|
|
112
|
+
"StatementObserver",
|
|
113
|
+
"StatementParameters",
|
|
114
|
+
"StatementStack",
|
|
115
|
+
"SupportedSchemaModel",
|
|
116
|
+
"SyncDatabaseConfig",
|
|
117
|
+
"SyncDriverAdapterBase",
|
|
118
|
+
"SyncEventChannel",
|
|
119
|
+
"SyncEventListener",
|
|
120
|
+
"TelemetryConfig",
|
|
121
|
+
"Update",
|
|
122
|
+
"__version__",
|
|
123
|
+
"adapters",
|
|
124
|
+
"base",
|
|
125
|
+
"builder",
|
|
126
|
+
"core",
|
|
127
|
+
"create_event",
|
|
128
|
+
"create_statement_observer",
|
|
129
|
+
"default_statement_observer",
|
|
130
|
+
"driver",
|
|
131
|
+
"exceptions",
|
|
132
|
+
"extensions",
|
|
133
|
+
"filters",
|
|
134
|
+
"format_statement_event",
|
|
135
|
+
"loader",
|
|
136
|
+
"migrations",
|
|
137
|
+
"sql",
|
|
138
|
+
"typing",
|
|
139
|
+
"utils",
|
|
140
|
+
)
|
sqlspec/__main__.py
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from sqlspec.cli import add_migration_commands as build_cli_interface
|
|
2
|
+
|
|
3
|
+
__all__ = ("run_cli",)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def run_cli() -> None: # pragma: no cover
|
|
7
|
+
"""SQLSpec CLI."""
|
|
8
|
+
build_cli_interface()()
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
if __name__ == "__main__": # pragma: no cover
|
|
12
|
+
run_cli()
|
sqlspec/__metadata__.py
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""Metadata for the project."""
|
|
2
|
+
|
|
3
|
+
from importlib.metadata import PackageNotFoundError, metadata, version
|
|
4
|
+
|
|
5
|
+
__all__ = ("__project__", "__version__")
|
|
6
|
+
|
|
7
|
+
try:
|
|
8
|
+
__version__ = version("sqlspec")
|
|
9
|
+
__project__ = metadata("sqlspec")["Name"]
|
|
10
|
+
except PackageNotFoundError: # pragma: no cover
|
|
11
|
+
__version__ = "0.0.1"
|
|
12
|
+
__project__ = "SQLSpec"
|
|
13
|
+
finally:
|
|
14
|
+
del version, PackageNotFoundError, metadata
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
"""Enhanced serialization module with byte-aware encoding and class-based architecture.
|
|
2
|
+
|
|
3
|
+
Provides a Protocol-based serialization system that users can extend.
|
|
4
|
+
Supports msgspec, orjson, and standard library JSON with automatic fallback.
|
|
5
|
+
|
|
6
|
+
Features optional numpy array serialization when numpy is installed.
|
|
7
|
+
Arrays are automatically converted to lists during JSON encoding.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import contextlib
|
|
11
|
+
import datetime
|
|
12
|
+
import enum
|
|
13
|
+
import json
|
|
14
|
+
from abc import ABC, abstractmethod
|
|
15
|
+
from decimal import Decimal
|
|
16
|
+
from typing import Any, Final, Literal, Protocol, overload
|
|
17
|
+
|
|
18
|
+
from sqlspec._typing import NUMPY_INSTALLED
|
|
19
|
+
from sqlspec.core.filters import OffsetPagination
|
|
20
|
+
from sqlspec.typing import MSGSPEC_INSTALLED, ORJSON_INSTALLED, PYDANTIC_INSTALLED, BaseModel
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _type_to_string(value: Any) -> Any: # pragma: no cover
|
|
24
|
+
"""Convert special types to strings for JSON serialization.
|
|
25
|
+
|
|
26
|
+
Handles datetime, date, enums, Decimal, Pydantic models, and numpy arrays.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
value: Value to convert.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
Serializable representation of the value (string, list, dict, etc.).
|
|
33
|
+
|
|
34
|
+
Raises:
|
|
35
|
+
TypeError: If value cannot be serialized.
|
|
36
|
+
"""
|
|
37
|
+
if isinstance(value, datetime.datetime):
|
|
38
|
+
return convert_datetime_to_gmt_iso(value)
|
|
39
|
+
if isinstance(value, datetime.date):
|
|
40
|
+
return convert_date_to_iso(value)
|
|
41
|
+
if isinstance(value, Decimal):
|
|
42
|
+
return float(value)
|
|
43
|
+
if isinstance(value, enum.Enum):
|
|
44
|
+
return str(value.value)
|
|
45
|
+
if PYDANTIC_INSTALLED and isinstance(value, BaseModel):
|
|
46
|
+
return value.model_dump_json()
|
|
47
|
+
if isinstance(value, OffsetPagination):
|
|
48
|
+
return {"items": value.items, "limit": value.limit, "offset": value.offset, "total": value.total}
|
|
49
|
+
if NUMPY_INSTALLED:
|
|
50
|
+
import numpy as np
|
|
51
|
+
|
|
52
|
+
if isinstance(value, np.ndarray):
|
|
53
|
+
return value.tolist()
|
|
54
|
+
try:
|
|
55
|
+
return str(value)
|
|
56
|
+
except Exception as exc:
|
|
57
|
+
msg = f"Cannot serialize {type(value).__name__}"
|
|
58
|
+
raise TypeError(msg) from exc
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class JSONSerializer(Protocol):
|
|
62
|
+
"""Protocol for JSON serialization implementations.
|
|
63
|
+
|
|
64
|
+
Users can implement this protocol to create custom serializers.
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
def encode(self, data: Any, *, as_bytes: bool = False) -> str | bytes:
|
|
68
|
+
"""Encode data to JSON.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
data: Data to encode.
|
|
72
|
+
as_bytes: Whether to return bytes instead of string.
|
|
73
|
+
|
|
74
|
+
Returns:
|
|
75
|
+
JSON string or bytes depending on as_bytes parameter.
|
|
76
|
+
"""
|
|
77
|
+
...
|
|
78
|
+
|
|
79
|
+
def decode(self, data: str | bytes, *, decode_bytes: bool = True) -> Any:
|
|
80
|
+
"""Decode from JSON.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
data: JSON string or bytes to decode.
|
|
84
|
+
decode_bytes: Whether to decode bytes input.
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
Decoded Python object.
|
|
88
|
+
"""
|
|
89
|
+
...
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class BaseJSONSerializer(ABC):
|
|
93
|
+
"""Base class for JSON serializers with common functionality."""
|
|
94
|
+
|
|
95
|
+
__slots__ = ()
|
|
96
|
+
|
|
97
|
+
@abstractmethod
|
|
98
|
+
def encode(self, data: Any, *, as_bytes: bool = False) -> str | bytes:
|
|
99
|
+
"""Encode data to JSON."""
|
|
100
|
+
...
|
|
101
|
+
|
|
102
|
+
@abstractmethod
|
|
103
|
+
def decode(self, data: str | bytes, *, decode_bytes: bool = True) -> Any:
|
|
104
|
+
"""Decode from JSON."""
|
|
105
|
+
...
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
class MsgspecSerializer(BaseJSONSerializer):
|
|
109
|
+
"""Msgspec-based JSON serializer."""
|
|
110
|
+
|
|
111
|
+
__slots__ = ("_decoder", "_encoder")
|
|
112
|
+
|
|
113
|
+
def __init__(self) -> None:
|
|
114
|
+
"""Initialize msgspec encoder and decoder."""
|
|
115
|
+
from msgspec.json import Decoder, Encoder
|
|
116
|
+
|
|
117
|
+
self._encoder: Final[Encoder] = Encoder(enc_hook=_type_to_string)
|
|
118
|
+
self._decoder: Final[Decoder] = Decoder()
|
|
119
|
+
|
|
120
|
+
def encode(self, data: Any, *, as_bytes: bool = False) -> str | bytes:
|
|
121
|
+
"""Encode data using msgspec."""
|
|
122
|
+
try:
|
|
123
|
+
if as_bytes:
|
|
124
|
+
return self._encoder.encode(data)
|
|
125
|
+
return self._encoder.encode(data).decode("utf-8")
|
|
126
|
+
except (TypeError, ValueError):
|
|
127
|
+
if ORJSON_INSTALLED:
|
|
128
|
+
return OrjsonSerializer().encode(data, as_bytes=as_bytes)
|
|
129
|
+
return StandardLibSerializer().encode(data, as_bytes=as_bytes)
|
|
130
|
+
|
|
131
|
+
def decode(self, data: str | bytes, *, decode_bytes: bool = True) -> Any:
|
|
132
|
+
"""Decode data using msgspec."""
|
|
133
|
+
if isinstance(data, bytes):
|
|
134
|
+
if decode_bytes:
|
|
135
|
+
try:
|
|
136
|
+
return self._decoder.decode(data)
|
|
137
|
+
except (TypeError, ValueError):
|
|
138
|
+
if ORJSON_INSTALLED:
|
|
139
|
+
return OrjsonSerializer().decode(data, decode_bytes=decode_bytes)
|
|
140
|
+
return StandardLibSerializer().decode(data, decode_bytes=decode_bytes)
|
|
141
|
+
return data
|
|
142
|
+
|
|
143
|
+
try:
|
|
144
|
+
return self._decoder.decode(data.encode("utf-8"))
|
|
145
|
+
except (TypeError, ValueError):
|
|
146
|
+
if ORJSON_INSTALLED:
|
|
147
|
+
return OrjsonSerializer().decode(data, decode_bytes=decode_bytes)
|
|
148
|
+
return StandardLibSerializer().decode(data, decode_bytes=decode_bytes)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
class OrjsonSerializer(BaseJSONSerializer):
|
|
152
|
+
"""Orjson-based JSON serializer with native datetime/UUID support.
|
|
153
|
+
|
|
154
|
+
Automatically enables numpy serialization if numpy is installed.
|
|
155
|
+
"""
|
|
156
|
+
|
|
157
|
+
__slots__ = ()
|
|
158
|
+
|
|
159
|
+
def encode(self, data: Any, *, as_bytes: bool = False) -> str | bytes:
|
|
160
|
+
"""Encode data using orjson.
|
|
161
|
+
|
|
162
|
+
Args:
|
|
163
|
+
data: Data to encode.
|
|
164
|
+
as_bytes: Whether to return bytes instead of string.
|
|
165
|
+
|
|
166
|
+
Returns:
|
|
167
|
+
JSON string or bytes depending on as_bytes parameter.
|
|
168
|
+
"""
|
|
169
|
+
from orjson import (
|
|
170
|
+
OPT_NAIVE_UTC, # pyright: ignore[reportUnknownVariableType]
|
|
171
|
+
OPT_SERIALIZE_UUID, # pyright: ignore[reportUnknownVariableType]
|
|
172
|
+
)
|
|
173
|
+
from orjson import dumps as _orjson_dumps # pyright: ignore[reportMissingImports]
|
|
174
|
+
|
|
175
|
+
options = OPT_NAIVE_UTC | OPT_SERIALIZE_UUID
|
|
176
|
+
|
|
177
|
+
if NUMPY_INSTALLED:
|
|
178
|
+
from orjson import OPT_SERIALIZE_NUMPY # pyright: ignore[reportUnknownVariableType]
|
|
179
|
+
|
|
180
|
+
options |= OPT_SERIALIZE_NUMPY
|
|
181
|
+
|
|
182
|
+
result = _orjson_dumps(data, default=_type_to_string, option=options)
|
|
183
|
+
return result if as_bytes else result.decode("utf-8")
|
|
184
|
+
|
|
185
|
+
def decode(self, data: str | bytes, *, decode_bytes: bool = True) -> Any:
|
|
186
|
+
"""Decode data using orjson."""
|
|
187
|
+
from orjson import loads as _orjson_loads # pyright: ignore[reportMissingImports]
|
|
188
|
+
|
|
189
|
+
if isinstance(data, bytes):
|
|
190
|
+
if decode_bytes:
|
|
191
|
+
return _orjson_loads(data)
|
|
192
|
+
return data
|
|
193
|
+
return _orjson_loads(data)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
class StandardLibSerializer(BaseJSONSerializer):
|
|
197
|
+
"""Standard library JSON serializer as fallback."""
|
|
198
|
+
|
|
199
|
+
__slots__ = ()
|
|
200
|
+
|
|
201
|
+
def encode(self, data: Any, *, as_bytes: bool = False) -> str | bytes:
|
|
202
|
+
"""Encode data using standard library json."""
|
|
203
|
+
json_str = json.dumps(data, default=_type_to_string)
|
|
204
|
+
return json_str.encode("utf-8") if as_bytes else json_str
|
|
205
|
+
|
|
206
|
+
def decode(self, data: str | bytes, *, decode_bytes: bool = True) -> Any:
|
|
207
|
+
"""Decode data using standard library json."""
|
|
208
|
+
if isinstance(data, bytes):
|
|
209
|
+
if decode_bytes:
|
|
210
|
+
return json.loads(data.decode("utf-8"))
|
|
211
|
+
return data
|
|
212
|
+
return json.loads(data)
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
_default_serializer: JSONSerializer | None = None
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
def get_default_serializer() -> JSONSerializer:
|
|
219
|
+
"""Get the default serializer based on available libraries.
|
|
220
|
+
|
|
221
|
+
Priority: msgspec > orjson > stdlib
|
|
222
|
+
|
|
223
|
+
Returns:
|
|
224
|
+
The best available JSON serializer.
|
|
225
|
+
"""
|
|
226
|
+
global _default_serializer
|
|
227
|
+
|
|
228
|
+
if _default_serializer is None:
|
|
229
|
+
if MSGSPEC_INSTALLED:
|
|
230
|
+
with contextlib.suppress(ImportError):
|
|
231
|
+
_default_serializer = MsgspecSerializer()
|
|
232
|
+
|
|
233
|
+
if _default_serializer is None and ORJSON_INSTALLED:
|
|
234
|
+
with contextlib.suppress(ImportError):
|
|
235
|
+
_default_serializer = OrjsonSerializer()
|
|
236
|
+
|
|
237
|
+
if _default_serializer is None:
|
|
238
|
+
_default_serializer = StandardLibSerializer()
|
|
239
|
+
|
|
240
|
+
assert _default_serializer is not None
|
|
241
|
+
return _default_serializer
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
@overload
|
|
245
|
+
def encode_json(data: Any, *, as_bytes: Literal[False] = ...) -> str: ... # pragma: no cover
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
@overload
|
|
249
|
+
def encode_json(data: Any, *, as_bytes: Literal[True]) -> bytes: ... # pragma: no cover
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def encode_json(data: Any, *, as_bytes: bool = False) -> str | bytes:
|
|
253
|
+
"""Encode to JSON, optionally returning bytes.
|
|
254
|
+
|
|
255
|
+
Args:
|
|
256
|
+
data: The data to encode.
|
|
257
|
+
as_bytes: Whether to return bytes instead of string.
|
|
258
|
+
|
|
259
|
+
Returns:
|
|
260
|
+
JSON string or bytes depending on as_bytes parameter.
|
|
261
|
+
"""
|
|
262
|
+
return get_default_serializer().encode(data, as_bytes=as_bytes)
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
def decode_json(data: str | bytes, *, decode_bytes: bool = True) -> Any:
|
|
266
|
+
"""Decode from JSON string or bytes efficiently.
|
|
267
|
+
|
|
268
|
+
Args:
|
|
269
|
+
data: JSON string or bytes to decode.
|
|
270
|
+
decode_bytes: Whether to decode bytes input.
|
|
271
|
+
|
|
272
|
+
Returns:
|
|
273
|
+
Decoded Python object.
|
|
274
|
+
"""
|
|
275
|
+
return get_default_serializer().decode(data, decode_bytes=decode_bytes)
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
def convert_datetime_to_gmt_iso(dt: datetime.datetime) -> str: # pragma: no cover
|
|
279
|
+
"""Handle datetime serialization for nested timestamps.
|
|
280
|
+
|
|
281
|
+
Args:
|
|
282
|
+
dt: The datetime to convert.
|
|
283
|
+
|
|
284
|
+
Returns:
|
|
285
|
+
The ISO formatted datetime string.
|
|
286
|
+
"""
|
|
287
|
+
if not dt.tzinfo:
|
|
288
|
+
dt = dt.replace(tzinfo=datetime.timezone.utc)
|
|
289
|
+
return dt.isoformat().replace("+00:00", "Z")
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
def convert_date_to_iso(dt: datetime.date) -> str: # pragma: no cover
|
|
293
|
+
"""Handle datetime serialization for nested timestamps.
|
|
294
|
+
|
|
295
|
+
Args:
|
|
296
|
+
dt: The date to convert.
|
|
297
|
+
|
|
298
|
+
Returns:
|
|
299
|
+
The ISO formatted date string.
|
|
300
|
+
"""
|
|
301
|
+
return dt.isoformat()
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
__all__ = (
|
|
305
|
+
"BaseJSONSerializer",
|
|
306
|
+
"JSONSerializer",
|
|
307
|
+
"MsgspecSerializer",
|
|
308
|
+
"OrjsonSerializer",
|
|
309
|
+
"StandardLibSerializer",
|
|
310
|
+
"convert_date_to_iso",
|
|
311
|
+
"convert_datetime_to_gmt_iso",
|
|
312
|
+
"decode_json",
|
|
313
|
+
"encode_json",
|
|
314
|
+
"get_default_serializer",
|
|
315
|
+
)
|