You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Thomas Kemmer 0f20688b87 Release v4.0.0. 9 months ago
.github Add bug report template. 9 months ago
docs Prepare v4.0.0. 9 months ago
src/uritools Prepare v4.0.0. 9 months ago
tests Format code with black. 2 years ago
.gitignore Fix #57: Update build environment. 7 years ago
CHANGELOG.rst Release v4.0.0. 9 months ago
LICENSE Prepare v4.0.0. 9 months ago Prepare v3.0.0. 3 years ago
README.rst Prepare v4.0.0. 9 months ago
pyproject.toml Add pyproject.toml 1 year ago
setup.cfg Require Python 3.7. 9 months ago Prepare v3.0.0. 3 years ago
tox.ini Move CI to GitHub Actions, coverage to Codecov. 1 year ago



Latest PyPI version

Documentation build status

CI build status

Test coverage


Code style: black

This module provides RFC 3986 compliant functions for parsing, classifying and composing URIs and URI references, largely replacing the Python Standard Library's urllib.parse module.

>>> from uritools import uricompose, urijoin, urisplit, uriunsplit
>>> uricompose(scheme='foo', host='', port=8042,
...            path='/over/there', query={'name': 'ferret'},
...            fragment='nose')
>>> parts = urisplit(_)
>>> parts.scheme
>>> parts.authority
>>> parts.getport(default=80)
>>> parts.getquerydict().get('name')
>>> parts.isuri()
>>> parts.isabsuri()
>>> urijoin(uriunsplit(parts), '/right/here?name=swallow#beak')

For various reasons, urllib.parse and its Python 2 predecessor urlparse are not compliant with current Internet standards. As stated in Lib/urllib/

RFC 3986 is considered the current standard and any future changes to urlparse module should conform with it. The urlparse module is currently not entirely compliant with this RFC due to defacto scenarios for parsing, and for backward compatibility purposes, some parsing quirks from older RFCs are retained.

This module aims to provide fully RFC 3986 compliant replacements for the most commonly used functions found in urllib.parse. It also includes functions for distinguishing between the different forms of URIs and URI references, and for conveniently creating URIs from their individual components.


uritools is available from PyPI and can be installed by running:

pip install uritools

Project Resources


Copyright (c) 2014-2022 Thomas Kemmer.

Licensed under the MIT License.