Source code for est.resources

import os
import sys
import re
import tempfile
from pathlib import Path
from typing import Optional

try:
    from importlib import resources
except ImportError:
    import importlib_resources as resources
from .generate import save_3d_exafs


[docs] def resource_path(resource: str) -> Path: """The resource is specified relative to the package "est.resources". The resource path separator can be a forward or backward slash. For example path = resource_path("icons/est.png") """ parts = [s for s in re.split(r"[/\\]", resource) if s] resource = ".".join(parts[-1:]) # name and extension sub_package = ".".join(parts[:-1]) if sub_package: package = __name__ + "." + sub_package else: package = __name__ with resources.path(package, resource) as path: return path
[docs] def generate_resource( resource: str, cache: bool = True, overwrite: bool = False, output_directory: Optional[str] = None, word="EXAMPLE", ) -> Path: """Generate the derived resource from project `resource` when it does not exist or when `overwrite=True`. The directory in which the resource is located in either * the directory specified by argument `output_directory` * the user's cache directory (`cache=True`, this is the default) * a temporary directory (`cache=False`) """ infile = resource_path(resource) assert infile.parent.name == "exafs" outname = infile.stem + ".h5" if output_directory: outdir = Path(output_directory) elif cache: outdir = get_user_resource_dir() else: outdir = Path(tempfile.gettempdir()) outfile = outdir / outname if not outfile.exists() or overwrite: save_3d_exafs(infile, outfile, word=word) return outfile
[docs] def get_user_resource_dir() -> Path: path = get_user_cache_dir() / "resources" path.mkdir(parents=True, exist_ok=True) return path
[docs] def get_user_cache_dir() -> Path: home = Path().home() if sys.platform == "darwin": path = home / "Library" / "Caches" elif sys.platform == "win32": path = home / "AppData" / "Local" path = os.getenv("APPDATA", path) elif os.name == "posix": path = home / ".cache" path = os.getenv("XDG_CACHE_HOME", path) else: path = home / ".cache" if sys.platform == "win32": # On Windows cache and data dir are the same. # Microsoft suggest using a Cache subdirectory return path / "est" / "Cache" else: return path / "est"