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.
Files changed (450) hide show
  1. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/PKG-INFO +1 -1
  2. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/pyproject.toml +43 -2
  3. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/__init__.py +1 -1
  4. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/main.py +66 -16
  5. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/sql/expression.py +1 -1
  6. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_field_sa_column.py +12 -1
  7. sqlmodel-0.0.32/tests/test_future_annotations.py +63 -0
  8. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_main.py +92 -1
  9. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_pydantic/test_field.py +1 -2
  10. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_delete/test_tutorial001.py +20 -51
  11. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_limit_and_offset/test_tutorial001.py +8 -21
  12. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial001.py +8 -21
  13. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial002.py +8 -21
  14. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_read_one/test_tutorial001.py +8 -21
  15. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_relationships/test_tutorial001.py +58 -143
  16. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_response_model/test_tutorial001.py +8 -21
  17. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_session_with_dependency/test_tutorial001.py +20 -51
  18. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_simple_hero_api/test_tutorial001.py +8 -21
  19. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_teams/test_tutorial001.py +40 -101
  20. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_update/test_tutorial001.py +20 -51
  21. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_update/test_tutorial002.py +24 -61
  22. sqlmodel-0.0.31/requirements-docs-tests.txt +0 -2
  23. sqlmodel-0.0.31/requirements-docs.txt +0 -19
  24. sqlmodel-0.0.31/requirements-github-actions.txt +0 -5
  25. sqlmodel-0.0.31/requirements-tests.txt +0 -12
  26. sqlmodel-0.0.31/requirements.txt +0 -6
  27. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/LICENSE +0 -0
  28. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/README.md +0 -0
  29. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/__init__.py +0 -0
  30. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/advanced/__init__.py +0 -0
  31. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/advanced/decimal/__init__.py +0 -0
  32. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/advanced/decimal/tutorial001_py310.py +0 -0
  33. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/advanced/decimal/tutorial001_py39.py +0 -0
  34. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/advanced/uuid/__init__.py +0 -0
  35. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/advanced/uuid/tutorial001_py310.py +0 -0
  36. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/advanced/uuid/tutorial001_py39.py +0 -0
  37. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/advanced/uuid/tutorial002_py310.py +0 -0
  38. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/advanced/uuid/tutorial002_py39.py +0 -0
  39. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/__init__.py +0 -0
  40. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/automatic_id_none_refresh/__init__.py +0 -0
  41. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/automatic_id_none_refresh/annotations/en/tutorial002.md +0 -0
  42. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/automatic_id_none_refresh/tutorial001_py310.py +0 -0
  43. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/automatic_id_none_refresh/tutorial001_py39.py +0 -0
  44. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/automatic_id_none_refresh/tutorial002_py310.py +0 -0
  45. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/automatic_id_none_refresh/tutorial002_py39.py +0 -0
  46. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/__init__.py +0 -0
  47. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial001_py310/__init__.py +0 -0
  48. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial001_py310/app.py +0 -0
  49. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial001_py310/database.py +0 -0
  50. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial001_py310/models.py +0 -0
  51. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial001_py39/__init__.py +0 -0
  52. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial001_py39/app.py +0 -0
  53. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial001_py39/database.py +0 -0
  54. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial001_py39/models.py +0 -0
  55. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py310/__init__.py +0 -0
  56. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py310/app.py +0 -0
  57. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py310/database.py +0 -0
  58. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py310/hero_model.py +0 -0
  59. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py310/team_model.py +0 -0
  60. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py39/__init__.py +0 -0
  61. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py39/app.py +0 -0
  62. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py39/database.py +0 -0
  63. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py39/hero_model.py +0 -0
  64. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/code_structure/tutorial002_py39/team_model.py +0 -0
  65. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/__init__.py +0 -0
  66. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/create_tables/__init__.py +0 -0
  67. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/create_tables/tutorial001_py310.py +0 -0
  68. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/create_tables/tutorial001_py39.py +0 -0
  69. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/delete/__init__.py +0 -0
  70. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/delete/tutorial001_py310.py +0 -0
  71. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/delete/tutorial001_py39.py +0 -0
  72. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/insert/__init__.py +0 -0
  73. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/insert/tutorial001_py310.py +0 -0
  74. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/insert/tutorial001_py39.py +0 -0
  75. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/__init__.py +0 -0
  76. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial001_py310.py +0 -0
  77. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial001_py39.py +0 -0
  78. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial002_py310.py +0 -0
  79. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial002_py39.py +0 -0
  80. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial003_py310.py +0 -0
  81. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial003_py39.py +0 -0
  82. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial004_py310.py +0 -0
  83. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial004_py39.py +0 -0
  84. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial005_py310.py +0 -0
  85. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/select/tutorial005_py39.py +0 -0
  86. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/update/__init__.py +0 -0
  87. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/update/tutorial001_py310.py +0 -0
  88. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/connect/update/tutorial001_py39.py +0 -0
  89. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/create_db_and_table/__init__.py +0 -0
  90. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/create_db_and_table/annotations/en/tutorial003.md +0 -0
  91. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/create_db_and_table/tutorial001_py310.py +0 -0
  92. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/create_db_and_table/tutorial001_py39.py +0 -0
  93. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/create_db_and_table/tutorial002_py310.py +0 -0
  94. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/create_db_and_table/tutorial002_py39.py +0 -0
  95. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/create_db_and_table/tutorial003_py310.py +0 -0
  96. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/create_db_and_table/tutorial003_py39.py +0 -0
  97. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/delete/__init__.py +0 -0
  98. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/delete/annotations/en/tutorial002.md +0 -0
  99. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/delete/tutorial001_py310.py +0 -0
  100. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/delete/tutorial001_py39.py +0 -0
  101. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/delete/tutorial002_py310.py +0 -0
  102. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/delete/tutorial002_py39.py +0 -0
  103. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/__init__.py +0 -0
  104. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/__init__.py +0 -0
  105. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/__init__.py +0 -0
  106. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_001.md +0 -0
  107. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_002.md +0 -0
  108. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_003.md +0 -0
  109. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_004.md +0 -0
  110. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_005.md +0 -0
  111. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/annotations/en/test_main_006.md +0 -0
  112. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/main.py +0 -0
  113. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_extra_coverage.py +0 -0
  114. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main.py +0 -0
  115. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_001.py +0 -0
  116. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_002.py +0 -0
  117. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_003.py +0 -0
  118. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_004.py +0 -0
  119. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_005.py +0 -0
  120. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py310/test_main_006.py +0 -0
  121. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/__init__.py +0 -0
  122. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/annotations/en/test_main_001.md +0 -0
  123. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/annotations/en/test_main_002.md +0 -0
  124. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/annotations/en/test_main_003.md +0 -0
  125. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/annotations/en/test_main_004.md +0 -0
  126. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/annotations/en/test_main_005.md +0 -0
  127. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/annotations/en/test_main_006.md +0 -0
  128. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/main.py +0 -0
  129. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/test_extra_coverage.py +0 -0
  130. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/test_main.py +0 -0
  131. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/test_main_001.py +0 -0
  132. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/test_main_002.py +0 -0
  133. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/test_main_003.py +0 -0
  134. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/test_main_004.py +0 -0
  135. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/test_main_005.py +0 -0
  136. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/app_testing/tutorial001_py39/test_main_006.py +0 -0
  137. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/delete/__init__.py +0 -0
  138. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/delete/tutorial001_py310.py +0 -0
  139. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/delete/tutorial001_py39.py +0 -0
  140. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/limit_and_offset/__init__.py +0 -0
  141. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/limit_and_offset/tutorial001_py310.py +0 -0
  142. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/limit_and_offset/tutorial001_py39.py +0 -0
  143. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/multiple_models/__init__.py +0 -0
  144. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/multiple_models/tutorial001_py310.py +0 -0
  145. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/multiple_models/tutorial001_py39.py +0 -0
  146. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/multiple_models/tutorial002_py310.py +0 -0
  147. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/multiple_models/tutorial002_py39.py +0 -0
  148. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/read_one/__init__.py +0 -0
  149. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/read_one/tutorial001_py310.py +0 -0
  150. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/read_one/tutorial001_py39.py +0 -0
  151. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/relationships/__init__.py +0 -0
  152. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/relationships/tutorial001_py310.py +0 -0
  153. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/relationships/tutorial001_py39.py +0 -0
  154. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/response_model/__init__.py +0 -0
  155. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/response_model/tutorial001_py310.py +0 -0
  156. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/response_model/tutorial001_py39.py +0 -0
  157. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/session_with_dependency/__init__.py +0 -0
  158. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/session_with_dependency/tutorial001_py310.py +0 -0
  159. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/session_with_dependency/tutorial001_py39.py +0 -0
  160. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/simple_hero_api/__init__.py +0 -0
  161. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/simple_hero_api/tutorial001_py310.py +0 -0
  162. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/simple_hero_api/tutorial001_py39.py +0 -0
  163. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/teams/__init__.py +0 -0
  164. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/teams/tutorial001_py310.py +0 -0
  165. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/teams/tutorial001_py39.py +0 -0
  166. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/update/__init__.py +0 -0
  167. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/update/tutorial001_py310.py +0 -0
  168. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/update/tutorial001_py39.py +0 -0
  169. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/update/tutorial002_py310.py +0 -0
  170. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/fastapi/update/tutorial002_py39.py +0 -0
  171. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/indexes/__init__.py +0 -0
  172. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/indexes/tutorial001_py310.py +0 -0
  173. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/indexes/tutorial001_py39.py +0 -0
  174. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/indexes/tutorial002_py310.py +0 -0
  175. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/indexes/tutorial002_py39.py +0 -0
  176. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/insert/__init__.py +0 -0
  177. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/insert/annotations/en/tutorial003.md +0 -0
  178. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/insert/tutorial001_py310.py +0 -0
  179. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/insert/tutorial001_py39.py +0 -0
  180. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/insert/tutorial002_py310.py +0 -0
  181. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/insert/tutorial002_py39.py +0 -0
  182. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/insert/tutorial003_py310.py +0 -0
  183. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/insert/tutorial003_py39.py +0 -0
  184. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/many_to_many/__init__.py +0 -0
  185. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/many_to_many/tutorial001_py310.py +0 -0
  186. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/many_to_many/tutorial001_py39.py +0 -0
  187. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/many_to_many/tutorial002_py310.py +0 -0
  188. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/many_to_many/tutorial002_py39.py +0 -0
  189. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/many_to_many/tutorial003_py310.py +0 -0
  190. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/many_to_many/tutorial003_py39.py +0 -0
  191. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/offset_and_limit/__init__.py +0 -0
  192. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/offset_and_limit/tutorial001_py310.py +0 -0
  193. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/offset_and_limit/tutorial001_py39.py +0 -0
  194. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/offset_and_limit/tutorial002_py310.py +0 -0
  195. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/offset_and_limit/tutorial002_py39.py +0 -0
  196. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/offset_and_limit/tutorial003_py310.py +0 -0
  197. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/offset_and_limit/tutorial003_py39.py +0 -0
  198. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/offset_and_limit/tutorial004_py310.py +0 -0
  199. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/offset_and_limit/tutorial004_py39.py +0 -0
  200. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/__init__.py +0 -0
  201. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial001_py310.py +0 -0
  202. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial001_py39.py +0 -0
  203. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial002_py310.py +0 -0
  204. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial002_py39.py +0 -0
  205. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial003_py310.py +0 -0
  206. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial003_py39.py +0 -0
  207. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial004_py310.py +0 -0
  208. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial004_py39.py +0 -0
  209. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial005_py310.py +0 -0
  210. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial005_py39.py +0 -0
  211. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial006_py310.py +0 -0
  212. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial006_py39.py +0 -0
  213. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial007_py310.py +0 -0
  214. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial007_py39.py +0 -0
  215. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial008_py310.py +0 -0
  216. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial008_py39.py +0 -0
  217. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial009_py310.py +0 -0
  218. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/one/tutorial009_py39.py +0 -0
  219. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/__init__.py +0 -0
  220. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/back_populates/__init__.py +0 -0
  221. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/back_populates/tutorial001_py310.py +0 -0
  222. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/back_populates/tutorial001_py39.py +0 -0
  223. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/back_populates/tutorial002_py310.py +0 -0
  224. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/back_populates/tutorial002_py39.py +0 -0
  225. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/back_populates/tutorial003_py310.py +0 -0
  226. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/back_populates/tutorial003_py39.py +0 -0
  227. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/__init__.py +0 -0
  228. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial001_py310.py +0 -0
  229. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial001_py39.py +0 -0
  230. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial002_py310.py +0 -0
  231. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial002_py39.py +0 -0
  232. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial003_py310.py +0 -0
  233. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial003_py39.py +0 -0
  234. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial004_py310.py +0 -0
  235. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial004_py39.py +0 -0
  236. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial005_py310.py +0 -0
  237. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/cascade_delete_relationships/tutorial005_py39.py +0 -0
  238. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/create_and_update_relationships/__init__.py +0 -0
  239. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/create_and_update_relationships/tutorial001_py310.py +0 -0
  240. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/create_and_update_relationships/tutorial001_py39.py +0 -0
  241. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/define_relationship_attributes/__init__.py +0 -0
  242. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/define_relationship_attributes/tutorial001_py310.py +0 -0
  243. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/define_relationship_attributes/tutorial001_py39.py +0 -0
  244. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/read_relationships/__init__.py +0 -0
  245. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/read_relationships/tutorial001_py310.py +0 -0
  246. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/read_relationships/tutorial001_py39.py +0 -0
  247. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/read_relationships/tutorial002_py310.py +0 -0
  248. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/relationship_attributes/read_relationships/tutorial002_py39.py +0 -0
  249. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/__init__.py +0 -0
  250. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/annotations/en/tutorial002.md +0 -0
  251. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/tutorial001_py310.py +0 -0
  252. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/tutorial001_py39.py +0 -0
  253. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/tutorial002_py310.py +0 -0
  254. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/tutorial002_py39.py +0 -0
  255. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/tutorial003_py310.py +0 -0
  256. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/tutorial003_py39.py +0 -0
  257. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/tutorial004_py310.py +0 -0
  258. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/select/tutorial004_py39.py +0 -0
  259. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/__init__.py +0 -0
  260. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/annotations/en/tutorial002.md +0 -0
  261. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/annotations/en/tutorial004.md +0 -0
  262. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/tutorial001_py310.py +0 -0
  263. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/tutorial001_py39.py +0 -0
  264. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/tutorial002_py310.py +0 -0
  265. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/tutorial002_py39.py +0 -0
  266. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/tutorial003_py310.py +0 -0
  267. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/tutorial003_py39.py +0 -0
  268. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/tutorial004_py310.py +0 -0
  269. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/update/tutorial004_py39.py +0 -0
  270. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/__init__.py +0 -0
  271. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial001_py310.py +0 -0
  272. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial001_py39.py +0 -0
  273. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial002_py310.py +0 -0
  274. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial002_py39.py +0 -0
  275. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial003_py310.py +0 -0
  276. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial003_py39.py +0 -0
  277. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial004_py310.py +0 -0
  278. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial004_py39.py +0 -0
  279. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial005_py310.py +0 -0
  280. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial005_py39.py +0 -0
  281. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial006_py310.py +0 -0
  282. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial006_py39.py +0 -0
  283. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial007_py310.py +0 -0
  284. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial007_py39.py +0 -0
  285. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial008_py310.py +0 -0
  286. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial008_py39.py +0 -0
  287. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial009_py310.py +0 -0
  288. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial009_py39.py +0 -0
  289. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial010_py310.py +0 -0
  290. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial010_py39.py +0 -0
  291. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial011_py310.py +0 -0
  292. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/docs_src/tutorial/where/tutorial011_py39.py +0 -0
  293. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/pdm_build.py +0 -0
  294. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/scripts/deploy_docs_status.py +0 -0
  295. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/scripts/docs.py +0 -0
  296. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/scripts/format.sh +0 -0
  297. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/scripts/generate_select.py +0 -0
  298. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/scripts/lint.sh +0 -0
  299. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/scripts/mkdocs_hooks.py +0 -0
  300. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/scripts/test.sh +0 -0
  301. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/_compat.py +0 -0
  302. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/default.py +0 -0
  303. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/ext/__init__.py +0 -0
  304. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/ext/asyncio/__init__.py +0 -0
  305. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/ext/asyncio/session.py +0 -0
  306. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/orm/__init__.py +0 -0
  307. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/orm/session.py +0 -0
  308. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/pool/__init__.py +0 -0
  309. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/py.typed +0 -0
  310. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/sql/__init__.py +0 -0
  311. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/sql/_expression_select_cls.py +0 -0
  312. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/sql/_expression_select_gen.py +0 -0
  313. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/sql/_expression_select_gen.py.jinja2 +0 -0
  314. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/sql/base.py +0 -0
  315. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/sqlmodel/sql/sqltypes.py +0 -0
  316. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/__init__.py +0 -0
  317. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/conftest.py +0 -0
  318. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_advanced/__init__.py +0 -0
  319. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_advanced/test_decimal/__init__.py +0 -0
  320. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_advanced/test_decimal/test_tutorial001.py +0 -0
  321. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_advanced/test_uuid/__init__.py +0 -0
  322. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_advanced/test_uuid/test_tutorial001.py +0 -0
  323. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_advanced/test_uuid/test_tutorial002.py +0 -0
  324. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_aliases.py +0 -0
  325. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_annotated_uuid.py +0 -0
  326. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_default.py +0 -0
  327. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_deprecations.py +0 -0
  328. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_enums.py +0 -0
  329. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_enums_models.py +0 -0
  330. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_field_sa_args_kwargs.py +0 -0
  331. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_field_sa_relationship.py +0 -0
  332. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_fields_set.py +0 -0
  333. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_instance_no_args.py +0 -0
  334. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_missing_type.py +0 -0
  335. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_nullable.py +0 -0
  336. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_ondelete_raises.py +0 -0
  337. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_pydantic/__init__.py +0 -0
  338. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_query.py +0 -0
  339. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_select_gen.py +0 -0
  340. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_select_typing.py +0 -0
  341. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_sqlalchemy_type_errors.py +0 -0
  342. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/__init__.py +0 -0
  343. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_automatic_id_none_refresh/__init__.py +0 -0
  344. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_automatic_id_none_refresh/test_tutorial001_tutorial002.py +0 -0
  345. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_code_structure/__init__.py +0 -0
  346. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_code_structure/test_tutorial001.py +0 -0
  347. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_code_structure/test_tutorial002.py +0 -0
  348. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/__init__.py +0 -0
  349. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_create_connected_tables/__init__.py +0 -0
  350. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_create_connected_tables/test_tutorial001.py +0 -0
  351. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_delete/__init__.py +0 -0
  352. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_delete/test_tutorial001.py +0 -0
  353. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_insert/__init__.py +0 -0
  354. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_insert/test_tutorial001.py +0 -0
  355. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_select/__init__.py +0 -0
  356. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_select/test_tutorial001_tutorial002.py +0 -0
  357. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_select/test_tutorial003.py +0 -0
  358. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_select/test_tutorial004.py +0 -0
  359. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_select/test_tutorial005.py +0 -0
  360. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_update/__init__.py +0 -0
  361. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_connect/test_update/test_tutorial001.py +0 -0
  362. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_create_db_and_table/__init__.py +0 -0
  363. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_create_db_and_table/test_tutorial001.py +0 -0
  364. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_create_db_and_table/test_tutorial002.py +0 -0
  365. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_create_db_and_table/test_tutorial003.py +0 -0
  366. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_delete/__init__.py +0 -0
  367. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_delete/test_tutorial001_tutorial002.py +0 -0
  368. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/__init__.py +0 -0
  369. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_app_testing/__init__.py +0 -0
  370. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests001.py +0 -0
  371. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests002.py +0 -0
  372. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests003.py +0 -0
  373. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests004.py +0 -0
  374. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests005.py +0 -0
  375. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests006.py +0 -0
  376. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests_main.py +0 -0
  377. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_delete/__init__.py +0 -0
  378. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_limit_and_offset/__init__.py +0 -0
  379. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_multiple_models/__init__.py +0 -0
  380. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_read_one/__init__.py +0 -0
  381. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_relationships/__init__.py +0 -0
  382. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_response_model/__init__.py +0 -0
  383. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_session_with_dependency/__init__.py +0 -0
  384. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_simple_hero_api/__init__.py +0 -0
  385. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_teams/__init__.py +0 -0
  386. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_fastapi/test_update/__init__.py +0 -0
  387. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_indexes/__init__.py +0 -0
  388. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_indexes/test_tutorial001.py +0 -0
  389. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_indexes/test_tutorial002.py +0 -0
  390. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_insert/__init__.py +0 -0
  391. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_insert/test_tutorial001.py +0 -0
  392. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_insert/test_tutorial002.py +0 -0
  393. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_insert/test_tutorial003.py +0 -0
  394. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_limit_and_offset/__init__.py +0 -0
  395. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_limit_and_offset/test_tutorial001.py +0 -0
  396. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_limit_and_offset/test_tutorial002.py +0 -0
  397. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_limit_and_offset/test_tutorial003.py +0 -0
  398. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_limit_and_offset/test_tutorial004.py +0 -0
  399. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_many_to_many/__init__.py +0 -0
  400. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_many_to_many/test_tutorial001.py +0 -0
  401. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_many_to_many/test_tutorial002.py +0 -0
  402. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_many_to_many/test_tutorial003.py +0 -0
  403. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/__init__.py +0 -0
  404. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/test_tutorial001.py +0 -0
  405. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/test_tutorial002.py +0 -0
  406. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/test_tutorial003.py +0 -0
  407. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/test_tutorial004.py +0 -0
  408. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/test_tutorial005.py +0 -0
  409. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/test_tutorial006.py +0 -0
  410. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/test_tutorial007.py +0 -0
  411. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/test_tutorial008.py +0 -0
  412. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_one/test_tutorial009.py +0 -0
  413. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/__init__.py +0 -0
  414. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_back_populates/__init__.py +0 -0
  415. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial001.py +0 -0
  416. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial002.py +0 -0
  417. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial003.py +0 -0
  418. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_create_and_update_relationships/__init__.py +0 -0
  419. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_create_and_update_relationships/test_tutorial001.py +0 -0
  420. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_define_relationship_attributes/__init__.py +0 -0
  421. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_define_relationship_attributes/test_tutorial001.py +0 -0
  422. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/__init__.py +0 -0
  423. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial001.py +0 -0
  424. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial002.py +0 -0
  425. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial003.py +0 -0
  426. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial004.py +0 -0
  427. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial005.py +0 -0
  428. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_read_relationships/__init__.py +0 -0
  429. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_read_relationships/test_tutorial001.py +0 -0
  430. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_relationship_attributes/test_read_relationships/test_tutorial002.py +0 -0
  431. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_select/__init__.py +0 -0
  432. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_select/test_tutorial001_tutorial002.py +0 -0
  433. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_select/test_tutorial003_tutorial004.py +0 -0
  434. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_update/__init__.py +0 -0
  435. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_update/test_tutorial001_tutorial002.py +0 -0
  436. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_update/test_tutorial003_tutorial004.py +0 -0
  437. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/__init__.py +0 -0
  438. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial001.py +0 -0
  439. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial002.py +0 -0
  440. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial003.py +0 -0
  441. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial004.py +0 -0
  442. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial005.py +0 -0
  443. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial006.py +0 -0
  444. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial007.py +0 -0
  445. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial008.py +0 -0
  446. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial009.py +0 -0
  447. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial010.py +0 -0
  448. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_tutorial/test_where/test_tutorial011.py +0 -0
  449. {sqlmodel-0.0.31 → sqlmodel-0.0.32}/tests/test_update.py +0 -0
  450. {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.31
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.31"
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
  ]
@@ -1,4 +1,4 @@
1
- __version__ = "0.0.31"
1
+ __version__ = "0.0.32"
2
2
 
3
3
  # Re-export from SQLAlchemy
4
4
  from sqlalchemy.engine import create_engine as create_engine
@@ -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 Literal, TypeAlias, deprecated, get_origin
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 = getattr(field_info, "sa_type", Undefined) # noqa: B009
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 = getattr(field_info, "sa_column", Undefined)
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 = getattr(field_info, "primary_key", Undefined)
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 = getattr(field_info, "index", Undefined)
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 = getattr(field_info, "nullable", Undefined) # noqa: B009
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 = getattr(field_info, "foreign_key", Undefined)
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 = getattr(field_info, "unique", Undefined)
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
- if field_info.ondelete == "SET NULL" and not nullable:
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
- ondelete = getattr(field_info, "ondelete", Undefined)
722
- if ondelete is Undefined:
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 = getattr(field_info, "sa_column_args", Undefined)
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 = getattr(field_info, "sa_column_kwargs", Undefined)
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():
@@ -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": IsDict(
304
- {
305
- "title": "Age",
306
- "anyOf": [{"type": "integer"}, {"type": "null"}],
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": IsDict(
323
- {
324
- "title": "Age",
325
- "anyOf": [{"type": "integer"}, {"type": "null"}],
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": IsDict(
340
- {
341
- "title": "Name",
342
- "anyOf": [{"type": "string"}, {"type": "null"}],
343
- }
344
- )
345
- | IsDict(
346
- # TODO: remove when deprecating Pydantic v1
347
- {"title": "Name", "type": "string"}
348
- ),
349
- "secret_name": IsDict(
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": IsDict(
239
- {
240
- "title": "Age",
241
- "anyOf": [{"type": "integer"}, {"type": "null"}],
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": IsDict(
258
- {
259
- "title": "Age",
260
- "anyOf": [{"type": "integer"}, {"type": "null"}],
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": IsDict(
163
- {
164
- "title": "Age",
165
- "anyOf": [{"type": "integer"}, {"type": "null"}],
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": IsDict(
183
- {
184
- "title": "Age",
185
- "anyOf": [{"type": "integer"}, {"type": "null"}],
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": {