diff --git a/src/blueapi/service/authentication.py b/src/blueapi/service/authentication.py index c0a32b26f4..b107f7b2b2 100644 --- a/src/blueapi/service/authentication.py +++ b/src/blueapi/service/authentication.py @@ -47,11 +47,13 @@ def _file_path(self) -> str: def save_cache(self, cache: Cache) -> None: self.delete_cache() + self._create_parent_folder_if_necessary() with open(self._file_path, "xb") as token_file: token_file.write(base64.b64encode(cache.model_dump_json().encode("utf-8"))) os.chmod(self._file_path, 0o600) def load_cache(self) -> Cache: + self._create_parent_folder_if_necessary() with open(self._file_path, "rb") as cache_file: return TypeAdapter(Cache).validate_json( base64.b64decode(cache_file.read()).decode("utf-8") @@ -71,6 +73,7 @@ def _default_token_cache_path() -> Path: def can_access_cache(self) -> bool: assert self._token_path try: + self._create_parent_folder_if_necessary() self._token_path.write_text("") except IsADirectoryError: print("Invalid path: a directory path was provided instead of a file path") @@ -80,6 +83,9 @@ def can_access_cache(self) -> bool: return False return True + def _create_parent_folder_if_necessary(self): + self._token_path.parent.mkdir(parents=True, exist_ok=True) + class SessionManager: def __init__(self, server_config: OIDCConfig, cache_manager: CacheManager) -> None: