rfc3986

2.0.0 · active · verified Sat Mar 28

rfc3986 is a Python implementation of RFC 3986 including validation and authority parsing. This module also supports RFC 6874, which adds support for zone identifiers to IPv6 Addresses. It provides APIs for parsing, validating, and building URIs, with convenience methods for `urllib.parse` compatibility. The current version is 2.0.0, released in January 2022, and the project appears to be actively maintained.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to parse a URI string into a `URIReference` object, access its components, validate it using a `Validator` instance with custom rules, and construct a new URI using `URIBuilder`.

from rfc3986 import uri_reference, validators

# Parsing a URI Reference
uri_str = 'https://user:pass@example.com:8080/path/to/resource?key=value#fragment'
uri = uri_reference(uri_str)

print(f"Scheme: {uri.scheme}") # Output: https
print(f"Host: {uri.host}")     # Output: example.com
print(f"Path: {uri.path}")     # Output: /path/to/resource
print(f"Query: {uri.query}")   # Output: key=value

# Validating a URI
validator = validators.Validator().allow_schemes(['https']).allow_hosts(['example.com'])

if validator.validate(uri):
    print("URI is valid according to custom rules.")
else:
    print("URI is NOT valid according to custom rules.")

# Building a URI
from rfc3986 import URIBuilder

builder = (URIBuilder()
           .add_scheme('mailto')
           .add_path('user@domain.com'))

mailto_uri = builder.finalize()
print(f"Built URI: {mailto_uri.unsplit()}") # Output: mailto:user@domain.com

view raw JSON →