Changelog
### 1.2.2
```
MkDocs 1.2.2 is a bugfix release for [MkDocs 1.2](https://www.mkdocs.org/about/release-notes/#version-12-2021-06-04) -- make sure you've seen the "major" release notes as well.
* Bugfix (regression in 1.2): Fix serving files/paths with Unicode characters (2464)
* Bugfix (regression in 1.2): Revert livereload file watching to use polling observer (2477)
This had to be done to reasonably support usages that span virtual filesystems such as non-native Docker and network mounts.
This goes back to the polling approach, very similar to that was always used prior, meaning most of the same downsides with latency and CPU usage.
* Revert from 1.2: Remove the requirement of a `site_url` config and the restriction on `use_directory_urls` (2490)
* Bugfix (regression in 1.2): Don't require trailing slash in the URL when serving a directory index in `mkdocs serve` server (2507)
Instead of showing a 404 error, detect if it's a directory and redirect to a path with a trailing slash added, like before.
* Bugfix: Fix `gh_deploy` with config-file in the current directory (2481)
* Bugfix: Fix reversed breadcrumbs in "readthedocs" theme (2179)
* Allow "mkdocs.yaml" as the file name when '--config' is not passed (2478)
* Stop treating ";" as a special character in URLs: urlparse -> urlsplit (2502)
* Improve build performance for sites with many pages (partly already done in 1.2) (2407)
```
Links
- PyPI: https://pypi.org/project/mkdocs
- Changelog: https://pyup.io/changelogs/mkdocs/
- Homepage: https://www.mkdocs.org
Changelog
### 8.2
```
- **NEW**: Snippets: now accepts a list of base paths which will be resolved in the order they are specified.
Compatibility is present with legacy behavior, and a single string path will still be accepted.
- **NEW**: Snippets: allow for specifying certain snippets to auto-append to every file. Useful for appending
abbreviations, reference links, etc.
- **NEW**: Snippets: a snippet base path can be a full path to a file. When a base path is a full path to a file, only
that file will be included from the specified folder. This allows for targeting a one off file outside of the normal
snippet paths(s).
- **NEW**: MagicLink: add GitHub Discussions support to MagicLink. Can now use `?<num>` to link discussions. Full
discussion links will also be shortened if shortening is enabled. (1187)
- **NEW**: MagicLink: add new `normalize_issue_symbols` option to make issues, pull request, and discussion links all
render with `` instead of ``, `!`, and `?` respectively. Input syntax is still the same. Great if you want a GitHub
style look where all issue types are just rendered with ``.
- **FIX**: MagicLink: documentation will not render links with special icons added via CSS so as not to confuse users
that may think that is part of MagicLink. While possible with CSS, MagicLink provides no CSS automatically.
- **FIX**: Tabbed & Details: Fix corner case with lists. (1225)
- **FIX**: Fix issue with unescaping logic in code blocks.
```
### 8.1.1
```
- **FIX**: Ensure content immediately before Details content or Tabbed content gets preserved.
- **FIX**: StripHTML: Fix some corner cases related to stripping comments.
```
### 8.1
```
- **NEW**: Drop support for Python 3.5.
- **NEW**: Officially support Python 3.9.
- **NEW**: Tabbed titles can now have simple Markdown in them which can be parsed and rendered (like emoji, bold, etc.).
- **FIX**: Avoid parsing script tags in PathConverter and B64 extensions.
```
### 8.0.1
```
- **FIX**: Fix issue with `pymdownx-inline` an Pygments 2.7+.
```
### 8.0
```
Please see [Release Notes](./releases/8.0.md8.0) for details on upgrading to 8.0.
- **NEW**: Added SaneHeaders extension.
- **NEW**: SuperFences \& InlineHilite: gracefully handle failing custom formatters and/or validators. Users should add their own debug code to their formatter/validator if they suspect it isn't working.
- **NEW**: SuperFences: if a custom fence validator fails, try the next custom fence until all are exhausted.
- **NEW**: SuperFences: no longer allow custom options in the form `key=` (no value). Only keys with values or keys with no value and no `=` are accepted. Keys with no value will now assume the value to be the key name.
- **NEW**: SuperFences: if `attr_list` extension is enabled, fenced code that use brace attribute list style headers (` {lang id .class attr=value}`) will attach arbitrary attributes that are included in the header to the code element.
- **NEW**: SuperFences: when Pygments is disabled, options (such as `linenums`) included in fenced code headers no longer do anything. If `attr_list` is enabled, and the brace header is used, such options will be treated as HTML attributes. JavaScript highlighter options should be defined in the brace header form with `attr_list` enabled in order to generate appropriate, compatible HTML with the chosen JavaScript highlighter.
- **NEW**: SuperFences: backwards incompatible changes where made to custom fence API. See [Release Notes](./releases/8.0.md8.0) for instructions on how to migrate to the new API. Some temporary support for most of the old format is in place, but is deprecated.
- **NEW**: SuperFences: has removed legacy code tab feature. Associated `legacy_tab_classes` option has been removed. Please use the Tabbed extension to create general purpose tabs for code blocks or other content.
- **NEW**: Highlight: add new option `language_prefix` which controls the prefix applied to language classes when Pygments is not being used.
- **NEW**: Highlight: A new option called `code_attr_on_pre` was added to the Highlight extension and controls whether language classes, and any ids, attributes, and classes that are defined in fenced code attribute list style headers, are attached to the code element or pre element. This has effect when using Pygments.
- **NEW**: Highlight: option `linenums` now defaults to `None` and accepts `None`, `True`, or `False`. `None` is disabled by default, but can be enabled per code block. `True` enables line numbers globally. `False` disables globally and cannot be enabled manually per code block.
- **NEW**: ExtraRawHTML: remove extension.
- **FIX**: Fix issues with complex emphasis combinations in BetterEm.
- **FIX**: Details: fix corner cases related to extension and lists.
- **FIX**: Tabbed: fix corner cases related to extension and lists.
- **FIX**: EscapeAll: Handle HTML entities special.
- **FIX**: SuperFences: Fix parameter unpacking bug.
```
Links
- PyPI: https://pypi.org/project/pymdown-extensions
- Changelog: https://pyup.io/changelogs/pymdown-extensions/
- Repo: https://github.com/facelessuser/pymdown-extensions
Changelog
### 7.2.2
```
* Updated Korean translations
* Fixed 2879: Search highlighting does not properly escape HTML
mkdocs-material-7.2.1+insiders-2.12.1 (2021-07-26)
* Fixed error in social cards plugin when site_description was not set
* Fixed error in social cards plugin for non-ASCII characters
mkdocs-material-7.2.1+insiders-2.12.0 (2021-07-25)
* Added support for social cards
```
### 7.2.1
```
* Fixed 2862: Back-to-top button overlays active search bar
```
### 7.2.0
```
* Added support for search suggestions to save keystrokes
* Added support for search highlighting
* Added support for search sharing (i.e. deep linking)
mkdocs-material-7.1.11+insiders-2.11.1 (2021-07-20)
* Fixed order of tags index, now sorted alphabetically
mkdocs-material-7.1.11+insiders-2.11.0 (2021-07-18)
* Improved Mermaid.js intergration, now stable
* Added support for sequence diagrams
* Added support for entity relationship diagrams
* Added support for cookie consent configuration
* Added feature flag to always enable annotations
```
### 7.1.11
```
* Updated Spanish and Galician translations
mkdocs-material-7.1.10+insiders-2.10.0 (2021-07-10)
* Added support for cookie consent
* Fixed 2807: Back-to-top button not hidden when using sticky tabs
```
### 7.1.10
```
* Refactored appearance of back-to-top button
* Fixed graceful handling of search when browsing locally
```
### 7.1.9
```
* Improved search language support for Thai and Hindi
* Fixed 2761: License comments lined up at end of file
```
### 7.1.8
```
* Refactored analytics integration (because of MkDocs 1.2)
* Added support for Google Analytics 4 (gtag.js)
* Fixed missing escape for aria-label in footer links
```
### 7.1.7
```
* Improved screen reader support
mkdocs-material-7.1.6+insiders-2.9.2 (2021-05-30)
* Moved tags to partial for easier customization
* Added support for hiding tags on any page
```
### 7.1.6
```
* Deprecated seealso admonition qualifier
* Added Mongolian and updated Chinese translations
* Fixed 2429: Version selector not touch-friendly on Android devices
* Fixed 2703: Printed 'Initializing search' albeit ready on mobile
mkdocs-material-7.1.5+insiders-2.9.1 (2021-05-24)
* Added missing guard for linking of content tabs
mkdocs-material-7.1.5+insiders-2.9.0 (2021-05-23)
* Added support for linking of content tabs
```
### 7.1.5
```
* Fixed 2655: Details breaking page margins on print
mkdocs-material-7.1.4+insiders-2.8.0 (2021-05-12)
* Added support for boosting pages in search
mkdocs-material-7.1.4+insiders-2.7.2 (2021-05-08)
* Fixed 2638: Warnings shown when using tags plugin without directory URLs
```
### 7.1.4
```
* Added support for git-revision-date-localized plugin creation date
* Improved footnote styles on :target and :focus
mkdocs-material-7.1.3+insiders-2.7.1 (2021-05-03)
* Fixed git-revision-date-localized plugin integration (2.7.0 regression)
mkdocs-material-7.1.3+insiders-2.7.0 (2021-05-01)
* Added support for tags (with search integration)
```
### 7.1.3
```
* Fixed 2586: Empty table of contents shown (7.1.2 regression)
```
### 7.1.2
```
* Fixed 2554: List markers sometimes overlap floated elements
* Fixed 2563: Adding a class to a h1 breaks the table of contents
* Fixed 2566: Back-to-top button clickable when invisible
mkdocs-material-7.1.1+insiders-2.6.0 (2021-04-11)
* Stay on page when switching versions
```
### 7.1.1
```
* Fixed 2501: Nested definition lists compound bottom margin
* Fixed 2508: Switch extracopyright block to template variable
* Fixed 2533: Search (and other parts) not working in Safari <14
* Fixed 2538: Visual quirk when opening language selector
```
### 7.1.0
```
* Added support for color palette toggle
* Added support for back-to-top button
* Added latest release to repository info (GitHub)
* Slight facelift of repository info (lighter fonts, spacing and icons)
mkdocs-material-7.0.7+insiders-2.5.0 (2021-03-28)
* Added support for version warning
```
### 7.0.7
```
* Updated Hungarian translations
* Fixed 2466: Docker image not based on latest Python and Alpine
* Fixed 2488: Inconsistent header shadow behavior
* Fixed 2492: Inline code blocks in admonition titles missing background
mkdocs-material-7.0.6+insiders-2.4.0 (2021-03-20)
* Added support for custom admonition icons
* Fixed 2444: Code block annotations with extra comments have wrong index
mkdocs-material-7.0.6+insiders-2.3.1 (2021-03-14)
* Fixed anchor offset for permalinks when using sticky navigation tabs
```
Links
- PyPI: https://pypi.org/project/mkdocs-material
- Changelog: https://pyup.io/changelogs/mkdocs-material/
- Repo: https://squidfunk.github.io/mkdocs-material/
Changelog
### 21.7b0
```
_Black_
- Configuration files using TOML features higher than spec v0.5.0 are now supported
(2301)
- Add primer support and test for code piped into black via STDIN (2315)
- Fix internal error when `FORCE_OPTIONAL_PARENTHESES` feature is enabled (2332)
- Accept empty stdin (2346)
- Provide a more useful error when parsing fails during AST safety checks (2304)
Docker
- Add new `latest_release` tag automation to follow latest black release on docker
images (2374)
Integrations
- The vim plugin now searches upwards from the directory containing the current buffer
instead of the current working directory for pyproject.toml. (1871)
- The vim plugin now reads the correct string normalization option in pyproject.toml
(1869)
- The vim plugin no longer crashes Black when there's boolean values in pyproject.toml
(1869)
```
### 21.6b0
```
_Black_
- Fix failure caused by `fmt: skip` and indentation (2281)
- Account for += assignment when deciding whether to split string (2312)
- Correct max string length calculation when there are string operators (2292)
- Fixed option usage when using the `--code` flag (2259)
- Do not call `uvloop.install()` when _Black_ is used as a library (2303)
- Added `--required-version` option to require a specific version to be running (2300)
- Fix incorrect custom breakpoint indices when string group contains fake f-strings
(2311)
- Fix regression where `R` prefixes would be lowercased for docstrings (2285)
- Fix handling of named escapes (`\N{...}`) when `--experimental-string-processing` is
used (2319)
Integrations
- The official Black action now supports choosing what version to use, and supports the
major 3 OSes. (1940)
```
### 21.5b2
```
_Black_
- A space is no longer inserted into empty docstrings (2249)
- Fix handling of .gitignore files containing non-ASCII characters on Windows (2229)
- Respect `.gitignore` files in all levels, not only `root/.gitignore` file (apply
`.gitignore` rules like `git` does) (2225)
- Restored compatibility with Click 8.0 on Python 3.6 when LANG=C used (2227)
- Add extra uvloop install + import support if in python env (2258)
- Fix --experimental-string-processing crash when matching parens are not found (2283)
- Make sure to split lines that start with a string operator (2286)
- Fix regular expression that black uses to identify f-expressions (2287)
_Blackd_
- Add a lower bound for the `aiohttp-cors` dependency. Only 0.4.0 or higher is
supported. (2231)
Packaging
- Release self-contained x86_64 MacOS binaries as part of the GitHub release pipeline
(2198)
- Always build binaries with the latest available Python (2260)
Documentation
- Add discussion of magic comments to FAQ page (2272)
- `--experimental-string-processing` will be enabled by default in the future (2273)
- Fix typos discovered by codespell (2228)
- Fix Vim plugin installation instructions. (2235)
- Add new Frequently Asked Questions page (2247)
- Fix encoding + symlink issues preventing proper build on Windows (2262)
```
### 21.5b1
```
_Black_
- Refactor `src/black/__init__.py` into many files (2206)
Documentation
- Replaced all remaining references to the
[`master`](https://github.com/psf/black/tree/main) branch with the
[`main`](https://github.com/psf/black/tree/main) branch. Some additional changes in
the source code were also made. (2210)
- Sigificantly reorganized the documentation to make much more sense. Check them out by
heading over to [the stable docs on RTD](https://black.readthedocs.io/en/stable/).
(2174)
```
### 21.5b0
```
_Black_
- Set `--pyi` mode if `--stdin-filename` ends in `.pyi` (2169)
- Stop detecting target version as Python 3.9+ with pre-PEP-614 decorators that are
being called but with no arguments (2182)
_Black-Primer_
- Add `--no-diff` to black-primer to suppress formatting changes (2187)
```
### 21.4b2
```
_Black_
- Fix crash if the user configuration directory is inaccessible. (2158)
- Clarify
[circumstances](https://github.com/psf/black/blob/master/docs/the_black_code_style.md#pragmatism)
in which _Black_ may change the AST (2159)
- Allow `.gitignore` rules to be overridden by specifying `exclude` in `pyproject.toml`
or on the command line. (2170)
_Packaging_
- Install `primer.json` (used by `black-primer` by default) with black. (2154)
```
### 21.4b1
```
_Black_
- Fix crash on docstrings ending with "\\ ". (2142)
- Fix crash when atypical whitespace is cleaned out of dostrings (2120)
- Reflect the `--skip-magic-trailing-comma` and `--experimental-string-processing` flags
in the name of the cache file. Without this fix, changes in these flags would not take
effect if the cache had already been populated. (2131)
- Don't remove necessary parentheses from assignment expression containing assert /
return statements. (2143)
_Packaging_
- Bump pathspec to >= 0.8.1 to solve invalid .gitignore exclusion handling
```
### 21.4b0
```
_Black_
- Fixed a rare but annoying formatting instability created by the combination of
optional trailing commas inserted by `Black` and optional parentheses looking at
pre-existing "magic" trailing commas. This fixes issue 1629 and all of its many many
duplicates. (2126)
- `Black` now processes one-line docstrings by stripping leading and trailing spaces,
and adding a padding space when needed to break up """". (1740)
- `Black` now cleans up leading non-breaking spaces in comments (2092)
- `Black` now respects `--skip-string-normalization` when normalizing multiline
docstring quotes (1637)
- `Black` no longer removes all empty lines between non-function code and decorators
when formatting typing stubs. Now `Black` enforces a single empty line. (1646)
- `Black` no longer adds an incorrect space after a parenthesized assignment expression
in if/while statements (1655)
- Added `--skip-magic-trailing-comma` / `-C` to avoid using trailing commas as a reason
to split lines (1824)
- fixed a crash when PWD=/ on POSIX (1631)
- fixed "I/O operation on closed file" when using --diff (1664)
- Prevent coloured diff output being interleaved with multiple files (1673)
- Added support for PEP 614 relaxed decorator syntax on python 3.9 (1711)
- Added parsing support for unparenthesized tuples and yield expressions in annotated
assignments (1835)
- added `--extend-exclude` argument (PR 2005)
- speed up caching by avoiding pathlib (1950)
- `--diff` correctly indicates when a file doesn't end in a newline (1662)
- Added `--stdin-filename` argument to allow stdin to respect `--force-exclude` rules
(1780)
- Lines ending with `fmt: skip` will now be not formatted (1800)
- PR 2053: Black no longer relies on typed-ast for Python 3.8 and higher
- PR 2053: Python 2 support is now optional, install with
`python3 -m pip install black[python2]` to maintain support.
- Exclude `venv` directory by default (1683)
- Fixed "Black produced code that is not equivalent to the source" when formatting
Python 2 docstrings (2037)
_Packaging_
- Self-contained native _Black_ binaries are now provided for releases via GitHub
Releases (1743)
```
### 20.8b1
```
_Packaging_
- explicitly depend on Click 7.1.2 or newer as `Black` no longer works with versions
older than 7.0
```
### 20.8b0
```
_Black_
- re-implemented support for explicit trailing commas: now it works consistently within
any bracket pair, including nested structures (1288 and duplicates)
- `Black` now reindents docstrings when reindenting code around it (1053)
- `Black` now shows colored diffs (1266)
- `Black` is now packaged using 'py3' tagged wheels (1388)
- `Black` now supports Python 3.8 code, e.g. star expressions in return statements
(1121)
- `Black` no longer normalizes capital R-string prefixes as those have a
community-accepted meaning (1244)
- `Black` now uses exit code 2 when specified configuration file doesn't exit (1361)
- `Black` now works on AWS Lambda (1141)
- added `--force-exclude` argument (1032)
- removed deprecated `--py36` option (1236)
- fixed `--diff` output when EOF is encountered (526)
- fixed ` fmt: off` handling around decorators (560)
- fixed unstable formatting with some ` type: ignore` comments (1113)
- fixed invalid removal on organizing brackets followed by indexing (1575)
- introduced `black-primer`, a CI tool that allows us to run regression tests against
existing open source users of Black (1402)
- introduced property-based fuzzing to our test suite based on Hypothesis and
Hypothersmith (1566)
- implemented experimental and disabled by default long string rewrapping (1132),
hidden under a `--experimental-string-processing` flag while it's being worked on;
this is an undocumented and unsupported feature, you lose Internet points for
depending on it (1609)
Vim plugin
- prefer virtualenv packages over global packages (1383)
```
Links
- PyPI: https://pypi.org/project/black
- Changelog: https://pyup.io/changelogs/black/
- Repo: https://github.com/psf/black
Changelog
### 0.36.2
```
- Updated vendored ``packaging`` library to v20.8
- Fixed wheel sdist missing ``LICENSE.txt``
- Don't use default ``macos/arm64`` deployment target in calculating the
platform tag for fat binaries (PR by Ronald Oussoren)
```
### 0.36.1
```
- Fixed ``AssertionError`` when ``MACOSX_DEPLOYMENT_TARGET`` was set to ``11``
(PR by Grzegorz Bokota and François-Xavier Coudert)
- Fixed regression introduced in 0.36.0 on Python 2.7 when a custom generator
name was passed as unicode (Scikit-build)
(``TypeError: 'unicode' does not have the buffer interface``)
```
### 0.36.0
```
- Added official Python 3.9 support
- Updated vendored ``packaging`` library to v20.7
- Switched to always using LF as line separator when generating ``WHEEL`` files
(on Windows, CRLF was being used instead)
- The ABI tag is taken from the sysconfig SOABI value. On PyPy the SOABI value
is ``pypy37-pp73`` which is not compliant with PEP 3149, as it should have
both the API tag and the platform tag. This change future-proofs any change
in PyPy's SOABI tag to make sure only the ABI tag is used by wheel.
- Fixed regression and test for ``bdist_wheel --plat-name``. It was ignored for
C extensions in v0.35, but the regression was not detected by tests.
```
### 0.35.1
```
- Replaced install dependency on ``packaging`` with a vendored copy of its
``tags`` module
- Fixed ``bdist_wheel`` not working on FreeBSD due to mismatching platform tag
name (it was not being converted to lowercase)
```
### 0.35.0
```
- Switched to the packaging_ library for computing wheel tags
- Fixed a resource leak in ``WheelFile.open()`` (PR by Jon Dufresne)
.. _packaging: https://pypi.org/project/packaging/
```
Links
- PyPI: https://pypi.org/project/wheel
- Changelog: https://pyup.io/changelogs/wheel/
- Repo: https://github.com/pypa/wheel
Changelog
### 1.6.5
```
:released: May 27, 2021
.. change::
:tags: bug, autogenerate
:tickets: 849
Fixed issue where dialect-specific keyword arguments within the
:class:`.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 :ticket:`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.
.. changelog::
```
### 1.6.4
```
:released: May 24, 2021
.. change::
:tags: bug, regression, op directives
:tickets: 848
Fixed regression caused by just fixed :ticket:`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.
.. changelog::
```
### 1.6.3
```
:released: May 21, 2021
.. change::
:tags: bug, regression, autogenerate
:tickets: 844
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.
.. change::
:tags: bug, autogenerate
:tickets: 839
Fixed a bug where paths defined in post-write hook options
would be wrongly escaped in non posix environment (Windows).
.. change::
:tags: bug, regression, versioning
:tickets: 843
Fixed regression where a revision file that contained its own down revision
as a dependency would cause an endless loop in the traversal logic.
.. changelog::
```
### 1.6.2
```
:released: May 6, 2021
.. change::
:tags: bug, versioning, regression
:tickets: 839
Fixed additional regression nearly the same as that of :ticket:`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.
.. changelog::
```
### 1.6.1
```
:released: May 6, 2021
.. change::
:tags: bug, versioning, regression
:tickets: 838
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.
.. changelog::
```
### 1.6.0
```
:released: May 3, 2021
.. change::
:tags: bug, autogenerate
:tickets: 803
Refactored the implementation of :class:`.MigrateOperation` constructs such
as :class:`.CreateIndexOp`, :class:`.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
:ref:`autogen_rewriter` 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.
.. change::
:tags: bug, environment
:tickets: 829
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.
.. change::
:tags: bug, autogenerate
:tickets: 827
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.
.. change::
:tags: feature, autogenerate
:tickets: 819
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.
.. change::
:tags: feature
:tickets: 822
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.
.. change::
:tags: bug, versioning
:tickets: 765, 464
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.
.. change::
:tags: bug, batch
:tickets: 799
Added missing ``batch_op.create_table_comment()``,
``batch_op.drop_table_comment()`` directives to batch ops.
.. changelog::
```
### 1.5.8
```
:released: March 23, 2021
.. change::
:tags: bug, environment
:tickets: 816
Fixed regression caused by SQLAlchemy 1.4 where the "alembic current"
command would fail due to changes in the ``URL`` object.
.. changelog::
```
### 1.5.7
```
:released: March 11, 2021
.. change::
:tags: bug, autogenerate
:tickets: 813
Adjusted the recently added
:paramref:`.EnvironmentContext.configure.include_name` hook to accommodate
for additional object types such as "views" that don't have a parent table,
to support third party recipes and extensions. Pull request courtesy Oliver
Rice.
.. changelog::
```
### 1.5.6
```
:released: March 5, 2021
.. change::
:tags: bug, mssql, operations
:tickets: 812
Fixed bug where the "existing_type" parameter, which the MSSQL dialect
requires in order to change the nullability of a column in the absence of
also changing the column type, would cause an ALTER COLUMN operation to
incorrectly render a second ALTER statement without the nullability if a
new type were also present, as the MSSQL-specific contract did not
anticipate all three of "nullability", "type_" and "existing_type" being
sent at the same time.
.. change::
:tags: template
:ticket: 805
Add async template to Alembic to bootstrap environments that use
async DBAPI. Updated the cookbook to include a migration guide
on how to adapt an existing enviroment for use with DBAPI drivers.
.. changelog::
```
### 1.5.5
```
:released: February 20, 2021
.. change::
:tags: bug
Adjusted the use of SQLAlchemy's ".copy()" internals to use "._copy()"
for version 1.4.0, as this method is being renamed.
.. change::
:tags: bug, environment
:tickets: 797
Added new config file option ``prepend_sys_path``, which is a series of
paths that will be prepended to sys.path; the default value in newly
generated alembic.ini files is ".". This fixes a long-standing issue
where for some reason running the alembic command line would not place the
local "." path in sys.path, meaning an application locally present in "."
and importable through normal channels, e.g. python interpreter, pytest,
etc. would not be located by Alembic, even though the ``env.py`` file is
loaded relative to the current path when ``alembic.ini`` contains a
relative path. To enable for existing installations, add the option to the
alembic.ini file as follows::
sys.path path, will be prepended to sys.path if present.
defaults to the current working directory.
prepend_sys_path = .
.. seealso::
:ref:`installation` - updated documentation reflecting that local
installation of the project is not necessary if running the Alembic cli
from the local path.
.. changelog::
```
### 1.5.4
```
:released: February 3, 2021
.. change::
:tags: bug, versioning
:tickets: 789
Fixed bug in versioning model where a downgrade across a revision with a
dependency on another branch, yet an ancestor is also dependent on that
branch, would produce an erroneous state in the alembic_version table,
making upgrades impossible without manually repairing the table.
.. changelog::
```
### 1.5.3
```
:released: January 29, 2021
.. change::
:tags: bug, autogenerate
:tickets: 786
Changed the default ordering of "CREATE" and "DROP" statements indexes and
unique constraints within the autogenerate process, so that for example in
an upgrade() operation, a particular index or constraint that is to be
replaced such as for a casing convention change will not produce any naming
conflicts. For foreign key constraint objects, this is already how
constraints are ordered, and for table objects, users would normally want
to use :meth:`.Operations.rename_table` in any case.
.. change::
:tags: bug, autogenerate, mssql
:tickets: 787
Fixed assorted autogenerate issues with SQL Server:
* ignore default reflected identity on primary_key columns
* improve server default comparison
.. change::
:tags: bug, mysql, autogenerate
:tickets: 788
Fixed issue where autogenerate rendering of ``op.alter_column()`` would
fail to include MySQL ``existing_nullable=False`` if the column were part
of a primary key constraint within the table metadata.
.. changelog::
```
### 1.5.2
```
:released: January 20, 2021
.. change::
:tags: bug, versioning, regression
:tickets: 784
Fixed regression where new "loop detection" feature introduced in
:ticket:`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.
.. change::
:tags: bug, environment
:tickets: 782
Fixed regression where Alembic would fail to create a transaction properly
if the :class:`sqlalchemy.engine.Connection` were a so-called "branched"
connection, that is, one where the ``.connect()`` method had been called to
create a "sub" connection.
.. changelog::
```
### 1.5.1
```
:released: January 19, 2021
.. change::
:tags: bug, installation, commands
:tickets: 780
Fixed installation issue where the "templates" directory was not being
installed, preventing commands like "list_templates" and "init" from
working.
.. changelog::
```
### 1.5.0
```
:released: January 18, 2021
.. change::
:tags: usecase, operations
:tickets: 730
Added support for rendering of "identity" elements on
:class:`.Column` objects, supported in SQLAlchemy via
the :class:`.Identity` element introduced in version 1.4.
Adding columns with identity is supported on PostgreSQL,
MSSQL and Oracle. Changing the identity options or removing
it is supported only on PostgreSQL and Oracle.
.. change::
:tags: 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 :paramref:`.Environment.configure.transaction_per_migration`
flag.
.. change::
:tags: changed, environment
A :class:`.CommandError` is raised if a ``sqlalchemy.engine.Engine`` is
passed to the :meth:`.MigrationContext.configure` method instead of a
``sqlalchemy.engine.Connection`` object. Previously, this would be a
warning only.
.. change::
:tags: bug, operations
:tickets: 753
Modified the ``add_column()`` operation such that the ``Column`` object in
use is shallow copied to a new instance if that ``Column`` is already
attached to a ``table()`` or ``Table``. This accommodates for the change
made in SQLAlchemy issue 5618 which prohibits a ``Column`` from being
associated with multiple ``table()`` objects. This resumes support for
using a ``Column`` inside of an Alembic operation that already refers to a
parent ``table()`` or ``Table`` as well as allows operation objects just
autogenerated to work.
.. change::
:tags: feature, autogenerate
:tickets: 650
Added new hook :paramref:`.EnvironmentContext.configure.include_name`,
which complements the
:paramref:`.EnvironmentContext.configure.include_object` hook by providing
a means of preventing objects of a certain name from being autogenerated
**before** the SQLAlchemy reflection process takes place, and notably
includes explicit support for passing each schema name when
:paramref:`.EnvironmentContext.configure.include_schemas` is set to True.
This is most important especially for enviroments that make use of
:paramref:`.EnvironmentContext.configure.include_schemas` where schemas are
actually databases (e.g. MySQL) in order to prevent reflection sweeps of
the entire server.
.. seealso::
:ref:`autogenerate_include_hooks` - new documentation section
.. change::
:tags: removed, autogenerate
The long deprecated
:paramref:`.EnvironmentContext.configure.include_symbol` hook is removed.
The :paramref:`.EnvironmentContext.configure.include_object`
and :paramref:`.EnvironmentContext.configure.include_name`
hooks both achieve the goals of this hook.
.. change::
:tags: bug, autogenerate
:tickets: 721
Added rendering for the ``Table.prefixes`` element to autogenerate so that
the rendered Python code includes these directives. Pull request courtesy
Rodrigo Ce Moretto.
.. change::
:tags: bug, batch
:tickets: 761
Added missing "create comment" feature for columns that are altered in
batch migrations.
.. change::
:tags: changed
:tickets: 748
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.
.. change::
:tags: bug, batch
:tickets: 773
Made an adjustment to the PostgreSQL dialect to allow it to work more
effectively in batch mode, where a datatype like Boolean or non-native Enum
that may have embedded rules to generate CHECK constraints will be more
correctly handled in that these constraints usually will not have been
generated on the PostgreSQL backend; previously it would inadvertently
assume they existed unconditionally in a special PG-only "drop constraint"
step.
.. change::
:tags: feature, versioning
:tickets: 757
The revision tree is now checked for cycles and loops between revision
files when the revision environment is loaded up. Scenarios such as a
revision pointing to itself, or a revision that can reach itself via a
loop, are handled and will raise the :class:`.CycleDetected` exception when
the environment is loaded (expressed from the Alembic commandline as a
failure message and nonzero return code). Previously, these situations were
silently ignored up front, and the behavior of revision traversal would
either be silently incorrect, or would produce errors such as
:class:`.RangeNotAncestorError`. Pull request courtesy Koichiro Den.
.. change::
:tags: usecase, commands
Add ``__main__.py`` file to alembic package to support invocation
with ``python -m alembic``.
.. change::
:tags: removed, commands
Removed deprecated ``--head_only`` option to the ``alembic current``
command
.. change::
:tags: removed, operations
Removed legacy parameter names from operations, these have been emitting
warnings since version 0.8. In the case that legacy version files have not
yet been updated, these can be modified directly in order to maintain
compatibility:
* :meth:`.Operations.drop_constraint` - "type" (use "type_") and "name"
(use "constraint_name")
* :meth:`.Operations.create_primary_key` - "cols" (use "columns") and
"name" (use "constraint_name")
* :meth:`.Operations.create_unique_constraint` - "name" (use
"constraint_name"), "source" (use "table_name") and "local_cols" (use
"columns")
* :meth:`.Operations.batch_create_unique_constraint` - "name" (use
"constraint_name")
* :meth:`.Operations.create_foreign_key` - "name" (use "constraint_name"),
"source" (use "source_table"), "referent" (use "referent_table")
* :meth:`.Operations.batch_create_foreign_key` - "name" (use
"constraint_name"), "referent" (use "referent_table")
* :meth:`.Operations.create_check_constraint` - "name" (use
"constraint_name"), "source" (use "table_name")
* :meth:`.Operations.batch_create_check_constraint` - "name" (use
"constraint_name")
* :meth:`.Operations.create_index` - "name" (use "index_name")
* :meth:`.Operations.drop_index` - "name" (use "index_name"), "tablename"
(use "table_name")
* :meth:`.Operations.batch_drop_index` - "name" (use "index_name"),
* :meth:`.Operations.create_table` - "name" (use "table_name")
* :meth:`.Operations.drop_table` - "name" (use "table_name")
* :meth:`.Operations.alter_column` - "name" (use "new_column_name")
.. changelog::
```
### 1.4.3
```
:released: September 11, 2020
.. change::
:tags: bug, sqlite, batch
:tickets: 711
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.
.. change::
:tags: bug, ops, mysql
:tickets: 736
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.
.. change::
:tags: bug, sqlite, batch
:tickets: 697
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.
.. change::
:tags: bug, commands
:tickets: 694
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.
.. change::
:tags: 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.
.. change::
:tags: bug, mssql
:tickets: 716
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.
.. changelog::
```
Links
- PyPI: https://pypi.org/project/alembic
- Changelog: https://pyup.io/changelogs/alembic/
- Homepage: https://alembic.sqlalchemy.org
- Docs: https://pythonhosted.org/alembic/
Changelog
### 1.4.22
```
:released: July 21, 2021
.. change::
:tags: bug, sql
:tickets: 6786
Fixed issue where use of the :paramref:`_sql.case.whens` parameter passing
a dictionary positionally and not as a keyword argument would emit a 2.0
deprecation warning, referring to the deprecation of passing a list
positionally. The dictionary format of "whens", passed positionally, is
still supported and was accidentally marked as deprecated.
.. change::
:tags: bug, orm
:tickets: 6775
Fixed issue in new :meth:`_schema.Table.table_valued` method where the
resulting :class:`_sql.TableValuedColumn` construct would not respond
correctly to alias adaptation as is used throughout the ORM, such as for
eager loading, polymorphic loading, etc.
.. change::
:tags: bug, orm
:tickets: 6769
Fixed issue where usage of the :meth:`_result.Result.unique` method with an
ORM result that included column expressions with unhashable types, such as
``JSON`` or ``ARRAY`` using non-tuples would silently fall back to using
the ``id()`` function, rather than raising an error. This now raises an
error when the :meth:`_result.Result.unique` method is used in a 2.0 style
ORM query. Additionally, hashability is assumed to be True for result
values of unknown type, such as often happens when using SQL functions of
unknown return type; if values are truly not hashable then the ``hash()``
itself will raise.
For legacy ORM queries, since the legacy :class:`_orm.Query` object
uniquifies in all cases, the old rules remain in place, which is to use
``id()`` for result values of unknown type as this legacy uniquing is
mostly for the purpose of uniquing ORM entities and not column values.
.. change::
:tags: orm, bug
:tickets: 6771
Fixed an issue where clearing of mappers during things like test suite
teardowns could cause a "dictionary changed size" warning during garbage
collection, due to iteration of a weak-referencing dictionary. A ``list()``
has been applied to prevent concurrent GC from affecting this operation.
.. change::
:tags: bug, sql
:tickets: 6770
Fixed issue where type-specific bound parameter handlers would not be
called upon in the case of using the :meth:`_sql.Insert.values` method with
the Python ``None`` value; in particular, this would be noticed when using
the :class:`_types.JSON` datatype as well as related PostgreSQL specific
types such as :class:`_postgresql.JSONB` which would fail to encode the
Python ``None`` value into JSON null, however the issue was generalized to
any bound parameter handler in conjunction with this specific method of
:class:`_sql.Insert`.
.. change::
:tags: bug, engine
:tickets: 6740
Added some guards against ``KeyError`` in the event system to accommodate
the case that the interpreter is shutting down at the same time
:meth:`_engine.Engine.dispose` is being called, which would cause stack
trace warnings.
.. change::
:tags: bug, orm, regression
:tickets: 6793
Fixed critical caching issue where the ORM's persistence feature using
INSERT..RETURNING would cache an incorrect query when mixing the "bulk
save" and standard "flush" forms of INSERT.
.. changelog::
```
### 1.4.21
```
:released: July 14, 2021
.. change::
:tags: usecase, orm
:tickets: 6708
Modified the approach used for history tracking of scalar object
relationships that are not many-to-one, i.e. one-to-one relationships that
would otherwise be one-to-many. When replacing a one-to-one value, the
"old" value that would be replaced is no longer loaded immediately, and is
instead handled during the flush process. This eliminates an historically
troublesome lazy load that otherwise often occurs when assigning to a
one-to-one attribute, and is particularly troublesome when using
"lazy='raise'" as well as asyncio use cases.
This change does cause a behavioral change within the
:meth:`_orm.AttributeEvents.set` event, which is nonetheless currently
documented, which is that the event applied to such a one-to-one attribute
will no longer receive the "old" parameter if it is unloaded and the
:paramref:`_orm.relationship.active_history` flag is not set. As is
documented in :meth:`_orm.AttributeEvents.set`, if the event handler needs
to receive the "old" value when the event fires off, the active_history
flag must be established either with the event listener or with the
relationship. This is already the behavior with other kinds of attributes
such as many-to-one and column value references.
The change additionally will defer updating a backref on the "old" value
in the less common case that the "old" value is locally present in the
session, but isn't loaded on the relationship in question, until the
next flush occurs. If this causes an issue, again the normal
:paramref:`_orm.relationship.active_history` flag can be set to ``True``
on the relationship.
.. change::
:tags: usecase, sql
:tickets: 6752
Added new method :meth:`_sql.HasCTE.add_cte` to each of the
:func:`_sql.select`, :func:`_sql.insert`, :func:`_sql.update` and
:func:`_sql.delete` constructs. This method will add the given
:class:`_sql.CTE` as an "independent" CTE of the statement, meaning it
renders in the WITH clause above the statement unconditionally even if it
is not otherwise referenced in the primary statement. This is a popular use
case on the PostgreSQL database where a CTE is used for a DML statement
that runs against database rows independently of the primary statement.
.. change::
:tags: bug, postgresql
:tickets: 6755
Fixed issue in :meth:`_postgresql.Insert.on_conflict_do_nothing` and
:meth:`_postgresql.Insert.on_conflict_do_update` where the name of a unique
constraint passed as the ``constraint`` parameter would not be properly
truncated for length if it were based on a naming convention that generated
a too-long name for the PostgreSQL max identifier length of 63 characters,
in the same way which occurs within a CREATE TABLE statement.
.. change::
:tags: bug, sql
:tickets: 6710
Fixed issue in CTE constructs where a recursive CTE that referred to a
SELECT that has duplicate column names, which are typically deduplicated
using labeling logic in 1.4, would fail to refer to the deduplicated label
name correctly within the WITH clause.
.. change::
:tags: bug, regression, mssql
:tickets: 6697
Fixed regression where the special dotted-schema name handling for the SQL
Server dialect would not function correctly if the dotted schema name were
used within the ``schema_translate_map`` feature.
.. change::
:tags: orm, regression
:tickets: 6718
Fixed ORM regression where ad-hoc label names generated for hybrid
properties and potentially other similar types of ORM-enabled expressions
would usually be propagated outwards through subqueries, allowing the name
to be retained in the final keys of the result set even when selecting from
subqueries. Additional state is now tracked in this case that isn't lost
when a hybrid is selected out of a Core select / subquery.
.. change::
:tags: bug, postgresql
:tickets: 6739
Fixed issue where the PostgreSQL ``ENUM`` datatype as embedded in the
``ARRAY`` datatype would fail to emit correctly in create/drop when the
``schema_translate_map`` feature were also in use. Additionally repairs a
related issue where the same ``schema_translate_map`` feature would not
work for the ``ENUM`` datatype in combination with a ``CAST``, that's also
intrinsic to how the ``ARRAY(ENUM)`` combination works on the PostgreSQL
dialect.
.. change::
:tags: bug, sql, regression
:tickets: 6735
Fixed regression where the :func:`_sql.tablesample` construct would fail to
be executable when constructed given a floating-point sampling value not
embedded within a SQL function.
.. change::
:tags: bug, postgresql
:tickets: 6696
Fixed issue in :meth:`_postgresql.Insert.on_conflict_do_nothing` and
:meth:`_postgresql.Insert.on_conflict_do_update` where the name of a unique
constraint passed as the ``constraint`` parameter would not be properly
quoted if it contained characters which required quoting.
.. change::
:tags: bug, regression, orm
:tickets: 6698
Fixed regression caused in 1.4.19 due to :ticket:`6503` and related
involving :meth:`_orm.Query.with_entities` where the new structure used
would be inappropriately transferred to an enclosing :class:`_orm.Query`
when making use of set operations such as :meth:`_orm.Query.union`, causing
the JOIN instructions within to be applied to the outside query as well.
.. change::
:tags: bug, orm, regression
:tickets: 6762
Fixed regression which appeared in version 1.4.3 due to :ticket:`6060`
where rules that limit ORM adaptation of derived selectables interfered
with other ORM-adaptation based cases, in this case when applying
adaptations for a :func:`_orm.with_polymorphic` against a mapping which
uses a :func:`_orm.column_property` which in turn makes use of a scalar
select that includes a :func:`_orm.aliased` object of the mapped table.
.. changelog::
```
### 1.4.20
```
:released: June 28, 2021
.. change::
:tags: bug, regression, orm
:tickets: 6680
Fixed regression in ORM regarding an internal reconstitution step for the
:func:`_orm.with_polymorphic` construct, when the user-facing object is
garbage collected as the query is processed. The reconstitution was not
ensuring the sub-entities for the "polymorphic" case were handled, leading
to an ``AttributeError``.
.. change::
:tags: usecase, sql
:tickets: 6646
Add a impl parameter to :class:`_types.PickleType` constructor, allowing
any arbitary type to be used in place of the default implementation of
:class:`_types.LargeBinary`. Pull request courtesy jason3gb.
.. change::
:tags: bug, engine
:tickets: 5348
Fixed an issue in the C extension for the :class:`_result.Row` class which
could lead to a memory leak in the unlikely case of a :class:`_result.Row`
object which referred to an ORM object that then was mutated to refer back
to the ``Row`` itself, creating a cycle. The Python C APIs for tracking GC
cycles has been added to the native :class:`_result.Row` implementation to
accommodate for this case.
.. change::
:tags: bug, engine
:tickets: 6665
Fixed old issue where a :func:`_sql.select()` made against the token "*",
which then yielded exactly one column, would fail to correctly organize the
``cursor.description`` column name into the keys of the result object.
.. change::
:tags: usecase, mysql
:tickets: 6659
Made a small adjustment in the table reflection feature of the MySQL
dialect to accommodate for alternate MySQL-oriented databases such as TiDB
which include their own "comment" directives at the end of a constraint
directive within "CREATE TABLE" where the format doesn't have the
additional space character after the comment, in this case the TiDB
"clustered index" feature. Pull request courtesy Daniël van Eeden.
.. change::
:tags: bug, schema
:tickets: 6685
Fixed issue where passing ``None`` for the value of
:paramref:`_schema.Table.prefixes` would not store an empty list, but
rather the constant ``None``, which may be unexpected by third party
dialects. The issue is revealed by a usage in recent versions of Alembic
that are passing ``None`` for this value. Pull request courtesy Kai
Mueller.
.. change::
:tags: bug, regression, ext
:tickets: 6679
Fixed regression in :mod:`sqlalchemy.ext.automap` extension such that the
use case of creating an explicit mapped class to a table that is also the
:paramref:`_orm.relationship.secondary` element of a
:func:`_orm.relationship` that automap will be generating would emit the
"overlaps" warnings introduced in 1.4 and discussed at :ref:`error_qzyx`.
While generating this case from automap is still subject to the same
caveats that the "overlaps" warning refers towards, as automap is intended
for more ad-hoc use cases, the condition which produces the warning is
disabled when a many-to-many relationship with this particular pattern is
generated.
.. change::
:tags: bug, regression, orm
:tickets: 6678
Adjusted :meth:`_orm.Query.union` and similar set operations to be
correctly compatible with the new capabilities just added in
:ticket:`6661`, with SQLAlchemy 1.4.19, such that the SELECT statements
rendered as elements of the UNION or other set operation will include
directly mapped columns that are mapped as deferred; this both fixes a
regression involving unions with multiple levels of nesting that would
produce a column mismatch, and also allows the :func:`_orm.undefer` option
to be used at the top level of such a :class:`_orm.Query` without having to
apply the option to each of the elements within the UNION.
.. change::
:tags: bug, sql, orm
:tickets: 6668
Fixed the class hierarchy for the :class:`_schema.Sequence` and the more
general :class:`_schema.DefaultGenerator` base, as these are "executable"
as statements they need to include :class:`_sql.Executable` in their
hierarchy, not just :class:`_roles.StatementRole` as was applied
arbitrarily to :class:`_schema.Sequence` previously. The fix allows
:class:`_schema.Sequence` to work in all ``.execute()`` methods including
with :meth:`_orm.Session.execute` which was not working in the case that a
:meth:`_orm.SessionEvents.do_orm_execute` handler was also established.
.. change::
:tags: bug, orm
:tickets: 6538
Adjusted the check in the mapper for a callable object that is used as a
``validates`` validator function or a ``reconstructor`` reconstruction
function, to check for "callable" more liberally such as to accommodate
objects based on fundamental attributes like ``__func__`` and
``__call___``, rather than testing for ``MethodType`` / ``FunctionType``,
allowing things like cython functions to work properly. Pull request
courtesy Miłosz Stypiński.
.. changelog::
```
### 1.4.19
```
:released: June 22, 2021
.. change::
:tags: bug, mssql
:tickets: 6658
Fixed bug where the "schema_translate_map" feature would fail to function
correctly in conjunction with an INSERT into a table that has an IDENTITY
column, where the value of the IDENTITY column were specified in the values
of the INSERT thus triggering SQLAlchemy's feature of setting IDENTITY
INSERT to "on"; it's in this directive where the schema translate map would
fail to
Update mkdocs from 1.1.2 to 1.2.2.
Changelog
### 1.2.2 ``` MkDocs 1.2.2 is a bugfix release for [MkDocs 1.2](https://www.mkdocs.org/about/release-notes/#version-12-2021-06-04) -- make sure you've seen the "major" release notes as well. * Bugfix (regression in 1.2): Fix serving files/paths with Unicode characters (2464) * Bugfix (regression in 1.2): Revert livereload file watching to use polling observer (2477) This had to be done to reasonably support usages that span virtual filesystems such as non-native Docker and network mounts. This goes back to the polling approach, very similar to that was always used prior, meaning most of the same downsides with latency and CPU usage. * Revert from 1.2: Remove the requirement of a `site_url` config and the restriction on `use_directory_urls` (2490) * Bugfix (regression in 1.2): Don't require trailing slash in the URL when serving a directory index in `mkdocs serve` server (2507) Instead of showing a 404 error, detect if it's a directory and redirect to a path with a trailing slash added, like before. * Bugfix: Fix `gh_deploy` with config-file in the current directory (2481) * Bugfix: Fix reversed breadcrumbs in "readthedocs" theme (2179) * Allow "mkdocs.yaml" as the file name when '--config' is not passed (2478) * Stop treating ";" as a special character in URLs: urlparse -> urlsplit (2502) * Improve build performance for sites with many pages (partly already done in 1.2) (2407) ```Links
- PyPI: https://pypi.org/project/mkdocs - Changelog: https://pyup.io/changelogs/mkdocs/ - Homepage: https://www.mkdocs.orgUpdate pymdown-extensions from 7.1 to 8.2.
Changelog
### 8.2 ``` - **NEW**: Snippets: now accepts a list of base paths which will be resolved in the order they are specified. Compatibility is present with legacy behavior, and a single string path will still be accepted. - **NEW**: Snippets: allow for specifying certain snippets to auto-append to every file. Useful for appending abbreviations, reference links, etc. - **NEW**: Snippets: a snippet base path can be a full path to a file. When a base path is a full path to a file, only that file will be included from the specified folder. This allows for targeting a one off file outside of the normal snippet paths(s). - **NEW**: MagicLink: add GitHub Discussions support to MagicLink. Can now use `?<num>` to link discussions. Full discussion links will also be shortened if shortening is enabled. (1187) - **NEW**: MagicLink: add new `normalize_issue_symbols` option to make issues, pull request, and discussion links all render with `` instead of ``, `!`, and `?` respectively. Input syntax is still the same. Great if you want a GitHub style look where all issue types are just rendered with ``. - **FIX**: MagicLink: documentation will not render links with special icons added via CSS so as not to confuse users that may think that is part of MagicLink. While possible with CSS, MagicLink provides no CSS automatically. - **FIX**: Tabbed & Details: Fix corner case with lists. (1225) - **FIX**: Fix issue with unescaping logic in code blocks. ``` ### 8.1.1 ``` - **FIX**: Ensure content immediately before Details content or Tabbed content gets preserved. - **FIX**: StripHTML: Fix some corner cases related to stripping comments. ``` ### 8.1 ``` - **NEW**: Drop support for Python 3.5. - **NEW**: Officially support Python 3.9. - **NEW**: Tabbed titles can now have simple Markdown in them which can be parsed and rendered (like emoji, bold, etc.). - **FIX**: Avoid parsing script tags in PathConverter and B64 extensions. ``` ### 8.0.1 ``` - **FIX**: Fix issue with `pymdownx-inline` an Pygments 2.7+. ``` ### 8.0 ``` Please see [Release Notes](./releases/8.0.md8.0) for details on upgrading to 8.0. - **NEW**: Added SaneHeaders extension. - **NEW**: SuperFences \& InlineHilite: gracefully handle failing custom formatters and/or validators. Users should add their own debug code to their formatter/validator if they suspect it isn't working. - **NEW**: SuperFences: if a custom fence validator fails, try the next custom fence until all are exhausted. - **NEW**: SuperFences: no longer allow custom options in the form `key=` (no value). Only keys with values or keys with no value and no `=` are accepted. Keys with no value will now assume the value to be the key name. - **NEW**: SuperFences: if `attr_list` extension is enabled, fenced code that use brace attribute list style headers (` {lang id .class attr=value}`) will attach arbitrary attributes that are included in the header to the code element. - **NEW**: SuperFences: when Pygments is disabled, options (such as `linenums`) included in fenced code headers no longer do anything. If `attr_list` is enabled, and the brace header is used, such options will be treated as HTML attributes. JavaScript highlighter options should be defined in the brace header form with `attr_list` enabled in order to generate appropriate, compatible HTML with the chosen JavaScript highlighter. - **NEW**: SuperFences: backwards incompatible changes where made to custom fence API. See [Release Notes](./releases/8.0.md8.0) for instructions on how to migrate to the new API. Some temporary support for most of the old format is in place, but is deprecated. - **NEW**: SuperFences: has removed legacy code tab feature. Associated `legacy_tab_classes` option has been removed. Please use the Tabbed extension to create general purpose tabs for code blocks or other content. - **NEW**: Highlight: add new option `language_prefix` which controls the prefix applied to language classes when Pygments is not being used. - **NEW**: Highlight: A new option called `code_attr_on_pre` was added to the Highlight extension and controls whether language classes, and any ids, attributes, and classes that are defined in fenced code attribute list style headers, are attached to the code element or pre element. This has effect when using Pygments. - **NEW**: Highlight: option `linenums` now defaults to `None` and accepts `None`, `True`, or `False`. `None` is disabled by default, but can be enabled per code block. `True` enables line numbers globally. `False` disables globally and cannot be enabled manually per code block. - **NEW**: ExtraRawHTML: remove extension. - **FIX**: Fix issues with complex emphasis combinations in BetterEm. - **FIX**: Details: fix corner cases related to extension and lists. - **FIX**: Tabbed: fix corner cases related to extension and lists. - **FIX**: EscapeAll: Handle HTML entities special. - **FIX**: SuperFences: Fix parameter unpacking bug. ```Links
- PyPI: https://pypi.org/project/pymdown-extensions - Changelog: https://pyup.io/changelogs/pymdown-extensions/ - Repo: https://github.com/facelessuser/pymdown-extensionsUpdate mkdocs-material from 7.0.6 to 7.2.2.
Changelog
### 7.2.2 ``` * Updated Korean translations * Fixed 2879: Search highlighting does not properly escape HTML mkdocs-material-7.2.1+insiders-2.12.1 (2021-07-26) * Fixed error in social cards plugin when site_description was not set * Fixed error in social cards plugin for non-ASCII characters mkdocs-material-7.2.1+insiders-2.12.0 (2021-07-25) * Added support for social cards ``` ### 7.2.1 ``` * Fixed 2862: Back-to-top button overlays active search bar ``` ### 7.2.0 ``` * Added support for search suggestions to save keystrokes * Added support for search highlighting * Added support for search sharing (i.e. deep linking) mkdocs-material-7.1.11+insiders-2.11.1 (2021-07-20) * Fixed order of tags index, now sorted alphabetically mkdocs-material-7.1.11+insiders-2.11.0 (2021-07-18) * Improved Mermaid.js intergration, now stable * Added support for sequence diagrams * Added support for entity relationship diagrams * Added support for cookie consent configuration * Added feature flag to always enable annotations ``` ### 7.1.11 ``` * Updated Spanish and Galician translations mkdocs-material-7.1.10+insiders-2.10.0 (2021-07-10) * Added support for cookie consent * Fixed 2807: Back-to-top button not hidden when using sticky tabs ``` ### 7.1.10 ``` * Refactored appearance of back-to-top button * Fixed graceful handling of search when browsing locally ``` ### 7.1.9 ``` * Improved search language support for Thai and Hindi * Fixed 2761: License comments lined up at end of file ``` ### 7.1.8 ``` * Refactored analytics integration (because of MkDocs 1.2) * Added support for Google Analytics 4 (gtag.js) * Fixed missing escape for aria-label in footer links ``` ### 7.1.7 ``` * Improved screen reader support mkdocs-material-7.1.6+insiders-2.9.2 (2021-05-30) * Moved tags to partial for easier customization * Added support for hiding tags on any page ``` ### 7.1.6 ``` * Deprecated seealso admonition qualifier * Added Mongolian and updated Chinese translations * Fixed 2429: Version selector not touch-friendly on Android devices * Fixed 2703: Printed 'Initializing search' albeit ready on mobile mkdocs-material-7.1.5+insiders-2.9.1 (2021-05-24) * Added missing guard for linking of content tabs mkdocs-material-7.1.5+insiders-2.9.0 (2021-05-23) * Added support for linking of content tabs ``` ### 7.1.5 ``` * Fixed 2655: Details breaking page margins on print mkdocs-material-7.1.4+insiders-2.8.0 (2021-05-12) * Added support for boosting pages in search mkdocs-material-7.1.4+insiders-2.7.2 (2021-05-08) * Fixed 2638: Warnings shown when using tags plugin without directory URLs ``` ### 7.1.4 ``` * Added support for git-revision-date-localized plugin creation date * Improved footnote styles on :target and :focus mkdocs-material-7.1.3+insiders-2.7.1 (2021-05-03) * Fixed git-revision-date-localized plugin integration (2.7.0 regression) mkdocs-material-7.1.3+insiders-2.7.0 (2021-05-01) * Added support for tags (with search integration) ``` ### 7.1.3 ``` * Fixed 2586: Empty table of contents shown (7.1.2 regression) ``` ### 7.1.2 ``` * Fixed 2554: List markers sometimes overlap floated elements * Fixed 2563: Adding a class to a h1 breaks the table of contents * Fixed 2566: Back-to-top button clickable when invisible mkdocs-material-7.1.1+insiders-2.6.0 (2021-04-11) * Stay on page when switching versions ``` ### 7.1.1 ``` * Fixed 2501: Nested definition lists compound bottom margin * Fixed 2508: Switch extracopyright block to template variable * Fixed 2533: Search (and other parts) not working in Safari <14 * Fixed 2538: Visual quirk when opening language selector ``` ### 7.1.0 ``` * Added support for color palette toggle * Added support for back-to-top button * Added latest release to repository info (GitHub) * Slight facelift of repository info (lighter fonts, spacing and icons) mkdocs-material-7.0.7+insiders-2.5.0 (2021-03-28) * Added support for version warning ``` ### 7.0.7 ``` * Updated Hungarian translations * Fixed 2466: Docker image not based on latest Python and Alpine * Fixed 2488: Inconsistent header shadow behavior * Fixed 2492: Inline code blocks in admonition titles missing background mkdocs-material-7.0.6+insiders-2.4.0 (2021-03-20) * Added support for custom admonition icons * Fixed 2444: Code block annotations with extra comments have wrong index mkdocs-material-7.0.6+insiders-2.3.1 (2021-03-14) * Fixed anchor offset for permalinks when using sticky navigation tabs ```Links
- PyPI: https://pypi.org/project/mkdocs-material - Changelog: https://pyup.io/changelogs/mkdocs-material/ - Repo: https://squidfunk.github.io/mkdocs-material/Update mkdocstrings from 0.12.0 to 0.15.2.
The bot wasn't able to find a changelog for this release. Got an idea?
Links
- PyPI: https://pypi.org/project/mkdocstrings - Repo: https://github.com/mkdocstrings/mkdocstringsUpdate black from 19.10b0 to 21.7b0.
Changelog
### 21.7b0 ``` _Black_ - Configuration files using TOML features higher than spec v0.5.0 are now supported (2301) - Add primer support and test for code piped into black via STDIN (2315) - Fix internal error when `FORCE_OPTIONAL_PARENTHESES` feature is enabled (2332) - Accept empty stdin (2346) - Provide a more useful error when parsing fails during AST safety checks (2304) Docker - Add new `latest_release` tag automation to follow latest black release on docker images (2374) Integrations - The vim plugin now searches upwards from the directory containing the current buffer instead of the current working directory for pyproject.toml. (1871) - The vim plugin now reads the correct string normalization option in pyproject.toml (1869) - The vim plugin no longer crashes Black when there's boolean values in pyproject.toml (1869) ``` ### 21.6b0 ``` _Black_ - Fix failure caused by `fmt: skip` and indentation (2281) - Account for += assignment when deciding whether to split string (2312) - Correct max string length calculation when there are string operators (2292) - Fixed option usage when using the `--code` flag (2259) - Do not call `uvloop.install()` when _Black_ is used as a library (2303) - Added `--required-version` option to require a specific version to be running (2300) - Fix incorrect custom breakpoint indices when string group contains fake f-strings (2311) - Fix regression where `R` prefixes would be lowercased for docstrings (2285) - Fix handling of named escapes (`\N{...}`) when `--experimental-string-processing` is used (2319) Integrations - The official Black action now supports choosing what version to use, and supports the major 3 OSes. (1940) ``` ### 21.5b2 ``` _Black_ - A space is no longer inserted into empty docstrings (2249) - Fix handling of .gitignore files containing non-ASCII characters on Windows (2229) - Respect `.gitignore` files in all levels, not only `root/.gitignore` file (apply `.gitignore` rules like `git` does) (2225) - Restored compatibility with Click 8.0 on Python 3.6 when LANG=C used (2227) - Add extra uvloop install + import support if in python env (2258) - Fix --experimental-string-processing crash when matching parens are not found (2283) - Make sure to split lines that start with a string operator (2286) - Fix regular expression that black uses to identify f-expressions (2287) _Blackd_ - Add a lower bound for the `aiohttp-cors` dependency. Only 0.4.0 or higher is supported. (2231) Packaging - Release self-contained x86_64 MacOS binaries as part of the GitHub release pipeline (2198) - Always build binaries with the latest available Python (2260) Documentation - Add discussion of magic comments to FAQ page (2272) - `--experimental-string-processing` will be enabled by default in the future (2273) - Fix typos discovered by codespell (2228) - Fix Vim plugin installation instructions. (2235) - Add new Frequently Asked Questions page (2247) - Fix encoding + symlink issues preventing proper build on Windows (2262) ``` ### 21.5b1 ``` _Black_ - Refactor `src/black/__init__.py` into many files (2206) Documentation - Replaced all remaining references to the [`master`](https://github.com/psf/black/tree/main) branch with the [`main`](https://github.com/psf/black/tree/main) branch. Some additional changes in the source code were also made. (2210) - Sigificantly reorganized the documentation to make much more sense. Check them out by heading over to [the stable docs on RTD](https://black.readthedocs.io/en/stable/). (2174) ``` ### 21.5b0 ``` _Black_ - Set `--pyi` mode if `--stdin-filename` ends in `.pyi` (2169) - Stop detecting target version as Python 3.9+ with pre-PEP-614 decorators that are being called but with no arguments (2182) _Black-Primer_ - Add `--no-diff` to black-primer to suppress formatting changes (2187) ``` ### 21.4b2 ``` _Black_ - Fix crash if the user configuration directory is inaccessible. (2158) - Clarify [circumstances](https://github.com/psf/black/blob/master/docs/the_black_code_style.md#pragmatism) in which _Black_ may change the AST (2159) - Allow `.gitignore` rules to be overridden by specifying `exclude` in `pyproject.toml` or on the command line. (2170) _Packaging_ - Install `primer.json` (used by `black-primer` by default) with black. (2154) ``` ### 21.4b1 ``` _Black_ - Fix crash on docstrings ending with "\\ ". (2142) - Fix crash when atypical whitespace is cleaned out of dostrings (2120) - Reflect the `--skip-magic-trailing-comma` and `--experimental-string-processing` flags in the name of the cache file. Without this fix, changes in these flags would not take effect if the cache had already been populated. (2131) - Don't remove necessary parentheses from assignment expression containing assert / return statements. (2143) _Packaging_ - Bump pathspec to >= 0.8.1 to solve invalid .gitignore exclusion handling ``` ### 21.4b0 ``` _Black_ - Fixed a rare but annoying formatting instability created by the combination of optional trailing commas inserted by `Black` and optional parentheses looking at pre-existing "magic" trailing commas. This fixes issue 1629 and all of its many many duplicates. (2126) - `Black` now processes one-line docstrings by stripping leading and trailing spaces, and adding a padding space when needed to break up """". (1740) - `Black` now cleans up leading non-breaking spaces in comments (2092) - `Black` now respects `--skip-string-normalization` when normalizing multiline docstring quotes (1637) - `Black` no longer removes all empty lines between non-function code and decorators when formatting typing stubs. Now `Black` enforces a single empty line. (1646) - `Black` no longer adds an incorrect space after a parenthesized assignment expression in if/while statements (1655) - Added `--skip-magic-trailing-comma` / `-C` to avoid using trailing commas as a reason to split lines (1824) - fixed a crash when PWD=/ on POSIX (1631) - fixed "I/O operation on closed file" when using --diff (1664) - Prevent coloured diff output being interleaved with multiple files (1673) - Added support for PEP 614 relaxed decorator syntax on python 3.9 (1711) - Added parsing support for unparenthesized tuples and yield expressions in annotated assignments (1835) - added `--extend-exclude` argument (PR 2005) - speed up caching by avoiding pathlib (1950) - `--diff` correctly indicates when a file doesn't end in a newline (1662) - Added `--stdin-filename` argument to allow stdin to respect `--force-exclude` rules (1780) - Lines ending with `fmt: skip` will now be not formatted (1800) - PR 2053: Black no longer relies on typed-ast for Python 3.8 and higher - PR 2053: Python 2 support is now optional, install with `python3 -m pip install black[python2]` to maintain support. - Exclude `venv` directory by default (1683) - Fixed "Black produced code that is not equivalent to the source" when formatting Python 2 docstrings (2037) _Packaging_ - Self-contained native _Black_ binaries are now provided for releases via GitHub Releases (1743) ``` ### 20.8b1 ``` _Packaging_ - explicitly depend on Click 7.1.2 or newer as `Black` no longer works with versions older than 7.0 ``` ### 20.8b0 ``` _Black_ - re-implemented support for explicit trailing commas: now it works consistently within any bracket pair, including nested structures (1288 and duplicates) - `Black` now reindents docstrings when reindenting code around it (1053) - `Black` now shows colored diffs (1266) - `Black` is now packaged using 'py3' tagged wheels (1388) - `Black` now supports Python 3.8 code, e.g. star expressions in return statements (1121) - `Black` no longer normalizes capital R-string prefixes as those have a community-accepted meaning (1244) - `Black` now uses exit code 2 when specified configuration file doesn't exit (1361) - `Black` now works on AWS Lambda (1141) - added `--force-exclude` argument (1032) - removed deprecated `--py36` option (1236) - fixed `--diff` output when EOF is encountered (526) - fixed ` fmt: off` handling around decorators (560) - fixed unstable formatting with some ` type: ignore` comments (1113) - fixed invalid removal on organizing brackets followed by indexing (1575) - introduced `black-primer`, a CI tool that allows us to run regression tests against existing open source users of Black (1402) - introduced property-based fuzzing to our test suite based on Hypothesis and Hypothersmith (1566) - implemented experimental and disabled by default long string rewrapping (1132), hidden under a `--experimental-string-processing` flag while it's being worked on; this is an undocumented and unsupported feature, you lose Internet points for depending on it (1609) Vim plugin - prefer virtualenv packages over global packages (1383) ```Links
- PyPI: https://pypi.org/project/black - Changelog: https://pyup.io/changelogs/black/ - Repo: https://github.com/psf/blackUpdate wheel from 0.34.2 to 0.36.2.
Changelog
### 0.36.2 ``` - Updated vendored ``packaging`` library to v20.8 - Fixed wheel sdist missing ``LICENSE.txt`` - Don't use default ``macos/arm64`` deployment target in calculating the platform tag for fat binaries (PR by Ronald Oussoren) ``` ### 0.36.1 ``` - Fixed ``AssertionError`` when ``MACOSX_DEPLOYMENT_TARGET`` was set to ``11`` (PR by Grzegorz Bokota and François-Xavier Coudert) - Fixed regression introduced in 0.36.0 on Python 2.7 when a custom generator name was passed as unicode (Scikit-build) (``TypeError: 'unicode' does not have the buffer interface``) ``` ### 0.36.0 ``` - Added official Python 3.9 support - Updated vendored ``packaging`` library to v20.7 - Switched to always using LF as line separator when generating ``WHEEL`` files (on Windows, CRLF was being used instead) - The ABI tag is taken from the sysconfig SOABI value. On PyPy the SOABI value is ``pypy37-pp73`` which is not compliant with PEP 3149, as it should have both the API tag and the platform tag. This change future-proofs any change in PyPy's SOABI tag to make sure only the ABI tag is used by wheel. - Fixed regression and test for ``bdist_wheel --plat-name``. It was ignored for C extensions in v0.35, but the regression was not detected by tests. ``` ### 0.35.1 ``` - Replaced install dependency on ``packaging`` with a vendored copy of its ``tags`` module - Fixed ``bdist_wheel`` not working on FreeBSD due to mismatching platform tag name (it was not being converted to lowercase) ``` ### 0.35.0 ``` - Switched to the packaging_ library for computing wheel tags - Fixed a resource leak in ``WheelFile.open()`` (PR by Jon Dufresne) .. _packaging: https://pypi.org/project/packaging/ ```Links
- PyPI: https://pypi.org/project/wheel - Changelog: https://pyup.io/changelogs/wheel/ - Repo: https://github.com/pypa/wheelUpdate alembic from 1.4.2 to 1.6.5.
Changelog
### 1.6.5 ``` :released: May 27, 2021 .. change:: :tags: bug, autogenerate :tickets: 849 Fixed issue where dialect-specific keyword arguments within the :class:`.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 :ticket:`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. .. changelog:: ``` ### 1.6.4 ``` :released: May 24, 2021 .. change:: :tags: bug, regression, op directives :tickets: 848 Fixed regression caused by just fixed :ticket:`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. .. changelog:: ``` ### 1.6.3 ``` :released: May 21, 2021 .. change:: :tags: bug, regression, autogenerate :tickets: 844 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. .. change:: :tags: bug, autogenerate :tickets: 839 Fixed a bug where paths defined in post-write hook options would be wrongly escaped in non posix environment (Windows). .. change:: :tags: bug, regression, versioning :tickets: 843 Fixed regression where a revision file that contained its own down revision as a dependency would cause an endless loop in the traversal logic. .. changelog:: ``` ### 1.6.2 ``` :released: May 6, 2021 .. change:: :tags: bug, versioning, regression :tickets: 839 Fixed additional regression nearly the same as that of :ticket:`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. .. changelog:: ``` ### 1.6.1 ``` :released: May 6, 2021 .. change:: :tags: bug, versioning, regression :tickets: 838 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. .. changelog:: ``` ### 1.6.0 ``` :released: May 3, 2021 .. change:: :tags: bug, autogenerate :tickets: 803 Refactored the implementation of :class:`.MigrateOperation` constructs such as :class:`.CreateIndexOp`, :class:`.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 :ref:`autogen_rewriter` 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. .. change:: :tags: bug, environment :tickets: 829 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. .. change:: :tags: bug, autogenerate :tickets: 827 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. .. change:: :tags: feature, autogenerate :tickets: 819 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. .. change:: :tags: feature :tickets: 822 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. .. change:: :tags: bug, versioning :tickets: 765, 464 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. .. change:: :tags: bug, batch :tickets: 799 Added missing ``batch_op.create_table_comment()``, ``batch_op.drop_table_comment()`` directives to batch ops. .. changelog:: ``` ### 1.5.8 ``` :released: March 23, 2021 .. change:: :tags: bug, environment :tickets: 816 Fixed regression caused by SQLAlchemy 1.4 where the "alembic current" command would fail due to changes in the ``URL`` object. .. changelog:: ``` ### 1.5.7 ``` :released: March 11, 2021 .. change:: :tags: bug, autogenerate :tickets: 813 Adjusted the recently added :paramref:`.EnvironmentContext.configure.include_name` hook to accommodate for additional object types such as "views" that don't have a parent table, to support third party recipes and extensions. Pull request courtesy Oliver Rice. .. changelog:: ``` ### 1.5.6 ``` :released: March 5, 2021 .. change:: :tags: bug, mssql, operations :tickets: 812 Fixed bug where the "existing_type" parameter, which the MSSQL dialect requires in order to change the nullability of a column in the absence of also changing the column type, would cause an ALTER COLUMN operation to incorrectly render a second ALTER statement without the nullability if a new type were also present, as the MSSQL-specific contract did not anticipate all three of "nullability", "type_" and "existing_type" being sent at the same time. .. change:: :tags: template :ticket: 805 Add async template to Alembic to bootstrap environments that use async DBAPI. Updated the cookbook to include a migration guide on how to adapt an existing enviroment for use with DBAPI drivers. .. changelog:: ``` ### 1.5.5 ``` :released: February 20, 2021 .. change:: :tags: bug Adjusted the use of SQLAlchemy's ".copy()" internals to use "._copy()" for version 1.4.0, as this method is being renamed. .. change:: :tags: bug, environment :tickets: 797 Added new config file option ``prepend_sys_path``, which is a series of paths that will be prepended to sys.path; the default value in newly generated alembic.ini files is ".". This fixes a long-standing issue where for some reason running the alembic command line would not place the local "." path in sys.path, meaning an application locally present in "." and importable through normal channels, e.g. python interpreter, pytest, etc. would not be located by Alembic, even though the ``env.py`` file is loaded relative to the current path when ``alembic.ini`` contains a relative path. To enable for existing installations, add the option to the alembic.ini file as follows:: sys.path path, will be prepended to sys.path if present. defaults to the current working directory. prepend_sys_path = . .. seealso:: :ref:`installation` - updated documentation reflecting that local installation of the project is not necessary if running the Alembic cli from the local path. .. changelog:: ``` ### 1.5.4 ``` :released: February 3, 2021 .. change:: :tags: bug, versioning :tickets: 789 Fixed bug in versioning model where a downgrade across a revision with a dependency on another branch, yet an ancestor is also dependent on that branch, would produce an erroneous state in the alembic_version table, making upgrades impossible without manually repairing the table. .. changelog:: ``` ### 1.5.3 ``` :released: January 29, 2021 .. change:: :tags: bug, autogenerate :tickets: 786 Changed the default ordering of "CREATE" and "DROP" statements indexes and unique constraints within the autogenerate process, so that for example in an upgrade() operation, a particular index or constraint that is to be replaced such as for a casing convention change will not produce any naming conflicts. For foreign key constraint objects, this is already how constraints are ordered, and for table objects, users would normally want to use :meth:`.Operations.rename_table` in any case. .. change:: :tags: bug, autogenerate, mssql :tickets: 787 Fixed assorted autogenerate issues with SQL Server: * ignore default reflected identity on primary_key columns * improve server default comparison .. change:: :tags: bug, mysql, autogenerate :tickets: 788 Fixed issue where autogenerate rendering of ``op.alter_column()`` would fail to include MySQL ``existing_nullable=False`` if the column were part of a primary key constraint within the table metadata. .. changelog:: ``` ### 1.5.2 ``` :released: January 20, 2021 .. change:: :tags: bug, versioning, regression :tickets: 784 Fixed regression where new "loop detection" feature introduced in :ticket:`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. .. change:: :tags: bug, environment :tickets: 782 Fixed regression where Alembic would fail to create a transaction properly if the :class:`sqlalchemy.engine.Connection` were a so-called "branched" connection, that is, one where the ``.connect()`` method had been called to create a "sub" connection. .. changelog:: ``` ### 1.5.1 ``` :released: January 19, 2021 .. change:: :tags: bug, installation, commands :tickets: 780 Fixed installation issue where the "templates" directory was not being installed, preventing commands like "list_templates" and "init" from working. .. changelog:: ``` ### 1.5.0 ``` :released: January 18, 2021 .. change:: :tags: usecase, operations :tickets: 730 Added support for rendering of "identity" elements on :class:`.Column` objects, supported in SQLAlchemy via the :class:`.Identity` element introduced in version 1.4. Adding columns with identity is supported on PostgreSQL, MSSQL and Oracle. Changing the identity options or removing it is supported only on PostgreSQL and Oracle. .. change:: :tags: 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 :paramref:`.Environment.configure.transaction_per_migration` flag. .. change:: :tags: changed, environment A :class:`.CommandError` is raised if a ``sqlalchemy.engine.Engine`` is passed to the :meth:`.MigrationContext.configure` method instead of a ``sqlalchemy.engine.Connection`` object. Previously, this would be a warning only. .. change:: :tags: bug, operations :tickets: 753 Modified the ``add_column()`` operation such that the ``Column`` object in use is shallow copied to a new instance if that ``Column`` is already attached to a ``table()`` or ``Table``. This accommodates for the change made in SQLAlchemy issue 5618 which prohibits a ``Column`` from being associated with multiple ``table()`` objects. This resumes support for using a ``Column`` inside of an Alembic operation that already refers to a parent ``table()`` or ``Table`` as well as allows operation objects just autogenerated to work. .. change:: :tags: feature, autogenerate :tickets: 650 Added new hook :paramref:`.EnvironmentContext.configure.include_name`, which complements the :paramref:`.EnvironmentContext.configure.include_object` hook by providing a means of preventing objects of a certain name from being autogenerated **before** the SQLAlchemy reflection process takes place, and notably includes explicit support for passing each schema name when :paramref:`.EnvironmentContext.configure.include_schemas` is set to True. This is most important especially for enviroments that make use of :paramref:`.EnvironmentContext.configure.include_schemas` where schemas are actually databases (e.g. MySQL) in order to prevent reflection sweeps of the entire server. .. seealso:: :ref:`autogenerate_include_hooks` - new documentation section .. change:: :tags: removed, autogenerate The long deprecated :paramref:`.EnvironmentContext.configure.include_symbol` hook is removed. The :paramref:`.EnvironmentContext.configure.include_object` and :paramref:`.EnvironmentContext.configure.include_name` hooks both achieve the goals of this hook. .. change:: :tags: bug, autogenerate :tickets: 721 Added rendering for the ``Table.prefixes`` element to autogenerate so that the rendered Python code includes these directives. Pull request courtesy Rodrigo Ce Moretto. .. change:: :tags: bug, batch :tickets: 761 Added missing "create comment" feature for columns that are altered in batch migrations. .. change:: :tags: changed :tickets: 748 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. .. change:: :tags: bug, batch :tickets: 773 Made an adjustment to the PostgreSQL dialect to allow it to work more effectively in batch mode, where a datatype like Boolean or non-native Enum that may have embedded rules to generate CHECK constraints will be more correctly handled in that these constraints usually will not have been generated on the PostgreSQL backend; previously it would inadvertently assume they existed unconditionally in a special PG-only "drop constraint" step. .. change:: :tags: feature, versioning :tickets: 757 The revision tree is now checked for cycles and loops between revision files when the revision environment is loaded up. Scenarios such as a revision pointing to itself, or a revision that can reach itself via a loop, are handled and will raise the :class:`.CycleDetected` exception when the environment is loaded (expressed from the Alembic commandline as a failure message and nonzero return code). Previously, these situations were silently ignored up front, and the behavior of revision traversal would either be silently incorrect, or would produce errors such as :class:`.RangeNotAncestorError`. Pull request courtesy Koichiro Den. .. change:: :tags: usecase, commands Add ``__main__.py`` file to alembic package to support invocation with ``python -m alembic``. .. change:: :tags: removed, commands Removed deprecated ``--head_only`` option to the ``alembic current`` command .. change:: :tags: removed, operations Removed legacy parameter names from operations, these have been emitting warnings since version 0.8. In the case that legacy version files have not yet been updated, these can be modified directly in order to maintain compatibility: * :meth:`.Operations.drop_constraint` - "type" (use "type_") and "name" (use "constraint_name") * :meth:`.Operations.create_primary_key` - "cols" (use "columns") and "name" (use "constraint_name") * :meth:`.Operations.create_unique_constraint` - "name" (use "constraint_name"), "source" (use "table_name") and "local_cols" (use "columns") * :meth:`.Operations.batch_create_unique_constraint` - "name" (use "constraint_name") * :meth:`.Operations.create_foreign_key` - "name" (use "constraint_name"), "source" (use "source_table"), "referent" (use "referent_table") * :meth:`.Operations.batch_create_foreign_key` - "name" (use "constraint_name"), "referent" (use "referent_table") * :meth:`.Operations.create_check_constraint` - "name" (use "constraint_name"), "source" (use "table_name") * :meth:`.Operations.batch_create_check_constraint` - "name" (use "constraint_name") * :meth:`.Operations.create_index` - "name" (use "index_name") * :meth:`.Operations.drop_index` - "name" (use "index_name"), "tablename" (use "table_name") * :meth:`.Operations.batch_drop_index` - "name" (use "index_name"), * :meth:`.Operations.create_table` - "name" (use "table_name") * :meth:`.Operations.drop_table` - "name" (use "table_name") * :meth:`.Operations.alter_column` - "name" (use "new_column_name") .. changelog:: ``` ### 1.4.3 ``` :released: September 11, 2020 .. change:: :tags: bug, sqlite, batch :tickets: 711 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. .. change:: :tags: bug, ops, mysql :tickets: 736 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. .. change:: :tags: bug, sqlite, batch :tickets: 697 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. .. change:: :tags: bug, commands :tickets: 694 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. .. change:: :tags: 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. .. change:: :tags: bug, mssql :tickets: 716 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. .. changelog:: ```Links
- PyPI: https://pypi.org/project/alembic - Changelog: https://pyup.io/changelogs/alembic/ - Homepage: https://alembic.sqlalchemy.org - Docs: https://pythonhosted.org/alembic/Update SQLAlchemy from 1.3.18 to 1.4.22.
Changelog
### 1.4.22 ``` :released: July 21, 2021 .. change:: :tags: bug, sql :tickets: 6786 Fixed issue where use of the :paramref:`_sql.case.whens` parameter passing a dictionary positionally and not as a keyword argument would emit a 2.0 deprecation warning, referring to the deprecation of passing a list positionally. The dictionary format of "whens", passed positionally, is still supported and was accidentally marked as deprecated. .. change:: :tags: bug, orm :tickets: 6775 Fixed issue in new :meth:`_schema.Table.table_valued` method where the resulting :class:`_sql.TableValuedColumn` construct would not respond correctly to alias adaptation as is used throughout the ORM, such as for eager loading, polymorphic loading, etc. .. change:: :tags: bug, orm :tickets: 6769 Fixed issue where usage of the :meth:`_result.Result.unique` method with an ORM result that included column expressions with unhashable types, such as ``JSON`` or ``ARRAY`` using non-tuples would silently fall back to using the ``id()`` function, rather than raising an error. This now raises an error when the :meth:`_result.Result.unique` method is used in a 2.0 style ORM query. Additionally, hashability is assumed to be True for result values of unknown type, such as often happens when using SQL functions of unknown return type; if values are truly not hashable then the ``hash()`` itself will raise. For legacy ORM queries, since the legacy :class:`_orm.Query` object uniquifies in all cases, the old rules remain in place, which is to use ``id()`` for result values of unknown type as this legacy uniquing is mostly for the purpose of uniquing ORM entities and not column values. .. change:: :tags: orm, bug :tickets: 6771 Fixed an issue where clearing of mappers during things like test suite teardowns could cause a "dictionary changed size" warning during garbage collection, due to iteration of a weak-referencing dictionary. A ``list()`` has been applied to prevent concurrent GC from affecting this operation. .. change:: :tags: bug, sql :tickets: 6770 Fixed issue where type-specific bound parameter handlers would not be called upon in the case of using the :meth:`_sql.Insert.values` method with the Python ``None`` value; in particular, this would be noticed when using the :class:`_types.JSON` datatype as well as related PostgreSQL specific types such as :class:`_postgresql.JSONB` which would fail to encode the Python ``None`` value into JSON null, however the issue was generalized to any bound parameter handler in conjunction with this specific method of :class:`_sql.Insert`. .. change:: :tags: bug, engine :tickets: 6740 Added some guards against ``KeyError`` in the event system to accommodate the case that the interpreter is shutting down at the same time :meth:`_engine.Engine.dispose` is being called, which would cause stack trace warnings. .. change:: :tags: bug, orm, regression :tickets: 6793 Fixed critical caching issue where the ORM's persistence feature using INSERT..RETURNING would cache an incorrect query when mixing the "bulk save" and standard "flush" forms of INSERT. .. changelog:: ``` ### 1.4.21 ``` :released: July 14, 2021 .. change:: :tags: usecase, orm :tickets: 6708 Modified the approach used for history tracking of scalar object relationships that are not many-to-one, i.e. one-to-one relationships that would otherwise be one-to-many. When replacing a one-to-one value, the "old" value that would be replaced is no longer loaded immediately, and is instead handled during the flush process. This eliminates an historically troublesome lazy load that otherwise often occurs when assigning to a one-to-one attribute, and is particularly troublesome when using "lazy='raise'" as well as asyncio use cases. This change does cause a behavioral change within the :meth:`_orm.AttributeEvents.set` event, which is nonetheless currently documented, which is that the event applied to such a one-to-one attribute will no longer receive the "old" parameter if it is unloaded and the :paramref:`_orm.relationship.active_history` flag is not set. As is documented in :meth:`_orm.AttributeEvents.set`, if the event handler needs to receive the "old" value when the event fires off, the active_history flag must be established either with the event listener or with the relationship. This is already the behavior with other kinds of attributes such as many-to-one and column value references. The change additionally will defer updating a backref on the "old" value in the less common case that the "old" value is locally present in the session, but isn't loaded on the relationship in question, until the next flush occurs. If this causes an issue, again the normal :paramref:`_orm.relationship.active_history` flag can be set to ``True`` on the relationship. .. change:: :tags: usecase, sql :tickets: 6752 Added new method :meth:`_sql.HasCTE.add_cte` to each of the :func:`_sql.select`, :func:`_sql.insert`, :func:`_sql.update` and :func:`_sql.delete` constructs. This method will add the given :class:`_sql.CTE` as an "independent" CTE of the statement, meaning it renders in the WITH clause above the statement unconditionally even if it is not otherwise referenced in the primary statement. This is a popular use case on the PostgreSQL database where a CTE is used for a DML statement that runs against database rows independently of the primary statement. .. change:: :tags: bug, postgresql :tickets: 6755 Fixed issue in :meth:`_postgresql.Insert.on_conflict_do_nothing` and :meth:`_postgresql.Insert.on_conflict_do_update` where the name of a unique constraint passed as the ``constraint`` parameter would not be properly truncated for length if it were based on a naming convention that generated a too-long name for the PostgreSQL max identifier length of 63 characters, in the same way which occurs within a CREATE TABLE statement. .. change:: :tags: bug, sql :tickets: 6710 Fixed issue in CTE constructs where a recursive CTE that referred to a SELECT that has duplicate column names, which are typically deduplicated using labeling logic in 1.4, would fail to refer to the deduplicated label name correctly within the WITH clause. .. change:: :tags: bug, regression, mssql :tickets: 6697 Fixed regression where the special dotted-schema name handling for the SQL Server dialect would not function correctly if the dotted schema name were used within the ``schema_translate_map`` feature. .. change:: :tags: orm, regression :tickets: 6718 Fixed ORM regression where ad-hoc label names generated for hybrid properties and potentially other similar types of ORM-enabled expressions would usually be propagated outwards through subqueries, allowing the name to be retained in the final keys of the result set even when selecting from subqueries. Additional state is now tracked in this case that isn't lost when a hybrid is selected out of a Core select / subquery. .. change:: :tags: bug, postgresql :tickets: 6739 Fixed issue where the PostgreSQL ``ENUM`` datatype as embedded in the ``ARRAY`` datatype would fail to emit correctly in create/drop when the ``schema_translate_map`` feature were also in use. Additionally repairs a related issue where the same ``schema_translate_map`` feature would not work for the ``ENUM`` datatype in combination with a ``CAST``, that's also intrinsic to how the ``ARRAY(ENUM)`` combination works on the PostgreSQL dialect. .. change:: :tags: bug, sql, regression :tickets: 6735 Fixed regression where the :func:`_sql.tablesample` construct would fail to be executable when constructed given a floating-point sampling value not embedded within a SQL function. .. change:: :tags: bug, postgresql :tickets: 6696 Fixed issue in :meth:`_postgresql.Insert.on_conflict_do_nothing` and :meth:`_postgresql.Insert.on_conflict_do_update` where the name of a unique constraint passed as the ``constraint`` parameter would not be properly quoted if it contained characters which required quoting. .. change:: :tags: bug, regression, orm :tickets: 6698 Fixed regression caused in 1.4.19 due to :ticket:`6503` and related involving :meth:`_orm.Query.with_entities` where the new structure used would be inappropriately transferred to an enclosing :class:`_orm.Query` when making use of set operations such as :meth:`_orm.Query.union`, causing the JOIN instructions within to be applied to the outside query as well. .. change:: :tags: bug, orm, regression :tickets: 6762 Fixed regression which appeared in version 1.4.3 due to :ticket:`6060` where rules that limit ORM adaptation of derived selectables interfered with other ORM-adaptation based cases, in this case when applying adaptations for a :func:`_orm.with_polymorphic` against a mapping which uses a :func:`_orm.column_property` which in turn makes use of a scalar select that includes a :func:`_orm.aliased` object of the mapped table. .. changelog:: ``` ### 1.4.20 ``` :released: June 28, 2021 .. change:: :tags: bug, regression, orm :tickets: 6680 Fixed regression in ORM regarding an internal reconstitution step for the :func:`_orm.with_polymorphic` construct, when the user-facing object is garbage collected as the query is processed. The reconstitution was not ensuring the sub-entities for the "polymorphic" case were handled, leading to an ``AttributeError``. .. change:: :tags: usecase, sql :tickets: 6646 Add a impl parameter to :class:`_types.PickleType` constructor, allowing any arbitary type to be used in place of the default implementation of :class:`_types.LargeBinary`. Pull request courtesy jason3gb. .. change:: :tags: bug, engine :tickets: 5348 Fixed an issue in the C extension for the :class:`_result.Row` class which could lead to a memory leak in the unlikely case of a :class:`_result.Row` object which referred to an ORM object that then was mutated to refer back to the ``Row`` itself, creating a cycle. The Python C APIs for tracking GC cycles has been added to the native :class:`_result.Row` implementation to accommodate for this case. .. change:: :tags: bug, engine :tickets: 6665 Fixed old issue where a :func:`_sql.select()` made against the token "*", which then yielded exactly one column, would fail to correctly organize the ``cursor.description`` column name into the keys of the result object. .. change:: :tags: usecase, mysql :tickets: 6659 Made a small adjustment in the table reflection feature of the MySQL dialect to accommodate for alternate MySQL-oriented databases such as TiDB which include their own "comment" directives at the end of a constraint directive within "CREATE TABLE" where the format doesn't have the additional space character after the comment, in this case the TiDB "clustered index" feature. Pull request courtesy Daniël van Eeden. .. change:: :tags: bug, schema :tickets: 6685 Fixed issue where passing ``None`` for the value of :paramref:`_schema.Table.prefixes` would not store an empty list, but rather the constant ``None``, which may be unexpected by third party dialects. The issue is revealed by a usage in recent versions of Alembic that are passing ``None`` for this value. Pull request courtesy Kai Mueller. .. change:: :tags: bug, regression, ext :tickets: 6679 Fixed regression in :mod:`sqlalchemy.ext.automap` extension such that the use case of creating an explicit mapped class to a table that is also the :paramref:`_orm.relationship.secondary` element of a :func:`_orm.relationship` that automap will be generating would emit the "overlaps" warnings introduced in 1.4 and discussed at :ref:`error_qzyx`. While generating this case from automap is still subject to the same caveats that the "overlaps" warning refers towards, as automap is intended for more ad-hoc use cases, the condition which produces the warning is disabled when a many-to-many relationship with this particular pattern is generated. .. change:: :tags: bug, regression, orm :tickets: 6678 Adjusted :meth:`_orm.Query.union` and similar set operations to be correctly compatible with the new capabilities just added in :ticket:`6661`, with SQLAlchemy 1.4.19, such that the SELECT statements rendered as elements of the UNION or other set operation will include directly mapped columns that are mapped as deferred; this both fixes a regression involving unions with multiple levels of nesting that would produce a column mismatch, and also allows the :func:`_orm.undefer` option to be used at the top level of such a :class:`_orm.Query` without having to apply the option to each of the elements within the UNION. .. change:: :tags: bug, sql, orm :tickets: 6668 Fixed the class hierarchy for the :class:`_schema.Sequence` and the more general :class:`_schema.DefaultGenerator` base, as these are "executable" as statements they need to include :class:`_sql.Executable` in their hierarchy, not just :class:`_roles.StatementRole` as was applied arbitrarily to :class:`_schema.Sequence` previously. The fix allows :class:`_schema.Sequence` to work in all ``.execute()`` methods including with :meth:`_orm.Session.execute` which was not working in the case that a :meth:`_orm.SessionEvents.do_orm_execute` handler was also established. .. change:: :tags: bug, orm :tickets: 6538 Adjusted the check in the mapper for a callable object that is used as a ``validates`` validator function or a ``reconstructor`` reconstruction function, to check for "callable" more liberally such as to accommodate objects based on fundamental attributes like ``__func__`` and ``__call___``, rather than testing for ``MethodType`` / ``FunctionType``, allowing things like cython functions to work properly. Pull request courtesy Miłosz Stypiński. .. changelog:: ``` ### 1.4.19 ``` :released: June 22, 2021 .. change:: :tags: bug, mssql :tickets: 6658 Fixed bug where the "schema_translate_map" feature would fail to function correctly in conjunction with an INSERT into a table that has an IDENTITY column, where the value of the IDENTITY column were specified in the values of the INSERT thus triggering SQLAlchemy's feature of setting IDENTITY INSERT to "on"; it's in this directive where the schema translate map would fail to