Skip to main content

Yet another URL library

Project description

yarl

https://travis-ci.org/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.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)

  • 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

This version

1.2.5

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.2.5.tar.gz (160.3 kB view details)

Uploaded Source

Built Distributions

yarl-1.2.5-cp36-cp36m-win_amd64.whl (120.0 kB view details)

Uploaded CPython 3.6m Windows x86-64

yarl-1.2.5-cp36-cp36m-win32.whl (114.4 kB view details)

Uploaded CPython 3.6m Windows x86

yarl-1.2.5-cp36-cp36m-manylinux1_x86_64.whl (253.2 kB view details)

Uploaded CPython 3.6m

yarl-1.2.5-cp36-cp36m-manylinux1_i686.whl (242.9 kB view details)

Uploaded CPython 3.6m

yarl-1.2.5-cp35-cp35m-win_amd64.whl (119.5 kB view details)

Uploaded CPython 3.5m Windows x86-64

yarl-1.2.5-cp35-cp35m-win32.whl (114.1 kB view details)

Uploaded CPython 3.5m Windows x86

yarl-1.2.5-cp35-cp35m-manylinux1_x86_64.whl (248.4 kB view details)

Uploaded CPython 3.5m

yarl-1.2.5-cp35-cp35m-manylinux1_i686.whl (238.9 kB view details)

Uploaded CPython 3.5m

File details

Details for the file yarl-1.2.5.tar.gz.

File metadata

  • Download URL: yarl-1.2.5.tar.gz
  • Upload date:
  • Size: 160.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for yarl-1.2.5.tar.gz
Algorithm Hash digest
SHA256 dd5da4150a882f5cd26aeec7939f38e4b08b790717b9d696409dba9e18ff3ab6
MD5 37ac24ede4d5bc3e40951c8408b6cb92
BLAKE2b-256 20e7dfebda1c1f1690f102f4f16b2add843aeeed2b692ab16be758641fe16e83

See more details on using hashes here.

Provenance

File details

Details for the file yarl-1.2.5-cp36-cp36m-win_amd64.whl.

File metadata

File hashes

Hashes for yarl-1.2.5-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 ae20db1fbc7fff7d7dffd38ab1a2b83dd76157b138b80b813931a8e302cd4d7e
MD5 20752e344e6ba24c5dea6920a8e37ec0
BLAKE2b-256 38b25c73b0f663c1f238cd50a507764fe5ef18babb0030bd48514401471eeb10

See more details on using hashes here.

Provenance

File details

Details for the file yarl-1.2.5-cp36-cp36m-win32.whl.

File metadata

File hashes

Hashes for yarl-1.2.5-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 cead78320aaa21601435cfc04ed0eff14df39800e93b79d7374562cafa9be2fa
MD5 f9cea70d3626c7610ed98bac1b3a75b1
BLAKE2b-256 7aa630557044b3617c556aadbb3e8878167b08a2c7925df42e669f828de3388f

See more details on using hashes here.

Provenance

File details

Details for the file yarl-1.2.5-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for yarl-1.2.5-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 135f8cc72e4f46bbdca229e1fbc9960e984a16488dd3367431ddb7501f9cc507
MD5 88b9174e91f9c51b47749890100c42ff
BLAKE2b-256 021eff27e03045ee8acac3cf98524ffc8aad5988620bf5fab37317cf04db5415

See more details on using hashes here.

Provenance

File details

Details for the file yarl-1.2.5-cp36-cp36m-manylinux1_i686.whl.

File metadata

File hashes

Hashes for yarl-1.2.5-cp36-cp36m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 3dc28e1d2a0a8bcc44715d284c816725e310c178626692073ecdc4eb11a853d0
MD5 18b0bd705d2deea35b8365c4fae44e60
BLAKE2b-256 fc3e03e598e13cdbb0af7d77e865e5af0768adfd26dc3c2fdcd5175b4f3a7444

See more details on using hashes here.

Provenance

File details

Details for the file yarl-1.2.5-cp35-cp35m-win_amd64.whl.

File metadata

File hashes

Hashes for yarl-1.2.5-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 83ee1bbb20c96fdf5e3a5d9681624cdcde2abe3bb985361140c29dfb3788b008
MD5 663750d418e2d5e42cef6e6d300a8fc9
BLAKE2b-256 55810e42e8920c778f654cb624eb47843ada437114a9b0a5bdd394923f6456fd

See more details on using hashes here.

Provenance

File details

Details for the file yarl-1.2.5-cp35-cp35m-win32.whl.

File metadata

File hashes

Hashes for yarl-1.2.5-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 40632b38f355cec13c3760bbc5943075997c4592bbc765c3b83df1df0a7eca08
MD5 813c35b6cb912521f659d686d2d6b134
BLAKE2b-256 e81c51da3a10759ca04b89a4b514f239e5f1ad08e2e55689d009feb06607c51c

See more details on using hashes here.

Provenance

File details

Details for the file yarl-1.2.5-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for yarl-1.2.5-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 cfccc464e1502028d225f694b05b70053d9872a2b81f872fd79b0d0a399e87e8
MD5 1dc67fae5a2d9317c4319bd16e7cd561
BLAKE2b-256 b5edd87229ddbe75c1971e2a268b478fe06165f7ba0aa5b30ac0c0c1f2fe5d8c

See more details on using hashes here.

Provenance

File details

Details for the file yarl-1.2.5-cp35-cp35m-manylinux1_i686.whl.

File metadata

File hashes

Hashes for yarl-1.2.5-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 7e03ce8595522aa1c234a2b42d643be55f796e546d0f36700a1cb02dbe24e147
MD5 3e7215b73fbe8a208b72a592a945396f
BLAKE2b-256 31c62ce83bc8e03cc761bdb19d613fc6e91c92573680b9f0ab6ad0db6b922a4d

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