alembic 1.16.5__tar.gz → 1.17.0__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 (248) hide show
  1. {alembic-1.16.5 → alembic-1.17.0}/MANIFEST.in +1 -1
  2. {alembic-1.16.5/alembic.egg-info → alembic-1.17.0}/PKG-INFO +2 -3
  3. {alembic-1.16.5 → alembic-1.17.0}/alembic/__init__.py +1 -1
  4. {alembic-1.16.5 → alembic-1.17.0}/alembic/ddl/mssql.py +3 -1
  5. {alembic-1.16.5 → alembic-1.17.0}/alembic/script/base.py +2 -6
  6. {alembic-1.16.5 → alembic-1.17.0}/alembic/script/write_hooks.py +6 -10
  7. {alembic-1.16.5/alembic/templates/generic → alembic-1.17.0/alembic/templates/async}/alembic.ini.mako +3 -3
  8. {alembic-1.16.5/alembic/templates/async → alembic-1.17.0/alembic/templates/generic}/alembic.ini.mako +3 -3
  9. {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/multidb/alembic.ini.mako +2 -2
  10. {alembic-1.16.5/alembic/templates/pyproject_async → alembic-1.17.0/alembic/templates/pyproject}/pyproject.toml.mako +2 -2
  11. {alembic-1.16.5/alembic/templates/pyproject → alembic-1.17.0/alembic/templates/pyproject_async}/pyproject.toml.mako +2 -2
  12. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/fixtures.py +24 -3
  13. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/requirements.py +9 -0
  14. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/suite/test_autogen_computed.py +17 -4
  15. {alembic-1.16.5 → alembic-1.17.0}/alembic/util/compat.py +14 -30
  16. {alembic-1.16.5 → alembic-1.17.0}/alembic/util/pyfiles.py +3 -3
  17. {alembic-1.16.5 → alembic-1.17.0}/alembic/util/sqla_compat.py +7 -0
  18. {alembic-1.16.5 → alembic-1.17.0/alembic.egg-info}/PKG-INFO +2 -3
  19. {alembic-1.16.5 → alembic-1.17.0}/alembic.egg-info/SOURCES.txt +3 -0
  20. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/changelog.rst +18 -0
  21. {alembic-1.16.5/docs/build → alembic-1.17.0/docs/_sources}/tutorial.rst +1 -1
  22. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/documentation_options.js +1 -1
  23. {alembic-1.16.5 → alembic-1.17.0}/docs/api/autogenerate.html +12 -12
  24. {alembic-1.16.5 → alembic-1.17.0}/docs/api/commands.html +18 -18
  25. {alembic-1.16.5 → alembic-1.17.0}/docs/api/config.html +23 -23
  26. {alembic-1.16.5 → alembic-1.17.0}/docs/api/ddl.html +123 -123
  27. {alembic-1.16.5 → alembic-1.17.0}/docs/api/index.html +3 -3
  28. {alembic-1.16.5 → alembic-1.17.0}/docs/api/operations.html +60 -60
  29. {alembic-1.16.5 → alembic-1.17.0}/docs/api/overview.html +3 -3
  30. {alembic-1.16.5 → alembic-1.17.0}/docs/api/runtime.html +29 -29
  31. {alembic-1.16.5 → alembic-1.17.0}/docs/api/script.html +43 -43
  32. {alembic-1.16.5 → alembic-1.17.0}/docs/autogenerate.html +3 -3
  33. {alembic-1.16.5 → alembic-1.17.0}/docs/batch.html +3 -3
  34. {alembic-1.16.5 → alembic-1.17.0}/docs/branches.html +3 -3
  35. {alembic-1.16.5 → alembic-1.17.0}/docs/build/changelog.rst +18 -0
  36. {alembic-1.16.5 → alembic-1.17.0}/docs/build/conf.py +2 -2
  37. {alembic-1.16.5/docs/_sources → alembic-1.17.0/docs/build}/tutorial.rst +1 -1
  38. {alembic-1.16.5 → alembic-1.17.0}/docs/changelog.html +22 -3
  39. {alembic-1.16.5 → alembic-1.17.0}/docs/cookbook.html +3 -3
  40. {alembic-1.16.5 → alembic-1.17.0}/docs/front.html +3 -3
  41. {alembic-1.16.5 → alembic-1.17.0}/docs/genindex.html +3 -3
  42. {alembic-1.16.5 → alembic-1.17.0}/docs/index.html +4 -3
  43. {alembic-1.16.5 → alembic-1.17.0}/docs/naming.html +3 -3
  44. {alembic-1.16.5 → alembic-1.17.0}/docs/offline.html +3 -3
  45. {alembic-1.16.5 → alembic-1.17.0}/docs/ops.html +43 -43
  46. {alembic-1.16.5 → alembic-1.17.0}/docs/py-modindex.html +3 -3
  47. {alembic-1.16.5 → alembic-1.17.0}/docs/search.html +3 -3
  48. alembic-1.17.0/docs/searchindex.js +1 -0
  49. {alembic-1.16.5 → alembic-1.17.0}/docs/tutorial.html +4 -4
  50. alembic-1.17.0/noxfile.py +250 -0
  51. {alembic-1.16.5 → alembic-1.17.0}/pyproject.toml +38 -3
  52. {alembic-1.16.5 → alembic-1.17.0}/setup.cfg +2 -3
  53. {alembic-1.16.5 → alembic-1.17.0}/tests/test_autogen_render.py +4 -1
  54. {alembic-1.16.5 → alembic-1.17.0}/tests/test_postgresql.py +3 -1
  55. {alembic-1.16.5 → alembic-1.17.0}/tests/test_version_table.py +2 -0
  56. alembic-1.17.0/tools/toxnox.py +214 -0
  57. alembic-1.17.0/tools/warn_tox.py +12 -0
  58. {alembic-1.16.5 → alembic-1.17.0}/tox.ini +7 -1
  59. alembic-1.16.5/docs/searchindex.js +0 -1
  60. {alembic-1.16.5 → alembic-1.17.0}/CHANGES +0 -0
  61. {alembic-1.16.5 → alembic-1.17.0}/LICENSE +0 -0
  62. {alembic-1.16.5 → alembic-1.17.0}/README.rst +0 -0
  63. {alembic-1.16.5 → alembic-1.17.0}/README.unittests.rst +0 -0
  64. {alembic-1.16.5 → alembic-1.17.0}/alembic/__main__.py +0 -0
  65. {alembic-1.16.5 → alembic-1.17.0}/alembic/autogenerate/__init__.py +0 -0
  66. {alembic-1.16.5 → alembic-1.17.0}/alembic/autogenerate/api.py +0 -0
  67. {alembic-1.16.5 → alembic-1.17.0}/alembic/autogenerate/compare.py +0 -0
  68. {alembic-1.16.5 → alembic-1.17.0}/alembic/autogenerate/render.py +0 -0
  69. {alembic-1.16.5 → alembic-1.17.0}/alembic/autogenerate/rewriter.py +0 -0
  70. {alembic-1.16.5 → alembic-1.17.0}/alembic/command.py +0 -0
  71. {alembic-1.16.5 → alembic-1.17.0}/alembic/config.py +0 -0
  72. {alembic-1.16.5 → alembic-1.17.0}/alembic/context.py +0 -0
  73. {alembic-1.16.5 → alembic-1.17.0}/alembic/context.pyi +0 -0
  74. {alembic-1.16.5 → alembic-1.17.0}/alembic/ddl/__init__.py +0 -0
  75. {alembic-1.16.5 → alembic-1.17.0}/alembic/ddl/_autogen.py +0 -0
  76. {alembic-1.16.5 → alembic-1.17.0}/alembic/ddl/base.py +0 -0
  77. {alembic-1.16.5 → alembic-1.17.0}/alembic/ddl/impl.py +0 -0
  78. {alembic-1.16.5 → alembic-1.17.0}/alembic/ddl/mysql.py +0 -0
  79. {alembic-1.16.5 → alembic-1.17.0}/alembic/ddl/oracle.py +0 -0
  80. {alembic-1.16.5 → alembic-1.17.0}/alembic/ddl/postgresql.py +0 -0
  81. {alembic-1.16.5 → alembic-1.17.0}/alembic/ddl/sqlite.py +0 -0
  82. {alembic-1.16.5 → alembic-1.17.0}/alembic/environment.py +0 -0
  83. {alembic-1.16.5 → alembic-1.17.0}/alembic/migration.py +0 -0
  84. {alembic-1.16.5 → alembic-1.17.0}/alembic/op.py +0 -0
  85. {alembic-1.16.5 → alembic-1.17.0}/alembic/op.pyi +0 -0
  86. {alembic-1.16.5 → alembic-1.17.0}/alembic/operations/__init__.py +0 -0
  87. {alembic-1.16.5 → alembic-1.17.0}/alembic/operations/base.py +0 -0
  88. {alembic-1.16.5 → alembic-1.17.0}/alembic/operations/batch.py +0 -0
  89. {alembic-1.16.5 → alembic-1.17.0}/alembic/operations/ops.py +0 -0
  90. {alembic-1.16.5 → alembic-1.17.0}/alembic/operations/schemaobj.py +0 -0
  91. {alembic-1.16.5 → alembic-1.17.0}/alembic/operations/toimpl.py +0 -0
  92. {alembic-1.16.5 → alembic-1.17.0}/alembic/py.typed +0 -0
  93. {alembic-1.16.5 → alembic-1.17.0}/alembic/runtime/__init__.py +0 -0
  94. {alembic-1.16.5 → alembic-1.17.0}/alembic/runtime/environment.py +0 -0
  95. {alembic-1.16.5 → alembic-1.17.0}/alembic/runtime/migration.py +0 -0
  96. {alembic-1.16.5 → alembic-1.17.0}/alembic/script/__init__.py +0 -0
  97. {alembic-1.16.5 → alembic-1.17.0}/alembic/script/revision.py +0 -0
  98. {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/async/README +0 -0
  99. {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/async/env.py +0 -0
  100. {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/async/script.py.mako +0 -0
  101. {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/generic/README +0 -0
  102. {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/generic/env.py +0 -0
  103. {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/generic/script.py.mako +0 -0
  104. {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/multidb/README +0 -0
  105. {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/multidb/env.py +0 -0
  106. {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/multidb/script.py.mako +0 -0
  107. {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/pyproject/README +0 -0
  108. {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/pyproject/alembic.ini.mako +0 -0
  109. {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/pyproject/env.py +0 -0
  110. {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/pyproject/script.py.mako +0 -0
  111. {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/pyproject_async/README +0 -0
  112. {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/pyproject_async/alembic.ini.mako +0 -0
  113. {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/pyproject_async/env.py +0 -0
  114. {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/pyproject_async/script.py.mako +0 -0
  115. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/__init__.py +0 -0
  116. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/assertions.py +0 -0
  117. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/env.py +0 -0
  118. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/plugin/__init__.py +0 -0
  119. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/plugin/bootstrap.py +0 -0
  120. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/schemacompare.py +0 -0
  121. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/suite/__init__.py +0 -0
  122. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/suite/_autogen_fixtures.py +0 -0
  123. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/suite/test_autogen_comments.py +0 -0
  124. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/suite/test_autogen_diffs.py +0 -0
  125. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/suite/test_autogen_fks.py +0 -0
  126. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/suite/test_autogen_identity.py +0 -0
  127. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/suite/test_environment.py +0 -0
  128. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/suite/test_op.py +0 -0
  129. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/util.py +0 -0
  130. {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/warnings.py +0 -0
  131. {alembic-1.16.5 → alembic-1.17.0}/alembic/util/__init__.py +0 -0
  132. {alembic-1.16.5 → alembic-1.17.0}/alembic/util/editor.py +0 -0
  133. {alembic-1.16.5 → alembic-1.17.0}/alembic/util/exc.py +0 -0
  134. {alembic-1.16.5 → alembic-1.17.0}/alembic/util/langhelpers.py +0 -0
  135. {alembic-1.16.5 → alembic-1.17.0}/alembic/util/messaging.py +0 -0
  136. {alembic-1.16.5 → alembic-1.17.0}/alembic.egg-info/dependency_links.txt +0 -0
  137. {alembic-1.16.5 → alembic-1.17.0}/alembic.egg-info/entry_points.txt +0 -0
  138. {alembic-1.16.5 → alembic-1.17.0}/alembic.egg-info/not-zip-safe +0 -0
  139. {alembic-1.16.5 → alembic-1.17.0}/alembic.egg-info/requires.txt +0 -0
  140. {alembic-1.16.5 → alembic-1.17.0}/alembic.egg-info/top_level.txt +0 -0
  141. {alembic-1.16.5 → alembic-1.17.0}/docs/_images/api_overview.png +0 -0
  142. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/api/autogenerate.rst +0 -0
  143. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/api/commands.rst +0 -0
  144. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/api/config.rst +0 -0
  145. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/api/ddl.rst +0 -0
  146. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/api/index.rst +0 -0
  147. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/api/operations.rst +0 -0
  148. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/api/overview.rst +0 -0
  149. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/api/runtime.rst +0 -0
  150. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/api/script.rst +0 -0
  151. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/autogenerate.rst +0 -0
  152. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/batch.rst +0 -0
  153. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/branches.rst +0 -0
  154. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/cookbook.rst +0 -0
  155. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/front.rst +0 -0
  156. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/index.rst +0 -0
  157. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/naming.rst +0 -0
  158. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/offline.rst +0 -0
  159. {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/ops.rst +0 -0
  160. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/basic.css +0 -0
  161. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/changelog.css +0 -0
  162. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/clipboard.min.js +0 -0
  163. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/copybutton.css +0 -0
  164. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/copybutton.js +0 -0
  165. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/copybutton_funcs.js +0 -0
  166. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/doctools.js +0 -0
  167. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/file.png +0 -0
  168. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/images/logo_colab.png +0 -0
  169. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/language_data.js +0 -0
  170. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/minus.png +0 -0
  171. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/nature_override.css +0 -0
  172. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/plus.png +0 -0
  173. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/pygments.css +0 -0
  174. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/sbt-webpack-macros.html +0 -0
  175. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/scripts/bootstrap.js +0 -0
  176. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/scripts/bootstrap.js.LICENSE.txt +0 -0
  177. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/scripts/pydata-sphinx-theme.js +0 -0
  178. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/scripts/sphinx-book-theme.js +0 -0
  179. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/searchtools.js +0 -0
  180. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/site_custom_css.css +0 -0
  181. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/sphinx_highlight.js +0 -0
  182. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/sphinx_paramlinks.css +0 -0
  183. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/styles/bootstrap.css +0 -0
  184. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/styles/pydata-sphinx-theme.css +0 -0
  185. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/styles/sphinx-book-theme.css +0 -0
  186. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/styles/theme.css +0 -0
  187. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/vendor/fontawesome/6.5.2/LICENSE.txt +0 -0
  188. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/vendor/fontawesome/6.5.2/css/all.min.css +0 -0
  189. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/vendor/fontawesome/6.5.2/js/all.min.js +0 -0
  190. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/vendor/fontawesome/6.5.2/js/all.min.js.LICENSE.txt +0 -0
  191. {alembic-1.16.5 → alembic-1.17.0}/docs/_static/webpack-macros.html +0 -0
  192. {alembic-1.16.5 → alembic-1.17.0}/docs/build/Makefile +0 -0
  193. {alembic-1.16.5 → alembic-1.17.0}/docs/build/_static/nature_override.css +0 -0
  194. {alembic-1.16.5 → alembic-1.17.0}/docs/build/_static/site_custom_css.css +0 -0
  195. {alembic-1.16.5 → alembic-1.17.0}/docs/build/_templates/site_custom_sidebars.html +0 -0
  196. {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/api_overview.png +0 -0
  197. {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/autogenerate.rst +0 -0
  198. {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/commands.rst +0 -0
  199. {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/config.rst +0 -0
  200. {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/ddl.rst +0 -0
  201. {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/index.rst +0 -0
  202. {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/operations.rst +0 -0
  203. {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/overview.rst +0 -0
  204. {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/runtime.rst +0 -0
  205. {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/script.rst +0 -0
  206. {alembic-1.16.5 → alembic-1.17.0}/docs/build/autogenerate.rst +0 -0
  207. {alembic-1.16.5 → alembic-1.17.0}/docs/build/batch.rst +0 -0
  208. {alembic-1.16.5 → alembic-1.17.0}/docs/build/branches.rst +0 -0
  209. {alembic-1.16.5 → alembic-1.17.0}/docs/build/cookbook.rst +0 -0
  210. {alembic-1.16.5 → alembic-1.17.0}/docs/build/front.rst +0 -0
  211. {alembic-1.16.5 → alembic-1.17.0}/docs/build/index.rst +0 -0
  212. {alembic-1.16.5 → alembic-1.17.0}/docs/build/naming.rst +0 -0
  213. {alembic-1.16.5 → alembic-1.17.0}/docs/build/offline.rst +0 -0
  214. {alembic-1.16.5 → alembic-1.17.0}/docs/build/ops.rst +0 -0
  215. {alembic-1.16.5 → alembic-1.17.0}/docs/build/requirements.txt +0 -0
  216. {alembic-1.16.5 → alembic-1.17.0}/docs/build/unreleased/README.txt +0 -0
  217. {alembic-1.16.5 → alembic-1.17.0}/setup.py +0 -0
  218. {alembic-1.16.5 → alembic-1.17.0}/tests/__init__.py +0 -0
  219. {alembic-1.16.5 → alembic-1.17.0}/tests/_large_map.py +0 -0
  220. {alembic-1.16.5 → alembic-1.17.0}/tests/conftest.py +0 -0
  221. {alembic-1.16.5 → alembic-1.17.0}/tests/requirements.py +0 -0
  222. {alembic-1.16.5 → alembic-1.17.0}/tests/test_autogen_composition.py +0 -0
  223. {alembic-1.16.5 → alembic-1.17.0}/tests/test_autogen_diffs.py +0 -0
  224. {alembic-1.16.5 → alembic-1.17.0}/tests/test_autogen_indexes.py +0 -0
  225. {alembic-1.16.5 → alembic-1.17.0}/tests/test_batch.py +0 -0
  226. {alembic-1.16.5 → alembic-1.17.0}/tests/test_bulk_insert.py +0 -0
  227. {alembic-1.16.5 → alembic-1.17.0}/tests/test_command.py +0 -0
  228. {alembic-1.16.5 → alembic-1.17.0}/tests/test_config.py +0 -0
  229. {alembic-1.16.5 → alembic-1.17.0}/tests/test_editor.py +0 -0
  230. {alembic-1.16.5 → alembic-1.17.0}/tests/test_environment.py +0 -0
  231. {alembic-1.16.5 → alembic-1.17.0}/tests/test_external_dialect.py +0 -0
  232. {alembic-1.16.5 → alembic-1.17.0}/tests/test_impl.py +0 -0
  233. {alembic-1.16.5 → alembic-1.17.0}/tests/test_messaging.py +0 -0
  234. {alembic-1.16.5 → alembic-1.17.0}/tests/test_mssql.py +0 -0
  235. {alembic-1.16.5 → alembic-1.17.0}/tests/test_mysql.py +0 -0
  236. {alembic-1.16.5 → alembic-1.17.0}/tests/test_offline_environment.py +0 -0
  237. {alembic-1.16.5 → alembic-1.17.0}/tests/test_op.py +0 -0
  238. {alembic-1.16.5 → alembic-1.17.0}/tests/test_op_naming_convention.py +0 -0
  239. {alembic-1.16.5 → alembic-1.17.0}/tests/test_oracle.py +0 -0
  240. {alembic-1.16.5 → alembic-1.17.0}/tests/test_post_write.py +0 -0
  241. {alembic-1.16.5 → alembic-1.17.0}/tests/test_revision.py +0 -0
  242. {alembic-1.16.5 → alembic-1.17.0}/tests/test_script_consumption.py +0 -0
  243. {alembic-1.16.5 → alembic-1.17.0}/tests/test_script_production.py +0 -0
  244. {alembic-1.16.5 → alembic-1.17.0}/tests/test_sqlite.py +0 -0
  245. {alembic-1.16.5 → alembic-1.17.0}/tests/test_stubs.py +0 -0
  246. {alembic-1.16.5 → alembic-1.17.0}/tests/test_suite.py +0 -0
  247. {alembic-1.16.5 → alembic-1.17.0}/tests/test_version_traversal.py +0 -0
  248. {alembic-1.16.5 → alembic-1.17.0}/tools/write_pyi.py +0 -0
@@ -4,7 +4,7 @@ recursive-include alembic/templates *.mako README *.py *.pyi
4
4
  recursive-include alembic *.py *.pyi py.typed
5
5
  recursive-include tools *.py
6
6
 
7
- include README* LICENSE CHANGES* tox.ini
7
+ include README* LICENSE CHANGES* tox.ini noxfile.py
8
8
 
9
9
  prune docs/build/output
10
10
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alembic
3
- Version: 1.16.5
3
+ Version: 1.17.0
4
4
  Summary: A database migration tool for SQLAlchemy.
5
5
  Author-email: Mike Bayer <mike_mp@zzzcomputing.com>
6
6
  License-Expression: MIT
@@ -15,7 +15,6 @@ Classifier: Environment :: Console
15
15
  Classifier: Operating System :: OS Independent
16
16
  Classifier: Programming Language :: Python
17
17
  Classifier: Programming Language :: Python :: 3
18
- Classifier: Programming Language :: Python :: 3.9
19
18
  Classifier: Programming Language :: Python :: 3.10
20
19
  Classifier: Programming Language :: Python :: 3.11
21
20
  Classifier: Programming Language :: Python :: 3.12
@@ -23,7 +22,7 @@ Classifier: Programming Language :: Python :: 3.13
23
22
  Classifier: Programming Language :: Python :: Implementation :: CPython
24
23
  Classifier: Programming Language :: Python :: Implementation :: PyPy
25
24
  Classifier: Topic :: Database :: Front-Ends
26
- Requires-Python: >=3.9
25
+ Requires-Python: >=3.10
27
26
  Description-Content-Type: text/x-rst
28
27
  License-File: LICENSE
29
28
  Requires-Dist: SQLAlchemy>=1.4.0
@@ -1,4 +1,4 @@
1
1
  from . import context
2
2
  from . import op
3
3
 
4
- __version__ = "1.16.5"
4
+ __version__ = "1.17.0"
@@ -96,7 +96,9 @@ class MSSQLImpl(DefaultImpl):
96
96
  type_: Optional[TypeEngine] = None,
97
97
  schema: Optional[str] = None,
98
98
  existing_type: Optional[TypeEngine] = None,
99
- existing_server_default: Optional[_ServerDefault] = None,
99
+ existing_server_default: Union[
100
+ _ServerDefault, Literal[False], None
101
+ ] = None,
100
102
  existing_nullable: Optional[bool] = None,
101
103
  **kw: Any,
102
104
  ) -> None:
@@ -38,12 +38,8 @@ if TYPE_CHECKING:
38
38
  from ..runtime.migration import StampStep
39
39
 
40
40
  try:
41
- if compat.py39:
42
- from zoneinfo import ZoneInfo
43
- from zoneinfo import ZoneInfoNotFoundError
44
- else:
45
- from backports.zoneinfo import ZoneInfo # type: ignore[import-not-found,no-redef] # noqa: E501
46
- from backports.zoneinfo import ZoneInfoNotFoundError # type: ignore[no-redef] # noqa: E501
41
+ from zoneinfo import ZoneInfo
42
+ from zoneinfo import ZoneInfoNotFoundError
47
43
  except ImportError:
48
44
  ZoneInfo = None # type: ignore[assignment, misc]
49
45
 
@@ -10,11 +10,7 @@ import subprocess
10
10
  import sys
11
11
  from typing import Any
12
12
  from typing import Callable
13
- from typing import Dict
14
- from typing import List
15
- from typing import Optional
16
13
  from typing import TYPE_CHECKING
17
- from typing import Union
18
14
 
19
15
  from .. import util
20
16
  from ..util import compat
@@ -49,7 +45,7 @@ def register(name: str) -> Callable:
49
45
 
50
46
  def _invoke(
51
47
  name: str,
52
- revision_path: Union[str, os.PathLike[str]],
48
+ revision_path: str | os.PathLike[str],
53
49
  options: PostWriteHookConfig,
54
50
  ) -> Any:
55
51
  """Invokes the formatter registered for the given name.
@@ -72,7 +68,7 @@ def _invoke(
72
68
 
73
69
 
74
70
  def _run_hooks(
75
- path: Union[str, os.PathLike[str]], hooks: list[PostWriteHookConfig]
71
+ path: str | os.PathLike[str], hooks: list[PostWriteHookConfig]
76
72
  ) -> None:
77
73
  """Invoke hooks for a generated revision."""
78
74
 
@@ -92,7 +88,7 @@ def _run_hooks(
92
88
  _invoke(type_, path, hook)
93
89
 
94
90
 
95
- def _parse_cmdline_options(cmdline_options_str: str, path: str) -> List[str]:
91
+ def _parse_cmdline_options(cmdline_options_str: str, path: str) -> list[str]:
96
92
  """Parse options from a string into a list.
97
93
 
98
94
  Also substitutes the revision script token with the actual filename of
@@ -124,13 +120,13 @@ def _get_required_option(options: dict, name: str) -> str:
124
120
 
125
121
 
126
122
  def _run_hook(
127
- path: str, options: dict, ignore_output: bool, command: List[str]
123
+ path: str, options: dict, ignore_output: bool, command: list[str]
128
124
  ) -> None:
129
- cwd: Optional[str] = options.get("cwd", None)
125
+ cwd: str | None = options.get("cwd", None)
130
126
  cmdline_options_str = options.get("options", "")
131
127
  cmdline_options_list = _parse_cmdline_options(cmdline_options_str, path)
132
128
 
133
- kw: Dict[str, Any] = {}
129
+ kw: dict[str, Any] = {}
134
130
  if ignore_output:
135
131
  kw["stdout"] = kw["stderr"] = subprocess.DEVNULL
136
132
 
@@ -18,11 +18,10 @@ script_location = ${script_location}
18
18
  # is defined by "path_separator" below.
19
19
  prepend_sys_path = .
20
20
 
21
-
22
21
  # timezone to use when rendering the date within the migration file
23
22
  # as well as the filename.
24
- # If specified, requires the python>=3.9 or backports.zoneinfo library and tzdata library.
25
- # Any required deps can installed by adding `alembic[tz]` to the pip requirements
23
+ # If specified, requires the tzdata library which can be installed by adding
24
+ # `alembic[tz]` to the pip requirements.
26
25
  # string value is passed to ZoneInfo()
27
26
  # leave blank for localtime
28
27
  # timezone =
@@ -72,6 +71,7 @@ prepend_sys_path = .
72
71
  # Use os.pathsep. Default configuration used for new projects.
73
72
  path_separator = os
74
73
 
74
+
75
75
  # set to 'true' to search source files recursively
76
76
  # in each "version_locations" directory
77
77
  # new in Alembic version 1.10
@@ -18,10 +18,11 @@ script_location = ${script_location}
18
18
  # is defined by "path_separator" below.
19
19
  prepend_sys_path = .
20
20
 
21
+
21
22
  # timezone to use when rendering the date within the migration file
22
23
  # as well as the filename.
23
- # If specified, requires the python>=3.9 or backports.zoneinfo library and tzdata library.
24
- # Any required deps can installed by adding `alembic[tz]` to the pip requirements
24
+ # If specified, requires the tzdata library which can be installed by adding
25
+ # `alembic[tz]` to the pip requirements.
25
26
  # string value is passed to ZoneInfo()
26
27
  # leave blank for localtime
27
28
  # timezone =
@@ -71,7 +72,6 @@ prepend_sys_path = .
71
72
  # Use os.pathsep. Default configuration used for new projects.
72
73
  path_separator = os
73
74
 
74
-
75
75
  # set to 'true' to search source files recursively
76
76
  # in each "version_locations" directory
77
77
  # new in Alembic version 1.10
@@ -20,8 +20,8 @@ prepend_sys_path = .
20
20
 
21
21
  # timezone to use when rendering the date within the migration file
22
22
  # as well as the filename.
23
- # If specified, requires the python>=3.9 or backports.zoneinfo library and tzdata library.
24
- # Any required deps can installed by adding `alembic[tz]` to the pip requirements
23
+ # If specified, requires the tzdata library which can be installed by adding
24
+ # `alembic[tz]` to the pip requirements.
25
25
  # string value is passed to ZoneInfo()
26
26
  # leave blank for localtime
27
27
  # timezone =
@@ -19,8 +19,8 @@ prepend_sys_path = [
19
19
 
20
20
  # timezone to use when rendering the date within the migration file
21
21
  # as well as the filename.
22
- # If specified, requires the python>=3.9 or backports.zoneinfo library and tzdata library.
23
- # Any required deps can installed by adding `alembic[tz]` to the pip requirements
22
+ # If specified, requires the tzdata library which can be installed by adding
23
+ # `alembic[tz]` to the pip requirements.
24
24
  # string value is passed to ZoneInfo()
25
25
  # leave blank for localtime
26
26
  # timezone =
@@ -19,8 +19,8 @@ prepend_sys_path = [
19
19
 
20
20
  # timezone to use when rendering the date within the migration file
21
21
  # as well as the filename.
22
- # If specified, requires the python>=3.9 or backports.zoneinfo library and tzdata library.
23
- # Any required deps can installed by adding `alembic[tz]` to the pip requirements
22
+ # If specified, requires the tzdata library which can be installed by adding
23
+ # `alembic[tz]` to the pip requirements.
24
24
  # string value is passed to ZoneInfo()
25
25
  # leave blank for localtime
26
26
  # timezone =
@@ -8,6 +8,9 @@ import re
8
8
  import shutil
9
9
  from typing import Any
10
10
  from typing import Dict
11
+ from typing import Generator
12
+ from typing import Literal
13
+ from typing import overload
11
14
 
12
15
  from sqlalchemy import Column
13
16
  from sqlalchemy import create_mock_engine
@@ -52,7 +55,7 @@ class TestBase(SQLAlchemyTestBase):
52
55
  shutil.rmtree(file_path)
53
56
 
54
57
  @contextmanager
55
- def pushd(self, dirname):
58
+ def pushd(self, dirname) -> Generator[None, None, None]:
56
59
  current_dir = os.getcwd()
57
60
  try:
58
61
  os.chdir(dirname)
@@ -108,8 +111,24 @@ def capture_db(dialect="postgresql://"):
108
111
  _engs: Dict[Any, Any] = {}
109
112
 
110
113
 
114
+ @overload
111
115
  @contextmanager
112
- def capture_context_buffer(**kw):
116
+ def capture_context_buffer(
117
+ bytes_io: Literal[True], **kw: Any
118
+ ) -> Generator[io.BytesIO, None, None]: ...
119
+
120
+
121
+ @overload
122
+ @contextmanager
123
+ def capture_context_buffer(
124
+ **kw: Any,
125
+ ) -> Generator[io.StringIO, None, None]: ...
126
+
127
+
128
+ @contextmanager
129
+ def capture_context_buffer(
130
+ **kw: Any,
131
+ ) -> Generator[io.StringIO | io.BytesIO, None, None]:
113
132
  if kw.pop("bytes_io", False):
114
133
  buf = io.BytesIO()
115
134
  else:
@@ -127,7 +146,9 @@ def capture_context_buffer(**kw):
127
146
 
128
147
 
129
148
  @contextmanager
130
- def capture_engine_context_buffer(**kw):
149
+ def capture_engine_context_buffer(
150
+ **kw: Any,
151
+ ) -> Generator[io.StringIO, None, None]:
131
152
  from .env import _sqlite_file_db
132
153
  from sqlalchemy import event
133
154
 
@@ -113,6 +113,15 @@ class SuiteRequirements(Requirements):
113
113
  def computed_columns(self):
114
114
  return exclusions.closed()
115
115
 
116
+ @property
117
+ def computed_columns_warn_no_persisted(self):
118
+ def go(config):
119
+ return hasattr(
120
+ config.db.dialect, "supports_virtual_generated_columns"
121
+ )
122
+
123
+ return exclusions.only_if("postgresql<18") + exclusions.only_if(go)
124
+
116
125
  @property
117
126
  def autoincrement_on_composite_pk(self):
118
127
  return exclusions.closed()
@@ -1,3 +1,5 @@
1
+ from contextlib import nullcontext
2
+
1
3
  import sqlalchemy as sa
2
4
  from sqlalchemy import Column
3
5
  from sqlalchemy import Integer
@@ -6,7 +8,9 @@ from sqlalchemy import Table
6
8
 
7
9
  from ._autogen_fixtures import AutogenFixtureTest
8
10
  from ... import testing
11
+ from ...testing import config
9
12
  from ...testing import eq_
13
+ from ...testing import expect_warnings
10
14
  from ...testing import is_
11
15
  from ...testing import is_true
12
16
  from ...testing import mock
@@ -17,6 +21,13 @@ class AutogenerateComputedTest(AutogenFixtureTest, TestBase):
17
21
  __requires__ = ("computed_columns",)
18
22
  __backend__ = True
19
23
 
24
+ def _fixture_ctx(self):
25
+ if config.requirements.computed_columns_warn_no_persisted.enabled:
26
+ ctx = expect_warnings()
27
+ else:
28
+ ctx = nullcontext()
29
+ return ctx
30
+
20
31
  def test_add_computed_column(self):
21
32
  m1 = MetaData()
22
33
  m2 = MetaData()
@@ -30,7 +41,8 @@ class AutogenerateComputedTest(AutogenFixtureTest, TestBase):
30
41
  Column("foo", Integer, sa.Computed("5")),
31
42
  )
32
43
 
33
- diffs = self._fixture(m1, m2)
44
+ with self._fixture_ctx():
45
+ diffs = self._fixture(m1, m2)
34
46
 
35
47
  eq_(diffs[0][0], "add_column")
36
48
  eq_(diffs[0][2], "user")
@@ -54,7 +66,8 @@ class AutogenerateComputedTest(AutogenFixtureTest, TestBase):
54
66
 
55
67
  Table("user", m2, Column("id", Integer, primary_key=True))
56
68
 
57
- diffs = self._fixture(m1, m2)
69
+ with self._fixture_ctx():
70
+ diffs = self._fixture(m1, m2)
58
71
 
59
72
  eq_(diffs[0][0], "remove_column")
60
73
  eq_(diffs[0][2], "user")
@@ -97,7 +110,7 @@ class AutogenerateComputedTest(AutogenFixtureTest, TestBase):
97
110
  Column("foo", Integer, *arg_after),
98
111
  )
99
112
 
100
- with mock.patch("alembic.util.warn") as mock_warn:
113
+ with mock.patch("alembic.util.warn") as mock_warn, self._fixture_ctx():
101
114
  diffs = self._fixture(m1, m2)
102
115
 
103
116
  eq_(
@@ -137,7 +150,7 @@ class AutogenerateComputedTest(AutogenFixtureTest, TestBase):
137
150
  Column("foo", Integer, *arg_after),
138
151
  )
139
152
 
140
- with mock.patch("alembic.util.warn") as mock_warn:
153
+ with mock.patch("alembic.util.warn") as mock_warn, self._fixture_ctx():
141
154
  diffs = self._fixture(m1, m2)
142
155
  eq_(mock_warn.mock_calls, [])
143
156
 
@@ -3,6 +3,8 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from configparser import ConfigParser
6
+ from importlib import metadata
7
+ from importlib.metadata import EntryPoint
6
8
  import io
7
9
  import os
8
10
  from pathlib import Path
@@ -10,10 +12,7 @@ import sys
10
12
  import typing
11
13
  from typing import Any
12
14
  from typing import Iterator
13
- from typing import List
14
- from typing import Optional
15
15
  from typing import Sequence
16
- from typing import Union
17
16
 
18
17
  if True:
19
18
  # zimports hack for too-long names
@@ -30,8 +29,6 @@ py314 = sys.version_info >= (3, 14)
30
29
  py313 = sys.version_info >= (3, 13)
31
30
  py312 = sys.version_info >= (3, 12)
32
31
  py311 = sys.version_info >= (3, 11)
33
- py310 = sys.version_info >= (3, 10)
34
- py39 = sys.version_info >= (3, 9)
35
32
 
36
33
 
37
34
  # produce a wrapper that allows encoded text to stream
@@ -42,19 +39,6 @@ class EncodedIO(io.TextIOWrapper):
42
39
  pass
43
40
 
44
41
 
45
- if py39:
46
- from importlib import resources as _resources
47
-
48
- importlib_resources = _resources
49
- from importlib import metadata as _metadata
50
-
51
- importlib_metadata = _metadata
52
- from importlib.metadata import EntryPoint as EntryPoint
53
- else:
54
- import importlib_resources # type:ignore # noqa
55
- import importlib_metadata # type:ignore # noqa
56
- from importlib_metadata import EntryPoint # type:ignore # noqa
57
-
58
42
  if py311:
59
43
  import tomllib as tomllib
60
44
  else:
@@ -109,15 +93,18 @@ else:
109
93
 
110
94
 
111
95
  def importlib_metadata_get(group: str) -> Sequence[EntryPoint]:
112
- ep = importlib_metadata.entry_points()
113
- if hasattr(ep, "select"):
114
- return ep.select(group=group)
115
- else:
116
- return ep.get(group, ()) # type: ignore
96
+ """provide a facade for metadata.entry_points().
97
+
98
+ This is no longer a "compat" function as of Python 3.10, however
99
+ the function is widely referenced in the test suite and elsewhere so is
100
+ still in this module for compatibility reasons.
101
+
102
+ """
103
+ return metadata.entry_points().select(group=group)
117
104
 
118
105
 
119
106
  def formatannotation_fwdref(
120
- annotation: Any, base_module: Optional[Any] = None
107
+ annotation: Any, base_module: Any | None = None
121
108
  ) -> str:
122
109
  """vendored from python 3.7"""
123
110
  # copied over _formatannotation from sqlalchemy 2.0
@@ -138,9 +125,6 @@ def formatannotation_fwdref(
138
125
 
139
126
  def read_config_parser(
140
127
  file_config: ConfigParser,
141
- file_argument: Sequence[Union[str, os.PathLike[str]]],
142
- ) -> List[str]:
143
- if py310:
144
- return file_config.read(file_argument, encoding="locale")
145
- else:
146
- return file_config.read(file_argument)
128
+ file_argument: list[str | os.PathLike[str]],
129
+ ) -> list[str]:
130
+ return file_config.read(file_argument, encoding="locale")
@@ -3,6 +3,7 @@ from __future__ import annotations
3
3
  import atexit
4
4
  from contextlib import ExitStack
5
5
  import importlib
6
+ from importlib import resources
6
7
  import importlib.machinery
7
8
  import importlib.util
8
9
  import os
@@ -17,7 +18,6 @@ from typing import Union
17
18
  from mako import exceptions
18
19
  from mako.template import Template
19
20
 
20
- from . import compat
21
21
  from .exc import CommandError
22
22
 
23
23
 
@@ -68,11 +68,11 @@ def coerce_resource_to_filename(fname_or_resource: str) -> pathlib.Path:
68
68
  file_manager = ExitStack()
69
69
  atexit.register(file_manager.close)
70
70
 
71
- ref = compat.importlib_resources.files(tokens[0])
71
+ ref = resources.files(tokens[0])
72
72
  for tok in tokens[1:]:
73
73
  ref = ref / tok
74
74
  fname_or_resource = file_manager.enter_context( # type: ignore[assignment] # noqa: E501
75
- compat.importlib_resources.as_file(ref)
75
+ resources.as_file(ref)
76
76
  )
77
77
  return pathlib.Path(fname_or_resource)
78
78
 
@@ -70,6 +70,7 @@ _vers = tuple(
70
70
  sqla_14_18 = _vers >= (1, 4, 18)
71
71
  sqla_14_26 = _vers >= (1, 4, 26)
72
72
  sqla_2 = _vers >= (2,)
73
+ sqla_2_1 = _vers >= (2, 1)
73
74
  sqlalchemy_version = __version__
74
75
 
75
76
  if TYPE_CHECKING:
@@ -493,3 +494,9 @@ def is_expression(expr: Any) -> bool:
493
494
  if not isinstance(expr, ColumnClause) or expr.is_literal:
494
495
  return True
495
496
  return False
497
+
498
+
499
+ def _inherit_schema_deprecated() -> bool:
500
+ # at some point in 2.1 inherit_schema was replaced with a property
501
+ # so that's preset at the class level, while before it wasn't.
502
+ return sqla_2_1 and hasattr(sqltypes.Enum, "inherit_schema")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alembic
3
- Version: 1.16.5
3
+ Version: 1.17.0
4
4
  Summary: A database migration tool for SQLAlchemy.
5
5
  Author-email: Mike Bayer <mike_mp@zzzcomputing.com>
6
6
  License-Expression: MIT
@@ -15,7 +15,6 @@ Classifier: Environment :: Console
15
15
  Classifier: Operating System :: OS Independent
16
16
  Classifier: Programming Language :: Python
17
17
  Classifier: Programming Language :: Python :: 3
18
- Classifier: Programming Language :: Python :: 3.9
19
18
  Classifier: Programming Language :: Python :: 3.10
20
19
  Classifier: Programming Language :: Python :: 3.11
21
20
  Classifier: Programming Language :: Python :: 3.12
@@ -23,7 +22,7 @@ Classifier: Programming Language :: Python :: 3.13
23
22
  Classifier: Programming Language :: Python :: Implementation :: CPython
24
23
  Classifier: Programming Language :: Python :: Implementation :: PyPy
25
24
  Classifier: Topic :: Database :: Front-Ends
26
- Requires-Python: >=3.9
25
+ Requires-Python: >=3.10
27
26
  Description-Content-Type: text/x-rst
28
27
  License-File: LICENSE
29
28
  Requires-Dist: SQLAlchemy>=1.4.0
@@ -3,6 +3,7 @@ LICENSE
3
3
  MANIFEST.in
4
4
  README.rst
5
5
  README.unittests.rst
6
+ noxfile.py
6
7
  pyproject.toml
7
8
  setup.cfg
8
9
  setup.py
@@ -327,4 +328,6 @@ tests/test_stubs.py
327
328
  tests/test_suite.py
328
329
  tests/test_version_table.py
329
330
  tests/test_version_traversal.py
331
+ tools/toxnox.py
332
+ tools/warn_tox.py
330
333
  tools/write_pyi.py
@@ -3,6 +3,24 @@
3
3
  Changelog
4
4
  ==========
5
5
 
6
+ .. changelog::
7
+ :version: 1.17.0
8
+ :released: October 11, 2025
9
+
10
+ .. change::
11
+ :tags: change, tests
12
+
13
+ The top-level test runner has been changed to use ``nox``, adding a
14
+ ``noxfile.py`` as well as some included modules. The ``tox.ini`` file
15
+ remains in place so that ``tox`` runs will continue to function in the near
16
+ term, however it will be eventually removed and improvements and
17
+ maintenance going forward will be only towards ``noxfile.py``.
18
+
19
+ .. change::
20
+ :tags: change, general
21
+
22
+ The minimum Python version is now 3.10, as Python 3.9 is EOL.
23
+
6
24
  .. changelog::
7
25
  :version: 1.16.5
8
26
  :released: August 27, 2025
@@ -45,7 +45,7 @@ The structure of this environment, including some generated migration scripts, l
45
45
 
46
46
  The directory includes these directories/files:
47
47
 
48
- * ``alembic.ini`` - this is Alembic's main configuration file which is genereated by all templates.
48
+ * ``alembic.ini`` - this is Alembic's main configuration file which is generated by all templates.
49
49
  A detailed walkthrough of this file is later in the section :ref:`tutorial_alembic_ini`.
50
50
  * ``pyproject.toml`` - most modern Python projects have a ``pyproject.toml`` file. Alembic may
51
51
  optionally store project related configuration in this file as well; to use a ``pyproject.toml``
@@ -1,5 +1,5 @@
1
1
  const DOCUMENTATION_OPTIONS = {
2
- VERSION: '1.16.5',
2
+ VERSION: '1.17.0',
3
3
  LANGUAGE: 'en',
4
4
  COLLAPSE_INDEX: false,
5
5
  BUILDER: 'html',