93 lines
2.1 KiB
Python
93 lines
2.1 KiB
Python
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:
|
|
assert self.has_config
|
|
if not self._config:
|
|
parser = ClonerConfigParser(self.__config_filename)
|
|
self._config = parser.config
|
|
return self._config
|