./databases/py-alembic, Database migration tool for SQLAlchemy

[ CVSweb ] [ Homepage ] [ RSS ] [ Required by ] [ Add to tracker ]


Branch: CURRENT, Version: 1.13.2, Package name: py312-alembic-1.13.2, Maintainer: kamelderouiche

Alembic is a database migrations tool written by the author of
SQLAlchemy. A migrations tool can emit ALTER statements to a database
in order to change the structure of tables and other constructs,
provides a system whereby "migration scripts" may be constructed; each
script indicates a particular series of steps that can "upgrade" a
target database to a new version, and optionally a series of steps
that can "downgrade" similarly, doing the same steps in reverse, and
allows the scripts to execute in some sequential manner.


Required to run:
[devel/py-setuptools] [time/py-dateutil] [databases/py-sqlalchemy] [devel/py-mako] [lang/python310]

Master sites:

Filesize: 1178.187 KB

Version history: (Expand)


CVS history: (Expand)


   2024-11-11 08:29:31 by Thomas Klausner | Files touched by this commit (862)
Log message:
py-*: remove unused tool dependency

py-setuptools includes the py-wheel functionality nowadays
   2024-10-14 08:08:41 by Thomas Klausner | Files touched by this commit (21)
Log message:
i*: clean up after python38 removal
   2024-03-06 21:27:46 by Thomas Klausner | Files touched by this commit (3) | Package updated
Log message:
py-alembic: update to 1.13.1.

.. changelog::
    :version: 1.13.1
    :released: December 20, 2023

    .. change::
        :tags: bug, autogenerate
        :tickets: 1337

        Fixed :class:`.Rewriter` so that more than two instances could be chained
        together correctly, also allowing multiple ``process_revision_directives``
        callables to be chained.  Pull request courtesy zrotceh.

    .. change::
        :tags: bug, environment
        :tickets: 1369

        Fixed issue where the method :meth:`.EnvironmentContext.get_x_argument`
        using the :paramref:`.EnvironmentContext.get_x_argument.as_dictionary`
        parameter would fail if an argument key were passed on the command line as
        a name alone, that is, without an equal sign ``=`` or a value. Behavior is
        repaired where this condition is detected and will return a blank string
        for the given key, consistent with the behavior where the ``=`` sign is
        present and no value.  Pull request courtesy Iuri de Silvio.

    .. change::
        :tags: bug, autogenerate
        :tickets: 1370

        Fixed issue where the "unique" flag of an ``Index`` would not \ 
be maintained
        when generating downgrade migrations.  Pull request courtesy Iuri de
        Silvio.

    .. change::
        :tags: bug, versioning
        :tickets: 1373

        Fixed bug in versioning model where a downgrade across a revision with two
        down revisions with one down revision depending on the other, would produce
        an erroneous state in the alembic_version table, making upgrades impossible
        without manually repairing the table.  Thanks much to Saif Hakim for
        the great work on this.

    .. change::
        :tags: bug, typing
        :tickets: 1377

        Updated pep-484 typing to pass mypy "strict" mode, however \ 
including
        per-module qualifications for specific typing elements not yet complete.
        This allows us to catch specific typing issues that have been ongoing
        such as import symbols not properly exported.

.. changelog::
    :version: 1.13.0
    :released: December 1, 2023

    .. change::
        :tags: bug, commands
        :tickets: 1234

        Fixed issue where the ``alembic check`` command did not function correctly
        with upgrade structures that have multiple, top-level elements, as are
        generated from the "multi-env" environment template.  Pull \ 
request courtesy
        Neil Williams.

    .. change::
        :tags: usecase, operations
        :tickets: 1323

        Updated logic introduced in :ticket:`151` to allow ``if_exists`` and
        ``if_not_exists`` on index operations also on SQLAlchemy
        1.4 series. Previously this feature was mistakenly requiring
        the 2.0 series.

    .. change::
        :tags: usecase
        :tickets: 1339

        Replaced ``python-dateutil`` with the standard library module
        `zoneinfo \ 
<https://docs.python.org/3.11/library/zoneinfo.html#module-zoneinfo>`_.
        This module was added in Python 3.9, so previous version will been
        to install the backport of it, available by installing the \ 
``backports.zoneinfo``
        library. The ``alembic[tz]`` option has been updated accordingly.

    .. change::
        :tags: installation, changed
        :tickets: 1359

        Alembic 1.13 now supports Python 3.8 and above.

    .. change::
        :tags: bug, autogenerate
        :tickets: 1361

        Fixed autogenerate issue where ``create_table_comment()`` and
        ``drop_table_comment()`` rendering in a batch table modify would include
        the "table" and "schema" arguments, which are not \ 
accepted in batch as
        these are already part of the top level block.

    .. change::
        :tags: bug, postgresql
        :tickets: 1321, 1327, 1356

        Additional fixes to PostgreSQL expression index compare feature.
        The compare now correctly accommodates casts and differences in
        spacing.
        Added detection logic for operation clauses inside the expression,
        skipping the compare of these expressions.
        To accommodate these changes the logic for the comparison of the
        indexes and unique constraints was moved to the dialect
        implementation, allowing greater flexibility.

.. changelog::
    :version: 1.12.1
    :released: October 26, 2023

    .. change::
        :tags: bug, autogenerate, regression
        :tickets: 1329

        Fixed regression caused by :ticket:`879` released in 1.7.0 where the
        ".info" dictionary of ``Table`` would not render in \ 
autogenerate create
        table statements.  This can be useful for custom create table DDL rendering
        schemes so it is restored.

    .. change::
        :tags: bug, typing
        :tickets: 1325

        Improved typing in the
        :paramref:`.EnvironmentContext.configure.process_revision_directives`
        callable to better indicate that the passed-in type is
        :class:`.MigrationScript`, not the :class:`.MigrationOperation` base class,
        and added typing to the example at :ref:`cookbook_no_empty_migrations` to
        illustrate.

    .. change::
        :tags: bug, operations
        :tickets: 1335

        Repaired :class:`.ExecuteSQLOp` so that it can participate in \ 
"diff"
        operations; while this object is typically not present in a reflected
        operation stream, custom hooks may be adding this construct where it needs
        to have the correct ``to_diff_tuple()`` method.  Pull request courtesy
        Sebastian Bayer.

    .. change::
        :tags: typing, bug
        :tickets: 1058, 1277

        Improved the ``op.execute()`` method to correctly accept the
        ``Executable`` type that is the same which is used in SQLAlchemy
        ``Connection.execute()``.  Pull request courtesy Mihail Milushev.

    .. change::
        :tags: typing, bug
        :tickets: 930

        Improve typing of the revision parameter in various command functions.

    .. change::
        :tags: typing, bug
        :tickets: 1266

        Properly type the :paramref:`.Operations.create_check_constraint.condition`
        parameter of :meth:`.Operations.create_check_constraint` to accept boolean
        expressions.

    .. change::
        :tags: bug, postgresql
        :tickets: 1322

        Fixed autogen render issue where expressions inside of indexes for PG need
        to be double-parenthesized, meaning a single parens must be present within
        the generated ``text()`` construct.

    .. change::
        :tags: usecase
        :tickets: 1304

        Alembic now accommodates for Sequence and Identity that support dialect \ 
kwargs.
        This is a change that will be added to SQLAlchemy v2.1.

.. changelog::
    :version: 1.12.0
    :released: August 31, 2023

    .. change::
        :tags: bug, operations
        :tickets: 1300

        Added support for ``op.drop_constraint()`` to support PostgreSQL
        ``ExcludeConstraint`` objects, as well as other constraint-like objects
        that may be present in third party dialects, by resolving the ``type_``
        parameter to be ``None`` for this case.   Autogenerate has also been
        enhanced to exclude the ``type_`` parameter from rendering within this
        command when  ``type_`` is ``None``.  Pull request courtesy David Hills.

    .. change::
        :tags: bug, commands
        :tickets: 1299

        Fixed issue where the ``revision_environment`` directive in ``alembic.ini``
        was ignored by the ``alembic merge`` command, leading to issues when other
        configurational elements depend upon ``env.py`` being invoked within the
        command.

    .. change::
        :tags: bug, autogenerate
        :tickets: 1302

        Fixed issue where the ``ForeignKeyConstraint.match`` parameter would not be
        rendered in autogenerated migrations.  Pull request courtesy Asib
        Kamalsada.

    .. change::
        :tags: usecase, autogenerate
        :tickets: 1248

        Change the default value of
        :paramref:`.EnvironmentContext.configure.compare_type` to ``True``.
        As Alembic's autogenerate for types was dramatically improved in
        version 1.4 released in 2020, the type comparison feature is now much
        more reliable so is now enabled by default.

    .. change::
        :tags: feature, autogenerate
        :tickets: 1275

        Added new feature to the "code formatter" function which \ 
allows standalone
        executable tools to be run against code, without going through the Python
        interpreter.  Known as the ``exec`` runner, it complements the existing
        ``console_scripts`` runner by allowing non-Python tools such as ``ruff`` to
        be used.   Pull request courtesy Mihail Milushev.

        .. seealso::

            :ref:`post_write_hooks_config`

.. changelog::
    :version: 1.11.3
    :released: August 16, 2023

    .. change::
        :tags: bug, autogenerate, postgresql
        :tickets: 1270

        Improved autogenerate compare of expression based indexes on PostgreSQL
        to produce fewer wrong detections.

    .. change::
        :tags: bug, autogenerate
        :tickets: 1291

        Fixed issue with ``NULLS NOT DISTINCT`` detection in postgresql that
        would keep detecting changes in the index or unique constraint.

    .. change::
        :tags: bug, commands
        :tickets: 1273

        Added ``encoding="locale"`` setting to the use of Python's
        ``ConfigParser.read()``, so that a warning is not generated when using the
        recently added Python feature ``PYTHONWARNDEFAULTENCODING`` specified in
        :pep:`597`. The encoding is passed as the ``"locale"`` string \ 
under Python
        3.10 and greater, which indicates that the system-level locale should be
        used, as was the case already here.  Pull request courtesy Kevin Kirsche.

.. changelog::
    :version: 1.11.2
    :released: August 4, 2023

    .. change::
        :tags: usecase, typing
        :tickets: 1253

        Added typing to the default script mako templates.

    .. change::
        :tags: usecase, autogenerate
        :tickets: 1248

        Added support in autogenerate for ``NULLS NOT DISTINCT`` in
        the PostgreSQL dialect.

    .. change::
        :tags: bug
        :tickets: 1261

        Fixed format string logged when running a post write hook
        Pull request curtesy of Mathieu Défosse.

    .. change::
        :tags: feature, operations
        :tickets: 151

        Added parameters if_exists and if_not_exists for index operations.
        Pull request courtesy of Max Adrian.

.. changelog::
    :version: 1.11.1
    :released: May 17, 2023

    .. change::
        :tags: bug, autogenerate, regression
        :tickets: 1243, 1245

        As Alembic 1.11.0 is considered a major release (Alembic does not use
        semver, nor does its parent project SQLAlchemy; this has been
        :ref:`clarified <versioning_scheme>` in the documentation), change
        :ticket:`1130` modified calling signatures for most operations to consider
        all optional keyword parameters to be keyword-only arguments, to match what
        was always documented and generated by autogenerate. However, two of these
        changes were identified as possibly problematic without a more formal
        deprecation warning being emitted which were the ``table_name`` parameter
        to :meth:`.Operations.drop_index`, which was generated positionally by
        autogenerate prior to version 0.6.3 released in 2014, and ``type_`` in
        :meth:`.Operations.drop_constraint` and
        :meth:`.BatchOperations.drop_constraint`, which was documented positionally
        in one example in the batch documentation.

        These two signatures have been
        restored to allow those particular parameters to be passed positionally. A
        future change will include formal deprecation paths (with warnings) for
        these arguments where they will again become keyword-only in a future
        "Significant Minor" release.

    .. change::
        :tags: bug, typing
        :tickets: 1246

        Fixed typing use of :class:`~sqlalchemy.schema.Column` and other
        generic SQLAlchemy classes.

    .. change::
        :tags: bug, typing, regression
        :tickets: 1244

        Restored the output type of :meth:`.Config.get_section` to include
        ``Dict[str, str]`` as a potential return type, which had been changed to
        immutable ``Mapping[str, str]``. When a section is returned and the default
        is not used, a mutable dictionary is returned.

.. changelog::
    :version: 1.11.0
    :released: May 15, 2023

    .. change::
        :tags: bug, batch
        :tickets: 1237

        Added placeholder classes for :class:`~.sqla.Computed` and
        :class:`~.sqla.Identity` when older 1.x SQLAlchemy versions are in use,
        namely prior to SQLAlchemy 1.3.11 when the :class:`~.sqla.Computed`
        construct was introduced. Previously these were set to None, however this
        could cause issues with certain codepaths that were using ``isinstance()``
        such as one within "batch mode".

    .. change::
        :tags: bug, batch
        :tickets: 1221

        Correctly pass previously ignored arguments ``insert_before`` and
        ``insert_after`` in ``batch_alter_column``

    .. change::
        :tags: change, py3k
        :tickets: 1130

        Argument signatures of Alembic operations now enforce keyword-only
        arguments as passed as keyword and not positionally, such as
        :paramref:`.Operations.create_table.schema`,
        :paramref:`.Operations.add_column.type_`, etc.

    .. change::
        :tags: bug, postgresql
        :tickets: 1230

        Fix autogenerate issue with PostgreSQL :class:`.ExcludeConstraint`
        that included sqlalchemy functions. The function text was previously
        rendered as a plain string without surrounding with ``text()``.

    .. change::
        :tags: bug, mysql, regression
        :tickets: 1240

        Fixed regression caused by :ticket:`1166` released in version 1.10.0 which
        caused MySQL unique constraints with multiple columns to not compare
        correctly within autogenerate, due to different sorting rules on unique
        constraints vs. indexes, which in MySQL are shared constructs.

    .. change::
        :tags: misc
        :tickets: 1220

        Update code snippets within docstrings to use ``black`` code formatting.
        Pull request courtesy of James Addison.

    .. change::
        :tags: bug, typing
        :tickets: 1093

        Updated stub generator script to also add stubs method definitions for the
        :class:`.Operations` class and the :class:`.BatchOperations` class obtained
        from :meth:`.Operations.batch_alter_table`. As part of this change, the
        class hierarchy of :class:`.Operations` and :class:`.BatchOperations` has
        been rearranged on top of a common base class :class:`.AbstractOperations`
        in order to type correctly, as :class:`.BatchOperations` uses different
        method signatures for operations than :class:`.Operations`.

    .. change::
        :tags: bug, typing

        Repaired the return signatures for :class:`.Operations` that mostly
        return ``None``, and were erroneously referring to ``Optional[Table]``
        in many cases.

    .. change::
        :tags: usecase, commands
        :tickets: 1109

        Added quiet option to the command line, using the ``-q/--quiet``
        option. This flag will prevent alembic from logging anything
        to stdout.

    .. change::
        :tags: bug, autogenerate
        :tickets: 1178

        Modified the autogenerate implementation for comparing "server \ 
default"
        values from user-defined metadata to not apply any quoting to the value
        before comparing it to the server-reported default, except for within
        dialect-specific routines as needed. This change will affect the format of
        the server default as passed to the
        :paramref:`.EnvironmentContext.configure.compare_server_default` hook, as
        well as for third party dialects that implement a custom
        ``compare_server_default`` hook in their alembic impl, to be passed \ 
"as is"
        and not including additional quoting.   Custom implementations which rely
        on this quoting should adjust their approach based on observed formatting.

    .. change::
        :tags: bug, api, autogenerate
        :tickets: 1235

        Fixed issue where :func:`.autogenerate.render_python_code` function did not
        provide a default value for the ``user_module_prefix`` variable, leading to
        ``NoneType`` errors when autogenerate structures included user-defined
        types. Added new parameter
        :paramref:`.autogenerate.render_python_code.user_module_prefix` to allow
        this to be set as well as to default to ``None``. Pull request courtesy
        tangkikodo.

    .. change::
        :tags: usecase, asyncio
        :tickets: 1231

        Added :meth:`.AbstractOperations.run_async` to the operation module to
        allow running async functions in the ``upgrade`` or ``downgrade`` migration
        function when running alembic using an async dialect. This function will
        receive as first argument an
        :class:`~sqlalchemy.ext.asyncio.AsyncConnection` sharing the transaction
        used in the migration context.

.. changelog::
    :version: 1.10.4
    :released: April 24, 2023

    .. change::
        :tags: postgresql, autogenerate, feature
        :tickets: 1213

        Added support for autogenerate comparison of indexes on PostgreSQL which
        include SQL sort option, such as ``ASC`` or ``NULLS FIRST``.
        The sort options are correctly detected only when defined using the
        sqlalchemy modifier functions, such as ``asc()`` or ``nulls_first()``,
        or the equivalent methods.
        Passing sort options inside the ``postgresql_ops`` dict is not supported.

    .. change::
        :tags: bug, operations
        :tickets: 1215

        Fixed issue where using a directive such as ``op.create_foreign_key()`` to
        create a self-referential constraint on a single table where the same
        column were present on both sides (e.g. within a composite foreign key)
        would produce an error under SQLAlchemy 2.0 and a warning under SQLAlchemy
        1.4 indicating that a duplicate column were being added to a table.

.. changelog::
    :version: 1.10.3
    :released: April 5, 2023

    .. change::
        :tags: bug, typing
        :tickets: 1191, 1201

        Fixed various typing issues observed with pyright, including issues
        involving the combination of :class:`.Function` and
        :meth:`.MigrationContext.begin_transaction`.

    .. change::
        :tags: bug, autogenerate
        :tickets: 1212

        Fixed error raised by alembic when running autogenerate after removing
        a function based index.

.. changelog::
    :version: 1.10.2
    :released: March 8, 2023

    .. change::
        :tags: bug, ops
        :tickets: 1196

        Fixed regression where Alembic would not run with older SQLAlchemy 1.3
        versions prior to 1.3.24 due to a missing symbol. Workarounds have been
        applied for older 1.3 versions.

.. changelog::
    :version: 1.10.1
    :released: March 6, 2023

    .. change::
        :tags: bug, postgresql
        :tickets: 1184

        Fixed issue regarding PostgreSQL :class:`.ExcludeConstraint`, where
        constraint elements which made use of :func:`.literal_column` could not be
        rendered for autogenerate. Additionally, using SQLAlchemy 2.0.5 or greater,
        :func:`.text()` constructs are also supported within PostgreSQL
        :class:`.ExcludeConstraint` objects for autogenerate render. Pull request
        courtesy Jan Katins.

    .. change::
        :tags: bug, batch, regression
        :tickets: 1195

        Fixed regression for 1.10.0 where :class:`.Constraint` objects were
        suddenly required to have non-None name fields when using batch mode, which
        was not previously a requirement.

.. changelog::
    :version: 1.10.0
    :released: March 5, 2023

    .. change::
        :tags: bug, autogenerate
        :tickets: 1166

        Fixed issue in index detection where autogenerate change detection would
        consider indexes with the same columns but with different order as equal,
        while in general they are not equivalent in how a database will use them.

    .. change::
        :tags: feature, revisioning
        :tickets: 760

        Recursive traversal of revision files in a particular revision directory is
        now supported, by indicating ``recursive_version_locations = true`` in
        alembic.ini. Pull request courtesy ostr00000.

    .. change::
        :tags: bug, autogenerate, sqlite
        :tickets: 1165

        Fixed issue where indexes on SQLite which include SQL expressions would not
        compare correctly, generating false positives under autogenerate. These
        indexes are now skipped, generating a warning, in the same way that
        expression-based indexes on PostgreSQL are skipped and generate warnings
        when SQLAlchemy 1.x installations are in use. Note that reflection of
        SQLite expression-based indexes continues to not yet be supported under
        SQLAlchemy 2.0, even though PostgreSQL expression-based indexes have now
        been implemented.

    .. change::
        :tags: bug, mssql
        :tickets: 1187

        Properly escape constraint name on SQL Server when dropping
        a column while specifying ``mssql_drop_default=True`` or
        ``mssql_drop_check=True`` or ``mssql_drop_foreign_key=True``.

    .. change::
        :tags: usecase, autogenerate, postgresql

        Added support for autogenerate comparison of indexes on PostgreSQL which
        include SQL expressions, when using SQLAlchemy 2.0; the previous warning
        that such indexes were skipped are removed when the new functionality
        is in use.  When using SQLAlchemy versions prior to the 2.0 series,
        the indexes continue to be skipped with a warning.

.. changelog::
    :version: 1.9.4
    :released: February 16, 2023

    .. change::
        :tags: bug, mssql
        :tickets: 1177

        Ongoing fixes for SQL Server server default comparisons under autogenerate,
        adjusting for SQL Server's collapsing of whitespace between SQL function
        arguments when reporting on a function-based server default, as well as its
        arbitrary addition of parenthesis within arguments; the approach has now
        been made more aggressive by stripping the two default strings to compare
        of all whitespace, parenthesis, and quoting characters.

    .. change::
        :tags: bug, postgresql

        Fixed PostgreSQL server default comparison to handle SQL expressions
        sent as ``text()`` constructs, such as ``text("substring('name', 1, \ 
3)")``,
        which previously would raise errors when attempting to run a server-based
        comparison.

    .. change::
        :tags: bug, autogenerate
        :tickets: 1180

        Removed a mis-use of the
        :paramref:`.EnvironmentContext.configure.render_item` callable where the
        "server_default" renderer would be erroneously used within the \ 
server
        default comparison process, which is working against SQL expressions, not
        Python code.

    .. change::
        :tags: bug, commands

        Fixed regression introduced in 1.7.0 where the "config" object \ 
passed to
        the template context when running the :func:`.merge` command
        programmatically failed to be correctly populated. Pull request courtesy
        Brendan Gann.

.. changelog::
    :version: 1.9.3
    :released: February 7, 2023

    .. change::
        :tags: bug, autogenerate
        :tickets: 1167

        Fixed issue where rendering of user-defined types that then went onto use
        the ``.with_variant()`` method would fail to render, if using SQLAlchemy
        2.0's version of variants.

.. changelog::
    :version: 1.9.2
    :released: January 14, 2023

    .. change::
        :tags: bug, typing
        :tickets: 1146, 1147

        Fixed typing definitions for :meth:`.EnvironmentContext.get_x_argument`.

        Typing stubs are now generated for overloaded proxied methods such as
        :meth:`.EnvironmentContext.get_x_argument`.

    .. change::
        :tags: bug, autogenerate
        :tickets: 1152

        Fixed regression caused by :ticket:`1145` where the string transformations
        applied to server defaults caused expressions such as ``(getdate())`` to no
        longer compare as equivalent on SQL Server, others.

.. changelog::
    :version: 1.9.1
    :released: December 23, 2022

    .. change::
        :tags: bug, autogenerate
        :tickets: 1145

        Fixed issue where server default compare would not work for string defaults
        that contained backslashes, due to mis-rendering of these values when
        comparing their contents.

    .. change::
        :tags: bug, oracle

        Implemented basic server default comparison for the Oracle backend;
        previously, Oracle's formatting of reflected defaults prevented any
        matches from occurring.

    .. change::
        :tags: bug, sqlite

        Adjusted SQLite's compare server default implementation to better handle
        defaults with or without parens around them, from both the reflected and
        the local metadata side.

    .. change::
        :tags: bug, mssql

        Adjusted SQL Server's compare server default implementation to better
        handle defaults with or without parens around them, from both the reflected
        and the local metadata side.

.. changelog::
    :version: 1.9.0
    :released: December 15, 2022

    .. change::
        :tags: feature, commands
        :tickets: 724

        Added new Alembic command ``alembic check``. This performs the widely
        requested feature of running an "autogenerate" comparison \ 
between the
        current database and the :class:`.MetaData` that's currently set up for
        autogenerate, returning an error code if the two do not match, based on
        current autogenerate settings. Pull request courtesy Nathan Louie.

        .. seealso::

            :ref:`alembic_check`

    .. change::
        :tags: bug, tests

        Fixed issue in tox.ini file where changes in the tox 4.0 series to the
        format of "passenv" caused tox to not function correctly, in \ 
particular
        raising an error as of tox 4.0.6.

    .. change::
        :tags: bug, typing
        :tickets: 1110

        Fixed typing issue where :paramref:`.revision.process_revision_directives`
        was not fully typed; additionally ensured all ``Callable`` and ``Dict``
        arguments to :meth:`.EnvironmentContext.configure` include parameters in
        the typing declaration.

        Additionally updated the codebase for Mypy 0.990 compliance.

.. changelog::
    :version: 1.8.1
    :released: July 13, 2022

    .. change::
        :tags: bug, sqlite
        :tickets: 1065

        Fixed bug where the SQLite implementation of
        :meth:`.Operations.rename_table` would render an explicit schema name for
        both the old and new table name, which while is the standard ALTER syntax,
        is not accepted by SQLite's syntax which doesn't support a rename across
        schemas. In particular, the syntax issue would prevent batch mode from
        working for SQLite databases that made use of attached databases (which are
        treated as "schemas" in SQLAlchemy).

    .. change::
        :tags: bug, batch
        :tickets: 1021

        Added an error raise for the condition where
        :meth:`.Operations.batch_alter_table` is used in ``--sql`` mode, where the
        operation requires table reflection, as is the case when running against
        SQLite without giving it a fixed ``Table`` object. Previously the operation
        would fail with an internal error.   To get a "move and copy" batch
        operation as a SQL script without connecting to a database,
        a ``Table`` object should be passed to the
        :paramref:`.Operations.batch_alter_table.copy_from` parameter so that
        reflection may be skipped.

.. changelog::
    :version: 1.8.0
    :released: May 31, 2022

    .. change::
        :tags: feature, typing
        :tickets: 764

        :pep:`484` typing annotations have been added to the ``env.py`` and
        revision template files within migration templates. Pull request by Nikita
        Sobolev.

    .. change::
        :tags: usecase, operations
        :tickets: 1037

        The ``op.drop_table()`` operation directive will now trigger the
        ``before_drop()`` and ``after_drop()`` DDL event hooks at the table level,
        which is similar to how the ``before_create()`` and ``after_create()``
        hooks are triggered by the ``op.create_table()`` directive. Note that as
        ``op.drop_table()`` accepts only a table name and optional schema name, the
        ``Table`` object received by the event will not have any information within
        it other than the table name and schema name.

    .. change::
        :tags: installation, changed
        :tickets: 1025

        Alembic 1.8 now supports Python 3.7 and above.

    .. change::
        :tags: changed, environment
        :tickets: 987

        The "Pylons" environment template has been removed as of \ 
Alembic 1.8. This
        template was based on the very old pre-Pyramid Pylons web framework which
        has been long superseded by Pyramid.

    .. change::
        :tags: bug, revisioning
        :tickets: 1026

        Fixed issue where a downgrade using a relative revision would
        fail in case of multiple branches with a single effectively
        head due to interdependencies between revisions.

    .. change::
      :tags: usecase, commands
      :tickets: 1027

      Added new token ``epoch`` to the ``file_template`` option, which will
      populate the integer epoch as determined by ``int(create_date.timestamp())``.
      Pull request courtesy Caio Carvalho.

    .. change::
        :tags: bug, batch
        :tickets: 1034

        Fixed issue in batch mode where CREATE INDEX would not use a new column
        name in the case of a column rename.
   2023-03-29 11:34:15 by Thomas Klausner | Files touched by this commit (96)
Log message:
*: use PYTHON_VERSION instead of _PYTHON_VERSION
   2022-04-29 15:27:48 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
py-alembic: updated to 1.7.7

1.7.7
bug

[bug] [operations]
Fixed issue where using Operations.create_table() in conjunction with a \ 
CheckConstraint that referred to table-bound Column objects rather than string \ 
expressions would be added to the parent table potentially multiple times, \ 
resulting in an incorrect DDL sequence. Pull request courtesy Nicolas CANIART.

[bug] [environment]
The logging.fileConfig() line in env.py templates, which is used to setup Python \ 
logging for the migration run, is now conditional on Config.config_file_name not \ 
being None. Otherwise, the line is skipped as there is no default logging \ 
configuration present.

[bug] [mssql]
Fixed bug where an Operations.alter_column() operation would change a “NOT \ 
NULL” column to “NULL” by emitting an ALTER COLUMN statement that did not \ 
specify “NOT NULL”. (In the absence of “NOT NULL” T-SQL was implicitly \ 
assuming “NULL”). An Operations.alter_column() operation that specifies \ 
Operations.alter_column.type should also specify include either \ 
Operations.alter_column.nullable or Operations.alter_column.existing_nullable to \ 
inform Alembic as to whether the emitted DDL should include “NULL” or “NOT \ 
NULL”; a warning is now emitted if this is missing under this scenario.

1.7.6
usecase

[usecase] [commands]
Add a new command alembic ensure_version, which will ensure that the Alembic \ 
version table is present in the target database, but does not alter its \ 
contents. Pull request courtesy Kai Mueller.

bug

[bug] [batch] [regression]
Fixed regression where usage of a with_variant() datatype in conjunction with \ 
the existing_type option of op.alter_column() under batch mode would lead to an \ 
internal exception.

[bug] [autogenerate]
Implemented support for recognizing and rendering SQLAlchemy “variant” types \ 
going forward into SQLAlchemy 2.0, where the architecture of “variant” \ 
datatypes will be changing.
[bug] [autogenerate] [mysql]
Added a rule to the MySQL impl so that the translation between JSON / LONGTEXT \ 
is accommodated by autogenerate, treating LONGTEXT from the server as equivalent \ 
to an existing JSON in the model.

misc

[mssql]
Removed a warning raised by SQLAlchemy when dropping constraints on MSSQL \ 
regarding statement caching.
   2022-01-05 16:41:32 by Thomas Klausner | Files touched by this commit (289)
Log message:
python: egg.mk: add USE_PKG_RESOURCES flag

This flag should be set for packages that import pkg_resources
and thus need setuptools after the build step.

Set this flag for packages that need it and bump PKGREVISION.
   2022-01-04 21:55:40 by Thomas Klausner | Files touched by this commit (1595)
Log message:
*: bump PKGREVISION for egg.mk users

They now have a tool dependency on py-setuptools instead of a DEPENDS
   2021-11-14 19:42:37 by Adam Ciarcinski | Files touched by this commit (3) | Package updated
Log message:
py-alembic: updated to 1.7.5

1.7.5
Released: November 11, 2021
bug

[bug] [tests]
Adjustments to the test suite to accommodate for error message changes occurring \ 
as of SQLAlchemy 1.4.27.
1.7.4
Released: October 6, 2021
bug

[bug] [regression]
Fixed a regression that prevented the use of post write hooks on python version \ 
lower than 3.9
[bug] [environment]
Fixed issue where the MigrationContext.autocommit_block() feature would fail to \ 
function when using a SQLAlchemy engine using 2.0 future mode.

1.7.3
Released: September 17, 2021
bug

[bug] [mypy]
Fixed type annotations for the “constraint_name” argument of operations \ 
create_primary_key(), create_foreign_key(). Pull request courtesy TilmanK.

1.7.2
Released: September 17, 2021
bug

[bug] [typing]
Added missing attributes from context stubs.

[bug] [mypy]
Fixed an import in one of the .pyi files that was triggering an assertion error \ 
in some versions of mypy.

[bug] [ops] [regression]
Fixed issue where registration of custom ops was prone to failure due to the \ 
registration process running exec() on generated code that as of the 1.7 series \ 
includes pep-484 annotations, which in the case of end user code would result in \ 
name resolution errors when the exec occurs. The logic in question has been \ 
altered so that the annotations are rendered as forward references so that the \ 
exec() can proceed.

1.7.1
Released: August 30, 2021
bug

[bug] [installation]
Corrected “universal wheel” directive in setup.cfg so that building a wheel \ 
does not target Python 2. The PyPi files index for 1.7.0 was corrected manually. \ 
Pull request courtesy layday.

[bug] [pep484]
Fixed issue in generated .pyi files where default values for Optional arguments \ 
were missing, thereby causing mypy to consider them as required.

[bug] [batch] [regression]
Fixed regression in batch mode due to 883 where the “auto” mode of batch \ 
would fail to accommodate any additional migration directives beyond \ 
encountering an add_column() directive, due to a mis-application of the \ 
conditional logic that was added as part of this change, leading to \ 
“recreate” mode not being used in cases where it is required for SQLite such \ 
as for unique constraints.

1.7.0
Released: August 30, 2021
changed

[changed] [installation]
Alembic 1.7 now supports Python 3.6 and above; support for prior versions \ 
including Python 2.7 has been dropped.
[changed] [installation]
Make the python-dateutil library an optional dependency. This library is only \ 
required if the timezone option is used in the Alembic configuration. An extra \ 
require named tz is available with pip install alembic[tz] to install it.

[changed] [installation]
The dependency on pkg_resources which is part of setuptools has been removed, so \ 
there is no longer any runtime dependency on setuptools. The functionality has \ 
been replaced with importlib.metadata and importlib.resources which are both \ 
part of Python std.lib, or via pypy dependency importlib-metadata for Python \ 
version < 3.8 and importlib-resources for Python version < 3.9 (while \ 
importlib.resources was added to Python in 3.7, it did not include the \ 
“files” API until 3.9).

feature

[feature] [environment]
Enhance version_locations parsing to handle paths containing spaces. The new \ 
configuration option version_path_separator specifies the character to use when \ 
splitting the version_locations string. The default for new configurations is \ 
version_path_separator = os, which will use os.pathsep (e.g., ; on Windows).

[feature] [tests]
Created a “test suite” similar to the one for SQLAlchemy, allowing \ 
developers of third-party dialects to test their code against a set of Alembic \ 
tests that have been specially selected to exercise back-end database \ 
operations. At the time of release, third-party dialects that have adopted the \ 
Alembic test suite to verify compatibility include CockroachDB and SAP ASE \ 
(Sybase).

[feature] [general]
pep-484 type annotations have been added throughout the library. Additionally, \ 
stub .pyi files have been added for the “dynamically” generated Alembic \ 
modules alembic.op and alembic.config, which include complete function \ 
signatures and docstrings, so that the functions in these namespaces will have \ 
both IDE support (vscode, pycharm, etc) as well as support for typing tools like \ 
Mypy. The files themselves are statically generated from their source functions \ 
within the source tree.
usecase

[usecase] [batch]
Named CHECK constraints are now supported by batch mode, and will automatically \ 
be part of the recreated table assuming they are named. They also can be \ 
explicitly dropped using op.drop_constraint(). For “unnamed” CHECK \ 
constraints, these are still skipped as they cannot be distinguished from the \ 
CHECK constraints that are generated by the Boolean and Enum datatypes.
Note that this change may require adjustments to migrations that drop or rename \ 
columns which feature an associated named check constraint, such that an \ 
additional op.drop_constraint() directive should be added for that named \ 
constraint as there will no longer be an associated column for it; for the \ 
Boolean and Enum datatypes, an existing_type keyword may be passed to \ 
BatchOperations.drop_constraint as well.
See also Changing the Type of Boolean, Enum and other implicit CHECK datatypes
Including CHECK constraints

bug

[bug] [operations]
Fixed regression due to 803 where the .info and .comment attributes of Table \ 
would be lost inside of the DropTableOp class, which when “reversed” into a \ 
CreateTableOp would then have lost these elements. Pull request courtesy Nicolas \ 
CANIART.

[bug] [batch] [sqlite]
Batch “auto” mode will now select for “recreate” if the add_column() \ 
operation is used on SQLite, and the column itself meets the criteria for SQLite \ 
where ADD COLUMN is not allowed, in this case a functional or parenthesized SQL \ 
expression or a Computed (i.e. generated) column.

[bug] [commands]
Re-implemented the python-editor dependency as a small internal function to \ 
avoid the need for external dependencies.

[bug] [postgresql]
Fixed issue where usage of the PostgreSQL postgresql_include option within a \ 
Operations.create_index() would raise a KeyError, as the additional column(s) \ 
need to be added to the table object used by the construct internally. The issue \ 
is equivalent to the SQL Server issue fixed in 513. Pull request courtesy Steven \ 
Bronson.

1.6.5
Released: May 27, 2021
bug

[bug] [autogenerate]
Fixed issue where dialect-specific keyword arguments within the DropIndex \ 
operation directive would not render in the autogenerated Python code. As \ 
support was improved for adding dialect specific arguments to directives as part \ 
of 803, in particular arguments such as “postgresql_concurrently” which \ 
apply to the actual create/drop of the index, support was needed for these to \ 
render even in a drop index operation. Pull request courtesy Jet Zhou.

1.6.4
Released: May 24, 2021
bug

[bug] [op directives] [regression]
Fixed regression caused by just fixed 844 that scaled back the filter for \ 
unique=True/index=True too far such that these directives no longer worked for \ 
the op.create_table() op, this has been fixed.

1.6.3
Released: May 21, 2021
bug

[bug] [autogenerate] [regression]
Fixed 1.6-series regression where UniqueConstraint and to a lesser extent Index \ 
objects would be doubled up in the generated model when the unique=True / \ 
index=True flags were used.

[bug] [autogenerate]
Fixed a bug where paths defined in post-write hook options would be wrongly \ 
escaped in non posix environment (Windows).

[bug] [regression] [versioning]
Fixed regression where a revision file that contained its own down revision as a \ 
dependency would cause an endless loop in the traversal logic.

1.6.2
Released: May 6, 2021
bug

[bug] [regression] [versioning]
Fixed additional regression nearly the same as that of 838 just released in \ 
1.6.1 but within a slightly different codepath, where “alembic downgrade \ 
head” (or equivalent) would fail instead of iterating no revisions.

1.6.1
Released: May 6, 2021
bug

[bug] [regression] [versioning]
Fixed regression in new revisioning traversal where “alembic downgrade base” \ 
would fail if the database itself were clean and unversioned; additionally \ 
repairs the case where downgrade would fail if attempting to downgrade to the \ 
current head that is already present.

1.6.0
Released: May 3, 2021
feature

[feature] [autogenerate]
Fix the documentation regarding the default command-line argument position of \ 
the revision script filename within the post-write hook arguments. Implement a \ 
REVISION_SCRIPT_FILENAME token, enabling the position to be changed. Switch from \ 
str.split() to shlex.split() for more robust command-line argument parsing.

[feature]
Implement a .cwd (current working directory) suboption for post-write hooks (of \ 
type console_scripts). This is useful for tools like pre-commit, which rely on \ 
the working directory to locate the necessary config files. Add pre-commit as an \ 
example to the documentation. Minor change: rename some variables from ticket \ 
819 to improve readability.

bug

[bug] [autogenerate]
Refactored the implementation of MigrateOperation constructs such as \ 
CreateIndexOp, CreateTableOp, etc. so that they no longer rely upon maintaining \ 
a persistent version of each schema object internally; instead, the state \ 
variables of each operation object will be used to produce the corresponding \ 
construct when the operation is invoked. The rationale is so that environments \ 
which make use of operation-manipulation schemes such as those those discussed \ 
in Fine-Grained Autogenerate Generation with Rewriters are better supported, \ 
allowing end-user code to manipulate the public attributes of these objects \ 
which will then be expressed in the final output, an example is \ 
some_create_index_op.kw["postgresql_concurrently"] = True.
Previously, these objects when generated from autogenerate would typically hold \ 
onto the original, reflected element internally without honoring the other state \ 
variables of each construct, preventing the public API from working.

[bug] [environment]
Fixed regression caused by the SQLAlchemy 1.4/2.0 compatibility switch where \ 
calling .rollback() or .commit() explicitly within the \ 
context.begin_transaction() context manager would cause it to fail when the \ 
block ended, as it did not expect that the transaction was manually closed.

[bug] [autogenerate]
Improved the rendering of op.add_column() operations when adding multiple \ 
columns to an existing table, so that the order of these statements matches the \ 
order in which the columns were declared in the application’s table metadata. \ 
Previously the added columns were being sorted alphabetically.

[bug] [versioning]
The algorithm used for calculating downgrades/upgrades/iterating revisions has \ 
been rewritten, to resolve ongoing issues of branches not being handled \ 
consistently particularly within downgrade operations, as well as for overall \ 
clarity and maintainability. This change includes that a deprecation warning is \ 
emitted if an ambiguous command such as “downgrade -1” when multiple heads \ 
are present is given.
In particular, the change implements a long-requested use case of allowing \ 
downgrades of a single branch to a branchpoint.
Huge thanks to Simon Bowly for their impressive efforts in successfully tackling \ 
this very difficult problem.

[bug] [batch] ¶
Added missing batch_op.create_table_comment(), batch_op.drop_table_comment() \ 
directives to batch ops.