Up to [cvs.NetBSD.org] / pkgsrc / databases / py-alembic
Request diff between arbitrary revisions
Keyword substitution: kv
Default branch: MAIN
py-alembic: updated to 1.13.2 1.13.2 usecase [usecase] [autogenerate] Improve computed column compare function to support multi-line expressions. Pull request courtesy of Georg Wicke-Arndt. bug [bug] [commands] Fixed bug in alembic command stdout where long messages were not properly wrapping at the terminal width. Pull request courtesy Saif Hakim. [bug] [execution] Fixed internal issue where Alembic would call connection.execute() sending an empty tuple to indicate “no params”. In SQLAlchemy 2.1 this case will be deprecated as “empty sequence” is ambiguous as to its intent. [bug] [tests] Fixes to support pytest 8.1 for the test suite. [bug] [autogenerate] [postgresql] Fixed the detection of serial column in autogenerate with tables not under default schema on PostgreSQL
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.
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.
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.
databases: Replace RMD160 checksums with BLAKE2s checksums All checksums have been double-checked against existing RMD160 and SHA512 hashes The following distfiles could not be fetched (some may be only fetched conditionally): ./databases/cstore/distinfo D6.data.ros.gz ./databases/cstore/distinfo cstore0.2.tar.gz ./databases/cstore/distinfo data4.tar.gz
databases: Remove SHA1 distfile hashes
py-alembic: updated to 1.5.2 1.5.2 [bug] [regression] [versioning] Fixed regression where new “loop detection” feature introduced in 757 produced false positives for revision names that have overlapping substrings between revision number and down revision and/or dependency, if the downrev/dependency were not in sequence form. [bug] [environment] Fixed regression where Alembic would fail to create a transaction properly if the sqlalchemy.engine.Connection were a so-called “branched” connection, that is, one where the .connect() method had been called to create a “sub” connection. 1.5.1 [bug] [commands] [installation] Fixed installation issue where the “templates” directory was not being installed, preventing commands like “list_templates” and “init” from working. 1.5.0 [changed] [environment] To accommodate SQLAlchemy 1.4 and 2.0, the migration model now no longer assumes that the SQLAlchemy Connection will autocommit an individual operation. This essentially means that for databases that use non-transactional DDL (pysqlite current driver behavior, MySQL), there is still a BEGIN/COMMIT block that will surround each individual migration. Databases that support transactional DDL should continue to have the same flow, either per migration or per-entire run, depending on the value of the Environment.configure.transaction_per_migration flag. [changed] [environment] A CommandError is raised if a sqlalchemy.engine.Engine is passed to the MigrationContext.configure() method instead of a sqlalchemy.engine.Connection object. Previously, this would be a warning only. [changed] Alembic 1.5.0 now supports Python 2.7 and Python 3.6 and above, as well as SQLAlchemy 1.3.0 and above. Support is removed for Python 3 versions prior to 3.6 and SQLAlchemy versions prior to the 1.3 series.
py-alembic: updated to 1.4.3 1.4.3 bug [bug] [batch] [sqlite] Added support to drop named CHECK constraints that are specified as part of a column, rather than table wide. Previously, only constraints associated with the table were considered. [bug] [mysql] [ops] Fixed issue where the MySQL dialect would not correctly render the server default of a column in an alter operation, if the operation were programmatically generated from an autogenerate pass as it would not accommodate for the full structure of the DefaultClause construct. [bug] [batch] [sqlite] Fixed issue where the CAST applied to a JSON column when copying a SQLite table during batch mode would cause the data to be lost, as SQLite’s CAST with JSON appears to convert the data to the value “0”. The CAST is now skipped in a dialect-specific manner, including for JSON columns on SQLite. Pull request courtesy Sebastián Ramírez. [bug] [commands] The alembic current command no longer creates an alembic_version table in the database if one does not exist already, returning no version as the current version. This allows checking for migrations in parallel without introducing race conditions. Pull request courtesy Nikolay Edigaryev. [bug] [batch] Fixed issue where columns in a foreign-key referenced table would be replaced with null-type columns during a batch operation; while this did not generally have any side effects, it could theoretically impact a batch operation that also targets that table directly and also would interfere with future changes to the .append_column() method to disallow implicit replacement of columns. [bug] [mssql] Fixed issue where the mssql_drop_foreign_key=True flag on op.drop_column would lead to incorrect syntax error due to a typo in the SQL emitted, same typo was present in the test as well so it was not detected. Pull request courtesy Oleg Shigorin.
py-alembic: updated to 1.4.2 1.4.2: bug [bug] [tests] Fixed an issue that prevented the test suite from running with the recently released py.test 5.4.0. [bug] [autogenerate] [mysql] Fixed more false-positive failures produced by the new “compare type” logic first added in 605, particularly impacting MySQL string types regarding flags such as “charset” and “collation”. [bug] [op directives] [oracle] Fixed issue in Oracle backend where a table RENAME with a schema-qualified name would include the schema in the “to” portion, which is rejected by Oracle. usecase [usecase] [autogenerate] Adjusted autogen comparison to accommodate for backends that support computed column reflection, dependent on SQLAlchemy version 1.3.16 or higher. This emits a warning if the SQL expression inside of a Computed value changes between the metadata and the database, as these expressions can’t be changed without dropping and recreating the column. 1.4.1 bug [bug] [autogenerate] Fixed regression caused by the new “type comparison” logic introduced in 1.4 as part of 605 where comparisons of MySQL “unsigned integer” datatypes would produce false positives, as the regular expression logic was not correctly parsing the “unsigned” token when MySQL’s default display width would be returned by the database. Pull request courtesy Paul Becotte. [bug] [environment] Error message for “path doesn’t exist” when loading up script environment now displays the absolute path. Pull request courtesy Rowan Hart. [bug] [autogenerate] Fixed regression in 1.4.0 due to 647 where unique constraint comparison with mixed case constraint names while not using a naming convention would produce false positives during autogenerate. [bug] [environment] The check for matched rowcount when the alembic_version table is updated or deleted from is now conditional based on whether or not the dialect supports the concept of “rowcount” for UPDATE or DELETE rows matched. Some third party dialects do not support this concept. Pull request courtesy Ke Zhu. [bug] [operations] Fixed long-standing bug where an inline column CHECK constraint would not be rendered within an “ADD COLUMN” operation. The DDL compiler is now consulted for inline constraints within the Operations.add_column() method as is done for regular CREATE TABLE operations.
py-alembic: updated to 1.4.0 1.4.0 [feature] [batch] Added new parameters BatchOperations.add_column.insert_before, BatchOperations.add_column.insert_after which provide for establishing the specific position in which a new column should be placed. Also added Operations.batch_alter_table.partial_reordering which allows the complete set of columns to be reordered when the new table is created. Both operations apply only to when batch mode is recreating the whole table using recreate="always". Thanks to Marcin Szymanski for assistance with the implementation. bug [bug] [autogenerate] Adjusted the unique constraint comparison logic in a similar manner as that of 421 did for indexes in order to take into account SQLAlchemy’s own truncation of long constraint names when a naming convention is in use. Without this step, a name that is truncated by SQLAlchemy based on a unique constraint naming convention or hardcoded name will not compare properly. [bug] [autogenerate] A major rework of the “type comparison” logic is in place which changes the entire approach by which column datatypes are compared. Types are now compared based on the DDL string generated by the metadata type vs. the datatype reflected from the database. This means we compare types based on what would actually render and additionally if elements of the types change like string length, those changes are detected as well. False positives like those generated between SQLAlchemy Boolean and MySQL TINYINT should also be resolved. Thanks very much to Paul Becotte for lots of hard work and patience on this one.
py-alembic: updated to 1.3.1 1.3.1 bug [bug] [mssql] Fixed bug in MSSQL dialect where the drop constraint execution steps used to remove server default or implicit foreign key constraint failed to take into account the schema name of the target table. 1.3.0 feature [feature] [command] Added support for ALEMBIC_CONFIG environment variable, refers to the location of the alembic configuration script in lieu of using the -c command line option. bug [bug] [autogenerate] Fixed bug in new Variant autogenerate where the order of the arguments to Variant were mistakenly reversed. misc [change] [compatibility] Some internal modifications have been made to how the names of indexes and unique constraints work to make use of new functions added in SQLAlchemy 1.4, so that SQLAlchemy has more flexibility over how naming conventions may be applied to these objects.
py-alembic: updated to 1.2.1 1.2.1 bug [bug] [command] Reverted the name change of the “revisions” argument to command.stamp() to “revision” as apparently applications are calling upon this argument as a keyword name. Pull request courtesy Thomas Bechtold. Special translations are also added to the command line interface so that it is still known as “revisions” in the CLI. [bug] [tests] Removed the “test requirements” from “setup.py test”, as this command now only emits a removal error in any case and these requirements are unused. 1.2.0 feature [feature] [command] Added new --purge flag to the alembic stamp command, which will unconditionally erase the version table before stamping anything. This is useful for development where non-existent version identifiers might be left within the table. Additionally, alembic.stamp now supports a list of revision identifiers, which are intended to allow setting up muliple heads at once. Overall handling of version identifiers within the alembic.stamp command has been improved with many new tests and use cases added. [feature] [runtime] Added new feature MigrationContext.autocommit_block(), a special directive which will provide for a non-transactional block inside of a migration script. The feature requres that: the database driver (e.g. DBAPI) supports the AUTOCOMMIT isolation mode. The directive also necessarily needs to COMMIT the existing transaction in progress in order to enter autocommit mode. [feature] [commands] Added “post write hooks” to revision generation. These allow custom logic to run after a revision Python script is generated, typically for the purpose of running code formatters such as “Black” or “autopep8”, but may be used for any arbitrary post-render hook as well, including custom Python functions or scripts. The hooks are enabled by providing a [post_write_hooks] section in the alembic.ini file. A single hook is provided which runs an arbitrary Python executable on the newly generated revision script, which can be configured to run code formatters such as Black; full examples are included in the documentation. [feature] [environment] Added new flag --package to alembic init. For environments where the Alembic migration files and such are within the package tree and importable as modules, this flag can be specified which will add the additional __init__.py files in the version location and the environment location.
py-alembic: updated to 1.1.0 1.1.0: bug [bug] [commands] Fixed bug where the double-percent logic applied to some dialects such as psycopg2 would be rendered in --sql mode, by allowing dialect options to be passed through to the dialect used to generate SQL and then providing paramstyle="named" so that percent signs need not be doubled. For users having this issue, existing env.py scripts need to add dialect_opts={"paramstyle": "named"} to their offline context.configure(). See the alembic/templates/generic/env.py template for an example. [bug] [py3k] Fixed use of the deprecated “imp” module, which is used to detect pep3147 availability as well as to locate .pyc files, which started emitting deprecation warnings during the test suite. The warnings were not being emitted earlier during the test suite, the change is possibly due to changes in py.test itself but this is not clear. The check for pep3147 is set to True for any Python version 3.5 or greater now and importlib is used when available. Note that some dependencies such as distutils may still be emitting this warning. Tests are adjusted to accommodate for dependencies that emit the warning as well. [bug] [mysql] Fixed issue where emitting a change of column name for MySQL did not preserve the column comment, even if it were specified as existing_comment. [bug] [setup] Removed the “python setup.py test” feature in favor of a straight run of “tox”. Per Pypa / pytest developers, “setup.py” commands are in general headed towards deprecation in favor of tox. The tox.ini script has been updated such that running “tox” with no arguments will perform a single run of the test suite against the default installed Python interpreter. usecase [usecase] [commands] The “alembic init” command will now proceed if the target directory exists as long as it’s still empty. Previously, it would not proceed if the directory existed. The new behavior is modeled from what git does, to accommodate for container or other deployments where an Alembic target directory may need to be already mounted instead of being created with alembic init. Pull request courtesy Aviskar KC. misc [change] Alembic 1.1 bumps the minimum version of SQLAlchemy to 1.1. As was the case before, Python requirements remain at Python 2.7, or in the 3.x series Python 3.4. [change] [internals] The test suite for Alembic now makes use of SQLAlchemy’s testing framework directly. Previously, Alembic had its own version of this framework that was mostly copied from that of SQLAlchemy to enable testing with older SQLAlchemy versions. The majority of this code is now removed so that both projects can leverage improvements from a common testing framework.
py-alembic: updated to 1.0.11 version: 1.0.11 SQLite server default reflection will ensure parenthesis are surrounding a column default expression that is detected as being a non-constant expression, such as a datetime() default, to accommodate for the requirement that SQL expressions have to be parenthesized when being sent as DDL. Parenthesis are not added to constant expressions to allow for maximum cross-compatibility with other dialects and existing test suites (such as Alembic's), which necessarily entails scanning the expression to eliminate for constant numeric and string values. The logic is added to the two "reflection->DDL round trip" paths which are currently autogenerate and batch migration. Within autogenerate, the logic is on the rendering side, whereas in batch the logic is installed as a column reflection hook. Improved SQLite server default comparison to accommodate for a text() construct that added parenthesis directly vs. a construct that relied upon the SQLAlchemy SQLite dialect to render the parenthesis, as well as improved support for various forms of constant expressions such as values that are quoted vs. non-quoted. Fixed bug where the "literal_binds" flag was not being set when autogenerate would create a server default value, meaning server default comparisons would fail for functions that contained literal values. Added support for MySQL "DROP CHECK", which is added as of MySQL 8.0.16, separate from MariaDB's "DROP CONSTRAINT" for CHECK constraints. The MySQL Alembic implementation now checks for "MariaDB" in server_version_info to decide which one to use. Fixed issue where MySQL databases need to use CHANGE COLUMN when altering a server default of CURRENT_TIMESTAMP, NOW() and probably other functions that are only usable with DATETIME/TIMESTAMP columns. While MariaDB supports both CHANGE and ALTER COLUMN in this case, MySQL databases only support CHANGE. So the new logic is that if the server default change is against a DateTime-oriented column, the CHANGE format is used unconditionally, as in the vast majority of cases the server default is to be CURRENT_TIMESTAMP which may also be potentially bundled with an "ON UPDATE CURRENT_TIMESTAMP" directive, which SQLAlchemy does not currently support as a distinct field. The fix addiionally improves the server default comparison logic when the "ON UPDATE" clause is present and there are parenthesis to be adjusted for as is the case on some MariaDB versions. Warnings emitted by Alembic now include a default stack level of 2, and in some cases it's set to 3, in order to help warnings indicate more closely where they are originating from. Pull request courtesy Ash Berlin-Taylor. Replaced the Python compatbility routines for getargspec() with a fully vendored version based on getfullargspec() from Python 3.3. Originally, Python was emitting deprecation warnings for this function in Python 3.8 alphas. While this change was reverted, it was observed that Python 3 implementations for getfullargspec() are an order of magnitude slower as of the 3.4 series where it was rewritten against Signature. While Python plans to improve upon this situation, SQLAlchemy projects for now are using a simple replacement to avoid any future issues.
py-alembic: updated to 1.0.10 1.0.10 bug [bug] [commands] Fixed bug introduced in release 0.9.0 where the helptext for commands inadvertently got expanded to include function docstrings from the command.py module. The logic has been adjusted to only refer to the first line(s) preceding the first line break within each docstring, as was the original intent. [bug] [mysql] [operations] Added an assertion in RevisionMap.get_revisions() and other methods which ensures revision numbers are passed as strings or collections of strings. Driver issues particularly on MySQL may inadvertently be passing bytes here which leads to failures later on. [bug] [autogenerate] [mysql] Fixed bug when using the EnvironmentContext.configure.compare_server_default flag set to True where a server default that is introduced in the table metadata on an Integer column, where there is no existing server default in the database, would raise a TypeError. 1.0.9 bug [bug] [operations] Simplified the internal scheme used to generate the alembic.op namespace to no longer attempt to generate full method signatures (e.g. rather than generic *args, **kw) as this was not working in most cases anyway, while in rare circumstances it would in fact sporadically have access to the real argument names and then fail when generating the function due to missing symbols in the argument signature.
py-alembic: updated to 1.0.8 1.0.8 bug [bug] [operations] Removed use of deprecated force parameter for SQLAlchemy quoting functions as this parameter will be removed in a future release. Pull request courtesy Parth Shandilya(ParthS007). [bug] [autogenerate] [postgresql] [py3k] Fixed issue where server default comparison on the PostgreSQL dialect would fail for a blank string on Python 3.7 only, due to a change in regular expression behavior in Python 3.7.
py-alembic: updated to 1.0.7 1.0.7 [bug] [autogenerate] Fixed issue in new comment support where autogenerated Python code for comments wasn’t using repr() thus causing issues with quoting
py-alembic: updated to 1.0.6 1.0.6 feature [feature] [operations] Added Table and Column level comments for supported backends. New methods Operations.create_table_comment() and Operations.drop_table_comment() are added. A new arguments Operations.alter_column.comment and Operations.alter_column.existing_comment are added to Operations.alter_column(). Autogenerate support is also added to ensure comment add/drops from tables and columns are generated as well as that Operations.create_table(), Operations.add_column() both include the comment field from the source Table or Column object.
py-alembic: updated to 1.0.5 1.0.5 * Resolved remaining Python 3 deprecation warnings, covering the use of inspect.formatargspec() with a vendored version copied from the Python standard library, importing collections.abc above Python 3.3 when testing against abstract base classes, fixed one occurrence of log.warn(), as well as a few invalid escape sequences. 1.0.4 * Code hosting has been moved to GitHub, at https://github.com/sqlalchemy/alembic. Additionally, the main Alembic website documentation URL is now https://alembic.sqlalchemy.org.
py-alembic: updated to 1.0.3 1.0.3: Fixed regression caused by 513, where the logic to consume mssql_include was not correctly interpreting the case where the flag was not present, breaking the op.create_index directive for SQL Server as a whole
py-alembic: updated to 1.0.2 1.0.2: [bug] [autogenerate] The system=True flag on Column, used primarily in conjunction with the Postgresql “xmin” column, now renders within the autogenerate render process, allowing the column to be excluded from DDL. Additionally, adding a system=True column to a model will produce no autogenerate diff as this column is implicitly present in the database. [bug] [mssql] Fixed issue where usage of the SQL Server mssql_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.
py-alembic: updated to 1.0.1 1.0.1: Fixed an issue where revision descriptions were essentially being formatted twice. Any revision description that contained characters like %, writing output to stdout will fail because the call to config.print_stdout attempted to format any additional args passed to the function. This fix now only applies string formatting if any args are provided along with the output text. Fixed issue where removed method union_update() was used when a customized MigrationScript instance included entries in the .imports data member, raising an AttributeError.
py-alembic: updated to 1.0.0 1.0.0: [feature] [general] For Alembic 1.0, Python 2.6 / 3.3 support is being dropped, allowing a fixed setup.py to be built as well as universal wheels. Pull request courtesy Hugo. [feature] [general] With the 1.0 release, Alembic’s minimum SQLAlchemy support version moves to 0.9.0, previously 0.7.9. [bug] [batch] Fixed issue in batch where dropping a primary key column, then adding it back under the same name but without the primary_key flag, would not remove it from the existing PrimaryKeyConstraint. If a new PrimaryKeyConstraint is added, it is used as-is, as was the case before.
py-alembic: updated to 0.9.10 version 0.9.10 The "op.drop_constraint()" directive will now render using repr() for the schema name, in the same way that "schema" renders for all the other op directives. Added basic capabilities for external dialects to support rendering of "nested" types, like arrays, in a manner similar to that of the Postgresql dialect. Fixed issue where "autoincrement=True" would not render for a column that specified it, since as of SQLAlchemy 1.1 this is no longer the default value for "autoincrement". Note the behavior only takes effect against the SQLAlchemy 1.1.0 and higher; for pre-1.1 SQLAlchemy, "autoincrement=True" does not render as was the case before.
py-alembic: updated to 0.9.9: 0.9.9: feature Added new flag --indicate-current to the alembic history command. When listing versions, it will include the token “(current)” to indicate the given version is a current head in the target database. bug The fix for 455 in version 0.9.6 involving MySQL server default comparison was entirely non functional, as the test itself was also broken and didn’t reveal that it wasn’t working. The regular expression to compare server default values like CURRENT_TIMESTAMP to current_timestamp() is repaired. Fixed bug where MySQL server default comparisons were basically not working at all due to incorrect regexp added in 455. Also accommodates for MariaDB 10.2 quoting differences in reporting integer based server defaults. Fixed bug in op.drop_constraint() for MySQL where quoting rules would not be applied to the constraint name.
py-alembic: updated to 0.9.8 version: 0.9.8 Fixed bug where the :meth:.Script.as_revision_number method did not accommodate for the 'heads' identifier, which in turn caused the :meth:.EnvironmentContext.get_head_revisions and :meth:.EnvironmentContext.get_revision_argument methods to be not usable when multiple heads were present. The :meth:.EnvironmentContext.get_head_revisions method returns a tuple in all cases as documented. Fixed bug where autogenerate of :class:.ExcludeConstraint would render a raw quoted name for a Column that has case-sensitive characters, which when invoked as an inline member of the Table would produce a stack trace that the quoted name is not found. An incoming Column object is now rendered as sa.column('name'). Fixed bug where the indexes would not be included in a migration that was dropping the owning table. The fix now will also emit DROP INDEX for the indexes ahead of time, but more importantly will include CREATE INDEX in the downgrade migration. Fixed the autogenerate of the module prefix when rendering the text_type parameter of postgresql.HSTORE, in much the same way that we do for ARRAY's type and JSON's text_type. Added support for DROP CONSTRAINT to the MySQL Alembic dialect to support MariaDB 10.2 which now has real CHECK constraints. Note this change does **not** add autogenerate support, only support for op.drop_constraint() to work.
py-alembic: updated to 0.9.7 0.9.7 [bug] [autogenerate] Fixed regression caused by 421 which would cause case-sensitive quoting rules to interfere with the comparison logic for index names, thus causing indexes to show as added for indexes that have case-sensitive names. Works with SQLAlchemy 0.9 and later series. [bug] [autogenerate] [postgresql] Fixed bug where autogenerate would produce a DROP statement for the index implicitly created by a Postgresql EXCLUDE constraint, rather than skipping it as is the case for indexes implicitly generated by unique constraints. Makes use of SQLAlchemy 1.0.x’s improved “duplicates index” metadata and requires at least SQLAlchemy version 1.0.x to function correctly.
py-alembic: update to 0.9.6 0.9.6 feature [feature] [commands] The alembic history command will now make use of the revision environment env.py unconditionally if the revision_environment configuration flag is set to True. Previously, the environment would only be invoked if the history specification were against a database-stored revision token. bug [bug] [commands] Fixed a few Python3.6 deprecation warnings by replacing StopIteration with return, as well as using getfullargspec() instead of getargspec() under Python 3. [bug] [commands] An addition to 441 fixed in 0.9.5, we forgot to also filter for the + sign in migration names which also breaks due to the relative migrations feature. [bug] [autogenerate] Fixed bug expanding upon the fix for 85 which adds the correct module import to the “inner” type for an ARRAY type, the fix now accommodates for the generic sqlalchemy.types.ARRAY type added in SQLAlchemy 1.1, rendering the inner type correctly regardless of whether or not the Postgresql dialect is present. [bug] [mysql] Fixed bug where server default comparison of CURRENT_TIMESTAMP would fail on MariaDB 10.2 due to a change in how the function is represented by the database during reflection. [bug] [autogenerate] Fixed bug where comparison of Numeric types would produce a difference if the Python-side Numeric inadvertently specified a non-None “scale” with a “precision” of None, even though this Numeric type will pass over the “scale” argument when rendering. Pull request courtesy Ivan Mmelnychuk. [bug] [batch] The name of the temporary table in batch mode is now generated off of the original table name itself, to avoid conflicts for the unusual case of multiple batch operations running against the same database schema at the same time. [bug] [autogenerate] A ForeignKeyConstraint can now render correctly if the link_to_name flag is set, as it will not attempt to resolve the name from a “key” in this case. Additionally, the constraint will render as-is even if the remote column name isn’t present on the referenced remote table. [bug] [runtime] [py3k] Reworked “sourceless” system to be fully capable of handling any combination of: Python2/3x, pep3149 or not, PYTHONOPTIMIZE or not, for locating and loading both env.py files as well as versioning files. This includes: locating files inside of __pycache__ as well as listing out version files that might be only in versions/__pycache__, deduplicating version files that may be in versions/__pycache__ and versions/ at the same time, correctly looking for .pyc or .pyo files based on if pep488 is present or not. The latest Python3x deprecation warnings involving importlib are also corrected.
databases/py-alembic: Import version 0.9.5 from pkgsrc-wip 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. Packaged by Kamel Ibn Aziz Derouiche and updated by me.