Source code for nc_py_api.ex_app.misc

"""Different miscellaneous optimization/helper functions for the Nextcloud Applications."""

import os
from sys import platform


[docs] def persistent_storage() -> str: """Returns the path to directory, which is permanent storage and is not deleted when the application is updated.""" return os.getenv("APP_PERSISTENT_STORAGE", _get_app_cache_dir())
def _get_app_cache_dir() -> str: sys_platform = platform.lower() root_cache_path = ( os.path.normpath(os.environ["LOCALAPPDATA"]) if sys_platform == "win32" else ( os.path.expanduser("~/Library/Caches") if sys_platform == "darwin" else os.getenv("XDG_CACHE_HOME", os.path.expanduser("~/.cache")) ) ) r = os.path.join(root_cache_path, os.environ["APP_ID"]) os.makedirs(r, exist_ok=True) return r
[docs] def verify_version(finalize_update: bool = True) -> tuple[str, str] | None: """Returns tuple with an old version and new version or ``None`` if there was no update taken. :param finalize_update: Flag indicating whether update information should be updated. If ``True``, all subsequent calls to this function will return that there is no update. """ version_file_path = os.path.join(persistent_storage(), "_version.info") r = None with open(version_file_path, "a+", encoding="UTF-8") as version_file: version_file.seek(0) old_version = version_file.read() if old_version != os.environ["APP_VERSION"]: r = (old_version, os.environ["APP_VERSION"]) if finalize_update: version_file.seek(0) version_file.write(os.environ["APP_VERSION"]) version_file.truncate() return r
def get_model_path(model_name: str) -> str: """Wrapper around hugging_face's ``snapshot_download`` to return path to downloaded model directory.""" from huggingface_hub import snapshot_download # noqa isort:skip pylint: disable=C0415 disable=E0401 return snapshot_download(model_name, local_files_only=True, cache_dir=persistent_storage()) def get_computation_device() -> str: """Returns computation device(`ROCM` or `CUDA`) if it is defined in the environment variable.""" return str(os.environ.get("COMPUTE_DEVICE", "")).upper()