From c0983f3f9a01878b2299f3f1b4e1251185be86fe Mon Sep 17 00:00:00 2001 From: qiaofeng1227 <76487013@qq.com> Date: Fri, 25 Aug 2023 15:47:50 +0800 Subject: [PATCH] add files.py --- appmanage/api/service/manage.py | 2 +- appmanage/api/utils/files.py | 69 ++++++++++++++++++++++++++++ appmanage/api/utils/shell_execute.py | 12 ++++- appmanage/config/settings.conf | 4 +- appmanage/docs/DEV-SETUP.md | 13 +++++- cockpit/test/menu_override.sh | 3 +- 6 files changed, 98 insertions(+), 5 deletions(-) create mode 100644 appmanage/api/utils/files.py diff --git a/appmanage/api/service/manage.py b/appmanage/api/service/manage.py index 51ef84cd..2b171028 100644 --- a/appmanage/api/service/manage.py +++ b/appmanage/api/service/manage.py @@ -161,7 +161,7 @@ def get_update_list(): if compared_version(local_version, version) == -1: ret['update'] = True - cmd = "wget -O CHANGELOG.md " + const.ARTIFACT_URL + "/CHANGELOG.md && cat CHANGELOG.md" + cmd = "wget -O CHANGELOG.md " + const.ARTIFACT_URL + "/CHANGELOG.md && head -n 20 CHANGELOG.md " change_log_contents = shell_execute.execute_command_output_all(cmd)['result'] change_log = change_log_contents.split('## ')[1].split('\n') date = change_log[0].split()[-1] diff --git a/appmanage/api/utils/files.py b/appmanage/api/utils/files.py new file mode 100644 index 00000000..9735006b --- /dev/null +++ b/appmanage/api/utils/files.py @@ -0,0 +1,69 @@ +from api.utils.common_log import myLogger +from api.utils.helper import Singleton + + +# This class is add/modify/list/delete item to item=value(键值对) model settings file +__all__ = ['settings'] + +class SettingsFile(object): + + __metaclass__ = Singleton + + def __init__(self, path): + self._config = {} + self.config_file = path + + def build_config(self): + try: + with open(self.config_file, 'r') as f: + data = f.readlines() + except Exception as e: + data = [] + for i in data: + if i.startswith('#'): + continue + i = i.replace('\n', '').replace('\r\n', '') + if not i: + continue + tmp = i.split('=') + if len(tmp) != 2: + myLogger.error_logger(f'invalid format {i}') + continue + + key, value = i.split('=') + if self._config.get(key) != value: + self._config[key] = value + return self._config + + def init_config_from_file(self, config_file: str=None): + if config_file: + self.config_file = config_file + self.build_config() + + def update_setting(self, key: str, value: str): + self._config[key] = value + self.flush_config() + + def get_setting(self, key: str, default=None): + return self._config.get(key, default) + + def list_all_settings(self) -> dict: + self.build_config() + return self._config + + def delete_setting(self, key: str, value: str): + if self._config.get(key) == value: + del self._config[key] + self.flush_config() + + def flush_config(self): + try: + with open(self.config_file, 'w') as f: + for key, value in self._config.items(): + f.write(f'{key}={value}\n') + except Exception as e: + myLogger.error_logger(e) + + +# This class is add/modify/cat/delete content from file +# src: path | URL \ No newline at end of file diff --git a/appmanage/api/utils/shell_execute.py b/appmanage/api/utils/shell_execute.py index 7f40996f..7e7057a7 100644 --- a/appmanage/api/utils/shell_execute.py +++ b/appmanage/api/utils/shell_execute.py @@ -4,13 +4,20 @@ from api.utils.common_log import myLogger from api.exception.command_exception import CommandException from api.utils import const + +# This fuction is for running shell commands on container +# cmd_str e.g: "ls -a" +# return string limit: 4000 chars? to do def execute_command_output(cmd_str): print(cmd_str) out_str = subprocess.getoutput(cmd_str) print(out_str) return out_str -# cmd_str: 执行的command命令 + +# This fuction is for running shell commands on host machine +# cmd_str e.g: "ls -a" +# return string limit: 4000 chars def execute_command_output_all(cmd_str): myLogger.info_logger("Start to execute cmd: " + cmd_str) @@ -25,6 +32,9 @@ def execute_command_output_all(cmd_str): myLogger.info_logger(process) raise CommandException(const.ERROR_SERVER_COMMAND,"Docker returns the original error", process.stderr) + + +# This fuction is convert container commands to host machine commands def convert_command(cmd_str): convert_cmd = "" if cmd_str == "": diff --git a/appmanage/config/settings.conf b/appmanage/config/settings.conf index 4c43d7ae..303a9560 100644 --- a/appmanage/config/settings.conf +++ b/appmanage/config/settings.conf @@ -7,4 +7,6 @@ #smtp_server=smtp.websoft9.com #smtp_tls/ssl=true #smtp_user=admin -#smtp_password=password \ No newline at end of file +#smtp_password=password +#install_path=/data +#artifact_url=https://w9artifact.blob.core.windows.net/release/websoft9 diff --git a/appmanage/docs/DEV-SETUP.md b/appmanage/docs/DEV-SETUP.md index 4f219c13..c557883c 100644 --- a/appmanage/docs/DEV-SETUP.md +++ b/appmanage/docs/DEV-SETUP.md @@ -28,7 +28,18 @@ This repository only support deployment on Linux: cd websoft9/docker/appmanage && export APP_VERSION=latest-pr && docker compose up -d ``` -## API +## Structure + +### API + +``` +├── api +│   ├── exception +│   ├── model -- Data models and database schema +│   ├── service -- Controllers +│   ├── utils -- Common modules and tools +│   └── v1 -- Views +``` ### Route diff --git a/cockpit/test/menu_override.sh b/cockpit/test/menu_override.sh index 3cf42b1d..7b43ae0d 100644 --- a/cockpit/test/menu_override.sh +++ b/cockpit/test/menu_override.sh @@ -1,3 +1,4 @@ git clone --depth=1 https://github.com/Websoft9/websoft9.git rm -rf /etc/cockpit/*.override.json -cp -r websoft9/cockpit/menu_override/* /etc/cockpit \ No newline at end of file +cp -r websoft9/cockpit/menu_override/* /etc/cockpit +rm -rf websoft9 \ No newline at end of file