Source code for compass.web.url_utils
"""Shared URL utilities for COMPASS web modules"""
from urllib.parse import quote, urlsplit, urlunsplit
_PATH_SAFE_CHARS = "/:@-._~!$&'()*+,;=%"
_QUERY_SAFE_CHARS = "=&;%:@-._~!$&'()*+,;/?"
[docs]
def sanitize_url(url):
"""Encode unsafe URL characters while preserving URL semantics
Parameters
----------
url : str
URL string that may include unsafe characters such as spaces.
Returns
-------
str
URL with path, query, and fragment percent-encoded.
"""
parsed = urlsplit(url)
path = quote(parsed.path, safe=_PATH_SAFE_CHARS)
query = quote(parsed.query, safe=_QUERY_SAFE_CHARS)
fragment = quote(parsed.fragment, safe="")
return urlunsplit((parsed.scheme, parsed.netloc, path, query, fragment))