python-url-normalize
Port variant v13
Summary URL normalization for Python (3.13)
Package version 2.2.1
Homepage https://github.com/niksite/url-normalize
Keywords python
Maintainer Python Automaton
License Not yet specified
Other variants v12
Ravenports Buildsheet | History
Ravensource Port Directory | History
Last modified 27 APR 2025, 21:50:08 UTC
Port created 25 APR 2024, 22:29:23 UTC
Subpackage Descriptions
single # url-normalize [tests] [Coveralls] [PyPI] A Python library for standardizing and normalizing URLs with support for internationalized domain names (IDN). ## Table of Contents - [Introduction] - [Features] - [Installation] - [Usage] - [Python API] - [Command Line] - [Documentation] - [Contributing] - [License] ## Introduction url-normalize provides a robust URI normalization function that: - Takes care of IDN domains. - Always provides the URI scheme in lowercase characters. - Always provides the host, if any, in lowercase characters. - Only performs percent-encoding where it is essential. - Always uses uppercase A-through-F characters when percent-encoding. - Prevents dot-segments appearing in non-relative URI paths. - For schemes that define a default authority, uses an empty authority if the default is desired. - For schemes that define an empty path to be equivalent to a path of "/", uses "/". - For schemes that define a port, uses an empty port if the default is desired - Ensures all portions of the URI are utf-8 encoded NFC from Unicode strings Inspired by Sam Ruby's [urlnorm.py] ## Features - **IDN Support**: Full internationalized domain name handling - **Configurable Defaults**: - Customizable default scheme (https by default) - Configurable default domain for absolute paths - **Query Parameter Control**: - Parameter filtering with allowlists - Support for domain-specific parameter rules - **Versatile URL Handling**: - Empty string URLs - Double slash URLs (//domain.tld) - Shebang (#!) URLs - **Developer Friendly**: - Cross-version Python compatibility (3.8+) - 100% test coverage - Modern type hints and string handling ## Installation ```sh pip install url-normalize ``` ## Usage ### Python API ```python from url_normalize import url_normalize # Basic normalization (uses https by default) print(url_normalize("www.foo.com:80/foo")) # Output: https://www.foo.com/foo # With custom default scheme print(url_normalize("www.foo.com/foo", default_scheme="http")) # Output: http://www.foo.com/foo # With query parameter filtering enabled print(url_normalize("www.google.com/search?q=test&utm_source=test", filter_params=True)) # Output: https://www.google.com/search?q=test # With custom parameter allowlist as a dict print(url_normalize( "example.com?page=1&id=123&ref=test", filter_params=True, param_allowlist={"example.com": ["page", "id"]} )) # Output: https://example.com?page=1&id=123 # With custom parameter allowlist as a list print(url_normalize( "example.com?page=1&id=123&ref=test", filter_params=True, param_allowlist=["page", "id"]
Configuration Switches (platform-specific settings discarded)
PY312 OFF Build using Python 3.12 PY313 ON Build using Python 3.13
Package Dependencies by Type
Build (only) python313:dev:std
python-pip:single:v13
autoselect-python:single:std
Build and Runtime python313:primary:std
Runtime (only) python-idna:single:v13
Download groups
main mirror://PYPIWHL/bc/d9/5ec15501b675f7bc07c5d16aa70d8d778b12375686b6efd47656efdc67cd
Distribution File Information
3deb687587dc91f7b25c9ae5162ffc0f057ae85d22b1e15cf5698311247f567b 14728 python-src/url_normalize-2.2.1-py3-none-any.whl
Ports that require python-url-normalize:v13
python-requests-cache:v13 Persistent cache for python requests (3.13)