From aab08b711a98ebd3e731ca9c304bbf7e047e0e9a Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Thu, 28 Dec 2023 11:19:39 -0500 Subject: [PATCH] - 2.0.24 --- doc/build/changelog/changelog_20.rst | 133 +++++++++++++++++- doc/build/changelog/unreleased_20/10597.rst | 10 -- doc/build/changelog/unreleased_20/10654.rst | 8 -- doc/build/changelog/unreleased_20/10662.rst | 11 -- doc/build/changelog/unreleased_20/10668.rst | 9 -- doc/build/changelog/unreleased_20/10717.rst | 11 -- doc/build/changelog/unreleased_20/10732.rst | 12 -- doc/build/changelog/unreleased_20/10747.rst | 9 -- doc/build/changelog/unreleased_20/10753.rst | 17 --- doc/build/changelog/unreleased_20/10776.rst | 10 -- doc/build/changelog/unreleased_20/10784.rst | 8 -- .../unreleased_20/async_fallback.rst | 7 - .../unreleased_20/sql_func_typing.rst | 7 - doc/build/conf.py | 4 +- 14 files changed, 134 insertions(+), 122 deletions(-) delete mode 100644 doc/build/changelog/unreleased_20/10597.rst delete mode 100644 doc/build/changelog/unreleased_20/10654.rst delete mode 100644 doc/build/changelog/unreleased_20/10662.rst delete mode 100644 doc/build/changelog/unreleased_20/10668.rst delete mode 100644 doc/build/changelog/unreleased_20/10717.rst delete mode 100644 doc/build/changelog/unreleased_20/10732.rst delete mode 100644 doc/build/changelog/unreleased_20/10747.rst delete mode 100644 doc/build/changelog/unreleased_20/10753.rst delete mode 100644 doc/build/changelog/unreleased_20/10776.rst delete mode 100644 doc/build/changelog/unreleased_20/10784.rst delete mode 100644 doc/build/changelog/unreleased_20/async_fallback.rst delete mode 100644 doc/build/changelog/unreleased_20/sql_func_typing.rst diff --git a/doc/build/changelog/changelog_20.rst b/doc/build/changelog/changelog_20.rst index a7d7b20483..e14498e1b8 100644 --- a/doc/build/changelog/changelog_20.rst +++ b/doc/build/changelog/changelog_20.rst @@ -10,7 +10,138 @@ .. changelog:: :version: 2.0.24 - :include_notes_from: unreleased_20 + :released: December 28, 2023 + + .. change:: + :tags: bug, orm + :tickets: 10597 + + Fixed issue where use of :func:`_orm.foreign` annotation on a + non-initialized :func:`_orm.mapped_column` construct would produce an + expression without a type, which was then not updated at initialization + time of the actual column, leading to issues such as relationships not + determining ``use_get`` appropriately. + + + .. change:: + :tags: bug, schema + :tickets: 10654 + + Fixed issue where error reporting for unexpected schema item when creating + objects like :class:`_schema.Table` would incorrectly handle an argument + that was itself passed as a tuple, leading to a formatting error. The + error message has been modernized to use f-strings. + + .. change:: + :tags: bug, engine + :tickets: 10662 + + Fixed URL-encoding of the username and password components of + :class:`.engine.URL` objects when converting them to string using the + :meth:`_engine.URL.render_as_string` method, by using Python standard + library ``urllib.parse.quote`` while allowing for plus signs and spaces to + remain unchanged as supported by SQLAlchemy's non-standard URL parsing, + rather than the legacy home-grown routine from many years ago. Pull request + courtesy of Xavier NUNN. + + .. change:: + :tags: bug, orm + :tickets: 10668 + + Improved the error message produced when the unit of work process sets the + value of a primary key column to NULL due to a related object with a + dependency rule on that column being deleted, to include not just the + destination object and column name but also the source column from which + the NULL value is originating. Pull request courtesy Jan Vollmer. + + .. change:: + :tags: bug, postgresql + :tickets: 10717 + + Adjusted the asyncpg dialect such that when the ``terminate()`` method is + used to discard an invalidated connection, the dialect will first attempt + to gracefully close the connection using ``.close()`` with a timeout, if + the operation is proceeding within an async event loop context only. This + allows the asyncpg driver to attend to finalizing a ``TimeoutError`` + including being able to close a long-running query server side, which + otherwise can keep running after the program has exited. + + .. change:: + :tags: bug, orm + :tickets: 10732 + + Modified the ``__init_subclass__()`` method used by + :class:`_orm.MappedAsDataclass`, :class:`_orm.DeclarativeBase` and + :class:`_orm.DeclarativeBaseNoMeta` to accept arbitrary ``**kw`` and to + propagate them to the ``super()`` call, allowing greater flexibility in + arranging custom superclasses and mixins which make use of + ``__init_subclass__()`` keyword arguments. Pull request courtesy Michael + Oliver. + + + .. change:: + :tags: bug, tests + :tickets: 10747 + + Improvements to the test suite to further harden its ability to run + when Python ``greenlet`` is not installed. There is now a tox + target that includes the token "nogreenlet" that will run the suite + with greenlet not installed (note that it still temporarily installs + greenlet as part of the tox config, however). + + .. change:: + :tags: bug, sql + :tickets: 10753 + + Fixed issue in stringify for SQL elements, where a specific dialect is not + passed, where a dialect-specific element such as the PostgreSQL "on + conflict do update" construct is encountered and then fails to provide for + a stringify dialect with the appropriate state to render the construct, + leading to internal errors. + + .. change:: + :tags: bug, sql + + Fixed issue where stringifying or compiling a :class:`.CTE` that was + against a DML construct such as an :func:`_sql.insert` construct would fail + to stringify, due to a mis-detection that the statement overall is an + INSERT, leading to internal errors. + + .. change:: + :tags: bug, orm + :tickets: 10776 + + Ensured the use case of :class:`.Bundle` objects used in the + ``returning()`` portion of ORM-enabled INSERT, UPDATE and DELETE statements + is tested and works fully. This was never explicitly implemented or + tested previously and did not work correctly in the 1.4 series; in the 2.0 + series, ORM UPDATE/DELETE with WHERE criteria was missing an implementation + method preventing :class:`.Bundle` objects from working. + + .. change:: + :tags: bug, orm + :tickets: 10784 + + Fixed 2.0 regression in :class:`.MutableList` where a routine that detects + sequences would not correctly filter out string or bytes instances, making + it impossible to assign a string value to a specific index (while + non-sequence values would work fine). + + .. change:: + :tags: change, asyncio + + The ``async_fallback`` dialect argument is now deprecated, and will be + removed in SQLAlchemy 2.1. This flag has not been used for SQLAlchemy's + test suite for some time. asyncio dialects can still run in a synchronous + style by running code within a greenlet using :func:`_util.greenlet_spawn`. + + .. change:: + :tags: bug, typing + :tickets: 6810 + + Completed pep-484 typing for the ``sqlalchemy.sql.functions`` module. + :func:`_sql.select` constructs made against ``func`` elements should now + have filled-in return types. .. changelog:: :version: 2.0.23 diff --git a/doc/build/changelog/unreleased_20/10597.rst b/doc/build/changelog/unreleased_20/10597.rst deleted file mode 100644 index 9764518829..0000000000 --- a/doc/build/changelog/unreleased_20/10597.rst +++ /dev/null @@ -1,10 +0,0 @@ -.. change:: - :tags: bug, orm - :tickets: 10597 - - Fixed issue where use of :func:`_orm.foreign` annotation on a - non-initialized :func:`_orm.mapped_column` construct would produce an - expression without a type, which was then not updated at initialization - time of the actual column, leading to issues such as relationships not - determining ``use_get`` appropriately. - diff --git a/doc/build/changelog/unreleased_20/10654.rst b/doc/build/changelog/unreleased_20/10654.rst deleted file mode 100644 index bb9b25e04d..0000000000 --- a/doc/build/changelog/unreleased_20/10654.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. change:: - :tags: bug, schema - :tickets: 10654 - - Fixed issue where error reporting for unexpected schema item when creating - objects like :class:`_schema.Table` would incorrectly handle an argument - that was itself passed as a tuple, leading to a formatting error. The - error message has been modernized to use f-strings. diff --git a/doc/build/changelog/unreleased_20/10662.rst b/doc/build/changelog/unreleased_20/10662.rst deleted file mode 100644 index 5be613d8e2..0000000000 --- a/doc/build/changelog/unreleased_20/10662.rst +++ /dev/null @@ -1,11 +0,0 @@ -.. change:: - :tags: bug, engine - :tickets: 10662 - - Fixed URL-encoding of the username and password components of - :class:`.engine.URL` objects when converting them to string using the - :meth:`_engine.URL.render_as_string` method, by using Python standard - library ``urllib.parse.quote`` while allowing for plus signs and spaces to - remain unchanged as supported by SQLAlchemy's non-standard URL parsing, - rather than the legacy home-grown routine from many years ago. Pull request - courtesy of Xavier NUNN. diff --git a/doc/build/changelog/unreleased_20/10668.rst b/doc/build/changelog/unreleased_20/10668.rst deleted file mode 100644 index 560aac85e9..0000000000 --- a/doc/build/changelog/unreleased_20/10668.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. change:: - :tags: bug, orm - :tickets: 10668 - - Improved the error message produced when the unit of work process sets the - value of a primary key column to NULL due to a related object with a - dependency rule on that column being deleted, to include not just the - destination object and column name but also the source column from which - the NULL value is originating. Pull request courtesy Jan Vollmer. diff --git a/doc/build/changelog/unreleased_20/10717.rst b/doc/build/changelog/unreleased_20/10717.rst deleted file mode 100644 index ccdcd80bb9..0000000000 --- a/doc/build/changelog/unreleased_20/10717.rst +++ /dev/null @@ -1,11 +0,0 @@ -.. change:: - :tags: bug, postgresql - :tickets: 10717 - - Adjusted the asyncpg dialect such that when the ``terminate()`` method is - used to discard an invalidated connection, the dialect will first attempt - to gracefully close the connection using ``.close()`` with a timeout, if - the operation is proceeding within an async event loop context only. This - allows the asyncpg driver to attend to finalizing a ``TimeoutError`` - including being able to close a long-running query server side, which - otherwise can keep running after the program has exited. diff --git a/doc/build/changelog/unreleased_20/10732.rst b/doc/build/changelog/unreleased_20/10732.rst deleted file mode 100644 index fb1c22a980..0000000000 --- a/doc/build/changelog/unreleased_20/10732.rst +++ /dev/null @@ -1,12 +0,0 @@ -.. change:: - :tags: bug, orm - :tickets: 10732 - - Modified the ``__init_subclass__()`` method used by - :class:`_orm.MappedAsDataclass`, :class:`_orm.DeclarativeBase` and - :class:`_orm.DeclarativeBaseNoMeta` to accept arbitrary ``**kw`` and to - propagate them to the ``super()`` call, allowing greater flexibility in - arranging custom superclasses and mixins which make use of - ``__init_subclass__()`` keyword arguments. Pull request courtesy Michael - Oliver. - diff --git a/doc/build/changelog/unreleased_20/10747.rst b/doc/build/changelog/unreleased_20/10747.rst deleted file mode 100644 index ac8133ac73..0000000000 --- a/doc/build/changelog/unreleased_20/10747.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. change:: - :tags: bug, tests - :tickets: 10747 - - Improvements to the test suite to further harden its ability to run - when Python ``greenlet`` is not installed. There is now a tox - target that includes the token "nogreenlet" that will run the suite - with greenlet not installed (note that it still temporarily installs - greenlet as part of the tox config, however). diff --git a/doc/build/changelog/unreleased_20/10753.rst b/doc/build/changelog/unreleased_20/10753.rst deleted file mode 100644 index 5b714ed197..0000000000 --- a/doc/build/changelog/unreleased_20/10753.rst +++ /dev/null @@ -1,17 +0,0 @@ -.. change:: - :tags: bug, sql - :tickets: 10753 - - Fixed issue in stringify for SQL elements, where a specific dialect is not - passed, where a dialect-specific element such as the PostgreSQL "on - conflict do update" construct is encountered and then fails to provide for - a stringify dialect with the appropriate state to render the construct, - leading to internal errors. - -.. change:: - :tags: bug, sql - - Fixed issue where stringifying or compiling a :class:`.CTE` that was - against a DML construct such as an :func:`_sql.insert` construct would fail - to stringify, due to a mis-detection that the statement overall is an - INSERT, leading to internal errors. diff --git a/doc/build/changelog/unreleased_20/10776.rst b/doc/build/changelog/unreleased_20/10776.rst deleted file mode 100644 index 4a6889fdb7..0000000000 --- a/doc/build/changelog/unreleased_20/10776.rst +++ /dev/null @@ -1,10 +0,0 @@ -.. change:: - :tags: bug, orm - :tickets: 10776 - - Ensured the use case of :class:`.Bundle` objects used in the - ``returning()`` portion of ORM-enabled INSERT, UPDATE and DELETE statements - is tested and works fully. This was never explicitly implemented or - tested previously and did not work correctly in the 1.4 series; in the 2.0 - series, ORM UPDATE/DELETE with WHERE criteria was missing an implementation - method preventing :class:`.Bundle` objects from working. diff --git a/doc/build/changelog/unreleased_20/10784.rst b/doc/build/changelog/unreleased_20/10784.rst deleted file mode 100644 index a67d5b6392..0000000000 --- a/doc/build/changelog/unreleased_20/10784.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. change:: - :tags: bug, orm - :tickets: 10784 - - Fixed 2.0 regression in :class:`.MutableList` where a routine that detects - sequences would not correctly filter out string or bytes instances, making - it impossible to assign a string value to a specific index (while - non-sequence values would work fine). diff --git a/doc/build/changelog/unreleased_20/async_fallback.rst b/doc/build/changelog/unreleased_20/async_fallback.rst deleted file mode 100644 index a0eccb5580..0000000000 --- a/doc/build/changelog/unreleased_20/async_fallback.rst +++ /dev/null @@ -1,7 +0,0 @@ -.. change:: - :tags: change, asyncio - - The ``async_fallback`` dialect argument is now deprecated, and will be - removed in SQLAlchemy 2.1. This flag has not been used for SQLAlchemy's - test suite for some time. asyncio dialects can still run in a synchronous - style by running code within a greenlet using :func:`_util.greenlet_spawn`. diff --git a/doc/build/changelog/unreleased_20/sql_func_typing.rst b/doc/build/changelog/unreleased_20/sql_func_typing.rst deleted file mode 100644 index 7fc310ec7c..0000000000 --- a/doc/build/changelog/unreleased_20/sql_func_typing.rst +++ /dev/null @@ -1,7 +0,0 @@ -.. change:: - :tags: bug, typing - :tickets: 6810 - - Completed pep-484 typing for the ``sqlalchemy.sql.functions`` module. - :func:`_sql.select` constructs made against ``func`` elements should now - have filled-in return types. diff --git a/doc/build/conf.py b/doc/build/conf.py index d047d6daef..9ff7e3768a 100644 --- a/doc/build/conf.py +++ b/doc/build/conf.py @@ -244,9 +244,9 @@ copyright = "2007-2023, the SQLAlchemy authors and contributors" # noqa # The short X.Y version. version = "2.0" # The full version, including alpha/beta/rc tags. -release = "2.0.23" +release = "2.0.24" -release_date = "November 2, 2023" +release_date = "December 28, 2023" site_base = os.environ.get("RTD_SITE_BASE", "https://www.sqlalchemy.org") site_adapter_template = "docs_adapter.mako" -- 2.47.2