Skip to content
Yet another URL library
Branch: master
Clone or download
pyup-bot and jettify Scheduled weekly dependency update for week 11 (#296)
* Update sphinx from 1.8.4 to 1.8.5

* Update black from 18.9b0 to 19.3b0

* Update pytest from 4.3.0 to 4.3.1
Latest commit e47da02 Mar 25, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
docs Fix travis Nov 13, 2018
requirements Scheduled weekly dependency update for week 11 (#296) Mar 24, 2019
tests Disallow passing NoneType to URL.build (#276) Jan 3, 2019
yarl Disallow passing NoneType to URL.build (#276) Jan 3, 2019
.coveragerc
.gitignore Add .pytest_cache to ignore list Feb 17, 2018
.pyup.yml Add pyup config Jan 31, 2018
.travis.yml Fix travis Nov 13, 2018
CHANGES.rst Update CHANGES Dec 23, 2018
LICENSE Update years Jan 5, 2018
MANIFEST.in Fix flake8 blames Nov 2, 2017
Makefile
README.rst Fix CI badge Nov 13, 2018
appveyor.yml
azure-pipelines.yml Suppress failures on Python 3.8 Oct 11, 2018
benchmark.py
build-wheels.sh Drop python 3.4 Jun 7, 2018
build.cmd Enable appveyor build Nov 2, 2016
run_docker.sh Fix PyPI user name Jun 7, 2018
setup.cfg
setup.py Apply black Nov 12, 2018

README.rst

yarl

https://travis-ci.com/aio-libs/yarl.svg?branch=master https://readthedocs.org/projects/yarl/badge/?version=latest 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.

You can’t perform that action at this time.