sqlmodel 0.0.31__tar.gz → 0.0.32__tar.gz
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.
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/PKG-INFO +1 -1
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/pyproject.toml +43 -2
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/__init__.py +1 -1
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/main.py +66 -16
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/sql/expression.py +1 -1
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_field_sa_column.py +12 -1
- sqlmodel-0.0.32/tests/test_future_annotations.py +63 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_main.py +92 -1
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_pydantic/test_field.py +1 -2
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_delete/test_tutorial001.py +20 -51
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_limit_and_offset/test_tutorial001.py +8 -21
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial001.py +8 -21
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial002.py +8 -21
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_read_one/test_tutorial001.py +8 -21
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_relationships/test_tutorial001.py +58 -143
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_response_model/test_tutorial001.py +8 -21
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_session_with_dependency/test_tutorial001.py +20 -51
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_simple_hero_api/test_tutorial001.py +8 -21
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_teams/test_tutorial001.py +40 -101
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_update/test_tutorial001.py +20 -51
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_update/test_tutorial002.py +24 -61
- sqlmodel-0.0.31/requirements-docs-tests.txt +0 -2
- sqlmodel-0.0.31/requirements-docs.txt +0 -19
- sqlmodel-0.0.31/requirements-github-actions.txt +0 -5
- sqlmodel-0.0.31/requirements-tests.txt +0 -12
- sqlmodel-0.0.31/requirements.txt +0 -6
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/LICENSE +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/README.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/advanced/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/advanced/decimal/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/advanced/decimal/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/advanced/decimal/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/advanced/uuid/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/advanced/uuid/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/advanced/uuid/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/advanced/uuid/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/advanced/uuid/tutorial002_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/automatic_id_none_refresh/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/automatic_id_none_refresh/annotations/en/tutorial002.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/automatic_id_none_refresh/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/automatic_id_none_refresh/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/automatic_id_none_refresh/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/automatic_id_none_refresh/tutorial002_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial001_py310/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial001_py310/app.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial001_py310/database.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial001_py310/models.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial001_py39/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial001_py39/app.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial001_py39/database.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial001_py39/models.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py310/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py310/app.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py310/database.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py310/hero_model.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py310/team_model.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py39/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py39/app.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py39/database.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py39/hero_model.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py39/team_model.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/create_tables/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/create_tables/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/create_tables/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/delete/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/delete/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/delete/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/insert/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/insert/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/insert/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial002_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial003_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial004_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial005_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial005_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/update/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/update/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/update/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/create_db_and_table/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/create_db_and_table/annotations/en/tutorial003.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/create_db_and_table/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/create_db_and_table/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/create_db_and_table/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/create_db_and_table/tutorial002_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/create_db_and_table/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/create_db_and_table/tutorial003_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/delete/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/delete/annotations/en/tutorial002.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/delete/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/delete/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/delete/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/delete/tutorial002_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_001.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_002.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_003.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_004.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_005.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_006.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/main.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_extra_coverage.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_003.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_004.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_005.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_006.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/annotations/en/test_main_001.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/annotations/en/test_main_002.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/annotations/en/test_main_003.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/annotations/en/test_main_004.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/annotations/en/test_main_005.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/annotations/en/test_main_006.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/main.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/test_extra_coverage.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/test_main.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/test_main_001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/test_main_002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/test_main_003.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/test_main_004.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/test_main_005.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/test_main_006.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/delete/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/delete/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/delete/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/limit_and_offset/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/limit_and_offset/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/limit_and_offset/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/multiple_models/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/multiple_models/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/multiple_models/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/multiple_models/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/multiple_models/tutorial002_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/read_one/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/read_one/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/read_one/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/relationships/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/relationships/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/relationships/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/response_model/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/response_model/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/response_model/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/session_with_dependency/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/session_with_dependency/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/session_with_dependency/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/simple_hero_api/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/simple_hero_api/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/simple_hero_api/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/teams/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/teams/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/teams/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/update/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/update/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/update/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/update/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/update/tutorial002_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/indexes/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/indexes/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/indexes/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/indexes/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/indexes/tutorial002_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/insert/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/insert/annotations/en/tutorial003.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/insert/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/insert/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/insert/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/insert/tutorial002_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/insert/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/insert/tutorial003_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/many_to_many/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/many_to_many/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/many_to_many/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/many_to_many/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/many_to_many/tutorial002_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/many_to_many/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/many_to_many/tutorial003_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/offset_and_limit/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/offset_and_limit/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/offset_and_limit/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/offset_and_limit/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/offset_and_limit/tutorial002_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/offset_and_limit/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/offset_and_limit/tutorial003_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/offset_and_limit/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/offset_and_limit/tutorial004_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial002_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial003_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial004_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial005_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial005_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial006_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial006_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial007_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial007_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial008_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial008_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial009_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial009_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/back_populates/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/back_populates/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/back_populates/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/back_populates/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/back_populates/tutorial002_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/back_populates/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/back_populates/tutorial003_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial002_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial003_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial004_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial005_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial005_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/create_and_update_relationships/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/create_and_update_relationships/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/create_and_update_relationships/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/define_relationship_attributes/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/define_relationship_attributes/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/define_relationship_attributes/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/read_relationships/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/read_relationships/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/read_relationships/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/read_relationships/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/read_relationships/tutorial002_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/annotations/en/tutorial002.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/tutorial002_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/tutorial003_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/tutorial004_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/annotations/en/tutorial002.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/annotations/en/tutorial004.md +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/tutorial002_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/tutorial003_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/tutorial004_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial001_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial001_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial002_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial002_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial003_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial003_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial004_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial004_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial005_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial005_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial006_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial006_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial007_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial007_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial008_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial008_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial009_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial009_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial010_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial010_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial011_py310.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial011_py39.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/pdm_build.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/scripts/deploy_docs_status.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/scripts/docs.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/scripts/format.sh +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/scripts/generate_select.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/scripts/lint.sh +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/scripts/mkdocs_hooks.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/scripts/test.sh +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/_compat.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/default.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/ext/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/ext/asyncio/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/ext/asyncio/session.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/orm/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/orm/session.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/pool/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/py.typed +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/sql/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/sql/_expression_select_cls.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/sql/_expression_select_gen.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/sql/_expression_select_gen.py.jinja2 +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/sql/base.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/sql/sqltypes.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/conftest.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_advanced/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_advanced/test_decimal/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_advanced/test_decimal/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_advanced/test_uuid/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_advanced/test_uuid/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_advanced/test_uuid/test_tutorial002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_aliases.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_annotated_uuid.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_default.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_deprecations.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_enums.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_enums_models.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_field_sa_args_kwargs.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_field_sa_relationship.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_fields_set.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_instance_no_args.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_missing_type.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_nullable.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_ondelete_raises.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_pydantic/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_query.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_select_gen.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_select_typing.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_sqlalchemy_type_errors.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_automatic_id_none_refresh/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_automatic_id_none_refresh/test_tutorial001_tutorial002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_code_structure/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_code_structure/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_code_structure/test_tutorial002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_create_connected_tables/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_create_connected_tables/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_delete/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_delete/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_insert/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_insert/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_select/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_select/test_tutorial001_tutorial002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_select/test_tutorial003.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_select/test_tutorial004.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_select/test_tutorial005.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_update/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_update/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_create_db_and_table/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_create_db_and_table/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_create_db_and_table/test_tutorial002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_create_db_and_table/test_tutorial003.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_delete/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_delete/test_tutorial001_tutorial002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_app_testing/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests003.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests004.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests005.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests006.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests_main.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_delete/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_limit_and_offset/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_multiple_models/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_read_one/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_relationships/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_response_model/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_session_with_dependency/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_simple_hero_api/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_teams/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_update/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_indexes/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_indexes/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_indexes/test_tutorial002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_insert/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_insert/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_insert/test_tutorial002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_insert/test_tutorial003.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_limit_and_offset/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_limit_and_offset/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_limit_and_offset/test_tutorial002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_limit_and_offset/test_tutorial003.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_limit_and_offset/test_tutorial004.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_many_to_many/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_many_to_many/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_many_to_many/test_tutorial002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_many_to_many/test_tutorial003.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/test_tutorial002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/test_tutorial003.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/test_tutorial004.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/test_tutorial005.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/test_tutorial006.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/test_tutorial007.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/test_tutorial008.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/test_tutorial009.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_back_populates/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial003.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_create_and_update_relationships/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_create_and_update_relationships/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_define_relationship_attributes/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_define_relationship_attributes/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial003.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial004.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial005.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_read_relationships/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_read_relationships/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_read_relationships/test_tutorial002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_select/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_select/test_tutorial001_tutorial002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_select/test_tutorial003_tutorial004.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_update/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_update/test_tutorial001_tutorial002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_update/test_tutorial003_tutorial004.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/__init__.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial001.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial002.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial003.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial004.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial005.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial006.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial007.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial008.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial009.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial010.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial011.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_update.py +0 -0
- {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_validation.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlmodel
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.32
|
|
4
4
|
Summary: SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.
|
|
5
5
|
Author-Email: =?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= <tiangolo@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -41,7 +41,7 @@ dependencies = [
|
|
|
41
41
|
"SQLAlchemy >=2.0.14,<2.1.0",
|
|
42
42
|
"pydantic>=2.7.0",
|
|
43
43
|
]
|
|
44
|
-
version = "0.0.
|
|
44
|
+
version = "0.0.32"
|
|
45
45
|
|
|
46
46
|
[project.urls]
|
|
47
47
|
Homepage = "https://github.com/fastapi/sqlmodel"
|
|
@@ -52,6 +52,48 @@ Changelog = "https://sqlmodel.tiangolo.com/release-notes/"
|
|
|
52
52
|
|
|
53
53
|
[project.optional-dependencies]
|
|
54
54
|
|
|
55
|
+
[dependency-groups]
|
|
56
|
+
dev = [
|
|
57
|
+
{ include-group = "docs" },
|
|
58
|
+
{ include-group = "tests" },
|
|
59
|
+
"prek>=0.2.24,<1.0.0",
|
|
60
|
+
]
|
|
61
|
+
docs = [
|
|
62
|
+
"black>=22.10",
|
|
63
|
+
"cairosvg==2.8.2",
|
|
64
|
+
"griffe-typingdoc==0.3.0",
|
|
65
|
+
"griffe-warnings-deprecated==1.1.0",
|
|
66
|
+
"markdown-include-variants==0.0.8",
|
|
67
|
+
"mdx-include>=1.4.1,<2.0.0",
|
|
68
|
+
"mkdocs-macros-plugin==1.5.0",
|
|
69
|
+
"mkdocs-material==9.7.1",
|
|
70
|
+
"mkdocs-redirects>=1.2.1,<1.3.0",
|
|
71
|
+
"mkdocstrings[python]==0.30.1",
|
|
72
|
+
"pillow==11.3.0",
|
|
73
|
+
"pyyaml>=5.3.1,<7.0.0",
|
|
74
|
+
"typer==0.21.1",
|
|
75
|
+
]
|
|
76
|
+
github-actions = [
|
|
77
|
+
"httpx>=0.27.0,<0.29.0",
|
|
78
|
+
"pydantic>=2.5.3,<3.0.0",
|
|
79
|
+
"pydantic-settings>=2.1.0,<3.0.0",
|
|
80
|
+
"pygithub>=2.3.0,<3.0.0",
|
|
81
|
+
"smokeshow>=0.5.0",
|
|
82
|
+
]
|
|
83
|
+
tests = [
|
|
84
|
+
"black>=22.10",
|
|
85
|
+
"coverage[toml]>=6.2,<8.0",
|
|
86
|
+
"dirty-equals==0.11",
|
|
87
|
+
"fastapi>=0.103.2",
|
|
88
|
+
"httpx==0.28.1",
|
|
89
|
+
"jinja2==3.1.6",
|
|
90
|
+
"mypy==1.19.1",
|
|
91
|
+
"pre-commit>=2.17.0,<5.0.0",
|
|
92
|
+
"pytest>=7.0.1,<9.0.0",
|
|
93
|
+
"ruff==0.14.14",
|
|
94
|
+
"typing-extensions==4.15.0",
|
|
95
|
+
]
|
|
96
|
+
|
|
55
97
|
[tool.pdm]
|
|
56
98
|
distribution = true
|
|
57
99
|
|
|
@@ -63,7 +105,6 @@ path = "sqlmodel/__init__.py"
|
|
|
63
105
|
source-includes = [
|
|
64
106
|
"tests/",
|
|
65
107
|
"docs_src/",
|
|
66
|
-
"requirements*.txt",
|
|
67
108
|
"scripts/",
|
|
68
109
|
"sqlmodel/sql/expression.py.jinja2",
|
|
69
110
|
]
|
|
@@ -5,6 +5,7 @@ import ipaddress
|
|
|
5
5
|
import uuid
|
|
6
6
|
import weakref
|
|
7
7
|
from collections.abc import Mapping, Sequence, Set
|
|
8
|
+
from dataclasses import dataclass
|
|
8
9
|
from datetime import date, datetime, time, timedelta
|
|
9
10
|
from decimal import Decimal
|
|
10
11
|
from enum import Enum
|
|
@@ -14,6 +15,7 @@ from typing import (
|
|
|
14
15
|
Any,
|
|
15
16
|
Callable,
|
|
16
17
|
ClassVar,
|
|
18
|
+
Literal,
|
|
17
19
|
Optional,
|
|
18
20
|
TypeVar,
|
|
19
21
|
Union,
|
|
@@ -48,7 +50,7 @@ from sqlalchemy.orm.decl_api import DeclarativeMeta
|
|
|
48
50
|
from sqlalchemy.orm.instrumentation import is_instrumented
|
|
49
51
|
from sqlalchemy.sql.schema import MetaData
|
|
50
52
|
from sqlalchemy.sql.sqltypes import LargeBinary, Time, Uuid
|
|
51
|
-
from typing_extensions import
|
|
53
|
+
from typing_extensions import TypeAlias, deprecated, get_origin
|
|
52
54
|
|
|
53
55
|
from ._compat import ( # type: ignore[attr-defined]
|
|
54
56
|
PYDANTIC_MINOR_VERSION,
|
|
@@ -199,6 +201,38 @@ class RelationshipInfo(Representation):
|
|
|
199
201
|
self.sa_relationship_kwargs = sa_relationship_kwargs
|
|
200
202
|
|
|
201
203
|
|
|
204
|
+
@dataclass
|
|
205
|
+
class FieldInfoMetadata:
|
|
206
|
+
primary_key: Union[bool, UndefinedType] = Undefined
|
|
207
|
+
nullable: Union[bool, UndefinedType] = Undefined
|
|
208
|
+
foreign_key: Any = Undefined
|
|
209
|
+
ondelete: Union[OnDeleteType, UndefinedType] = Undefined
|
|
210
|
+
unique: Union[bool, UndefinedType] = Undefined
|
|
211
|
+
index: Union[bool, UndefinedType] = Undefined
|
|
212
|
+
sa_type: Union[type[Any], UndefinedType] = Undefined
|
|
213
|
+
sa_column: Union[Column[Any], UndefinedType] = Undefined
|
|
214
|
+
sa_column_args: Union[Sequence[Any], UndefinedType] = Undefined
|
|
215
|
+
sa_column_kwargs: Union[Mapping[str, Any], UndefinedType] = Undefined
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
def _get_sqlmodel_field_metadata(field_info: Any) -> Optional[FieldInfoMetadata]:
|
|
219
|
+
metadata_items = getattr(field_info, "metadata", None)
|
|
220
|
+
if metadata_items:
|
|
221
|
+
for meta in metadata_items:
|
|
222
|
+
if isinstance(meta, FieldInfoMetadata):
|
|
223
|
+
return meta
|
|
224
|
+
return None
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
def _get_sqlmodel_field_value(
|
|
228
|
+
field_info: Any, attribute: str, default: Any = Undefined
|
|
229
|
+
) -> Any:
|
|
230
|
+
metadata = _get_sqlmodel_field_metadata(field_info)
|
|
231
|
+
if metadata is not None and hasattr(metadata, attribute):
|
|
232
|
+
return getattr(metadata, attribute)
|
|
233
|
+
return getattr(field_info, attribute, default)
|
|
234
|
+
|
|
235
|
+
|
|
202
236
|
# include sa_type, sa_column_args, sa_column_kwargs
|
|
203
237
|
@overload
|
|
204
238
|
def Field(
|
|
@@ -422,6 +456,20 @@ def Field(
|
|
|
422
456
|
default_factory=default_factory,
|
|
423
457
|
**field_info_kwargs,
|
|
424
458
|
)
|
|
459
|
+
field_metadata = FieldInfoMetadata(
|
|
460
|
+
primary_key=primary_key,
|
|
461
|
+
nullable=nullable,
|
|
462
|
+
foreign_key=foreign_key,
|
|
463
|
+
ondelete=ondelete,
|
|
464
|
+
unique=unique,
|
|
465
|
+
index=index,
|
|
466
|
+
sa_type=sa_type,
|
|
467
|
+
sa_column=sa_column,
|
|
468
|
+
sa_column_args=sa_column_args,
|
|
469
|
+
sa_column_kwargs=sa_column_kwargs,
|
|
470
|
+
)
|
|
471
|
+
if hasattr(field_info, "metadata"):
|
|
472
|
+
field_info.metadata.append(field_metadata)
|
|
425
473
|
return field_info
|
|
426
474
|
|
|
427
475
|
|
|
@@ -636,7 +684,7 @@ class SQLModelMetaclass(ModelMetaclass, DeclarativeMeta):
|
|
|
636
684
|
|
|
637
685
|
def get_sqlalchemy_type(field: Any) -> Any:
|
|
638
686
|
field_info = field
|
|
639
|
-
sa_type =
|
|
687
|
+
sa_type = _get_sqlmodel_field_value(field_info, "sa_type", Undefined) # noqa: B009
|
|
640
688
|
if sa_type is not Undefined:
|
|
641
689
|
return sa_type
|
|
642
690
|
|
|
@@ -690,39 +738,39 @@ def get_sqlalchemy_type(field: Any) -> Any:
|
|
|
690
738
|
|
|
691
739
|
def get_column_from_field(field: Any) -> Column: # type: ignore
|
|
692
740
|
field_info = field
|
|
693
|
-
sa_column =
|
|
741
|
+
sa_column = _get_sqlmodel_field_value(field_info, "sa_column", Undefined)
|
|
694
742
|
if isinstance(sa_column, Column):
|
|
695
743
|
return sa_column
|
|
696
744
|
sa_type = get_sqlalchemy_type(field)
|
|
697
|
-
primary_key =
|
|
745
|
+
primary_key = _get_sqlmodel_field_value(field_info, "primary_key", Undefined)
|
|
698
746
|
if primary_key is Undefined:
|
|
699
747
|
primary_key = False
|
|
700
|
-
index =
|
|
748
|
+
index = _get_sqlmodel_field_value(field_info, "index", Undefined)
|
|
701
749
|
if index is Undefined:
|
|
702
750
|
index = False
|
|
703
751
|
nullable = not primary_key and is_field_noneable(field)
|
|
704
752
|
# Override derived nullability if the nullable property is set explicitly
|
|
705
753
|
# on the field
|
|
706
|
-
field_nullable =
|
|
754
|
+
field_nullable = _get_sqlmodel_field_value(field_info, "nullable", Undefined)
|
|
707
755
|
if field_nullable is not Undefined:
|
|
708
756
|
assert not isinstance(field_nullable, UndefinedType)
|
|
709
757
|
nullable = field_nullable
|
|
710
758
|
args = []
|
|
711
|
-
foreign_key =
|
|
759
|
+
foreign_key = _get_sqlmodel_field_value(field_info, "foreign_key", Undefined)
|
|
712
760
|
if foreign_key is Undefined:
|
|
713
761
|
foreign_key = None
|
|
714
|
-
unique =
|
|
762
|
+
unique = _get_sqlmodel_field_value(field_info, "unique", Undefined)
|
|
715
763
|
if unique is Undefined:
|
|
716
764
|
unique = False
|
|
717
765
|
if foreign_key:
|
|
718
|
-
|
|
766
|
+
ondelete_value = _get_sqlmodel_field_value(field_info, "ondelete", Undefined)
|
|
767
|
+
if ondelete_value is Undefined:
|
|
768
|
+
ondelete_value = None
|
|
769
|
+
if ondelete_value == "SET NULL" and not nullable:
|
|
719
770
|
raise RuntimeError('ondelete="SET NULL" requires nullable=True')
|
|
720
771
|
assert isinstance(foreign_key, str)
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
ondelete = None
|
|
724
|
-
assert isinstance(ondelete, (str, type(None))) # for typing
|
|
725
|
-
args.append(ForeignKey(foreign_key, ondelete=ondelete))
|
|
772
|
+
assert isinstance(ondelete_value, (str, type(None))) # for typing
|
|
773
|
+
args.append(ForeignKey(foreign_key, ondelete=ondelete_value))
|
|
726
774
|
kwargs = {
|
|
727
775
|
"primary_key": primary_key,
|
|
728
776
|
"nullable": nullable,
|
|
@@ -736,10 +784,12 @@ def get_column_from_field(field: Any) -> Column: # type: ignore
|
|
|
736
784
|
sa_default = field_info.default
|
|
737
785
|
if sa_default is not Undefined:
|
|
738
786
|
kwargs["default"] = sa_default
|
|
739
|
-
sa_column_args =
|
|
787
|
+
sa_column_args = _get_sqlmodel_field_value(field_info, "sa_column_args", Undefined)
|
|
740
788
|
if sa_column_args is not Undefined:
|
|
741
789
|
args.extend(list(cast(Sequence[Any], sa_column_args)))
|
|
742
|
-
sa_column_kwargs =
|
|
790
|
+
sa_column_kwargs = _get_sqlmodel_field_value(
|
|
791
|
+
field_info, "sa_column_kwargs", Undefined
|
|
792
|
+
)
|
|
743
793
|
if sa_column_kwargs is not Undefined:
|
|
744
794
|
kwargs.update(cast(dict[Any, Any], sa_column_kwargs))
|
|
745
795
|
return Column(sa_type, *args, **kwargs) # type: ignore
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from collections.abc import Iterable, Mapping, Sequence
|
|
2
2
|
from typing import (
|
|
3
3
|
Any,
|
|
4
|
+
Literal,
|
|
4
5
|
Optional,
|
|
5
6
|
TypeVar,
|
|
6
7
|
Union,
|
|
@@ -34,7 +35,6 @@ from sqlalchemy.sql.elements import (
|
|
|
34
35
|
UnaryExpression,
|
|
35
36
|
)
|
|
36
37
|
from sqlalchemy.sql.type_api import TypeEngine
|
|
37
|
-
from typing_extensions import Literal
|
|
38
38
|
|
|
39
39
|
from ._expression_select_cls import Select as Select
|
|
40
40
|
from ._expression_select_cls import SelectOfScalar as SelectOfScalar
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Optional
|
|
1
|
+
from typing import Annotated, Optional
|
|
2
2
|
|
|
3
3
|
import pytest
|
|
4
4
|
from sqlalchemy import Column, Integer, String
|
|
@@ -17,6 +17,17 @@ def test_sa_column_takes_precedence() -> None:
|
|
|
17
17
|
assert isinstance(Item.id.type, String) # type: ignore
|
|
18
18
|
|
|
19
19
|
|
|
20
|
+
def test_sa_column_with_annotated_metadata() -> None:
|
|
21
|
+
class Item(SQLModel, table=True):
|
|
22
|
+
id: Annotated[Optional[int], "meta"] = Field(
|
|
23
|
+
default=None,
|
|
24
|
+
sa_column=Column(String, primary_key=True, nullable=False),
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
assert Item.id.nullable is False # type: ignore
|
|
28
|
+
assert isinstance(Item.id.type, String) # type: ignore
|
|
29
|
+
|
|
30
|
+
|
|
20
31
|
def test_sa_column_no_sa_args() -> None:
|
|
21
32
|
with pytest.raises(RuntimeError):
|
|
22
33
|
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Annotated, Optional
|
|
4
|
+
|
|
5
|
+
from sqlmodel import Field, Session, SQLModel, create_engine, select
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def test_model_with_future_annotations(clear_sqlmodel):
|
|
9
|
+
class Hero(SQLModel, table=True):
|
|
10
|
+
id: Annotated[Optional[int], Field(primary_key=True)] = None
|
|
11
|
+
name: str
|
|
12
|
+
secret_name: str
|
|
13
|
+
age: Optional[int] = None
|
|
14
|
+
|
|
15
|
+
hero = Hero(name="Deadpond", secret_name="Dive Wilson", age=25)
|
|
16
|
+
|
|
17
|
+
engine = create_engine("sqlite://")
|
|
18
|
+
SQLModel.metadata.create_all(engine)
|
|
19
|
+
|
|
20
|
+
with Session(engine) as session:
|
|
21
|
+
session.add(hero)
|
|
22
|
+
session.commit()
|
|
23
|
+
session.refresh(hero)
|
|
24
|
+
|
|
25
|
+
assert hero.id is not None
|
|
26
|
+
assert hero.name == "Deadpond"
|
|
27
|
+
assert hero.secret_name == "Dive Wilson"
|
|
28
|
+
assert hero.age == 25
|
|
29
|
+
|
|
30
|
+
with Session(engine) as session:
|
|
31
|
+
heroes = session.exec(select(Hero)).all()
|
|
32
|
+
assert len(heroes) == 1
|
|
33
|
+
assert heroes[0].name == "Deadpond"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_model_with_string_annotations(clear_sqlmodel):
|
|
37
|
+
class Team(SQLModel, table=True):
|
|
38
|
+
id: Annotated[Optional[int], Field(primary_key=True)] = None
|
|
39
|
+
name: str
|
|
40
|
+
|
|
41
|
+
class Player(SQLModel, table=True):
|
|
42
|
+
id: Annotated[Optional[int], Field(primary_key=True)] = None
|
|
43
|
+
name: str
|
|
44
|
+
team_id: Annotated[Optional[int], Field(foreign_key="team.id")] = None
|
|
45
|
+
|
|
46
|
+
engine = create_engine("sqlite://")
|
|
47
|
+
SQLModel.metadata.create_all(engine)
|
|
48
|
+
|
|
49
|
+
team = Team(name="Champions")
|
|
50
|
+
player = Player(name="Alice", team_id=None)
|
|
51
|
+
|
|
52
|
+
with Session(engine) as session:
|
|
53
|
+
session.add(team)
|
|
54
|
+
session.commit()
|
|
55
|
+
session.refresh(team)
|
|
56
|
+
|
|
57
|
+
player.team_id = team.id
|
|
58
|
+
session.add(player)
|
|
59
|
+
session.commit()
|
|
60
|
+
session.refresh(player)
|
|
61
|
+
|
|
62
|
+
assert team.id is not None
|
|
63
|
+
assert player.team_id == team.id
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Optional
|
|
1
|
+
from typing import Annotated, Optional
|
|
2
2
|
|
|
3
3
|
import pytest
|
|
4
4
|
from sqlalchemy.exc import IntegrityError
|
|
@@ -125,3 +125,94 @@ def test_sa_relationship_property(clear_sqlmodel):
|
|
|
125
125
|
# The next statement should not raise an AttributeError
|
|
126
126
|
assert hero_rusty_man.team
|
|
127
127
|
assert hero_rusty_man.team.name == "Preventers"
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def test_composite_primary_key(clear_sqlmodel):
|
|
131
|
+
class UserPermission(SQLModel, table=True):
|
|
132
|
+
user_id: int = Field(primary_key=True)
|
|
133
|
+
resource_id: int = Field(primary_key=True)
|
|
134
|
+
permission: str
|
|
135
|
+
|
|
136
|
+
engine = create_engine("sqlite://")
|
|
137
|
+
SQLModel.metadata.create_all(engine)
|
|
138
|
+
|
|
139
|
+
pk_column_names = {column.name for column in UserPermission.__table__.primary_key}
|
|
140
|
+
assert pk_column_names == {"user_id", "resource_id"}
|
|
141
|
+
|
|
142
|
+
with Session(engine) as session:
|
|
143
|
+
perm1 = UserPermission(user_id=1, resource_id=1, permission="read")
|
|
144
|
+
perm2 = UserPermission(user_id=1, resource_id=2, permission="write")
|
|
145
|
+
session.add(perm1)
|
|
146
|
+
session.add(perm2)
|
|
147
|
+
session.commit()
|
|
148
|
+
|
|
149
|
+
with pytest.raises(IntegrityError):
|
|
150
|
+
with Session(engine) as session:
|
|
151
|
+
perm3 = UserPermission(user_id=1, resource_id=1, permission="admin")
|
|
152
|
+
session.add(perm3)
|
|
153
|
+
session.commit()
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def test_composite_primary_key_and_validator(clear_sqlmodel):
|
|
157
|
+
from pydantic import AfterValidator
|
|
158
|
+
|
|
159
|
+
def validate_resource_id(value: int) -> int:
|
|
160
|
+
if value < 1:
|
|
161
|
+
raise ValueError("Resource ID must be positive")
|
|
162
|
+
return value
|
|
163
|
+
|
|
164
|
+
class UserPermission(SQLModel, table=True):
|
|
165
|
+
user_id: int = Field(primary_key=True)
|
|
166
|
+
resource_id: Annotated[int, AfterValidator(validate_resource_id)] = Field(
|
|
167
|
+
primary_key=True
|
|
168
|
+
)
|
|
169
|
+
permission: str
|
|
170
|
+
|
|
171
|
+
engine = create_engine("sqlite://")
|
|
172
|
+
SQLModel.metadata.create_all(engine)
|
|
173
|
+
|
|
174
|
+
pk_column_names = {column.name for column in UserPermission.__table__.primary_key}
|
|
175
|
+
assert pk_column_names == {"user_id", "resource_id"}
|
|
176
|
+
|
|
177
|
+
with Session(engine) as session:
|
|
178
|
+
perm1 = UserPermission(user_id=1, resource_id=1, permission="read")
|
|
179
|
+
perm2 = UserPermission(user_id=1, resource_id=2, permission="write")
|
|
180
|
+
session.add(perm1)
|
|
181
|
+
session.add(perm2)
|
|
182
|
+
session.commit()
|
|
183
|
+
|
|
184
|
+
with pytest.raises(IntegrityError):
|
|
185
|
+
with Session(engine) as session:
|
|
186
|
+
perm3 = UserPermission(user_id=1, resource_id=1, permission="admin")
|
|
187
|
+
session.add(perm3)
|
|
188
|
+
session.commit()
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def test_foreign_key_ondelete_with_annotated(clear_sqlmodel):
|
|
192
|
+
from pydantic import AfterValidator
|
|
193
|
+
|
|
194
|
+
def ensure_positive(value: int) -> int:
|
|
195
|
+
if value < 0:
|
|
196
|
+
raise ValueError("Team ID must be positive")
|
|
197
|
+
return value
|
|
198
|
+
|
|
199
|
+
class Team(SQLModel, table=True):
|
|
200
|
+
id: int = Field(primary_key=True)
|
|
201
|
+
name: str
|
|
202
|
+
|
|
203
|
+
class Hero(SQLModel, table=True):
|
|
204
|
+
id: int = Field(primary_key=True)
|
|
205
|
+
team_id: Annotated[int, AfterValidator(ensure_positive)] = Field(
|
|
206
|
+
foreign_key="team.id",
|
|
207
|
+
ondelete="CASCADE",
|
|
208
|
+
)
|
|
209
|
+
name: str
|
|
210
|
+
|
|
211
|
+
engine = create_engine("sqlite://")
|
|
212
|
+
SQLModel.metadata.create_all(engine)
|
|
213
|
+
|
|
214
|
+
team_id_column = Hero.__table__.c.team_id # type: ignore[attr-defined]
|
|
215
|
+
foreign_keys = list(team_id_column.foreign_keys)
|
|
216
|
+
assert len(foreign_keys) == 1
|
|
217
|
+
assert foreign_keys[0].ondelete == "CASCADE"
|
|
218
|
+
assert team_id_column.nullable is False
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
from decimal import Decimal
|
|
2
|
-
from typing import Optional, Union
|
|
2
|
+
from typing import Literal, Optional, Union
|
|
3
3
|
|
|
4
4
|
import pytest
|
|
5
5
|
from pydantic import ValidationError
|
|
6
6
|
from sqlmodel import Field, SQLModel
|
|
7
|
-
from typing_extensions import Literal
|
|
8
7
|
|
|
9
8
|
|
|
10
9
|
def test_decimal():
|
{sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_delete/test_tutorial001.py
RENAMED
|
@@ -2,7 +2,6 @@ import importlib
|
|
|
2
2
|
from types import ModuleType
|
|
3
3
|
|
|
4
4
|
import pytest
|
|
5
|
-
from dirty_equals import IsDict
|
|
6
5
|
from fastapi.testclient import TestClient
|
|
7
6
|
from sqlmodel import create_engine
|
|
8
7
|
from sqlmodel.pool import StaticPool
|
|
@@ -300,16 +299,10 @@ def test_tutorial(module: ModuleType):
|
|
|
300
299
|
"properties": {
|
|
301
300
|
"name": {"title": "Name", "type": "string"},
|
|
302
301
|
"secret_name": {"title": "Secret Name", "type": "string"},
|
|
303
|
-
"age":
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
}
|
|
308
|
-
)
|
|
309
|
-
| IsDict(
|
|
310
|
-
# TODO: remove when deprecating Pydantic v1
|
|
311
|
-
{"title": "Age", "type": "integer"}
|
|
312
|
-
),
|
|
302
|
+
"age": {
|
|
303
|
+
"title": "Age",
|
|
304
|
+
"anyOf": [{"type": "integer"}, {"type": "null"}],
|
|
305
|
+
},
|
|
313
306
|
},
|
|
314
307
|
},
|
|
315
308
|
"HeroPublic": {
|
|
@@ -319,16 +312,10 @@ def test_tutorial(module: ModuleType):
|
|
|
319
312
|
"properties": {
|
|
320
313
|
"name": {"title": "Name", "type": "string"},
|
|
321
314
|
"secret_name": {"title": "Secret Name", "type": "string"},
|
|
322
|
-
"age":
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
}
|
|
327
|
-
)
|
|
328
|
-
| IsDict(
|
|
329
|
-
# TODO: remove when deprecating Pydantic v1
|
|
330
|
-
{"title": "Age", "type": "integer"}
|
|
331
|
-
),
|
|
315
|
+
"age": {
|
|
316
|
+
"title": "Age",
|
|
317
|
+
"anyOf": [{"type": "integer"}, {"type": "null"}],
|
|
318
|
+
},
|
|
332
319
|
"id": {"title": "Id", "type": "integer"},
|
|
333
320
|
},
|
|
334
321
|
},
|
|
@@ -336,36 +323,18 @@ def test_tutorial(module: ModuleType):
|
|
|
336
323
|
"title": "HeroUpdate",
|
|
337
324
|
"type": "object",
|
|
338
325
|
"properties": {
|
|
339
|
-
"name":
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
"title": "Secret Name",
|
|
352
|
-
"anyOf": [{"type": "string"}, {"type": "null"}],
|
|
353
|
-
}
|
|
354
|
-
)
|
|
355
|
-
| IsDict(
|
|
356
|
-
# TODO: remove when deprecating Pydantic v1
|
|
357
|
-
{"title": "Secret Name", "type": "string"}
|
|
358
|
-
),
|
|
359
|
-
"age": IsDict(
|
|
360
|
-
{
|
|
361
|
-
"title": "Age",
|
|
362
|
-
"anyOf": [{"type": "integer"}, {"type": "null"}],
|
|
363
|
-
}
|
|
364
|
-
)
|
|
365
|
-
| IsDict(
|
|
366
|
-
# TODO: remove when deprecating Pydantic v1
|
|
367
|
-
{"title": "Age", "type": "integer"}
|
|
368
|
-
),
|
|
326
|
+
"name": {
|
|
327
|
+
"title": "Name",
|
|
328
|
+
"anyOf": [{"type": "string"}, {"type": "null"}],
|
|
329
|
+
},
|
|
330
|
+
"secret_name": {
|
|
331
|
+
"title": "Secret Name",
|
|
332
|
+
"anyOf": [{"type": "string"}, {"type": "null"}],
|
|
333
|
+
},
|
|
334
|
+
"age": {
|
|
335
|
+
"title": "Age",
|
|
336
|
+
"anyOf": [{"type": "integer"}, {"type": "null"}],
|
|
337
|
+
},
|
|
369
338
|
},
|
|
370
339
|
},
|
|
371
340
|
"ValidationError": {
|
|
@@ -2,7 +2,6 @@ import importlib
|
|
|
2
2
|
from types import ModuleType
|
|
3
3
|
|
|
4
4
|
import pytest
|
|
5
|
-
from dirty_equals import IsDict
|
|
6
5
|
from fastapi.testclient import TestClient
|
|
7
6
|
from sqlmodel import create_engine
|
|
8
7
|
from sqlmodel.pool import StaticPool
|
|
@@ -235,16 +234,10 @@ def test_tutorial(module: ModuleType):
|
|
|
235
234
|
"properties": {
|
|
236
235
|
"name": {"title": "Name", "type": "string"},
|
|
237
236
|
"secret_name": {"title": "Secret Name", "type": "string"},
|
|
238
|
-
"age":
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
}
|
|
243
|
-
)
|
|
244
|
-
| IsDict(
|
|
245
|
-
# TODO: remove when deprecating Pydantic v1
|
|
246
|
-
{"title": "Age", "type": "integer"}
|
|
247
|
-
),
|
|
237
|
+
"age": {
|
|
238
|
+
"title": "Age",
|
|
239
|
+
"anyOf": [{"type": "integer"}, {"type": "null"}],
|
|
240
|
+
},
|
|
248
241
|
},
|
|
249
242
|
},
|
|
250
243
|
"HeroPublic": {
|
|
@@ -254,16 +247,10 @@ def test_tutorial(module: ModuleType):
|
|
|
254
247
|
"properties": {
|
|
255
248
|
"name": {"title": "Name", "type": "string"},
|
|
256
249
|
"secret_name": {"title": "Secret Name", "type": "string"},
|
|
257
|
-
"age":
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
}
|
|
262
|
-
)
|
|
263
|
-
| IsDict(
|
|
264
|
-
# TODO: remove when deprecating Pydantic v1
|
|
265
|
-
{"title": "Age", "type": "integer"}
|
|
266
|
-
),
|
|
250
|
+
"age": {
|
|
251
|
+
"title": "Age",
|
|
252
|
+
"anyOf": [{"type": "integer"}, {"type": "null"}],
|
|
253
|
+
},
|
|
267
254
|
"id": {"title": "Id", "type": "integer"},
|
|
268
255
|
},
|
|
269
256
|
},
|
|
@@ -2,7 +2,6 @@ import importlib
|
|
|
2
2
|
from types import ModuleType
|
|
3
3
|
|
|
4
4
|
import pytest
|
|
5
|
-
from dirty_equals import IsDict
|
|
6
5
|
from fastapi.testclient import TestClient
|
|
7
6
|
from sqlalchemy import inspect
|
|
8
7
|
from sqlalchemy.engine.reflection import Inspector
|
|
@@ -159,16 +158,10 @@ def test_tutorial(module: ModuleType):
|
|
|
159
158
|
"properties": {
|
|
160
159
|
"name": {"title": "Name", "type": "string"},
|
|
161
160
|
"secret_name": {"title": "Secret Name", "type": "string"},
|
|
162
|
-
"age":
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
}
|
|
167
|
-
)
|
|
168
|
-
| IsDict(
|
|
169
|
-
# TODO: remove when deprecating Pydantic v1
|
|
170
|
-
{"title": "Age", "type": "integer"}
|
|
171
|
-
),
|
|
161
|
+
"age": {
|
|
162
|
+
"title": "Age",
|
|
163
|
+
"anyOf": [{"type": "integer"}, {"type": "null"}],
|
|
164
|
+
},
|
|
172
165
|
},
|
|
173
166
|
},
|
|
174
167
|
"HeroPublic": {
|
|
@@ -179,16 +172,10 @@ def test_tutorial(module: ModuleType):
|
|
|
179
172
|
"id": {"title": "Id", "type": "integer"},
|
|
180
173
|
"name": {"title": "Name", "type": "string"},
|
|
181
174
|
"secret_name": {"title": "Secret Name", "type": "string"},
|
|
182
|
-
"age":
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
}
|
|
187
|
-
)
|
|
188
|
-
| IsDict(
|
|
189
|
-
# TODO: remove when deprecating Pydantic v1
|
|
190
|
-
{"title": "Age", "type": "integer"}
|
|
191
|
-
),
|
|
175
|
+
"age": {
|
|
176
|
+
"title": "Age",
|
|
177
|
+
"anyOf": [{"type": "integer"}, {"type": "null"}],
|
|
178
|
+
},
|
|
192
179
|
},
|
|
193
180
|
},
|
|
194
181
|
"ValidationError": {
|