env.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from pathlib import Path
  2. class Env:
  3. envs = {}
  4. def __new__(cls, context=None):
  5. if context not in cls.envs:
  6. obj = object.__new__(cls)
  7. cls.envs[context] = obj
  8. return cls.envs[context]
  9. def __init__(self, context=None):
  10. self._context = context or {}
  11. self._data_folder = ''
  12. self._output_folder = ''
  13. @property
  14. def data_folder(self):
  15. return self._data_folder
  16. @data_folder.setter
  17. def data_folder(self, folder):
  18. path = Path(folder)
  19. if path.is_absolute():
  20. self._data_folder = str(path)
  21. else:
  22. self._data_folder = str(self.resolve(folder))
  23. @property
  24. def output_folder(self):
  25. return self._output_folder
  26. @output_folder.setter
  27. def output_folder(self, folder):
  28. path = Path(folder)
  29. if path.is_absolute():
  30. self._output_folder = str(path)
  31. else:
  32. self._output_folder = str(self.resolve(folder))
  33. @classmethod
  34. def _resolve(cls, folder, file_name):
  35. file = Path(file_name).expanduser()
  36. if file.is_absolute():
  37. return file
  38. return Path(folder).joinpath(file_name).resolve()
  39. def resolve(self, file_name):
  40. return self._resolve(str(Path(__file__).parent), file_name)
  41. def resolve_data(self, file_name):
  42. return self._resolve(self._data_folder, file_name)
  43. def resolve_output(self, file_name):
  44. return self._resolve(self._output_folder, file_name)
  45. env = Env()