import pathlib import time from .file_handler import file_handler class log_directory: def __init__(self, target: pathlib.Path | None = None) -> None: if target is None: target = pathlib.Path("./logs") if not target.is_dir(): target.mkdir() self.__root = target @staticmethod def _ends_with(name: str, ending: str) -> bool: return name[-len(ending):] == ending @property def root(self) -> pathlib.Path: return self.__root @property def logs(self) -> tuple: return tuple(self.iter_logs()) def iter_logs(self) -> pathlib.Path: for count in self.__root.iterdir(): if self._ends_with(count.name, ".log"): yield self.__root / count def get_logs_for_day(self, name: str | None = None) -> tuple: if name is None: name = self._base_name logs = self.iter_logs() filtered = filter(lambda count: str(count).find(name) != -1, logs) return tuple(filtered) @property def _base_name(self) -> str: return time.strftime("%Y-%m-%d", time.localtime()) def get_new_file(self) -> pathlib.Path: base_name = self._base_name name_logs = self.get_logs_for_day(base_name) name_count = len(name_logs) while True: result_name = ( base_name + "-" + \ str(name_count + 1) + ".log" \ ) result_path = self.root / pathlib.Path(result_name) if not result_path.exists(): return result_path name_count = name_count + 1 def get_new_handler(self) -> file_handler: return file_handler(self.get_new_file())