log_directory.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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: str(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.localtime())
  33. def get_new_file(self) -> pathlib.Path:
  34. base_name = self._base_name
  35. name_logs = self.get_logs_for_day(base_name)
  36. name_count = len(name_logs)
  37. while True:
  38. result_name = (
  39. base_name + "-" + \
  40. str(name_count + 1) + ".log" \
  41. )
  42. result_path = self.root / pathlib.Path(result_name)
  43. if not result_path.exists():
  44. return result_path
  45. name_count = name_count + 1
  46. def get_new_handler(self) -> file_handler:
  47. return file_handler(self.get_new_file())