Changelog¶
To be included in v1.9.5-.dev0 (if present)¶
1.9.5-.dev0 [UNRELEASED DRAFT] (2023-12-07)¶
No significant changes.
Released versions¶
1.9.4 (2023-12-06)¶
Bug fixes¶
Started raising
TypeError
when a string value is passed intobuild()
as theport
argument – by @commonism.Previously the empty string as port would create malformed URLs when rendered as string representations. (#883)
Packaging updates and notes for downstreams¶
Contributor-facing changes¶
A step-by-step Release Guide guide has been added, describing how to release yarl – by @webknjaz.
This is primarily targeting maintainers. (#960)
Coverage collection has been implemented for the Cython modules – by @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:$ 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 – @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. (#962)
1.9.3 (2023-11-20)¶
Bug fixes¶
Stopped dropping trailing slashes in
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 tojoinpath()
– by @mjpieters. (#891)
Packaging updates and notes for downstreams¶
Integrated Cython 3 to enable building yarl under Python 3.12 – by @mjpieters. (#829, #881)
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)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=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. (#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 @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)
1.9.2 (2023-04-25)¶
Bugfixes¶
Fix regression with
__truediv__
and absolute URLs with empty paths causing the raw path to lack the leading/
. (#854)
1.9.1 (2023-04-21)¶
Bugfixes¶
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)
1.9.0 (2023-04-19)¶
This release was never published to PyPI, due to issues with the build process.
Features¶
Added
URL.joinpath(*elements)
, to create a new URL appending multiple path elements. (#704)Made
URL.__truediv__()
returnNotImplemented
if called with an unsupported type — by @michaeljpeters. (#832)
Bugfixes¶
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
build()
raise aTypeError
if thehost
argument isNone
— by @paulpapacz. (#808)Fixed an issue with
update_query()
getting rid of the query when the argument is empty but notNone
. (#845)
Misc¶
1.8.2 (2022-12-03)¶
This is the first release that started shipping wheels for Python 3.11.
1.8.1 (2022-08-01)¶
Misc¶
1.8.0 (2022-08-01)¶
Features¶
Added
URL.raw_suffix
,URL.suffix
,URL.raw_suffixes
,URL.suffixes
,URL.with_suffix
. (#613)
Improved Documentation¶
Fixed broken internal references to
human_repr()
. (#665)
Deprecations and Removals¶
Dropped Python 3.6 support. (#672)
Misc¶
1.7.2 (2021-11-01)¶
Bugfixes¶
Changed call in
with_port()
to stop reencoding parts of the URL that were already encoded. (#623)
1.7.1 (2021-10-07)¶
Bugfixes¶
Fix 1.7.0 build error
1.7.0 (2021-10-06)¶
Features¶
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)
1.6.3 (2020-11-14)¶
Bugfixes¶
1.6.2 (2020-10-12)¶
Bugfixes¶
Provide generated
.c
files in TarBall distribution. #530
1.6.1 (2020-10-12)¶
Features¶
Bugfixes¶
human_repr()
now always produces valid representation equivalent to the original URL (if the original URL is valid). #511Fixed 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. #516Fix decoding
%
followed by a space and hexadecimal digit. #520Fix annotation of
with_query()
/update_query()
methods forkey=[val1, val2]
case. #528
Removal¶
Drop Python 3.5 support; Python 3.6 is the minimal supported Python version.
1.6.0 (2020-09-23)¶
Features¶
Allow for int and float subclasses in query, while still denying bool. #492
Bugfixes¶
1.5.1 (2020-08-01)¶
Bugfixes¶
Fix including relocated internal
yarl._quoting_c
C-extension into published PyPI dists. #485
Misc¶
1.5.0 (2020-07-26)¶
Features¶
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
Bugfixes¶
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. #431Keep IPv6 brackets after updating port/user/password. #451
1.4.2 (2019-12-05)¶
Features¶
Workaround for missing
str.isascii()
in Python 3.6 #389
1.4.1 (2019-11-29)¶
Fix regression, make the library work on Python 3.5 and 3.6 again.
1.4.0 (2019-11-29)¶
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)
1.3.0 (2018-12-11)¶
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)
1.2.6 (2018-06-14)¶
Drop Python 3.4 trove classifier (#205)
1.2.5 (2018-05-23)¶
Fix annotations for
build
(#199)
1.2.4 (2018-05-08)¶
Fix annotations for
cached_property
(#195)
1.2.3 (2018-05-03)¶
Accept
str
subclasses inURL
constructor (#190)
1.2.2 (2018-05-01)¶
Fix build
1.2.1 (2018-04-30)¶
Pin minimal required Python to 3.5.3 (#189)
1.2.0 (2018-04-30)¶
Forbid inheritance, replace
__init__
with__new__
(#171)Support PEP-561 (provide type hinting marker) (#182)
1.1.1 (2018-02-17)¶
Fix performance regression: don’t encode empty
netloc
(#170)
1.1.0 (2018-01-21)¶
Make pure Python quoter consistent with Cython version (#162)
1.0.0 (2018-01-15)¶
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)
0.18.0 (2018-01-10)¶
Fallback to IDNA 2003 if domain name is not IDNA 2008 compatible (#152)
0.17.0 (2017-12-30)¶
Use IDNA 2008 for domain name processing (#149)
0.16.0 (2017-12-07)¶
Fix raising
TypeError
byurl.query_string()
afterurl.with_query({})
(empty mapping) (#141)
0.15.0 (2017-11-23)¶
Add
raw_path_qs
attribute (#137)
0.14.2 (2017-11-14)¶
Restore
strict
parameter as no-op inquote
/unquote
0.14.1 (2017-11-13)¶
Restore
strict
parameter as no-op for sake of compatibility with aiohttp 2.2
0.14.0 (2017-11-11)¶
Drop strict mode (#123)
Fix
"ValueError: Unallowed PCT %"
when there’s a"%"
in the URL (#124)
0.13.0 (2017-10-01)¶
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)
0.12.0 (2017-06-26)¶
Properly support paths without leading slash in
URL.with_path()
(#90)Enable type annotation checks
0.11.0 (2017-06-26)¶
Normalize path (#86)
Clear query and fragment parts in
.with_path()
(#85)
0.10.3 (2017-06-13)¶
Prevent double URL arguments unquoting (#83)
0.10.2 (2017-05-05)¶
Unexpected hash behavior (#75)
0.10.1 (2017-05-03)¶
Unexpected compare behavior (#73)
Do not quote or unquote + if not a query string. (#74)
0.10.0 (2017-03-14)¶
Added
URL.build
class method (#58)Added
path_qs
attribute (#42)
0.9.8 (2017-02-16)¶
Do not quote
:
in path
0.9.7 (2017-02-16)¶
Load from pickle without _cache (#56)
Percent-encoded pluses in path variables become spaces (#59)
0.9.6 (2017-02-15)¶
Revert backward incompatible change (BaseURL)
0.9.5 (2017-02-14)¶
Fix BaseURL rich comparison support
0.9.4 (2017-02-14)¶
Use BaseURL
0.9.3 (2017-02-14)¶
Added BaseURL
0.9.2 (2017-02-08)¶
Remove debug print
0.9.1 (2017-02-07)¶
Do not lose tail chars (#45)
0.9.0 (2017-02-07)¶
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()
methodAdded
URL.update_query()
method (#47)
0.8.1 (2016-12-03)¶
Fix broken aiohttp: revert back
quote
/unquote
.
0.8.0 (2016-12-03)¶
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
0.7.1 (2016-11-18)¶
Accept not only
str
but all classes inherited fromstr
also (#25)
0.7.0 (2016-11-07)¶
Accept
int
as value for.with_query()
0.6.0 (2016-11-07)¶
Explicitly use UTF8 encoding in
setup.py
(#20)Properly unquote non-UTF8 strings (#19)
0.5.3 (2016-11-02)¶
Don’t use
typing.NamedTuple
fields but indexes on URL construction
0.5.2 (2016-11-02)¶
Inline
_encode
class method
0.5.1 (2016-11-02)¶
Make URL construction faster by removing extra classmethod calls
0.5.0 (2016-11-02)¶
Add Cython optimization for quoting/unquoting
Provide binary wheels
0.4.3 (2016-09-29)¶
Fix typing stubs
0.4.2 (2016-09-29)¶
Expose
quote()
andunquote()
as public API
0.4.1 (2016-09-28)¶
Support empty values in query (
'/path?arg'
)
0.4.0 (2016-09-27)¶
Introduce
relative()
(#16)
0.3.2 (2016-09-27)¶
Typo fixes #15
0.3.1 (2016-09-26)¶
Support sequence of pairs as
with_query()
parameter
0.3.0 (2016-09-26)¶
Introduce
is_default_port()
0.2.1 (2016-09-26)¶
Raise ValueError for URLs like ‘http://:8080/’
0.2.0 (2016-09-18)¶
Avoid doubling slashes when joining paths (#13)
Appending path starting from slash is forbidden (#12)
0.1.4 (2016-09-09)¶
Add
kwargs
support forwith_query()
(#10)
0.1.3 (2016-09-07)¶
Document
with_query()
,with_fragment()
andorigin()
Allow
None
forwith_query()
andwith_fragment()
0.1.2 (2016-09-07)¶
Fix links, tune docs theme.
0.1.1 (2016-09-06)¶
Update README, old version used obsolete API
0.1.0 (2016-09-06)¶
The library was deeply refactored, bytes are gone away but all accepted strings are encoded if needed.
0.0.1 (2016-08-30)¶
The first release.