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.0a11.tar.gz (162.0 kB view details)

Uploaded Source

Built Distributions

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

Uploaded CPython 3.7m Windows x86-64

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

Uploaded CPython 3.7m Windows x86

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

Uploaded CPython 3.7m

yarl-1.4.0a11-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.0a11-cp36-cp36m-win_amd64.whl (129.7 kB view details)

Uploaded CPython 3.6m Windows x86-64

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

Uploaded CPython 3.6m Windows x86

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

Uploaded CPython 3.6m

yarl-1.4.0a11-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.0a11.tar.gz.

File metadata

  • Download URL: yarl-1.4.0a11.tar.gz
  • Upload date:
  • Size: 162.0 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.0a11.tar.gz
Algorithm Hash digest
SHA256 629f542dfd4e964c9e32039a1515b3262dae210f8802cfcceca9f0b529c68ee7
MD5 a813b752e487d18da1242aa0c6114bc2
BLAKE2b-256 0cd39158398e89a43ec5a098f7d09c56c41e7acf443db1e9779bbaaaab333d72

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: yarl-1.4.0a11-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.0a11-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 b59dd6679cb2ae172eb594f484e482aaac66fbff71a717603b0f9adf01649386
MD5 6acda43753aec90f4c99b0424817b64d
BLAKE2b-256 225ce770603943800a6f22575ec688b0cc39e74a3b53d07ce970744296e6a73c

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: yarl-1.4.0a11-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.0a11-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 2e5f4f4d709aed4f689843ef605fc432d0472e3325a8e165b1ecf1e2f3f22a89
MD5 2132b10ab14b73a729fd73a23877cf32
BLAKE2b-256 a9d0b142a07a12cc74aff5d450d1b0ebda98767d66c275afb6a1bbdbe29f9913

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: yarl-1.4.0a11-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.0a11-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 9a49055f9e3121449c76709986aee829c74e2eee3b98185542799eec97808ed1
MD5 75f28a8c17cc287f8786917870cd788b
BLAKE2b-256 79c9cebfa00c60358e5a7a020031f5f4636b837a5fe638b56e8033643df41e88

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: yarl-1.4.0a11-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.0a11-cp37-cp37m-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 9510699e48d7565a2c1dc0a9fcb396f1ac80802991621cf02d55540d571a5dc9
MD5 a754f686ee861649169d16a11f67879e
BLAKE2b-256 dd1d406ea0409da3eb5d4f3d0be5d4a2d4ee2af4532e3b7a8fd01298aae20d1e

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: yarl-1.4.0a11-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.0a11-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 412fe567284bdd16a8035c5a6f541da9872804b5702378532cf2e3ef5ae4a9e6
MD5 cc20a9aefa05a84cd917fdebaa541ae3
BLAKE2b-256 0f7ec8a0143075cc110d409c7c1cdcf01c5a0415bcccdeb18a38b4145b78f4ed

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: yarl-1.4.0a11-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.0a11-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 7bd0b31008afcba762d75171ac09135f49bc17c8d092bce49f0b9bf2c4b51850
MD5 20aa2e2c10d560f5061b387b95dc325a
BLAKE2b-256 7972f1442a816ae3d5746c42551a8703a6f98344d3ccd51b3bf0d4093acc1fac

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: yarl-1.4.0a11-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.0a11-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 9a07c2a1b0c8b314ad5bcea37e62c109d8c19ad9f02985e8db898a56c129984f
MD5 6734380206189138c707b3b415e8255f
BLAKE2b-256 8342e71acb0048910e73db1eb74a89b0b09125bcb540e40580da0e1c2d0b56f3

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: yarl-1.4.0a11-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.0a11-cp36-cp36m-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 e5d6b530bec5817be9383452728c116d59868bfbed650ccc7657b2ec9aa51c03
MD5 4b6fcf4fc3131caeb4fedc21f193a8ec
BLAKE2b-256 243cca8af51af7289e35211d2dc8d2b5a8996babe56438a35dce1dcba0849002

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