6 You should *NOT* be adding new change log entries to this file, this
7 file is managed by towncrier. You *may* edit previous change logs to
8 fix problems like typo corrections or such.
9 To add a new change log entry, please see
10 https://pip.pypa.io/en/latest/development/#adding-a-news-entry
11 we named the news folder "changes".
13 WARNING: Don't drop the next directive!
15 .. towncrier release notes start
23 - No longer loose characters when decoding incorrect percent-sequences (like ``%e2%82%f8``). All non-decodable percent-sequences are now preserved.
24 `#517 <https://github.com/aio-libs/yarl/issues/517>`_
25 - Provide x86 Windows wheels.
26 `#535 <https://github.com/aio-libs/yarl/issues/535>`_
39 - Provide generated ``.c`` files in TarBall distribution.
40 `#530 <https://github.com/aio-libs/multidict/issues/530>`_
48 - Provide wheels for ``aarch64``, ``i686``, ``ppc64le``, ``s390x`` architectures on
49 Linux as well as ``x86_64``.
50 `#507 <https://github.com/aio-libs/yarl/issues/507>`_
51 - Provide wheels for Python 3.9.
52 `#526 <https://github.com/aio-libs/yarl/issues/526>`_
57 - ``human_repr()`` now always produces valid representation equivalent to the original URL (if the original URL is valid).
58 `#511 <https://github.com/aio-libs/yarl/issues/511>`_
59 - Fixed requoting a single percent followed by a percent-encoded character in the Cython implementation.
60 `#514 <https://github.com/aio-libs/yarl/issues/514>`_
61 - Fix ValueError when decoding ``%`` which is not followed by two hexadecimal digits.
62 `#516 <https://github.com/aio-libs/yarl/issues/516>`_
63 - Fix decoding ``%`` followed by a space and hexadecimal digit.
64 `#520 <https://github.com/aio-libs/yarl/issues/520>`_
65 - Fix annotation of ``with_query()``/``update_query()`` methods for ``key=[val1, val2]`` case.
66 `#528 <https://github.com/aio-libs/yarl/issues/528>`_
71 - Drop Python 3.5 support; Python 3.6 is the minimal supported Python version.
83 - Allow for int and float subclasses in query, while still denying bool.
84 `#492 <https://github.com/aio-libs/yarl/issues/492>`_
90 - Do not requote arguments in ``URL.build()``, ``with_xxx()`` and in ``/`` operator.
91 `#502 <https://github.com/aio-libs/yarl/issues/502>`_
92 - Keep IPv6 brackets in ``origin()``.
93 `#504 <https://github.com/aio-libs/yarl/issues/504>`_
105 - Fix including relocated internal ``yarl._quoting_c`` C-extension into published PyPI dists.
106 `#485 <https://github.com/aio-libs/yarl/issues/485>`_
112 - `#484 <https://github.com/aio-libs/yarl/issues/484>`_
124 - Convert host to lowercase on URL building.
125 `#386 <https://github.com/aio-libs/yarl/issues/386>`_
126 - Allow using ``mod`` operator (`%`) for updating query string (an alias for ``update_query()`` method).
127 `#435 <https://github.com/aio-libs/yarl/issues/435>`_
128 - Allow use of sequences such as ``list`` and ``tuple`` in the values
129 of a mapping such as ``dict`` to represent that a key has many values::
131 url = URL("http://example.com")
132 assert url.with_query({"a": [1, 2]}) == URL("http://example.com/?a=1&a=2")
134 `#443 <https://github.com/aio-libs/yarl/issues/443>`_
135 - Support URL.build() with scheme and path (creates a relative URL).
136 `#464 <https://github.com/aio-libs/yarl/issues/464>`_
137 - Cache slow IDNA encode/decode calls.
138 `#476 <https://github.com/aio-libs/yarl/issues/476>`_
139 - Add ``@final`` / ``Final`` type hints
140 `#477 <https://github.com/aio-libs/yarl/issues/477>`_
141 - Support URL authority/raw_authority properties and authority argument of ``URL.build()`` method.
142 `#478 <https://github.com/aio-libs/yarl/issues/478>`_
143 - Hide the library implementation details, make the exposed public list very clean.
144 `#483 <https://github.com/aio-libs/yarl/issues/483>`_
150 - Fix tests with newer Python (3.7.6, 3.8.1 and 3.9.0+).
151 `#409 <https://github.com/aio-libs/yarl/issues/409>`_
152 - Fix a bug where query component, passed in a form of mapping or sequence, is unquoted in unexpected way.
153 `#426 <https://github.com/aio-libs/yarl/issues/426>`_
154 - Hide `Query` and `QueryVariable` type aliases in `__init__.pyi`, now they are prefixed with underscore.
155 `#431 <https://github.com/aio-libs/yarl/issues/431>`_
156 - Keep ipv6 brackets after updating port/user/password.
157 `#451 <https://github.com/aio-libs/yarl/issues/451>`_
169 - Workaround for missing `str.isascii()` in Python 3.6
170 `#389 <https://github.com/aio-libs/yarl/issues/389>`_
179 * Fix regression, make the library work on Python 3.5 and 3.6 again.
184 * Distinguish an empty password in URL from a password not provided at all (#262)
186 * Fixed annotations for optional parameters of ``URL.build`` (#309)
188 * Use None as default value of ``user`` parameter of ``URL.build`` (#309)
190 * Enforce building C Accelerated modules when installing from source tarball, use
191 ``YARL_NO_EXTENSIONS`` environment variable for falling back to (slower) Pure Python
192 implementation (#329)
194 * Drop Python 3.5 support
196 * Fix quoting of plus in path by pure python version (#339)
198 * Don't create a new URL if fragment is unchanged (#292)
200 * Included in error msg the path that produces starting slash forbidden error (#376)
202 * Skip slow IDNA encoding for ASCII-only strings (#387)
208 * Fix annotations for ``query`` parameter (#207)
210 * An incoming query sequence can have int variables (the same as for
213 * Add ``URL.explicit_port`` property (#218)
215 * Give a friendlier error when port cant be converted to int (#168)
217 * ``bool(URL())`` now returns ``False`` (#272)
222 * Drop Python 3.4 trove classifier (#205)
227 * Fix annotations for ``build`` (#199)
232 * Fix annotations for ``cached_property`` (#195)
237 * Accept ``str`` subclasses in ``URL`` constructor (#190)
247 * Pin minimal required Python to 3.5.3 (#189)
252 * Forbid inheritance, replace ``__init__`` with ``__new__`` (#171)
254 * Support PEP-561 (provide type hinting marker) (#182)
259 * Fix performance regression: don't encode enmpty netloc (#170)
264 * Make pure Python quoter consistent with Cython version (#162)
269 * Use fast path if quoted string does not need requoting (#154)
271 * Speed up quoting/unquoting by ``_Quoter`` and ``_Unquoter`` classes (#155)
273 * Drop ``yarl.quote`` and ``yarl.unquote`` public functions (#155)
275 * Add custom string writer, reuse static buffer if available (#157)
276 Code is 50-80 times faster than Pure Python version (was 4-5 times faster)
278 * Don't recode IP zone (#144)
280 * Support ``encoded=True`` in ``yarl.URL.build()`` (#158)
282 * Fix updating query with multiple keys (#160)
287 * Fallback to IDNA 2003 if domain name is not IDNA 2008 compatible (#152)
292 * Use IDNA 2008 for domain name processing (#149)
297 * Fix raising ``TypeError`` by ``url.query_string()`` after
298 ``url.with_query({})`` (empty mapping) (#141)
303 * Add ``raw_path_qs`` attribute (#137)
308 * Restore ``strict`` parameter as no-op in ``quote`` / ``unquote``
313 * Restore ``strict`` parameter as no-op for sake of compatibility with
319 * Drop strict mode (#123)
321 * Fix ``"ValueError: Unallowed PCT %"`` when there's a ``"%"`` in the url (#124)
326 * Document ``encoded`` parameter (#102)
328 * Support relative urls like ``'?key=value'`` (#100)
330 * Unsafe encoding for QS fixed. Encode ``;`` char in value param (#104)
332 * Process passwords without user names (#95)
337 * Properly support paths without leading slash in ``URL.with_path()`` (#90)
339 * Enable type annotation checks
344 * Normalize path (#86)
346 * Clear query and fragment parts in ``.with_path()`` (#85)
351 * Prevent double URL args unquoting (#83)
356 * Unexpected hash behaviour (#75)
362 * Unexpected compare behaviour (#73)
364 * Do not quote or unquote + if not a query string. (#74)
370 * Added ``URL.build`` class method (#58)
372 * Added ``path_qs`` attribute (#42)
378 * Do not quote ``:`` in path
384 * Load from pickle without _cache (#56)
386 * Percent-encoded pluses in path variables become spaces (#59)
392 * Revert backward incompatible change (BaseURL)
398 * Fix BaseURL rich comparison support
422 * Do not lose tail chars (#45)
428 * Allow to quote ``%`` in non strict mode (#21)
430 * Incorrect parsing of query parameters with %3B (;) inside (#34)
432 * Fix core dumps (#41)
434 * tmpbuf - compiling error (#43)
436 * Added ``URL.update_path()`` method
438 * Added ``URL.update_query()`` method (#47)
444 * Fix broken aiohttp: revert back ``quote`` / ``unquote``.
450 * Support more verbose error messages in ``.with_query()`` (#24)
452 * Don't percent-encode ``@`` and ``:`` in path (#32)
454 * Don't expose ``yarl.quote`` and ``yarl.unquote``, these functions are
460 * Accept not only ``str`` but all classes inherited from ``str`` also (#25)
465 * Accept ``int`` as value for ``.with_query()``
470 * Explicitly use UTF8 encoding in setup.py (#20)
471 * Properly unquote non-UTF8 strings (#19)
476 * Don't use namedtuple fields but indexes on URL construction
481 * Inline ``_encode`` class method
486 * Make URL construction faster by removing extra classmethod calls
491 * Add cython optimization for quoting/unquoting
492 * Provide binary wheels
502 * Expose ``quote()`` and ``unquote()`` as public API
507 * Support empty values in query (``'/path?arg'``)
512 * Introduce ``relative()`` (#16)
522 * Support sequence of pairs as ``with_query()`` parameter
527 * Introduce ``is_default_port()``
532 * Raise ValueError for URLs like 'http://:8080/'
537 * Avoid doubling slashes when joining paths (#13)
539 * Appending path starting from slash is forbidden (#12)
544 * Add kwargs support for ``with_query()`` (#10)
549 * Document ``with_query()``, ``with_fragment()`` and ``origin()``
551 * Allow ``None`` for ``with_query()`` and ``with_fragment()``
556 * Fix links, tune docs theme.
561 * Update README, old version used obsolete API
566 * The library was deeply refactored, bytes are gone away but all
567 accepted strings are encoded if needed.