Skip to main content

Yet another URL library

Project description

yarl

https://travis-ci.com/aio-libs/yarl.svg?branch=master https://codecov.io/gh/aio-libs/yarl/branch/master/graph/badge.svg https://badge.fury.io/py/yarl.svg https://readthedocs.org/projects/yarl/badge/?version=latest https://img.shields.io/pypi/pyversions/yarl.svg Chat on Gitter

Introduction

Url is constructed from str:

>>> from yarl import URL
>>> url = URL('https://www.python.org/~guido?arg=1#frag')
>>> url
URL('https://www.python.org/~guido?arg=1#frag')

All url parts: scheme, user, password, host, port, path, query and fragment are accessible by properties:

>>> url.scheme
'https'
>>> url.host
'www.python.org'
>>> url.path
'/~guido'
>>> url.query_string
'arg=1'
>>> url.query
<MultiDictProxy('arg': '1')>
>>> url.fragment
'frag'

All url manipulations produce a new url object:

>>> url.parent / 'downloads/source'
URL('https://www.python.org/downloads/source')

Strings passed to constructor and modification methods are automatically encoded giving canonical representation as result:

>>> url = URL('https://www.python.org/путь')
>>> url
URL('https://www.python.org/%D0%BF%D1%83%D1%82%D1%8C')

Regular properties are percent-decoded, use raw_ versions for getting encoded strings:

>>> url.path
'/путь'

>>> url.raw_path
'/%D0%BF%D1%83%D1%82%D1%8C'

Human readable representation of URL is available as .human_repr():

>>> url.human_repr()
'https://www.python.org/путь'

For full documentation please read https://yarl.readthedocs.org.

Installation

$ pip install yarl

The library is Python 3 only!

Dependencies

YARL requires multidict library.

API documentation

The documentation is located at https://yarl.readthedocs.org

Comparison with other URL libraries

  • furl (https://pypi-hypernode.com/pypi/furl)

    The library has rich functionality but the furl object is mutable.

    I’m afraid to pass this object into foreign code: who knows if the code will modify my url in a terrible way while I just want to send URL with handy helpers for accessing URL properties.

    furl has other non-obvious tricky things but the main objection is mutability.

  • URLObject (https://pypi-hypernode.com/pypi/URLObject)

    URLObject is immutable, that’s pretty good.

    Every URL change generates a new URL object.

    But the library doesn’t do any decode/encode transformations leaving the end user to cope with these gory details.

Source code

The project is hosted on GitHub

Please file an issue on the bug tracker if you have found a bug or have some suggestion in order to improve the library.

The library uses Travis for Continuous Integration.

Discussion list

aio-libs google group: https://groups.google.com/forum/#!forum/aio-libs

Feel free to post your questions and ideas here.

Authors and License

The yarl package is written by Andrew Svetlov.

It’s Apache 2 licensed and freely available.

CHANGES

1.4.0 (XXXX-XX-XX)

  • 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 of URL.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)

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 cant be converted to int (#168)

  • bool(URL()) now returns False (#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 in URL 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 enmpty 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 and yarl.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 in yarl.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 by url.query_string() after url.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 in quote / 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 ; char in value param (#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 args unquoting (#83)

0.10.2 (2017-05-05)

  • Unexpected hash behaviour (#75)

0.10.1 (2017-05-03)

  • Unexpected compare behaviour (#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() method

  • Added 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 and yarl.unquote, these functions are part of private API

0.7.1 (2016-11-18)

  • Accept not only str but all classes inherited from str 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 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() and unquote() 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)

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 for with_query() (#10)

0.1.3 (2016-09-07)

  • Document with_query(), with_fragment() and origin()

  • Allow None for with_query() and with_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.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yarl-1.4.0a10.tar.gz (100.4 kB view details)

Uploaded Source

Built Distributions

yarl-1.4.0a10-cp37-cp37m-win_amd64.whl (129.6 kB view details)

Uploaded CPython 3.7m Windows x86-64

yarl-1.4.0a10-cp37-cp37m-win32.whl (124.0 kB view details)

Uploaded CPython 3.7m Windows x86

yarl-1.4.0a10-cp37-cp37m-manylinux1_x86_64.whl (255.7 kB view details)

Uploaded CPython 3.7m

yarl-1.4.0a10-cp37-cp37m-macosx_10_13_x86_64.whl (125.4 kB view details)

Uploaded CPython 3.7m macOS 10.13+ x86-64

yarl-1.4.0a10-cp36-cp36m-win_amd64.whl (129.7 kB view details)

Uploaded CPython 3.6m Windows x86-64

yarl-1.4.0a10-cp36-cp36m-win32.whl (123.9 kB view details)

Uploaded CPython 3.6m Windows x86

yarl-1.4.0a10-cp36-cp36m-manylinux1_x86_64.whl (252.1 kB view details)

Uploaded CPython 3.6m

yarl-1.4.0a10-cp36-cp36m-macosx_10_13_x86_64.whl (127.1 kB view details)

Uploaded CPython 3.6m macOS 10.13+ x86-64

File details

Details for the file yarl-1.4.0a10.tar.gz.

File metadata

  • Download URL: yarl-1.4.0a10.tar.gz
  • Upload date:
  • Size: 100.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for yarl-1.4.0a10.tar.gz
Algorithm Hash digest
SHA256 b376d99dd999a24a67b44301bbc10153f526ff9b66b787fdba93a81e86957ff5
MD5 38b42dce42846bb26774979834f558ab
BLAKE2b-256 84bbdf3d0206be9dc97067fa010fe6c277ca3cc0a582ca6f5d5f93fbd73e3473

See more details on using hashes here.

Provenance

File details

Details for the file yarl-1.4.0a10-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: yarl-1.4.0a10-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 129.6 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for yarl-1.4.0a10-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 8e7d4f65c52ba80d8a55ff92127d91b2d913c3b8757bb5d6a7afc181a5b8f434
MD5 2d516d0a79f68aef81e5f9efac968f8a
BLAKE2b-256 0c877704fc79e48a16495417b035624271eac52f7bea96772aff4d94d5d90e28

See more details on using hashes here.

Provenance

File details

Details for the file yarl-1.4.0a10-cp37-cp37m-win32.whl.

File metadata

  • Download URL: yarl-1.4.0a10-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 124.0 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for yarl-1.4.0a10-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 66336a24ea02a0b89d672c529e0e261251187a8ba051b476fed71b491a6cbca4
MD5 66c5387127db68b4b6075d661c401080
BLAKE2b-256 c1911e4950cc5ecebb7e75d630ea3d97524b29bab25220b766e51b21a6894dbb

See more details on using hashes here.

Provenance

File details

Details for the file yarl-1.4.0a10-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: yarl-1.4.0a10-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 255.7 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for yarl-1.4.0a10-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 61af4e4b721307fc0a4d85e43d386834ff57497b62000f21bfe881894f4b6ca2
MD5 f234bd4cf76ae46ec54c291080835434
BLAKE2b-256 9a7ecc799731255fd9036c3bcae055005db51633e4e7cab66e748020109f4376

See more details on using hashes here.

Provenance

File details

Details for the file yarl-1.4.0a10-cp37-cp37m-macosx_10_13_x86_64.whl.

File metadata

  • Download URL: yarl-1.4.0a10-cp37-cp37m-macosx_10_13_x86_64.whl
  • Upload date:
  • Size: 125.4 kB
  • Tags: CPython 3.7m, macOS 10.13+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for yarl-1.4.0a10-cp37-cp37m-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 95f1e39a249ce3269bdd1b74affb07d0570240605d6445fb8257f766b9e67d0c
MD5 dd79d8581e2b4bb9060ceff12faf3a68
BLAKE2b-256 2d97b2a37e28265eaa7fd3430805e50dd80c27abb3a2b79c38eff14ff712bd20

See more details on using hashes here.

Provenance

File details

Details for the file yarl-1.4.0a10-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: yarl-1.4.0a10-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 129.7 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for yarl-1.4.0a10-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 cd17f2ae4f252059df5d6db4d4d78c17dac8e5cc870752c1707b0a5b7d755416
MD5 bfd75dff3df5c059cffd7a07745e06ae
BLAKE2b-256 df29f30ba464adf17198dfcc43c617bb0d063a1ea4f19208d5507a5fe12aa49f

See more details on using hashes here.

Provenance

File details

Details for the file yarl-1.4.0a10-cp36-cp36m-win32.whl.

File metadata

  • Download URL: yarl-1.4.0a10-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 123.9 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for yarl-1.4.0a10-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 26d19316c83743b9b5a2b240cdb0874ea9d1ccda2f298158866fcf353dba77f2
MD5 e8b8814e12dc9e65c292057e207e69d5
BLAKE2b-256 3f603a9f4c3b2271b28df5fcbbe923ed6622285a2ddf376f4138727dd76ae7aa

See more details on using hashes here.

Provenance

File details

Details for the file yarl-1.4.0a10-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: yarl-1.4.0a10-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 252.1 kB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for yarl-1.4.0a10-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 f019e8abd426a139e4a39c2b0283c1a3a4d7b421ba304c4eb58b549a5e499782
MD5 a68727c66c5ae29d257f0893c59d29b7
BLAKE2b-256 707d746a6b6991d6121961f5f865006185d60316609317e45dae009ac08005cb

See more details on using hashes here.

Provenance

File details

Details for the file yarl-1.4.0a10-cp36-cp36m-macosx_10_13_x86_64.whl.

File metadata

  • Download URL: yarl-1.4.0a10-cp36-cp36m-macosx_10_13_x86_64.whl
  • Upload date:
  • Size: 127.1 kB
  • Tags: CPython 3.6m, macOS 10.13+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for yarl-1.4.0a10-cp36-cp36m-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 c51aedb028318dbaacc5e750dd24f724780747452d16cd8947f46cad3feb52d9
MD5 b84efdc72474b195fe9a70cf9e94225d
BLAKE2b-256 3d0ff73158f1256d1c6bb59332940f45f0f168310e6b96cea22987e4182a6ad4

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page