files.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from api.utils.common_log import myLogger
  2. from api.utils.helper import Singleton
  3. # This class is add/modify/list/delete item to item=value(键值对) model settings file
  4. __all__ = ['settings']
  5. class SettingsFile(object):
  6. __metaclass__ = Singleton
  7. def __init__(self, path):
  8. self._config = {}
  9. self.config_file = path
  10. def build_config(self):
  11. try:
  12. with open(self.config_file, 'r') as f:
  13. data = f.readlines()
  14. except Exception as e:
  15. data = []
  16. for i in data:
  17. if i.startswith('#'):
  18. continue
  19. i = i.replace('\n', '').replace('\r\n', '')
  20. if not i:
  21. continue
  22. tmp = i.split('=')
  23. if len(tmp) != 2:
  24. myLogger.error_logger(f'invalid format {i}')
  25. continue
  26. key, value = i.split('=')
  27. if self._config.get(key) != value:
  28. self._config[key] = value
  29. return self._config
  30. def init_config_from_file(self, config_file: str=None):
  31. if config_file:
  32. self.config_file = config_file
  33. self.build_config()
  34. def update_setting(self, key: str, value: str):
  35. self._config[key] = value
  36. self.flush_config()
  37. def get_setting(self, key: str, default=None):
  38. return self._config.get(key, default)
  39. def list_all_settings(self) -> dict:
  40. self.build_config()
  41. return self._config
  42. def delete_setting(self, key: str, value: str):
  43. if self._config.get(key) == value:
  44. del self._config[key]
  45. self.flush_config()
  46. def flush_config(self):
  47. try:
  48. with open(self.config_file, 'w') as f:
  49. for key, value in self._config.items():
  50. f.write(f'{key}={value}\n')
  51. except Exception as e:
  52. myLogger.error_logger(e)
  53. # This class is add/modify/cat/delete content from file
  54. # src: path | URL