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.
- {alembic-1.16.5 → alembic-1.17.0}/MANIFEST.in +1 -1
- {alembic-1.16.5/alembic.egg-info → alembic-1.17.0}/PKG-INFO +2 -3
- {alembic-1.16.5 → alembic-1.17.0}/alembic/__init__.py +1 -1
- {alembic-1.16.5 → alembic-1.17.0}/alembic/ddl/mssql.py +3 -1
- {alembic-1.16.5 → alembic-1.17.0}/alembic/script/base.py +2 -6
- {alembic-1.16.5 → alembic-1.17.0}/alembic/script/write_hooks.py +6 -10
- {alembic-1.16.5/alembic/templates/generic → alembic-1.17.0/alembic/templates/async}/alembic.ini.mako +3 -3
- {alembic-1.16.5/alembic/templates/async → alembic-1.17.0/alembic/templates/generic}/alembic.ini.mako +3 -3
- {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/multidb/alembic.ini.mako +2 -2
- {alembic-1.16.5/alembic/templates/pyproject_async → alembic-1.17.0/alembic/templates/pyproject}/pyproject.toml.mako +2 -2
- {alembic-1.16.5/alembic/templates/pyproject → alembic-1.17.0/alembic/templates/pyproject_async}/pyproject.toml.mako +2 -2
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/fixtures.py +24 -3
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/requirements.py +9 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/suite/test_autogen_computed.py +17 -4
- {alembic-1.16.5 → alembic-1.17.0}/alembic/util/compat.py +14 -30
- {alembic-1.16.5 → alembic-1.17.0}/alembic/util/pyfiles.py +3 -3
- {alembic-1.16.5 → alembic-1.17.0}/alembic/util/sqla_compat.py +7 -0
- {alembic-1.16.5 → alembic-1.17.0/alembic.egg-info}/PKG-INFO +2 -3
- {alembic-1.16.5 → alembic-1.17.0}/alembic.egg-info/SOURCES.txt +3 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/changelog.rst +18 -0
- {alembic-1.16.5/docs/build → alembic-1.17.0/docs/_sources}/tutorial.rst +1 -1
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/documentation_options.js +1 -1
- {alembic-1.16.5 → alembic-1.17.0}/docs/api/autogenerate.html +12 -12
- {alembic-1.16.5 → alembic-1.17.0}/docs/api/commands.html +18 -18
- {alembic-1.16.5 → alembic-1.17.0}/docs/api/config.html +23 -23
- {alembic-1.16.5 → alembic-1.17.0}/docs/api/ddl.html +123 -123
- {alembic-1.16.5 → alembic-1.17.0}/docs/api/index.html +3 -3
- {alembic-1.16.5 → alembic-1.17.0}/docs/api/operations.html +60 -60
- {alembic-1.16.5 → alembic-1.17.0}/docs/api/overview.html +3 -3
- {alembic-1.16.5 → alembic-1.17.0}/docs/api/runtime.html +29 -29
- {alembic-1.16.5 → alembic-1.17.0}/docs/api/script.html +43 -43
- {alembic-1.16.5 → alembic-1.17.0}/docs/autogenerate.html +3 -3
- {alembic-1.16.5 → alembic-1.17.0}/docs/batch.html +3 -3
- {alembic-1.16.5 → alembic-1.17.0}/docs/branches.html +3 -3
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/changelog.rst +18 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/conf.py +2 -2
- {alembic-1.16.5/docs/_sources → alembic-1.17.0/docs/build}/tutorial.rst +1 -1
- {alembic-1.16.5 → alembic-1.17.0}/docs/changelog.html +22 -3
- {alembic-1.16.5 → alembic-1.17.0}/docs/cookbook.html +3 -3
- {alembic-1.16.5 → alembic-1.17.0}/docs/front.html +3 -3
- {alembic-1.16.5 → alembic-1.17.0}/docs/genindex.html +3 -3
- {alembic-1.16.5 → alembic-1.17.0}/docs/index.html +4 -3
- {alembic-1.16.5 → alembic-1.17.0}/docs/naming.html +3 -3
- {alembic-1.16.5 → alembic-1.17.0}/docs/offline.html +3 -3
- {alembic-1.16.5 → alembic-1.17.0}/docs/ops.html +43 -43
- {alembic-1.16.5 → alembic-1.17.0}/docs/py-modindex.html +3 -3
- {alembic-1.16.5 → alembic-1.17.0}/docs/search.html +3 -3
- alembic-1.17.0/docs/searchindex.js +1 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/tutorial.html +4 -4
- alembic-1.17.0/noxfile.py +250 -0
- {alembic-1.16.5 → alembic-1.17.0}/pyproject.toml +38 -3
- {alembic-1.16.5 → alembic-1.17.0}/setup.cfg +2 -3
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_autogen_render.py +4 -1
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_postgresql.py +3 -1
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_version_table.py +2 -0
- alembic-1.17.0/tools/toxnox.py +214 -0
- alembic-1.17.0/tools/warn_tox.py +12 -0
- {alembic-1.16.5 → alembic-1.17.0}/tox.ini +7 -1
- alembic-1.16.5/docs/searchindex.js +0 -1
- {alembic-1.16.5 → alembic-1.17.0}/CHANGES +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/LICENSE +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/README.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/README.unittests.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/__main__.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/autogenerate/__init__.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/autogenerate/api.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/autogenerate/compare.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/autogenerate/render.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/autogenerate/rewriter.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/command.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/config.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/context.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/context.pyi +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/ddl/__init__.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/ddl/_autogen.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/ddl/base.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/ddl/impl.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/ddl/mysql.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/ddl/oracle.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/ddl/postgresql.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/ddl/sqlite.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/environment.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/migration.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/op.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/op.pyi +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/operations/__init__.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/operations/base.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/operations/batch.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/operations/ops.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/operations/schemaobj.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/operations/toimpl.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/py.typed +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/runtime/__init__.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/runtime/environment.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/runtime/migration.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/script/__init__.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/script/revision.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/async/README +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/async/env.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/async/script.py.mako +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/generic/README +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/generic/env.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/generic/script.py.mako +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/multidb/README +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/multidb/env.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/multidb/script.py.mako +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/pyproject/README +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/pyproject/alembic.ini.mako +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/pyproject/env.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/pyproject/script.py.mako +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/pyproject_async/README +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/pyproject_async/alembic.ini.mako +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/pyproject_async/env.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/templates/pyproject_async/script.py.mako +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/__init__.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/assertions.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/env.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/plugin/__init__.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/plugin/bootstrap.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/schemacompare.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/suite/__init__.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/suite/_autogen_fixtures.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/suite/test_autogen_comments.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/suite/test_autogen_diffs.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/suite/test_autogen_fks.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/suite/test_autogen_identity.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/suite/test_environment.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/suite/test_op.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/util.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/testing/warnings.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/util/__init__.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/util/editor.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/util/exc.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/util/langhelpers.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic/util/messaging.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic.egg-info/dependency_links.txt +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic.egg-info/entry_points.txt +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic.egg-info/not-zip-safe +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic.egg-info/requires.txt +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/alembic.egg-info/top_level.txt +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_images/api_overview.png +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/api/autogenerate.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/api/commands.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/api/config.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/api/ddl.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/api/index.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/api/operations.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/api/overview.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/api/runtime.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/api/script.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/autogenerate.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/batch.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/branches.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/cookbook.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/front.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/index.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/naming.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/offline.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_sources/ops.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/basic.css +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/changelog.css +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/clipboard.min.js +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/copybutton.css +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/copybutton.js +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/copybutton_funcs.js +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/doctools.js +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/file.png +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/images/logo_colab.png +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/language_data.js +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/minus.png +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/nature_override.css +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/plus.png +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/pygments.css +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/sbt-webpack-macros.html +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/scripts/bootstrap.js +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/scripts/bootstrap.js.LICENSE.txt +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/scripts/pydata-sphinx-theme.js +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/scripts/sphinx-book-theme.js +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/searchtools.js +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/site_custom_css.css +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/sphinx_highlight.js +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/sphinx_paramlinks.css +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/styles/bootstrap.css +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/styles/pydata-sphinx-theme.css +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/styles/sphinx-book-theme.css +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/styles/theme.css +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/vendor/fontawesome/6.5.2/LICENSE.txt +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/vendor/fontawesome/6.5.2/css/all.min.css +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/vendor/fontawesome/6.5.2/js/all.min.js +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/vendor/fontawesome/6.5.2/js/all.min.js.LICENSE.txt +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/_static/webpack-macros.html +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/Makefile +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/_static/nature_override.css +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/_static/site_custom_css.css +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/_templates/site_custom_sidebars.html +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/api_overview.png +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/autogenerate.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/commands.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/config.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/ddl.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/index.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/operations.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/overview.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/runtime.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/api/script.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/autogenerate.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/batch.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/branches.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/cookbook.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/front.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/index.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/naming.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/offline.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/ops.rst +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/requirements.txt +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/docs/build/unreleased/README.txt +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/setup.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/__init__.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/_large_map.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/conftest.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/requirements.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_autogen_composition.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_autogen_diffs.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_autogen_indexes.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_batch.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_bulk_insert.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_command.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_config.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_editor.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_environment.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_external_dialect.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_impl.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_messaging.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_mssql.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_mysql.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_offline_environment.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_op.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_op_naming_convention.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_oracle.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_post_write.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_revision.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_script_consumption.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_script_production.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_sqlite.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_stubs.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_suite.py +0 -0
- {alembic-1.16.5 → alembic-1.17.0}/tests/test_version_traversal.py +0 -0
- {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.
|
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.
|
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
|
@@ -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:
|
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
|
-
|
42
|
-
|
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:
|
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:
|
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) ->
|
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:
|
123
|
+
path: str, options: dict, ignore_output: bool, command: list[str]
|
128
124
|
) -> None:
|
129
|
-
cwd:
|
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:
|
129
|
+
kw: dict[str, Any] = {}
|
134
130
|
if ignore_output:
|
135
131
|
kw["stdout"] = kw["stderr"] = subprocess.DEVNULL
|
136
132
|
|
{alembic-1.16.5/alembic/templates/generic → alembic-1.17.0/alembic/templates/async}/alembic.ini.mako
RENAMED
@@ -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
|
25
|
-
#
|
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
|
{alembic-1.16.5/alembic/templates/async → alembic-1.17.0/alembic/templates/generic}/alembic.ini.mako
RENAMED
@@ -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
|
24
|
-
#
|
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
|
24
|
-
#
|
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
|
23
|
-
#
|
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
|
23
|
-
#
|
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(
|
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(
|
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
|
-
|
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
|
-
|
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
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
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:
|
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:
|
142
|
-
) ->
|
143
|
-
|
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 =
|
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
|
-
|
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.
|
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.
|
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
|
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``
|