Releases: aio-libs/yarl
1.9.10
Bug fixes
-
:meth:
URL.join() <yarl.URL.join>
has been changed to match
:rfc:3986
and align with
:meth:/ operation <yarl.URL.__truediv__>
and :meth:URL.joinpath() <yarl.URL.joinpath>
when joining URLs with empty segments.
Previously :py:func:urllib.parse.urljoin
was used,
which has known issues with empty segments
(python/cpython#84774 <https://github.com/python/cpython/issues/84774>
_).Due to the semantics of :meth:
URL.join() <yarl.URL.join>
, joining an
URL with scheme requires making it relative, prefixing with./
... code-block:: pycon
URL("https://web.archive.org/web/").join(URL("./https://github.com/aio-libs/yarl"))
URL('https://web.archive.org/web/https://github.com/aio-libs/yarl')Empty segments are honored in the base as well as the joined part.
.. code-block:: pycon
URL("https://web.archive.org/web/https://").join(URL("github.com/aio-libs/yarl"))
URL('https://web.archive.org/web/https://github.com/aio-libs/yarl')-- by :user:
commonism
This change initially appeared in 1.9.5 but was reverted in 1.9.6 to resolve a problem with query string handling.
Features
-
Added :attr:
~yarl.URL.absolute
which is now preferred overURL.is_absolute()
-- by :user:bdraco
.Related issues and pull requests on GitHub:
#1100.
1.9.9
1.9.8
Features
-
Covered the :class:
~yarl.URL
object with types -- by :user:bdraco
.Related issues and pull requests on GitHub:
#1084. -
Cache parsing of IP Addresses when encoding hosts -- by :user:
bdraco
.Related issues and pull requests on GitHub:
#1086.
Contributor-facing changes
-
Covered the :class:
~yarl.URL
object with types -- by :user:bdraco
.Related issues and pull requests on GitHub:
#1084.
Miscellaneous internal changes
-
Improved performance of handling ports -- by :user:
bdraco
.Related issues and pull requests on GitHub:
#1081.
1.9.8rc0
Features
-
Covered the :class:
~yarl.URL
object with types -- by :user:bdraco
.Related issues and pull requests on GitHub:
#1084. -
Cache parsing of IP Addresses when encoding hosts -- by :user:
bdraco
.Related issues and pull requests on GitHub:
#1086.
Contributor-facing changes
-
Covered the :class:
~yarl.URL
object with types -- by :user:bdraco
.Related issues and pull requests on GitHub:
#1084.
Miscellaneous internal changes
-
Improved performance of handling ports -- by :user:
bdraco
.Related issues and pull requests on GitHub:
#1081.
1.9.7
Removals and backward incompatible breaking changes
-
Removed support :rfc:
3986#section-3.2.3
port normalization when the scheme is not one ofhttp
,https
,wss
, orws
-- by :user:bdraco
.Support for port normalization was recently added in #1033 and contained code that would do blocking I/O if the scheme was not one of the four listed above. The code has been removed because this library is intended to be safe for usage with
asyncio
.Related issues and pull requests on GitHub:
#1076.
Miscellaneous internal changes
-
Improved performance of property caching -- by :user:
bdraco
.The
reify
implementation fromaiohttp
was adapted to replace the internalcached_property
implementation.Related issues and pull requests on GitHub:
#1070.
1.9.6
Bug fixes
-
Reverted :rfc:
3986
compatible :meth:URL.join() <yarl.URL.join>
honoring empty segments which was introduced in #1039.This change introduced a regression handling query string parameters with joined URLs. The change was reverted to maintain compatibility with the previous behavior.
Related issues and pull requests on GitHub:
#1067.
1.9.5
Bug fixes
-
Joining URLs with empty segments has been changed
to match :rfc:3986
.Previously empty segments would be removed from path,
breaking use-cases such as.. code-block:: python
URL("https://web.archive.org/web/") / "https://github.com/"
Now :meth:
/ operation <yarl.URL.__truediv__>
and :meth:URL.joinpath() <yarl.URL.joinpath>
keep empty segments, but do not introduce new empty segments.
e.g... code-block:: python
URL("https://example.org/") / ""
does not introduce an empty segment.
-- by :user:
commonism
and :user:youtux
Related issues and pull requests on GitHub:
#1026. -
The default protocol ports of well-known URI schemes are now taken into account
during the normalization of the URL string representation in accordance with
:rfc:3986#section-3.2.3
.Specified ports are removed from the :class:
str
representation of a :class:~yarl.URL
if the port matches the scheme's default port -- by :user:commonism
.Related issues and pull requests on GitHub:
#1033. -
:meth:
URL.join() <yarl.URL.join>
has been changed to match
:rfc:3986
and align with
:meth:/ operation <yarl.URL.__truediv__>
and :meth:URL.joinpath() <yarl.URL.joinpath>
when joining URLs with empty segments.
Previously :py:func:urllib.parse.urljoin
was used,
which has known issues with empty segments
(python/cpython#84774 <https://github.com/python/cpython/issues/84774>
_).Due to the semantics of :meth:
URL.join() <yarl.URL.join>
, joining an
URL with scheme requires making it relative, prefixing with./
... code-block:: pycon
URL("https://web.archive.org/web/").join(URL("./https://github.com/aio-libs/yarl"))
URL('https://web.archive.org/web/https://github.com/aio-libs/yarl')Empty segments are honored in the base as well as the joined part.
.. code-block:: pycon
URL("https://web.archive.org/web/https://").join(URL("github.com/aio-libs/yarl"))
URL('https://web.archive.org/web/https://github.com/aio-libs/yarl')-- by :user:
commonism
Related issues and pull requests on GitHub:
#1039.
Removals and backward incompatible breaking changes
-
Stopped decoding
%2F
(/
) inURL.path
, as this could lead to code incorrectly treating it as a path separator
-- by :user:Dreamsorcerer
.Related issues and pull requests on GitHub:
#1057.
Improved documentation
-
On the :doc:
Contributing docs <contributing/guidelines>
page,
a link to theTowncrier philosophy
has been fixed.Related issues and pull requests on GitHub:
#981. -
The pre-existing :meth:
/ magic method <yarl.URL.__truediv__>
has been documented in the API reference -- by :user:commonism
.Related issues and pull requests on GitHub:
#1026.
Packaging updates and notes for downstreams
-
A flaw in the logic for copying the project directory into a
temporary folder that led to infinite recursion when :envvar:TMPDIR
was set to a project subdirectory path. This was happening in Fedora
and its downstream due to the use ofpyproject-rpm-macros <https://src.fedoraproject.org/rpms/pyproject-rpm-macros>
__. It was
only reproducible withpip wheel
and was not affecting the
pyproject-build
users.-- by :user:
hroncok
and :user:webknjaz
-
Support Python 3.13 and publish non-free-threaded wheels
Related issues and pull requests on GitHub:
#1054.
Contributor-facing changes
-
The CI/CD setup has been updated to test
arm64
wheels
under macOS 14, except for Python 3.7 that is unsupported
in that environment -- by :user:webknjaz
.Related issues and pull requests on GitHub:
#1015. -
Removed unused type ignores and casts -- by :user:
hauntsaninja
.Related issues and pull requests on GitHub:
#1031.
Miscellaneous internal changes
-
port
,scheme
, andraw_host
are nowcached_property
-- by :user:bdraco
.aiohttp
accesses these properties quite often, which cause :mod:urllib
to build the_hostinfo
property every time.port
,scheme
, andraw_host
are now cached properties, which will improve performance.
1.9.4
Bug fixes
-
Started raising :py:exc:
TypeError
when a string value is passed into
:py:meth:~yarl.URL.build
as theport
argument -- by :user:commonism
.Previously the empty string as port would create malformed URLs when rendered as string representations. (#883)
Packaging updates and notes for downstreams
-
The leading
--
has been dropped from the :pep:517
in-tree build
backend config setting names.--pure-python
is now justpure-python
-- by :user:webknjaz
.The usage now looks as follows:
.. code-block:: console
$ python -m build \ --config-setting=pure-python=true \ --config-setting=with-cython-tracing=true
(#963)
Contributor-facing changes
-
A step-by-step :doc:
Release Guide <contributing/release_guide>
guide has
been added, describing how to release yarl -- by :user:webknjaz
.This is primarily targeting maintainers. (#960)
-
Coverage collection has been implemented for the Cython modules
-- by :user:webknjaz
.It will also be reported to Codecov from any non-release CI jobs.
To measure coverage in a development environment, yarl can be
installed in editable mode, which requires an environment variable
YARL_CYTHON_TRACING=1
to be set:.. code-block:: console
$ YARL_CYTHON_TRACING=1 python -Im pip install -e .
Editable install produces C-files required for the Cython coverage
plugin to map the measurements back to the PYX-files. (#961) -
It is now possible to request line tracing in Cython builds using the
with-cython-tracing
:pep:517
config setting
-- :user:webknjaz
.This can be used in CI and development environment to measure coverage
on Cython modules, but is not normally useful to the end-users or
downstream packagers.Here's a usage example:
.. code-block:: console
$ python -Im pip install . --config-settings=with-cython-tracing=true
For editable installs, this setting is on by default. Otherwise, it's
off unless requested explicitly. (#962)
1.9.3
🐛 Bug fixes
- Stopped dropping trailing slashes in
yarl.URL.joinpath()
-- by @gmacon. (#862, #866) - Started accepting string subclasses in
__truediv__()
operations (URL / segment
) -- by @mjpieters. (#871, #884) - Fixed the human representation of URLs with square brackets in usernames and passwords -- by @mjpieters. (#876, #882)
- Updated type hints to include
URL.missing_port()
,URL.__bytes__()
and theencoding
argument toyarl.URL.joinpath()
-- by @mjpieters. (#891)
📦 Packaging updates and notes for downstreams
-
Integrated Cython 3 to enable building yarl under Python 3.12 -- by @mjpieters. (#829, #881)
-
Added the changelog URL to the dist metadata -- by @scop. (#877)
-
Declared modern
setuptools.build_meta
as the :pep:517
build backend inpyproject.toml
explicitly -- by @webknjaz. (#886) -
Converted most of the packaging setup into a declarative
setup.cfg
config -- by @webknjaz. (#890) -
Replaced the packaging is replaced from an old-fashioned
setup.py
to an in-tree :pep:517
build backend -- by @webknjaz.Whenever the end-users or downstream packagers need to build
yarl
from source (a Git checkout or an sdist), they may pass aconfig_settings
flag--pure-python
. If this flag is not set, a C-extension will be built and included into the distribution.Here is how this can be done with
pip
:$ python -m pip install . --config-settings=--pure-python=
This will also work with
-e | --editable
.The same can be achieved via
pypa/build
:$ python -m build --config-setting=--pure-python=
Adding
-w | --wheel
can forcepypa/build
produce a wheel from source directly, as opposed to building ansdist
and then building from it. (#893) -
Declared Python 3.12 supported officially in the distribution package metadata -- by @edgarrmondragon. (#942)
🛠️ Contributor-facing changes
-
A regression test for no-host URLs was added per #821 and RFC 3986 -- by @kenballus. (#821, #822)
-
Started testing yarl against Python 3.12 in CI -- by @mjpieters. (#881)
-
All Python 3.12 jobs are now marked as required to pass in CI -- by @edgarrmondragon. (#942)
-
MyST is now integrated in Sphinx -- by @webknjaz.
This allows the contributors to author new documents in Markdown when they have difficulties with going straight RST. (#953)
💪 New Contributors
- @gmacon made their first contribution in #866
- @scop made their first contribution in #877
- @edgarrmondragon made their first contribution in #942
- @kenballus made their first contribution in #822
- @davetapley made their first contribution in #949
🪞 Full Diff: v1.9.2...v1.9.3