from pathlib import Path from tempfile import mkdtemp, mkstemp from threading import Lock from urllib.parse import ParseResult from fastapi import Request class TempFile: path = Path(mkdtemp()) path_depth = 3 name_length = 16 _lock = Lock() @classmethod def create(cls, ext: str = ".tmp"): descriptor, str_path = mkstemp(suffix=ext, dir=str(cls.path)) return descriptor, Path(str_path) @classmethod def to_url(cls, request: Request, path: Path) -> str: assert cls.path return ParseResult( scheme=request.url.scheme, netloc=request.url.netloc, path=f"/temp/{path.relative_to(cls.path)}", params="", query="", fragment="", ).geturl()