(2024-12-01)
Fixed uppercase ASCII hosts being rejected by :meth:`URL.build() <yarl.URL.build>` and :py:meth:`~yarl.URL.with_host` -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`954`, :issue:`1442`.
Improved performances of multiple path properties on cache miss -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1443`.
(2024-11-29)
No significant changes.
(2024-11-29)
Improved cache performance when :class:`~yarl.URL` objects are constructed from :py:meth:`~yarl.URL.build` with
encoded=True
-- by :user:`bdraco`.Related issues and pull requests on GitHub: :issue:`1432`.
Improved cache performance for operations that produce a new :class:`~yarl.URL` object -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1434`, :issue:`1436`.
(2024-11-21)
Added
keep_query
andkeep_fragment
flags in the :py:meth:`yarl.URL.with_path`, :py:meth:`yarl.URL.with_name` and :py:meth:`yarl.URL.with_suffix` methods, allowing users to optionally retain the query string and fragment in the resulting URL when replacing the path -- by :user:`paul-nameless`.Related issues and pull requests on GitHub: :issue:`111`, :issue:`1421`.
Started running downstream
aiohttp
tests in CI -- by :user:`Cycloctane`.Related issues and pull requests on GitHub: :issue:`1415`.
Improved performance of converting :class:`~yarl.URL` to a string -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1422`.
(2024-11-17)
Stopped implicitly allowing the use of Cython pre-release versions when building the distribution package -- by :user:`ajsanchezsanz` and :user:`markgreene74`.
Related issues and pull requests on GitHub: :issue:`1411`, :issue:`1412`.
Fixed a bug causing :attr:`~yarl.URL.port` to return the default port when the given port was zero -- by :user:`gmacon`.
Related issues and pull requests on GitHub: :issue:`1413`.
Make error messages include details of incorrect type when
port
is not int in :py:meth:`~yarl.URL.build`. -- by :user:`Cycloctane`.Related issues and pull requests on GitHub: :issue:`1414`.
Stopped implicitly allowing the use of Cython pre-release versions when building the distribution package -- by :user:`ajsanchezsanz` and :user:`markgreene74`.
Related issues and pull requests on GitHub: :issue:`1411`, :issue:`1412`.
Improved performance of the :py:meth:`~yarl.URL.joinpath` method -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1418`.
(2024-10-30)
Improved performance of many :class:`~yarl.URL` methods -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1396`, :issue:`1397`, :issue:`1398`.
Improved performance of passing a dict or str to :py:meth:`~yarl.URL.extend_query` -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1401`.
(2024-10-28)
Added :attr:`~yarl.URL.host_port_subcomponent` which returns the RFC 3986 host and RFC 3986 port subcomponent -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1375`.
(2024-10-21)
Fixed blocking I/O to load Python code when creating a new :class:`~yarl.URL` with non-ascii characters in the network location part -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1342`.
Migrated to using a single cache for encoding hosts -- by :user:`bdraco`.
Passing
ip_address_size
andhost_validate_size
to :py:meth:`~yarl.cache_configure` is deprecated in favor of the newencode_host_size
parameter and will be removed in a future release. For backwards compatibility, the old parameters affect theencode_host
cache size.Related issues and pull requests on GitHub: :issue:`1348`, :issue:`1357`, :issue:`1363`.
Improved performance of constructing :class:`~yarl.URL` -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1336`.
Improved performance of calling :py:meth:`~yarl.URL.build` and constructing unencoded :class:`~yarl.URL` -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1345`.
Reworked the internal encoding cache to improve performance on cache hit -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1369`.
(2024-10-18)
Improved performance of the :py:meth:`~yarl.URL.joinpath` method -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1304`.
Improved performance of the :py:meth:`~yarl.URL.extend_query` method -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1305`.
Improved performance of the :py:meth:`~yarl.URL.origin` method -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1306`.
Improved performance of the :py:meth:`~yarl.URL.with_path` method -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1307`.
Improved performance of the :py:meth:`~yarl.URL.with_query` method -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1308`, :issue:`1328`.
Improved performance of the :py:meth:`~yarl.URL.update_query` method -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1309`, :issue:`1327`.
Improved performance of the :py:meth:`~yarl.URL.join` method -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1313`.
Improved performance of :class:`~yarl.URL` equality checks -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1315`.
Improved performance of :class:`~yarl.URL` methods that modify the network location -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1316`.
Improved performance of the :py:meth:`~yarl.URL.with_fragment` method -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1317`.
Improved performance of calculating the hash of :class:`~yarl.URL` objects -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1318`.
Improved performance of the :py:meth:`~yarl.URL.relative` method -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1319`.
Improved performance of the :py:meth:`~yarl.URL.with_name` method -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1320`.
Improved performance of :attr:`~yarl.URL.parent` -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1321`.
Improved performance of the :py:meth:`~yarl.URL.with_scheme` method -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1322`.
(2024-10-16)
Improved performance of the quoter when all characters are safe -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1288`.
Improved performance of unquoting strings -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1292`, :issue:`1293`.
Improved performance of calling :py:meth:`~yarl.URL.build` -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1297`.
(2024-10-15)
Fixed :py:meth:`~yarl.URL.build` failing to validate paths must start with a
/
when passingauthority
-- by :user:`bdraco`.The validation only worked correctly when passing
host
.Related issues and pull requests on GitHub: :issue:`1265`.
Removed support for Python 3.8 as it has reached end of life -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1203`.
Improved performance of constructing :class:`~yarl.URL` when the net location is only the host -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1271`.
(2024-10-13)
Improved performance of converting :class:`~yarl.URL` to a string -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1234`.
Improved performance of :py:meth:`~yarl.URL.joinpath` -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1248`, :issue:`1250`.
Improved performance of constructing query strings from :class:`~multidict.MultiDict` -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1256`.
Improved performance of constructing query strings with
int
values -- by :user:`bdraco`.Related issues and pull requests on GitHub: :issue:`1259`.
(2024-10-12)
Improved performance of calling :py:meth:`~yarl.URL.build` -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1222`.
Improved performance of all :class:`~yarl.URL` methods that create new :class:`~yarl.URL` objects -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1226`.
Improved performance of :class:`~yarl.URL` methods that modify the network location -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1229`.
(2024-10-11)
Fixed validation with :py:meth:`~yarl.URL.with_scheme` when passed scheme is not lowercase -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1189`.
Started building
armv7l
wheels -- by :user:`bdraco`.Related issues and pull requests on GitHub: :issue:`1204`.
Improved performance of constructing unencoded :class:`~yarl.URL` objects -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1188`.
Added a cache for parsing hosts to reduce overhead of encoding :class:`~yarl.URL` -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1190`.
Improved performance of constructing query strings from :class:`~collections.abc.Mapping` -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1193`.
Improved performance of converting :class:`~yarl.URL` objects to strings -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1198`.
(2024-10-08)
Switched to using the :mod:`propcache <propcache.api>` package for property caching -- by :user:`bdraco`.
The :mod:`propcache <propcache.api>` package is derived from the property caching code in :mod:`yarl` and has been broken out to avoid maintaining it for multiple projects.
Related issues and pull requests on GitHub: :issue:`1169`.
Started testing with Hypothesis -- by :user:`webknjaz` and :user:`bdraco`.
Special thanks to :user:`Zac-HD` for helping us get started with this framework.
Related issues and pull requests on GitHub: :issue:`860`.
Improved performance of :py:meth:`~yarl.URL.is_default_port` when no explicit port is set -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1168`.
Improved performance of converting :class:`~yarl.URL` to a string when no explicit port is set -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1170`.
Improved performance of the :py:meth:`~yarl.URL.origin` method -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1175`.
Improved performance of encoding hosts -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1176`.
(2024-09-27)
Improved performance of calling :py:meth:`~yarl.URL.build` with
authority
-- by :user:`bdraco`.Related issues and pull requests on GitHub: :issue:`1163`.
(2024-09-26)
Started rejecting ASCII hostnames with invalid characters. For host strings that look like authority strings, the exception message includes advice on what to do instead -- by :user:`mjpieters`.
Related issues and pull requests on GitHub: :issue:`880`, :issue:`954`.
Fixed IPv6 addresses missing brackets when the :class:`~yarl.URL` was converted to a string -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1157`, :issue:`1158`.
Added :attr:`~yarl.URL.host_subcomponent` which returns the RFC 3986 host subcomponent -- by :user:`bdraco`.
The only current practical difference between :attr:`~yarl.URL.raw_host` and :attr:`~yarl.URL.host_subcomponent` is that IPv6 addresses are returned bracketed.
Related issues and pull requests on GitHub: :issue:`1159`.
(2024-09-23)
No significant changes.
(2024-09-23)
Added :attr:`~yarl.URL.path_safe` to be able to fetch the path without
%2F
and%25
decoded -- by :user:`bdraco`.Related issues and pull requests on GitHub: :issue:`1150`.
Restore decoding
%2F
(/
) inURL.path
-- by :user:`bdraco`.This change restored the behavior before :issue:`1057`.
Related issues and pull requests on GitHub: :issue:`1151`.
Improved performance of processing paths -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1143`.
(2024-09-09)
Allowed scheme replacement for relative URLs if the scheme does not require a host -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`280`, :issue:`1138`.
Allowed empty host for URL schemes other than the special schemes listed in the WHATWG URL spec -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1136`.
Loosened restriction on integers as query string values to allow classes that implement
__int__
-- by :user:`bdraco`.Related issues and pull requests on GitHub: :issue:`1139`.
Improved performance of normalizing paths -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1137`.
(2024-09-08)
Added :meth:`URL.extend_query() <yarl.URL.extend_query>` method, which can be used to extend parameters without replacing same named keys -- by :user:`bdraco`.
This method was primarily added to replace the inefficient hand rolled method currently used in
aiohttp
.Related issues and pull requests on GitHub: :issue:`1128`.
Improved performance of the Cython
cached_property
implementation -- by :user:`bdraco`.Related issues and pull requests on GitHub: :issue:`1122`.
Simplified computing ports by removing unnecessary code -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1123`.
Improved performance of encoding non IPv6 hosts -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1125`.
Improved performance of :meth:`URL.build() <yarl.URL.build>` when the path, query string, or fragment is an empty string -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1126`.
Improved performance of the :meth:`URL.update_query() <yarl.URL.update_query>` method -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1130`.
Improved performance of processing query string changes when arguments are :class:`str` -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1131`.
(2024-09-06)
Fixed joining a path when the existing path was empty -- by :user:`bdraco`.
A regression in :meth:`URL.join() <yarl.URL.join>` was introduced in :issue:`1082`.
Related issues and pull requests on GitHub: :issue:`1118`.
Added :meth:`URL.without_query_params() <yarl.URL.without_query_params>` method, to drop some parameters from query string -- by :user:`hongquan`.
Related issues and pull requests on GitHub: :issue:`774`, :issue:`898`, :issue:`1010`.
The previously protected types
_SimpleQuery
,_QueryVariable
, and_Query
are now available for use externally asSimpleQuery
,QueryVariable
, andQuery
-- by :user:`bdraco`.Related issues and pull requests on GitHub: :issue:`1050`, :issue:`1113`.
Replaced all :class:`~typing.Optional` with :class:`~typing.Union` -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1095`.
Significantly improved performance of parsing the network location -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1112`.
Added internal types to the cache to prevent future refactoring errors -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1117`.
(2024-09-04)
Fixed a :exc:`TypeError` with
MultiDictProxy
and Python 3.8 -- by :user:`bdraco`.Related issues and pull requests on GitHub: :issue:`1084`, :issue:`1105`, :issue:`1107`.
Improved performance of encoding hosts -- by :user:`bdraco`.
Previously, the library would unconditionally try to parse a host as an IP Address. The library now avoids trying to parse a host as an IP Address if the string is not in one of the formats described in RFC 3986.
Related issues and pull requests on GitHub: :issue:`1104`.
(2024-09-04)
: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).
Due to the semantics of :meth:`URL.join() <yarl.URL.join>`, joining an URL with scheme requires making it relative, prefixing with
./
.>>> 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.
>>> 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.
Related issues and pull requests on GitHub: :issue:`1039`, :issue:`1082`.
Added :attr:`~yarl.URL.absolute` which is now preferred over
URL.is_absolute()
-- by :user:`bdraco`.Related issues and pull requests on GitHub: :issue:`1100`.
(2024-09-04)
Added missing type on :attr:`~yarl.URL.port` -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1097`.
(2024-09-03)
Covered the :class:`~yarl.URL` object with types -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1084`.
Cache parsing of IP Addresses when encoding hosts -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1086`.
Covered the :class:`~yarl.URL` object with types -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1084`.
Improved performance of handling ports -- by :user:`bdraco`.
Related issues and pull requests on GitHub: :issue:`1081`.
(2024-09-01)
Removed support RFC 3986 port normalization when the scheme is not one of
http
,https
,wss
, orws
-- by :user:`bdraco`.Support for port normalization was recently added in :issue:`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 :mod:`asyncio`.
Related issues and pull requests on GitHub: :issue:`1076`.
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: :issue:`1070`.
(2024-08-30)
Reverted RFC 3986 compatible :meth:`URL.join() <yarl.URL.join>` honoring empty segments which was introduced in :issue:`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: :issue:`1067`.
(2024-08-30)
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
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.
URL("https://example.org/") / ""
does not introduce an empty segment.
-- by :user:`commonism` and :user:`youtux`
Related issues and pull requests on GitHub: :issue:`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.
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: :issue:`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).
Due to the semantics of :meth:`URL.join() <yarl.URL.join>`, joining an URL with scheme requires making it relative, prefixing with
./
.>>> 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.
>>> 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: :issue:`1039`.
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: :issue:`1057`.
Dropped support for Python 3.7 -- by :user:`Dreamsorcerer`.
Related issues and pull requests on GitHub: :issue:`1016`.
On the :doc:`Contributing docs <contributing/guidelines>` page, a link to the
Towncrier philosophy
has been fixed.Related issues and pull requests on GitHub: :issue:`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: :issue:`1026`.
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 of pyproject-rpm-macros. It was only reproducible with
pip wheel
and was not affecting thepyproject-build
users.-- by :user:`hroncok` and :user:`webknjaz`
Related issues and pull requests on GitHub: :issue:`992`, :issue:`1014`.
Support Python 3.13 and publish non-free-threaded wheels
Related issues and pull requests on GitHub: :issue:`1054`.
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: :issue:`1015`.
Removed unused type ignores and casts -- by :user:`hauntsaninja`.
Related issues and pull requests on GitHub: :issue:`1031`.
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.Related issues and pull requests on GitHub: :issue:`1044`, :issue:`1058`.
Started raising :py:exc:`TypeError` when a string value is passed into :py:meth:`~yarl.URL.build` as the
port
argument -- by :user:`commonism`.Previously the empty string as port would create malformed URLs when rendered as string representations. (:issue:`883`)
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:
$ python -m build \ --config-setting=pure-python=true \ --config-setting=with-cython-tracing=true
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. (:issue:`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:
$ 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.
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:
$ 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.
The following produces C-files required for the Cython coverage plugin to map the measurements back to the PYX-files:
$ python -Im pip install -e .
Alternatively, the
YARL_CYTHON_TRACING=1
environment variable can be set to do the same as the PEP 517 config setting.
- Stopped dropping trailing slashes in :py:meth:`~yarl.URL.joinpath` -- by :user:`gmacon`. (:issue:`862`, :issue:`866`)
- Started accepting string subclasses in :meth:`~yarl.URL.__truediv__` operations (
URL / segment
) -- by :user:`mjpieters`. (:issue:`871`, :issue:`884`) - Fixed the human representation of URLs with square brackets in usernames and passwords -- by :user:`mjpieters`. (:issue:`876`, :issue:`882`)
- Updated type hints to include
URL.missing_port()
,URL.__bytes__()
and theencoding
argument to :py:meth:`~yarl.URL.joinpath` -- by :user:`mjpieters`. (:issue:`891`)
Integrated Cython 3 to enable building yarl under Python 3.12 -- by :user:`mjpieters`. (:issue:`829`, :issue:`881`)
Declared modern
setuptools.build_meta
as the PEP 517 build backend in :file:`pyproject.toml` explicitly -- by :user:`webknjaz`. (:issue:`886`)Converted most of the packaging setup into a declarative :file:`setup.cfg` config -- by :user:`webknjaz`. (:issue:`890`)
The packaging is replaced from an old-fashioned :file:`setup.py` to an in-tree PEP 517 build backend -- by :user:`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=false
This will also work with
-e | --editable
.The same can be achieved via
pypa/build
:$ python -m build --config-setting=--pure-python=false
Adding
-w | --wheel
can forcepypa/build
produce a wheel from source directly, as opposed to building ansdist
and then building from it. (:issue:`893`)Attention!
v1.9.3 was the only version using the
--pure-python
setting name. Later versions dropped the--
prefix, making it justpure-python
.Declared Python 3.12 supported officially in the distribution package metadata -- by :user:`edgarrmondragon`. (:issue:`942`)
A regression test for no-host URLs was added per :issue:`821` and RFC 3986 -- by :user:`kenballus`. (:issue:`821`, :issue:`822`)
Started testing yarl against Python 3.12 in CI -- by :user:`mjpieters`. (:issue:`881`)
All Python 3.12 jobs are now marked as required to pass in CI -- by :user:`edgarrmondragon`. (:issue:`942`)
MyST is now integrated in Sphinx -- by :user:`webknjaz`.
This allows the contributors to author new documents in Markdown when they have difficulties with going straight RST. (:issue:`953`)
- Fix regression with :meth:`~yarl.URL.__truediv__` and absolute URLs with empty paths causing the raw path to lack the leading
/
. (#854)
- Marked tests that fail on older Python patch releases (< 3.7.10, < 3.8.8 and < 3.9.2) as expected to fail due to missing a security fix for CVE-2021-23336. (#850)
This release was never published to PyPI, due to issues with the build process.
- Added
URL.joinpath(*elements)
, to create a new URL appending multiple path elements. (#704) - Made :meth:`URL.__truediv__() <yarl.URL.__truediv__>` return
NotImplemented
if called with an unsupported type — by :user:`michaeljpeters`. (#832)
- Path normalization for absolute URLs no longer raises a ValueError exception
when
..
segments would otherwise go beyond the URL path root. (#536) - Fixed an issue with update_query() not getting rid of the query when argument is None. (#792)
- Added some input restrictions on with_port() function to prevent invalid boolean inputs or out of valid port inputs; handled incorrect 0 port representation. (#793)
- Made :py:meth:`~yarl.URL.build` raise a :py:exc:`TypeError` if the
host
argument is :py:data:`None` — by :user:`paulpapacz`. (#808) - Fixed an issue with
update_query()
getting rid of the query when the argument is empty but notNone
. (#845)
This is the first release that started shipping wheels for Python 3.11.
- Added
URL.raw_suffix
,URL.suffix
,URL.raw_suffixes
,URL.suffixes
,URL.with_suffix
. (#613)
- Fixed broken internal references to :meth:`~yarl.URL.human_repr`. (#665)
- Fixed broken external references to :doc:`multidict:index` docs. (#665)
- Dropped Python 3.6 support. (#672)
- Changed call in
with_port()
to stop reencoding parts of the URL that were already encoded. (#623)
- Fix 1.7.0 build error
- Add
__bytes__()
magic method so thatbytes(url)
will work and use optimal ASCII encoding. (#582) - Started shipping platform-specific arm64 wheels for Apple Silicon. (#622)
- Started shipping platform-specific wheels with the
musl
tag targeting typical Alpine Linux runtimes. (#622) - Added support for Python 3.10. (#622)
- No longer loose characters when decoding incorrect percent-sequences (like
%e2%82%f8
). All non-decodable percent-sequences are now preserved. #517 - Provide x86 Windows wheels. #535
- Provide generated
.c
files in TarBall distribution. #530
- Provide wheels for
aarch64
,i686
,ppc64le
,s390x
architectures on Linux as well asx86_64
. #507 - Provide wheels for Python 3.9. #526
human_repr()
now always produces valid representation equivalent to the original URL (if the original URL is valid). #511- Fixed requoting a single percent followed by a percent-encoded character in the Cython implementation. #514
- Fix ValueError when decoding
%
which is not followed by two hexadecimal digits. #516 - Fix decoding
%
followed by a space and hexadecimal digit. #520 - Fix annotation of
with_query()
/update_query()
methods forkey=[val1, val2]
case. #528
- Drop Python 3.5 support; Python 3.6 is the minimal supported Python version.
- Allow for int and float subclasses in query, while still denying bool. #492
- Do not requote arguments in
URL.build()
,with_xxx()
and in/
operator. #502 - Keep IPv6 brackets in
origin()
. #504
- Fix including relocated internal
yarl._quoting_c
C-extension into published PyPI dists. #485
Convert host to lowercase on URL building. #386
Allow using
mod
operator (%
) for updating query string (an alias forupdate_query()
method). #435Allow use of sequences such as
list
andtuple
in the values of a mapping such asdict
to represent that a key has many values:url = URL("http://example.com") assert url.with_query({"a": [1, 2]}) == URL("http://example.com/?a=1&a=2")
Support
URL.build()
with scheme and path (creates a relative URL). #464Cache slow IDNA encode/decode calls. #476
Add
@final
/Final
type hints #477Support URL authority/raw_authority properties and authority argument of
URL.build()
method. #478Hide the library implementation details, make the exposed public list very clean. #483
- Fix tests with newer Python (3.7.6, 3.8.1 and 3.9.0+). #409
- Fix a bug where query component, passed in a form of mapping or sequence, is unquoted in unexpected way. #426
- Hide
Query
andQueryVariable
type aliases in__init__.pyi
, now they are prefixed with underscore. #431 - Keep IPv6 brackets after updating port/user/password. #451
- Workaround for missing
str.isascii()
in Python 3.6 #389
- Fix regression, make the library work on Python 3.5 and 3.6 again.
- Distinguish an empty password in URL from a password not provided at all (#262)
- Fixed annotations for optional parameters of
URL.build
(#309) - Use None as default value of
user
parameter ofURL.build
(#309) - Enforce building C Accelerated modules when installing from source tarball, use
YARL_NO_EXTENSIONS
environment variable for falling back to (slower) Pure Python implementation (#329) - Drop Python 3.5 support
- Fix quoting of plus in path by pure python version (#339)
- Don't create a new URL if fragment is unchanged (#292)
- Included in error message the path that produces starting slash forbidden error (#376)
- Skip slow IDNA encoding for ASCII-only strings (#387)
- Fix annotations for
query
parameter (#207) - An incoming query sequence can have int variables (the same as for Mapping type) (#208)
- Add
URL.explicit_port
property (#218) - Give a friendlier error when port can't be converted to int (#168)
bool(URL())
now returnsFalse
(#272)
- Drop Python 3.4 trove classifier (#205)
- Fix annotations for
build
(#199)
- Fix annotations for
cached_property
(#195)
- Accept
str
subclasses inURL
constructor (#190)
- Fix build
- Pin minimal required Python to 3.5.3 (#189)
- Forbid inheritance, replace
__init__
with__new__
(#171) - Support PEP-561 (provide type hinting marker) (#182)
- Fix performance regression: don't encode empty
netloc
(#170)
- Make pure Python quoter consistent with Cython version (#162)
- Use fast path if quoted string does not need requoting (#154)
- Speed up quoting/unquoting by
_Quoter
and_Unquoter
classes (#155) - Drop
yarl.quote
andyarl.unquote
public functions (#155) - Add custom string writer, reuse static buffer if available (#157) Code is 50-80 times faster than Pure Python version (was 4-5 times faster)
- Don't recode IP zone (#144)
- Support
encoded=True
inyarl.URL.build()
(#158) - Fix updating query with multiple keys (#160)
- Fallback to IDNA 2003 if domain name is not IDNA 2008 compatible (#152)
- Use IDNA 2008 for domain name processing (#149)
- Fix raising
TypeError
byurl.query_string()
afterurl.with_query({})
(empty mapping) (#141)
- Add
raw_path_qs
attribute (#137)
- Restore
strict
parameter as no-op inquote
/unquote
- Restore
strict
parameter as no-op for sake of compatibility with aiohttp 2.2
- Drop strict mode (#123)
- Fix
"ValueError: Unallowed PCT %"
when there's a"%"
in the URL (#124)
- Document
encoded
parameter (#102) - Support relative URLs like
'?key=value'
(#100) - Unsafe encoding for QS fixed. Encode
;
character in value parameter (#104) - Process passwords without user names (#95)
- Properly support paths without leading slash in
URL.with_path()
(#90) - Enable type annotation checks
- Normalize path (#86)
- Clear query and fragment parts in
.with_path()
(#85)
- Prevent double URL arguments unquoting (#83)
- Unexpected hash behavior (#75)
- Unexpected compare behavior (#73)
- Do not quote or unquote + if not a query string. (#74)
- Added
URL.build
class method (#58) - Added
path_qs
attribute (#42)
- Do not quote
:
in path
- Load from pickle without _cache (#56)
- Percent-encoded pluses in path variables become spaces (#59)
- Revert backward incompatible change (BaseURL)
- Fix BaseURL rich comparison support
- Use BaseURL
- Added BaseURL
- Remove debug print
- Do not lose tail chars (#45)
- Allow to quote
%
in non strict mode (#21) - Incorrect parsing of query parameters with %3B (;) inside (#34)
- Fix core dumps (#41)
tmpbuf
- compiling error (#43)- Added
URL.update_path()
method - Added
URL.update_query()
method (#47)
- Fix broken aiohttp: revert back
quote
/unquote
.
- Support more verbose error messages in
.with_query()
(#24) - Don't percent-encode
@
and:
in path (#32) - Don't expose
yarl.quote
andyarl.unquote
, these functions are part of private API
- Accept not only
str
but all classes inherited fromstr
also (#25)
- Accept
int
as value for.with_query()
- Explicitly use UTF8 encoding in :file:`setup.py` (#20)
- Properly unquote non-UTF8 strings (#19)
- Don't use :py:class:`typing.NamedTuple` fields but indexes on URL construction
- Inline
_encode
class method
- Make URL construction faster by removing extra classmethod calls
- Add Cython optimization for quoting/unquoting
- Provide binary wheels
- Fix typing stubs
- Expose
quote()
andunquote()
as public API
- Support empty values in query (
'/path?arg'
)
- Introduce
relative()
(#16)
- Typo fixes #15
- Support sequence of pairs as
with_query()
parameter
- Introduce
is_default_port()
- Raise ValueError for URLs like 'http://:8080/'
- Avoid doubling slashes when joining paths (#13)
- Appending path starting from slash is forbidden (#12)
- Add
kwargs
support forwith_query()
(#10)
- Document
with_query()
,with_fragment()
andorigin()
- Allow
None
forwith_query()
andwith_fragment()
- Fix links, tune docs theme.
- Update README, old version used obsolete API
- The library was deeply refactored, bytes are gone away but all accepted strings are encoded if needed.
- The first release.