1========= 2Changelog 3========= 4 5.. 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". 12 13 WARNING: Don't drop the next directive! 14 15.. towncrier release notes start 16 171.6.3 (2020-11-14) 18================== 19 20Bugfixes 21-------- 22 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>`_ 27 28 29---- 30 31 321.6.2 (2020-10-12) 33================== 34 35 36Bugfixes 37-------- 38 39- Provide generated ``.c`` files in TarBall distribution. 40 `#530 <https://github.com/aio-libs/multidict/issues/530>`_ 41 421.6.1 (2020-10-12) 43================== 44 45Features 46-------- 47 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>`_ 53 54Bugfixes 55-------- 56 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>`_ 67 68Removal 69------- 70 71- Drop Python 3.5 support; Python 3.6 is the minimal supported Python version. 72 73 74---- 75 76 771.6.0 (2020-09-23) 78================== 79 80Features 81-------- 82 83- Allow for int and float subclasses in query, while still denying bool. 84 `#492 <https://github.com/aio-libs/yarl/issues/492>`_ 85 86 87Bugfixes 88-------- 89 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>`_ 94 95 96---- 97 98 991.5.1 (2020-08-01) 100================== 101 102Bugfixes 103-------- 104 105- Fix including relocated internal ``yarl._quoting_c`` C-extension into published PyPI dists. 106 `#485 <https://github.com/aio-libs/yarl/issues/485>`_ 107 108 109Misc 110---- 111 112- `#484 <https://github.com/aio-libs/yarl/issues/484>`_ 113 114 115---- 116 117 1181.5.0 (2020-07-26) 119================== 120 121Features 122-------- 123 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:: 130 131 url = URL("http://example.com") 132 assert url.with_query({"a": [1, 2]}) == URL("http://example.com/?a=1&a=2") 133 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>`_ 145 146 147Bugfixes 148-------- 149 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>`_ 158 159 160---- 161 162 1631.4.2 (2019-12-05) 164================== 165 166Features 167-------- 168 169- Workaround for missing `str.isascii()` in Python 3.6 170 `#389 <https://github.com/aio-libs/yarl/issues/389>`_ 171 172 173---- 174 175 1761.4.1 (2019-11-29) 177================== 178 179* Fix regression, make the library work on Python 3.5 and 3.6 again. 180 1811.4.0 (2019-11-29) 182================== 183 184* Distinguish an empty password in URL from a password not provided at all (#262) 185 186* Fixed annotations for optional parameters of ``URL.build`` (#309) 187 188* Use None as default value of ``user`` parameter of ``URL.build`` (#309) 189 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) 193 194* Drop Python 3.5 support 195 196* Fix quoting of plus in path by pure python version (#339) 197 198* Don't create a new URL if fragment is unchanged (#292) 199 200* Included in error msg the path that produces starting slash forbidden error (#376) 201 202* Skip slow IDNA encoding for ASCII-only strings (#387) 203 204 2051.3.0 (2018-12-11) 206================== 207 208* Fix annotations for ``query`` parameter (#207) 209 210* An incoming query sequence can have int variables (the same as for 211 Mapping type) (#208) 212 213* Add ``URL.explicit_port`` property (#218) 214 215* Give a friendlier error when port cant be converted to int (#168) 216 217* ``bool(URL())`` now returns ``False`` (#272) 218 2191.2.6 (2018-06-14) 220================== 221 222* Drop Python 3.4 trove classifier (#205) 223 2241.2.5 (2018-05-23) 225================== 226 227* Fix annotations for ``build`` (#199) 228 2291.2.4 (2018-05-08) 230================== 231 232* Fix annotations for ``cached_property`` (#195) 233 2341.2.3 (2018-05-03) 235================== 236 237* Accept ``str`` subclasses in ``URL`` constructor (#190) 238 2391.2.2 (2018-05-01) 240================== 241 242* Fix build 243 2441.2.1 (2018-04-30) 245================== 246 247* Pin minimal required Python to 3.5.3 (#189) 248 2491.2.0 (2018-04-30) 250================== 251 252* Forbid inheritance, replace ``__init__`` with ``__new__`` (#171) 253 254* Support PEP-561 (provide type hinting marker) (#182) 255 2561.1.1 (2018-02-17) 257================== 258 259* Fix performance regression: don't encode enmpty netloc (#170) 260 2611.1.0 (2018-01-21) 262================== 263 264* Make pure Python quoter consistent with Cython version (#162) 265 2661.0.0 (2018-01-15) 267================== 268 269* Use fast path if quoted string does not need requoting (#154) 270 271* Speed up quoting/unquoting by ``_Quoter`` and ``_Unquoter`` classes (#155) 272 273* Drop ``yarl.quote`` and ``yarl.unquote`` public functions (#155) 274 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) 277 278* Don't recode IP zone (#144) 279 280* Support ``encoded=True`` in ``yarl.URL.build()`` (#158) 281 282* Fix updating query with multiple keys (#160) 283 2840.18.0 (2018-01-10) 285=================== 286 287* Fallback to IDNA 2003 if domain name is not IDNA 2008 compatible (#152) 288 2890.17.0 (2017-12-30) 290=================== 291 292* Use IDNA 2008 for domain name processing (#149) 293 2940.16.0 (2017-12-07) 295=================== 296 297* Fix raising ``TypeError`` by ``url.query_string()`` after 298 ``url.with_query({})`` (empty mapping) (#141) 299 3000.15.0 (2017-11-23) 301=================== 302 303* Add ``raw_path_qs`` attribute (#137) 304 3050.14.2 (2017-11-14) 306=================== 307 308* Restore ``strict`` parameter as no-op in ``quote`` / ``unquote`` 309 3100.14.1 (2017-11-13) 311=================== 312 313* Restore ``strict`` parameter as no-op for sake of compatibility with 314 aiohttp 2.2 315 3160.14.0 (2017-11-11) 317=================== 318 319* Drop strict mode (#123) 320 321* Fix ``"ValueError: Unallowed PCT %"`` when there's a ``"%"`` in the url (#124) 322 3230.13.0 (2017-10-01) 324=================== 325 326* Document ``encoded`` parameter (#102) 327 328* Support relative urls like ``'?key=value'`` (#100) 329 330* Unsafe encoding for QS fixed. Encode ``;`` char in value param (#104) 331 332* Process passwords without user names (#95) 333 3340.12.0 (2017-06-26) 335=================== 336 337* Properly support paths without leading slash in ``URL.with_path()`` (#90) 338 339* Enable type annotation checks 340 3410.11.0 (2017-06-26) 342=================== 343 344* Normalize path (#86) 345 346* Clear query and fragment parts in ``.with_path()`` (#85) 347 3480.10.3 (2017-06-13) 349=================== 350 351* Prevent double URL args unquoting (#83) 352 3530.10.2 (2017-05-05) 354=================== 355 356* Unexpected hash behaviour (#75) 357 358 3590.10.1 (2017-05-03) 360=================== 361 362* Unexpected compare behaviour (#73) 363 364* Do not quote or unquote + if not a query string. (#74) 365 366 3670.10.0 (2017-03-14) 368=================== 369 370* Added ``URL.build`` class method (#58) 371 372* Added ``path_qs`` attribute (#42) 373 374 3750.9.8 (2017-02-16) 376================== 377 378* Do not quote ``:`` in path 379 380 3810.9.7 (2017-02-16) 382================== 383 384* Load from pickle without _cache (#56) 385 386* Percent-encoded pluses in path variables become spaces (#59) 387 388 3890.9.6 (2017-02-15) 390================== 391 392* Revert backward incompatible change (BaseURL) 393 394 3950.9.5 (2017-02-14) 396================== 397 398* Fix BaseURL rich comparison support 399 400 4010.9.4 (2017-02-14) 402================== 403 404* Use BaseURL 405 406 4070.9.3 (2017-02-14) 408================== 409 410* Added BaseURL 411 412 4130.9.2 (2017-02-08) 414================== 415 416* Remove debug print 417 418 4190.9.1 (2017-02-07) 420================== 421 422* Do not lose tail chars (#45) 423 424 4250.9.0 (2017-02-07) 426================== 427 428* Allow to quote ``%`` in non strict mode (#21) 429 430* Incorrect parsing of query parameters with %3B (;) inside (#34) 431 432* Fix core dumps (#41) 433 434* tmpbuf - compiling error (#43) 435 436* Added ``URL.update_path()`` method 437 438* Added ``URL.update_query()`` method (#47) 439 440 4410.8.1 (2016-12-03) 442================== 443 444* Fix broken aiohttp: revert back ``quote`` / ``unquote``. 445 446 4470.8.0 (2016-12-03) 448================== 449 450* Support more verbose error messages in ``.with_query()`` (#24) 451 452* Don't percent-encode ``@`` and ``:`` in path (#32) 453 454* Don't expose ``yarl.quote`` and ``yarl.unquote``, these functions are 455 part of private API 456 4570.7.1 (2016-11-18) 458================== 459 460* Accept not only ``str`` but all classes inherited from ``str`` also (#25) 461 4620.7.0 (2016-11-07) 463================== 464 465* Accept ``int`` as value for ``.with_query()`` 466 4670.6.0 (2016-11-07) 468================== 469 470* Explicitly use UTF8 encoding in setup.py (#20) 471* Properly unquote non-UTF8 strings (#19) 472 4730.5.3 (2016-11-02) 474================== 475 476* Don't use namedtuple fields but indexes on URL construction 477 4780.5.2 (2016-11-02) 479================== 480 481* Inline ``_encode`` class method 482 4830.5.1 (2016-11-02) 484================== 485 486* Make URL construction faster by removing extra classmethod calls 487 4880.5.0 (2016-11-02) 489================== 490 491* Add cython optimization for quoting/unquoting 492* Provide binary wheels 493 4940.4.3 (2016-09-29) 495================== 496 497* Fix typing stubs 498 4990.4.2 (2016-09-29) 500================== 501 502* Expose ``quote()`` and ``unquote()`` as public API 503 5040.4.1 (2016-09-28) 505================== 506 507* Support empty values in query (``'/path?arg'``) 508 5090.4.0 (2016-09-27) 510================== 511 512* Introduce ``relative()`` (#16) 513 5140.3.2 (2016-09-27) 515================== 516 517* Typo fixes #15 518 5190.3.1 (2016-09-26) 520================== 521 522* Support sequence of pairs as ``with_query()`` parameter 523 5240.3.0 (2016-09-26) 525================== 526 527* Introduce ``is_default_port()`` 528 5290.2.1 (2016-09-26) 530================== 531 532* Raise ValueError for URLs like 'http://:8080/' 533 5340.2.0 (2016-09-18) 535================== 536 537* Avoid doubling slashes when joining paths (#13) 538 539* Appending path starting from slash is forbidden (#12) 540 5410.1.4 (2016-09-09) 542================== 543 544* Add kwargs support for ``with_query()`` (#10) 545 5460.1.3 (2016-09-07) 547================== 548 549* Document ``with_query()``, ``with_fragment()`` and ``origin()`` 550 551* Allow ``None`` for ``with_query()`` and ``with_fragment()`` 552 5530.1.2 (2016-09-07) 554================== 555 556* Fix links, tune docs theme. 557 5580.1.1 (2016-09-06) 559================== 560 561* Update README, old version used obsolete API 562 5630.1.0 (2016-09-06) 564================== 565 566* The library was deeply refactored, bytes are gone away but all 567 accepted strings are encoded if needed. 568 5690.0.1 (2016-08-30) 570================== 571 572* The first release. 573