{"id":697,"library":"rfc3986-validator","title":"Pure Python RFC 3986 Validator","description":"rfc3986-validator is a pure Python library designed for validating Uniform Resource Identifiers (URIs) according to RFC 3986. It offers a single validation function. The library is currently at version 0.1.1, released in October 2019, and is designated as '2 - Pre-Alpha' development status, indicating a very inactive release cadence and experimental nature.","status":"maintenance","version":"0.1.1","language":"python","source_language":"en","source_url":"https://github.com/naimetti/rfc3986-validator","tags":["uri","url","validation","rfc3986"],"install":[{"cmd":"pip install rfc3986-validator","lang":"bash","label":"Install latest version"}],"dependencies":[],"imports":[{"symbol":"validate_rfc3986","correct":"from rfc3986_validator import validate_rfc3986"}],"quickstart":{"code":"from rfc3986_validator import validate_rfc3986\n\n# Validate a full URI\nprint(validate_rfc3986('http://example.com/path?query=val#fragment')) # Expected: True\n\n# Validate a URI reference (e.g., relative path)\nprint(validate_rfc3986('//example.com/path', rule='URI_reference')) # Expected: True\n\n# Example of an invalid URI\nprint(validate_rfc3986('http://foo.bar?q=Spaces should be encoded')) # Expected: False","lang":"python","description":"The `validate_rfc3986` function checks if a given string conforms to the RFC 3986 URI syntax. It can also validate against specific rules like 'URI_reference'."},"warnings":[{"fix":"For actively maintained and feature-rich RFC 3986 validation, parsing, and building capabilities, consider using the `rfc3986` library (without the '-validator' suffix) which is at version 2.0.0 and actively developed.","message":"This library is classified as '2 - Pre-Alpha' and has not seen updates since October 2019. Its long-term maintenance and compatibility with newer Python versions (beyond 3.8) are uncertain.","severity":"gotcha","affected_versions":"<=0.1.1"},{"fix":"If your application requires more advanced URI handling, such as parsing components, building URIs, or custom validation rules (e.g., allowing only specific schemes or hosts), the `rfc3986` library offers `uri_reference`, `urlparse`, `validators.Validator` classes, and `URIBuilder` for these purposes.","message":"The `rfc3986-validator` library provides a single `validate_rfc3986` function for basic URI validation. It does not offer granular control over URI components (like scheme, host, path, query) or methods for constructing URIs.","severity":"gotcha","affected_versions":"<=0.1.1"}],"env_vars":null,"last_verified":"2026-05-12T17:55:31.235Z","next_check":"2026-06-26T00:00:00.000Z","problems":[{"fix":"pip install rfc3986-validator","cause":"The rfc3986-validator library is not installed in the current Python environment or the module name is misspelled.","error":"ModuleNotFoundError: No module named 'rfc3986_validator'"},{"fix":"from rfc3986_validator import validate_uri","cause":"The function name 'validate' does not exist in the 'rfc3986_validator' module; the correct function name is 'validate_uri'.","error":"ImportError: cannot import name 'validate' from 'rfc3986_validator'"},{"fix":"import rfc3986_validator\nrfc3986_validator.validate_uri(\"http://example.com\")","cause":"After importing the 'rfc3986_validator' module, an attempt was made to call a non-existent attribute 'validate' instead of the correct function 'validate_uri'.","error":"AttributeError: module 'rfc3986_validator' has no attribute 'validate'"},{"fix":"validate_uri(\"http://example.com\") # Ensure the input is a string","cause":"The 'validate_uri' function received a non-string argument, but it expects a string or bytes-like object for URI validation.","error":"TypeError: expected string or bytes-like object"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":80,"quickstart_tag":"verified","pypi_latest":"0.1.1","install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":0.4,"disk_size":"17.8M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.05,"mem_mb":0.4,"disk_size":"17.8M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.5,"import_time_s":0.02,"mem_mb":0.4,"disk_size":"18M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":0.4,"disk_size":"18M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.1,"mem_mb":0.4,"disk_size":"19.6M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.12,"mem_mb":0.4,"disk_size":"19.6M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.6,"import_time_s":0.09,"mem_mb":0.4,"disk_size":"20M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.1,"mem_mb":0.4,"disk_size":"20M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.06,"mem_mb":0.4,"disk_size":"11.5M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.07,"mem_mb":0.4,"disk_size":"11.5M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.4,"import_time_s":0.08,"mem_mb":0.4,"disk_size":"12M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.08,"mem_mb":0.4,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.06,"mem_mb":0.4,"disk_size":"11.2M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.07,"mem_mb":0.4,"disk_size":"11.1M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.4,"import_time_s":0.06,"mem_mb":0.4,"disk_size":"12M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.07,"mem_mb":0.4,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":0.4,"disk_size":"17.3M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":0.4,"disk_size":"17.3M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.7,"import_time_s":0.03,"mem_mb":0.4,"disk_size":"18M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":0.4,"disk_size":"18M"}]},"quickstart_checks":{"last_tested":"2026-04-24","tag":"verified","tag_description":"quickstart runs on critical runtimes, recently tested","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]}}