Go to file
Thomas Kemmer a9625d25b0 Add SourceRank badge. 2023-01-08 21:38:25 +01:00
.github Add support for Python 3.11. 2022-11-01 21:04:48 +01:00
docs Prepare v4.0.1. 2023-01-08 21:12:49 +01:00
src/uritools Prepare v4.0.1. 2023-01-08 21:12:49 +01:00
tests Format code with black. 2021-03-09 10:40:45 +01:00
.gitignore Fix #57: Update build environment. 2016-04-08 15:13:04 +02:00
CHANGELOG.rst Release v4.0.1. 2023-01-08 21:15:57 +01:00
LICENSE Prepare v4.0.0. 2022-01-02 11:27:20 +01:00
MANIFEST.in Prepare v3.0.0. 2019-12-15 20:41:56 +01:00
README.rst Add SourceRank badge. 2023-01-08 21:38:25 +01:00
pyproject.toml Add pyproject.toml 2021-04-27 22:32:53 +02:00
setup.cfg Add support for Python 3.11. 2022-11-01 21:04:48 +01:00
setup.py Prepare v3.0.0. 2019-12-15 20:41:56 +01:00
tox.ini Move CI to GitHub Actions, coverage to Codecov. 2021-08-16 11:21:14 +02:00



Latest PyPI version

CI build status

Documentation build status

Test coverage

Libraries.io SourceRank


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='example.com', 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/parse.py:

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-2023 Thomas Kemmer.

Licensed under the MIT License.