|
import os |
|
from os import PathLike |
|
from pathlib import Path |
|
from typing import Tuple, Union |
|
from urllib.parse import urlparse |
|
|
|
PathOrStr = Union[str, PathLike] |
|
|
|
CACHE_DIRECTORY: PathOrStr = Path( |
|
os.getenv("CACHED_PATH_CACHE_ROOT", Path.home() / ".cache" / "cached_path") |
|
) |
|
""" |
|
The default global cache directory. |
|
""" |
|
|
|
|
|
def _split_cloud_path(url: str, provider: str) -> Tuple[str, str]: |
|
"""Split a full s3 path into the bucket name and path.""" |
|
parsed = urlparse(url) |
|
if not parsed.netloc or not parsed.path: |
|
raise ValueError("bad {} path {}".format(provider, url)) |
|
bucket_name = parsed.netloc |
|
provider_path = parsed.path |
|
|
|
if provider_path.startswith("/"): |
|
provider_path = provider_path[1:] |
|
return bucket_name, provider_path |
|
|
|
|
|
def set_cache_dir(cache_dir: PathOrStr) -> None: |
|
""" |
|
Set the global default cache directory. |
|
""" |
|
global CACHE_DIRECTORY |
|
CACHE_DIRECTORY = Path(cache_dir) |
|
|
|
|
|
def get_cache_dir() -> Path: |
|
""" |
|
Get the global default cache directory. |
|
""" |
|
return Path(CACHE_DIRECTORY) |
|
|