Source code for pynxxas.io.url_utils

import os
import sys
import pathlib
import urllib.parse
import urllib.request
from typing import Union, NamedTuple


[docs] class ParsedUrlType(NamedTuple): path: str internal_path: str
UrlType = Union[str, pathlib.Path, urllib.parse.ParseResult, ParsedUrlType] _WIN32 = sys.platform == "win32"
[docs] def as_url(url: UrlType) -> ParsedUrlType: if isinstance(url, ParsedUrlType): return url if isinstance(url, urllib.parse.ParseResult): parsed = url else: url_str = str(url) parsed = urllib.parse.urlparse(url_str) if not parsed.scheme or (_WIN32 and len(parsed.scheme) == 1): url_str = "file://" + os.path.abspath(url_str).replace("\\", "/") parsed = urllib.parse.urlparse(url_str) if parsed.scheme != "file": raise ValueError("URL is not a file") if parsed.netloc: path = f"{parsed.netloc}{parsed.path}" else: path = parsed.path query = urllib.parse.parse_qs(parsed.query) internal_path = query.get("path", [""])[0] return ParsedUrlType(path=path, internal_path=internal_path)