Skip to main content

'URL parser and manipulator based on the WHAT WG URL standard'

Project description

This is ada_url, a Python library for parsing and joining URLs.

Installation

Install from PyPI:

pip install boto3-helpers

Usage examples

This package exposes a URL class that is intended to match the one described in the WHATWG URL spec.

>>> from ada_url import URL
>>> URL('https://example.org/path/../file.txt') as urlobj:
>>> urlobj.host = 'example.com'
>>> new_url = urlobj.href
>>> new_url
'https://example.com/file.txt'

It also provides high level functions for parsing and manipulating URLs. Validating a URL:

>>> from ada_url import check_url
>>> check_url('https://example.org')
True
>>> check_url('http://example:bougus')
False

Parsing a URL:

>>> from ada_url import parse_url
>>> parse_url('https://user:pass@example.org:80/api?q=1#2')
{
    'href': 'https://user:pass@example.org:80/api?q=1#2',
    'username': 'user',
    'password': 'pass',
    'protocol': 'https:',
    'port': '80',
    'hostname': 'example.org',
    'host': 'example.org:80',
    'pathname': '/api',
    'search': '?q=1',
    'hash': '#2',
    'origin': 'https://example.org:80',
    'host_type': <HostType.DEFAULT: 0>,
    'scheme_type': <SchemeType.HTTPS: 2>
}

Replacing URL components:

>>> from ada_url import replace_url
>>> ada_url.replace_url('http://example.org:80', protocol='https:')
'https://example.org/'

Joining a URL with a relative fragment:

>>> from ada_url import join_url
>>> join_url('https://example.org/dir/child.txt', '../parent.txt')
'https://example.org/parent.txt'

WHATWG URL compliance

This library is compliant with the WHATWG URL spec. This means, among other things, that it properly encodes IDNs and resolves paths:

>>> from ada_url import URL
>>> parsed_url = URL('https://www.GOoglé.com/./path/../path2/')
>>> parsed_url.hostname
'www.xn--googl-fsa.com'
>>> parsed_url.pathname
'/path2/'

Contrast that with the Python standard library’s urlib.parse module:

>>> from urllib.parse import urlparse
>>> parsed_url = urlparse()
>>> parsed_url.hostname
'www.googlé.com'
>>> parsed_url.path
'/./path/../path2/'

More information

  • ada-url is based on the Ada project.

  • A full API reference is available at Read the Docs.

  • Source code is available at GitHub.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ada-url-1.6.0.tar.gz (212.2 kB view hashes)

Uploaded Source

Built Distributions

ada_url-1.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (627.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

ada_url-1.6.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (637.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

ada_url-1.6.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl (583.4 kB view hashes)

Uploaded PyPy macOS 10.15+ x86-64

ada_url-1.6.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (627.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

ada_url-1.6.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (637.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

ada_url-1.6.0-pp38-pypy38_pp73-macosx_10_15_x86_64.whl (583.4 kB view hashes)

Uploaded PyPy macOS 10.15+ x86-64

ada_url-1.6.0-cp312-cp312-musllinux_1_1_x86_64.whl (1.2 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

ada_url-1.6.0-cp312-cp312-musllinux_1_1_aarch64.whl (1.2 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ ARM64

ada_url-1.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (701.9 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

ada_url-1.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (708.7 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

ada_url-1.6.0-cp312-cp312-macosx_11_0_arm64.whl (581.4 kB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

ada_url-1.6.0-cp312-cp312-macosx_10_15_x86_64.whl (595.6 kB view hashes)

Uploaded CPython 3.12 macOS 10.15+ x86-64

ada_url-1.6.0-cp312-cp312-macosx_10_15_universal2.whl (966.6 kB view hashes)

Uploaded CPython 3.12 macOS 10.15+ universal2 (ARM64, x86-64)

ada_url-1.6.0-cp311-cp311-musllinux_1_1_x86_64.whl (1.2 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

ada_url-1.6.0-cp311-cp311-musllinux_1_1_aarch64.whl (1.2 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ ARM64

ada_url-1.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (700.9 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

ada_url-1.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (708.0 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

ada_url-1.6.0-cp311-cp311-macosx_11_0_arm64.whl (581.3 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

ada_url-1.6.0-cp311-cp311-macosx_10_15_x86_64.whl (595.6 kB view hashes)

Uploaded CPython 3.11 macOS 10.15+ x86-64

ada_url-1.6.0-cp311-cp311-macosx_10_15_universal2.whl (966.4 kB view hashes)

Uploaded CPython 3.11 macOS 10.15+ universal2 (ARM64, x86-64)

ada_url-1.6.0-cp310-cp310-musllinux_1_1_x86_64.whl (1.2 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

ada_url-1.6.0-cp310-cp310-musllinux_1_1_aarch64.whl (1.2 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ ARM64

ada_url-1.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (700.9 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

ada_url-1.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (708.0 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

ada_url-1.6.0-cp310-cp310-macosx_11_0_arm64.whl (581.3 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

ada_url-1.6.0-cp310-cp310-macosx_10_15_x86_64.whl (595.6 kB view hashes)

Uploaded CPython 3.10 macOS 10.15+ x86-64

ada_url-1.6.0-cp310-cp310-macosx_10_15_universal2.whl (966.4 kB view hashes)

Uploaded CPython 3.10 macOS 10.15+ universal2 (ARM64, x86-64)

ada_url-1.6.0-cp39-cp39-musllinux_1_1_x86_64.whl (1.2 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

ada_url-1.6.0-cp39-cp39-musllinux_1_1_aarch64.whl (1.2 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ ARM64

ada_url-1.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (700.9 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

ada_url-1.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (708.0 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

ada_url-1.6.0-cp39-cp39-macosx_11_0_arm64.whl (581.3 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

ada_url-1.6.0-cp39-cp39-macosx_10_15_x86_64.whl (595.6 kB view hashes)

Uploaded CPython 3.9 macOS 10.15+ x86-64

ada_url-1.6.0-cp39-cp39-macosx_10_15_universal2.whl (966.4 kB view hashes)

Uploaded CPython 3.9 macOS 10.15+ universal2 (ARM64, x86-64)

ada_url-1.6.0-cp38-cp38-musllinux_1_1_x86_64.whl (1.2 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

ada_url-1.6.0-cp38-cp38-musllinux_1_1_aarch64.whl (1.2 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ ARM64

ada_url-1.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (701.0 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

ada_url-1.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (708.1 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

ada_url-1.6.0-cp38-cp38-macosx_11_0_arm64.whl (581.3 kB view hashes)

Uploaded CPython 3.8 macOS 11.0+ ARM64

ada_url-1.6.0-cp38-cp38-macosx_10_15_x86_64.whl (595.6 kB view hashes)

Uploaded CPython 3.8 macOS 10.15+ x86-64

ada_url-1.6.0-cp38-cp38-macosx_10_15_universal2.whl (966.4 kB view hashes)

Uploaded CPython 3.8 macOS 10.15+ universal2 (ARM64, x86-64)

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