{"contents":"# -*- coding: utf-8 -*-#\n# -------------------------------------------------------------------------------\n# Name: config.py\n# Description: Configuration data management\n# Author: xaoyaoo\n# Date: 2024/01/16\n# -------------------------------------------------------------------------------\nimport json\nimport os\nimport logging\n\n\nclass ConfData(object):\n _instances = None\n\n def __new__(cls, *args, **kwargs):\n if cls._instances:\n return cls._instances\n cls._instances = object.__new__(cls)\n return cls._instances\n\n def __init__(self):\n self._work_path = None\n self.conf_file = None\n self.auto_setting = None\n\n self.is_init = False\n\n self.conf = {}\n\n self.init()\n\n @property\n def cf(self):\n if not self.is_init:\n self.init()\n return self.conf_file\n\n @property\n def work_path(self):\n if not self.is_init:\n self.init()\n return self._work_path\n\n @property\n def at(self):\n if not self.is_init:\n self.init()\n return self.auto_setting\n\n def init(self):\n self.is_init = False\n\n work_path = os.getenv(\"WXDUMP_WORK_PATH\")\n conf_file = os.getenv(\"WXDUMP_CONF_FILE\")\n auto_setting = os.getenv(\"WXDUMP_AUTO_SETTING\")\n\n if work_path is None or conf_file is None or auto_setting is None:\n return False\n\n self._work_path = work_path\n self.conf_file = conf_file\n self.auto_setting = auto_setting\n self.is_init = True\n\n if not os.path.exists(self.conf_file):\n self.set_conf(self.auto_setting, \"last\", \"\")\n self.read_conf()\n return True\n\n def read_conf(self):\n if not os.path.exists(self.conf_file):\n return False\n try:\n with open(self.conf_file, 'r') as f:\n conf = json.load(f)\n self.conf = conf\n return True\n except FileNotFoundError:\n logging.error(f\"Session file not found: {self.conf_file}\")\n return False\n except json.JSONDecodeError as e:\n logging.error(f\"Error decoding JSON file: {e}\")\n return False\n\n def write_conf(self):\n if not self.is_init:\n self.init()\n try:\n with open(self.conf_file, 'w') as f:\n json.dump(self.conf, f, indent=4, ensure_ascii=False)\n return True\n except Exception as e:\n logging.error(f\"Error writing to file: {e}\")\n return False\n\n def set_conf(self, wxid, arg, value):\n if not self.is_init:\n self.init()\n if wxid not in self.conf:\n self.conf[wxid] = {}\n if not isinstance(self.conf[wxid], dict):\n self.conf[wxid] = {}\n self.conf[wxid][arg] = value\n self.write_conf()\n\n def get_conf(self, wxid, arg):\n if not self.is_init:\n self.init()\n return self.conf.get(wxid, {}).get(arg, None)\n\n def get_local_wxids(self):\n if not self.is_init:\n self.init()\n return list(self.conf.keys())\n\n def get_db_config(self):\n if not self.is_init:\n self.init()\n my_wxid = self.get_conf(self.at, \"last\")\n return self.get_conf(my_wxid, \"db_config\")\n\n\ngc: ConfData = ConfData()\n\n\ndef get_conf_local_wxid(conf_file):\n try:\n with open(conf_file, 'r') as f:\n conf = json.load(f)\n except FileNotFoundError:\n logging.error(f\"Session file not found: {conf_file}\")\n return None\n except json.JSONDecodeError as e:\n logging.error(f\"Error decoding JSON file: {e}\")\n return None\n return list(conf.keys())\n\n\ndef get_conf(conf_file, wxid, arg):\n try:\n with open(conf_file, 'r') as f:\n conf = json.load(f)\n except FileNotFoundError:\n logging.error(f\"Session file not found: {conf_file}\")\n return None\n except json.JSONDecodeError as e:\n logging.error(f\"Error decoding JSON file: {e}\")\n return None\n return conf.get(wxid, {}).get(arg, None)\n\n\ndef get_conf_wxids(conf_file):\n try:\n with open(conf_file, 'r') as f:\n conf = json.load(f)\n except FileNotFoundError:\n logging.error(f\"Session file not found: {conf_file}\")\n return None\n except json.JSONDecodeError as e:\n logging.error(f\"Error decoding JSON file: {e}\")\n return None\n return list(conf.keys())\n\n\ndef set_conf(conf_file, wxid, arg, value):\n try:\n with open(conf_file, 'r') as f:\n conf = json.load(f)\n except FileNotFoundError:\n conf = {}\n except json.JSONDecodeError as e:\n logging.error(f\"Error decoding JSON file: {e}\")\n return False\n\n if wxid not in conf:\n conf[wxid] = {}\n if not isinstance(conf[wxid], dict):\n conf[wxid] = {}\n conf[wxid][arg] = value\n try:\n with open(conf_file, 'w') as f:\n json.dump(conf, f, indent=4, ensure_ascii=False)\n except Exception as e:\n logging.error(f\"Error writing to file: {e}\")\n return False\n return True\n","is_binary":false,"path":"wxdump_linux/api/config.py","ref":""}