log_directory.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import pathlib
  2. import time
  3. from .file_handler import file_handler
  4. class log_directory:
  5. def __init__(self, target: pathlib.Path | None = None) -> None:
  6. if target is None:
  7. target = pathlib.Path("./logs")
  8. if not target.is_dir():
  9. target.mkdir()
  10. self.__root = target
  11. @staticmethod
  12. def _ends_with(name: str, ending: str) -> bool:
  13. return name[-len(ending):] == ending
  14. @property
  15. def root(self) -> pathlib.Path:
  16. return self.__root
  17. @property
  18. def logs(self) -> tuple:
  19. return tuple(self.iter_logs())
  20. def iter_logs(self) -> pathlib.Path:
  21. for count in self.__root.iterdir():
  22. if self._ends_with(count.name, ".log"):
  23. yield self.__root / count
  24. def get_logs_for_day(self, name: str | None = None) -> tuple:
  25. if name is None:
  26. name = self._base_name
  27. logs = self.iter_logs()
  28. filtered = filter(lambda count: count.find(name) != -1, logs)
  29. return tuple(filtered)
  30. @property
  31. def _base_name(self) -> str:
  32. return time.strftime("%Y-%m-%d", time.now())
  33. def _get_new_name(self) -> str:
  34. base_name = self._base_name
  35. logs_for_name = self.get_logs_for_day(base_name)
  36. in_result = base_name + "-" + str(len(logs_for_name) + 1) + ".log"
  37. return in_result
  38. def get_new_file(self) -> pathlib.Path:
  39. return self.root / pathlib.Path(self._get_new_name())
  40. def get_new_handler(self) -> file_handler:
  41. return file_handler(self.get_new_file)