import os.path from repo_cloner.lib.dir_not_found_error import DirNotFoundError from repo_cloner.lib.config_file_not_found_error import ConfigFileNotFoundError from repo_cloner.lib.cloner_config import ClonerConfig, ClonerConfigParser class RepoDirStructure(): _base_dir: str = "" _conf_dir: str = "" _cache_dir: str = "" _repos_dir: str = "" _config = None def __init__(self, base_dir: str): self._base_dir = base_dir self._conf_dir = os.path.join(self._base_dir, "config") self._cache_dir = os.path.join(self._base_dir, "cache") self._repos_dir = os.path.join(self._base_dir, "repos") self._config = None @property def __config_filename(self) -> str: return os.path.join(self.conf_dir, "cloner.cfg") @property def base_dir_exists(self) -> bool: if not os.path.isdir(self._base_dir): raise DirNotFoundError(self._base_dir) return True @property def conf_dir_exists(self) -> bool: if not os.path.isdir(self._conf_dir): raise DirNotFoundError(self._conf_dir) return True @property def cache_dir_exists(self) -> bool: if not os.path.isdir(self._cache_dir): raise DirNotFoundError(self._cache_dir) return True @property def repos_dir_exists(self) -> bool: if not os.path.isdir(self._repos_dir): raise DirNotFoundError(self._repos_dir) return True @property def dirs_exist(self) -> bool: return all( [ self.base_dir_exists, self.conf_dir_exists, self.cache_dir_exists, self.repos_dir_exists, ] ) @property def base_dir(self) -> str: return self._base_dir @property def cache_dir(self) -> str: return self._cache_dir @property def conf_dir(self) -> str: return self._conf_dir @property def repos_dir(self) -> str: return self._repos_dir @property def has_config(self) -> bool: if not os.path.exists(self.__config_filename): raise ConfigFileNotFoundError(self.__config_filename) return True @property def config_file(self): return self.__config_filename @property def config(self) -> ClonerConfig: self.has_config if not self._config: parser = ClonerConfigParser(self.__config_filename) self._config = parser.config return self._config