{"id":300,"library":"mdurl","title":"mdurl","description":"mdurl is a Python port of the JavaScript mdurl package, providing utilities for parsing, encoding, and decoding URLs in Markdown. The latest version is 0.1.2, released on August 14, 2022. The project has a stable release history with no recent updates.","status":"active","version":"0.1.2","language":"python","source_language":"en","source_url":"https://github.com/executablebooks/mdurl","tags":["markdown","URL","parsing","encoding","decoding"],"install":[{"cmd":"pip install mdurl","lang":"bash","label":"Install mdurl"}],"dependencies":[],"imports":[{"note":"Incorrect import path; use direct import from mdurl.","wrong":"import mdurl.encode","symbol":"encode","correct":"from mdurl import encode"},{"note":"Incorrect import path; use direct import from mdurl.","wrong":"import mdurl.decode","symbol":"decode","correct":"from mdurl import decode"},{"note":"Incorrect import path; use direct import from mdurl.","wrong":"import mdurl.parse","symbol":"parse","correct":"from mdurl import parse"},{"note":"Incorrect import path; use direct import from mdurl.","wrong":"import mdurl.format","symbol":"format","correct":"from mdurl import format"}],"quickstart":{"code":"from mdurl import encode, decode, parse, format\n\n# Encode a URL\nencoded_url = encode('https://example.com/path?query=param')\nprint(f'Encoded URL: {encoded_url}')\n\n# Decode a URL\ndecoded_url = decode(encoded_url)\nprint(f'Decoded URL: {decoded_url}')\n\n# Parse a URL\nparsed_url = parse('https://example.com/path?query=param')\nprint(f'Parsed URL: {parsed_url}')\n\n# Format a parsed URL\nformatted_url = format(parsed_url)\nprint(f'Formatted URL: {formatted_url}')","lang":"python","description":"Demonstrates encoding, decoding, parsing, and formatting URLs using mdurl."},"warnings":[{"fix":"Manually normalize URLs before processing if necessary.","message":"mdurl functions do not perform URL normalization; ensure input URLs are properly formatted.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Validate URLs before decoding to handle invalid sequences appropriately.","message":"Invalid percent-encoded sequences are left as-is during decoding.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-05-12T12:56:38.272Z","next_check":"2026-06-26T00:00:00.000Z","problems":[{"fix":"Install the package using pip: `pip install mdurl`","cause":"The 'mdurl' package is not installed in the Python environment where the code is being run.","error":"ModuleNotFoundError: No module named 'mdurl'"},{"fix":"Refer to the `mdurl` documentation. The primary encoding function is `mdurl.encode()` and the decoding function is `mdurl.decode()`.","cause":"The user is attempting to call a function that does not exist in the `mdurl` library, possibly confusing its API with other URL parsing libraries like `urllib.parse` or the original JavaScript `mdurl`.","error":"AttributeError: module 'mdurl' has no attribute 'quote'"},{"fix":"Ensure that the input provided to `mdurl.encode()` or `mdurl.decode()` is a string.","cause":"The `mdurl.encode()` or `mdurl.decode()` function received an argument that is not a string, but an integer (or another non-string type) instead.","error":"TypeError: argument 's' must be str, not int"},{"fix":"Validate and ensure that the URL string passed to `mdurl.parse()` or other functions has a reasonably well-formed structure, including the correct scheme (e.g., `http://`, `https://`).","cause":"While `mdurl.parse()` is designed to be lenient, if the input URL string is severely malformed, particularly regarding its scheme or structure (e.g., `https:/example.com` instead of `https://example.com`), it can lead to unexpected parsing results or a `ValueError` if subsequent operations on the parsed object assume a valid structure.","error":"ValueError: Malformed URL scheme"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":80,"quickstart_tag":"verified","pypi_latest":null,"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":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1.3,"disk_size":"17.8M"},{"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.01,"mem_mb":1.3,"disk_size":"18M"},{"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.04,"mem_mb":1.4,"disk_size":"19.7M"},{"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.03,"mem_mb":1.4,"disk_size":"20M"},{"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.03,"mem_mb":1.2,"disk_size":"11.6M"},{"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.04,"mem_mb":1.2,"disk_size":"12M"},{"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.03,"mem_mb":1.3,"disk_size":"11.2M"},{"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.03,"mem_mb":1.1,"disk_size":"12M"},{"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.02,"mem_mb":1.3,"disk_size":"17.3M"},{"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.01,"mem_mb":1.3,"disk_size":"18M"}]},"quickstart_checks":{"last_tested":"2026-04-23","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}]}}