40 lines
1.0 KiB
Python
40 lines
1.0 KiB
Python
import functools
|
|
import logging
|
|
from pathlib import Path
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
def get_hash(string: str) -> str:
|
|
"""
|
|
This function takes a string like '/nix/store/kkvk20b8zh8aafdnfjp6dnf062x19732-source'
|
|
and returns the hash part 'kkvk20b8zh8aafdnfjp6dnf062x19732' after '/nix/store/' and before '-source'.
|
|
"""
|
|
# Split the string by '/' and get the last element
|
|
last_element = string.split("/")[-1]
|
|
# Split the last element by '-' and get the first element
|
|
hash_part = last_element.split("-")[0]
|
|
# Return the hash part
|
|
return hash_part
|
|
|
|
|
|
def check_divergence(path: Path) -> None:
|
|
p = path.resolve()
|
|
|
|
log.info("Absolute web asset path: %s", p)
|
|
if not p.is_dir():
|
|
raise FileNotFoundError(p)
|
|
|
|
# Get the hash part of the path
|
|
gh = get_hash(str(p))
|
|
|
|
log.debug(f"Serving webui asset with hash {gh}")
|
|
|
|
|
|
@functools.cache
|
|
def asset_path() -> Path:
|
|
path = Path(__file__).parent / "assets"
|
|
log.debug("Serving assets from: %s", path)
|
|
check_divergence(path)
|
|
return path
|