Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

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.python.org/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.python.org/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.

Release files for yarl 1.2.5a0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for yarl 1.2.5a0
File Size Uploaded
yarl-1.2.5a0.tar.gz 159.7 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for yarl 1.2.5a0
File
yarl-1.2.5a0-cp36-cp36m-win_amd64.whl CPython 3.6 CPython 3.6 pymalloc Windows x86-64 Details
yarl-1.2.5a0-cp36-cp36m-win32.whl CPython 3.6 CPython 3.6 pymalloc Windows x86-32 Details
yarl-1.2.5a0-cp35-cp35m-win_amd64.whl CPython 3.5 CPython 3.5 pymalloc Windows x86-64 Details
yarl-1.2.5a0-cp35-cp35m-win32.whl CPython 3.5 CPython 3.5 pymalloc Windows x86-32 Details

Total release size: 627.8 kB

Release files / yarl-1.2.5a0.tar.gz

Download URL yarl-1.2.5a0.tar.gz
Size 159.7 kB
Tags Source
SHA-256 checksum
How to use checksums
81298663aae0390cd057985d36bccc959f419603352bf977feaa60916a856d9c
BLAKE2b-256 checksum
How to use checksums
be7e12a6b46ced39292acfa08da5bad7d42a6d1ea4c3533cbd6ba3469faefd0a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / yarl-1.2.5a0-cp36-cp36m-win_amd64.whl

Download URL yarl-1.2.5a0-cp36-cp36m-win_amd64.whl
Size 120.0 kB
Tags CPython 3.6 CPython 3.6 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
a2c112d0b9b04811f1e66b7e5efcb36d3978d0cfdad84f3fdbfa0f72d976f429
BLAKE2b-256 checksum
How to use checksums
caa3d099683c1bd26e33a812372e2ec99f3645e5c74406af16e02df65ff10b91
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / yarl-1.2.5a0-cp36-cp36m-win32.whl

Download URL yarl-1.2.5a0-cp36-cp36m-win32.whl
Size 114.4 kB
Tags CPython 3.6 CPython 3.6 pymalloc Windows x86-32
SHA-256 checksum
How to use checksums
4a1d6d4c451a17a4f090c9d67249b8542af1abf137fc34c0929e9b3995511077
BLAKE2b-256 checksum
How to use checksums
35db07caaeb74862e4104742bd366df04e8466d8b497f7400633ccc88ed7db82
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / yarl-1.2.5a0-cp35-cp35m-win_amd64.whl

Download URL yarl-1.2.5a0-cp35-cp35m-win_amd64.whl
Size 119.5 kB
Tags CPython 3.5 CPython 3.5 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
42579b9417783af74f3f74829c6d0d103df50e50066828ff9d9acbb159218d0e
BLAKE2b-256 checksum
How to use checksums
2a3710e72215109e8b338502571ad03e26c279afdd833144949ab2e85512dfb1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / yarl-1.2.5a0-cp35-cp35m-win32.whl

Download URL yarl-1.2.5a0-cp35-cp35m-win32.whl
Size 114.1 kB
Tags CPython 3.5 CPython 3.5 pymalloc Windows x86-32
SHA-256 checksum
How to use checksums
b38e2b7d67838ab3c1f15985e9011141900e28a177ce19ca31437a21acc2441f
BLAKE2b-256 checksum
How to use checksums
5e670e4310d0399f1bc64723809b997ef798661114b2ff0275218fe7000e7556
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

1.9.6

92 release files

1.9.5

92 release files

1.9.3

90 release files

1.9.2

74 release files

1.9.1

74 release files

1.6.3

37 release files

1.6.2

33 release files

1.6.1

33 release files

1.6.0

17 release files

1.5.0

17 release files

1.4.1

17 release files

1.4.0

17 release files

1.3.0

11 release files

1.2.6

9 release files

1.2.5

9 release files

This release

1.2.5a0 This release

5 release files

1.2.4

9 release files

1.2.3

9 release files

1.2.2

9 release files

1.2.1

9 release files

1.2.0

13 release files

1.1.1

13 release files

1.1.0

13 release files

1.0.0

13 release files

0.11.1

6 release files

0.10.0

9 release files

0.9.8

9 release files

0.9.7

9 release files

0.9.6

9 release files

0.9.5

9 release files

0.9.4

9 release files

0.9.3

9 release files

0.9.2

9 release files

0.9.1

9 release files

0.9.0

9 release files

0.8.1

9 release files

0.8.0

9 release files

0.7.1

9 release files

0.7.0

9 release files

0.6.0

9 release files

0.5.3

9 release files

0.5.2

9 release files

0.5.1

9 release files

0.5.0

9 release files

0.5.0b1

0.5.0b0

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page