优化代码 从配置文件中读取目录等常量

This commit is contained in:
wangsong 2021-10-11 17:04:20 +08:00
parent 2f6d3d1119
commit f1b49646a4
5 changed files with 63 additions and 46 deletions

View File

@ -2,16 +2,17 @@
# -*- coding: utf-8 -*-
#参考文档: https://cuiqingcai.com/6080.html
import logging
import apt_pkg
import os
path = "/var/log/kylin-system-updater/"
path = apt_pkg.config.find_dir("Kylin-system-updater::LogDir",
"/var/log/kylin-system-updater/")
numlist = []
def get_FileSize(filePath):
fsize = os.path.getsize(filePath)
fsize = fsize / float(1024 * 1024)
# print("size:", round(fsize, 2))
return round(fsize, 2)
#日志回滚

View File

@ -27,21 +27,39 @@ import logging
import os
import json
import yaml
import shutil
import apt_pkg
OUTPUT_CONFIG_PATH = apt_pkg.config.find_dir("Kylin-system-updater::OutputConfigDir",
'/var/lib/kylin-system-updater')
INPUT_CONFIG_PATH = apt_pkg.config.find_dir("Kylin-system-updater::InputConfigDir",
'/usr/share/kylin-update-desktop-config/data')
IMPORTANT_LIST_PATH = apt_pkg.config.find_file("Kylin-system-updater::ImportantListDir",
"/var/lib/kylin-software-properties/template/important.list")
class UpdateList():
def __init__(self, parent, dist=None):
#FIXME: 最好将这个常量通过配置文件读
self.INPUT_CONFIG_PATH = '/usr/share/kylin-update-desktop-config/data'
self.OUTPUT_CONFIG_PATH = '/var/lib/kylin-system-upgrade'
self.IMPORTANT_LIST_PATH="/var/lib/kylin-software-properties/template/important.list"
#所有的组升级安装列表
self.local_upgrade_list = {}
# a stable machine uniq id
def _empty_output_dir(self):
#4、 清空上次输出的分组JSON文件
try:
if not os.path.exists(OUTPUT_CONFIG_PATH):
os.makedirs(OUTPUT_CONFIG_PATH)
logging.info('making the configuration file is complete...')
else:
shutil.rmtree(OUTPUT_CONFIG_PATH)
os.makedirs(OUTPUT_CONFIG_PATH)
logging.info('Emptying the configuration file is complete...')
except Exception as e:
logging.warning(e)
def _read_important_list(self,cache,pkgs_upgrade):
header = ''
desc = ''
@ -50,7 +68,7 @@ class UpdateList():
# 获取importantlist 本次更新推送
try:
with open(self.IMPORTANT_LIST_PATH, 'r') as f:
with open(IMPORTANT_LIST_PATH, 'r') as f:
data = f.read()
important_list = data.split()
@ -122,7 +140,7 @@ class UpdateList():
output_json = {}
#FIXME: 确定输出文件的文件名 以及放置位置
output_config_name = self.OUTPUT_CONFIG_PATH + '/' + data['package'] + '.json'
output_config_name = OUTPUT_CONFIG_PATH + data['package'] + '.json'
#4、添加一些基础信息
groups_base_info.update({"package":data['package']})
@ -148,14 +166,14 @@ class UpdateList():
def _make_groups_upgrade(self,cache,group_list, pkgs_upgrade = []):
try:
files = os.listdir(self.INPUT_CONFIG_PATH) #获得文件夹中所有文件的名称列表
files = os.listdir(INPUT_CONFIG_PATH) #获得文件夹中所有文件的名称列表
upgrade_groups_list = []
for ifile in files:
#判是否是目录以及是否以JSON结尾
if ifile.endswith('.json'):
#读取组JSON文件
with open(self.INPUT_CONFIG_PATH+"/"+ifile,'r') as f:
with open(INPUT_CONFIG_PATH+ifile,'r') as f:
try:
data = json.load(f)
except json.JSONDecodeError as exc:
@ -164,7 +182,7 @@ class UpdateList():
group_name = data['package']
#读取组的yaml 文件的changelog的信息
with open(self.INPUT_CONFIG_PATH + "/" + group_name + ".yaml", "r") as stream:
with open(INPUT_CONFIG_PATH + group_name + ".yaml", "r") as stream:
try:
data_yaml = yaml.safe_load(stream)
except yaml.YAMLError as exc:
@ -223,7 +241,7 @@ class UpdateList():
pkgs_json = self._make_pkg_info_json(cache,[pkg])
#FIXME: 确定输出文件的文件名 以及放置位置
output_config_name = self.OUTPUT_CONFIG_PATH + '/' + pkg + '.json'
output_config_name = OUTPUT_CONFIG_PATH + pkg + '.json'
#产生JSON文件
with open(output_config_name, 'w', encoding='utf-8') as f:
@ -267,6 +285,8 @@ class UpdateList():
elif success == False:
return False,header,desc
#清空输出的目录
self._empty_output_dir()
#分组的包的JSON
self._make_groups_upgrade(cache,group_important_list,[pkg.name for pkg in pkgs_upgrade])
#产生单包的JSON
@ -281,4 +301,5 @@ class UpdateList():
#不需要升级 全部的软件都是新的
header = _("The software on this computer is up to date.")
desc = ''
return True,header,desc
return True,header,desc

View File

@ -4,7 +4,6 @@
import os
import sys
import dbus
import shutil
import apt_pkg
import logging
import dbus.service
@ -14,7 +13,7 @@ DBusGMainLoop(set_as_default=True)
from .Core.DistUpgradeCache import NotEnoughFreeSpaceError
from .Core.MyCache import MyCache
from .UpdateManagerDbus import UpdateManagerDbusController,UPDATER_DBUS_INTERFACE,UPDATER_DBUS_PATH,UPDATER_DBUS_SERVICE
from .Core.UpdateList import UpdateList
from .Core.UpdateList import UpdateList,INPUT_CONFIG_PATH
from .backend import (InstallBackend,
get_backend)
from .Core.Database import Sqlite3Server
@ -27,7 +26,7 @@ from SystemUpdater.backend import DownloadBackend as downb
#安装完成之后是否有请求需要重启
REBOOT_REQUIRED_FILE = "/var/run/reboot-required"
GROUPS_JSON_PKG = 'kylin-update-desktop-config'
GROUPS_PKG_NAME = 'kylin-update-desktop-config'
INSTALL_ALONE_PROGRESS = "alone"
class UpdateManager():
@ -173,22 +172,22 @@ class UpdateManager():
desc = None
#2、 安装JSON分组配置文件包 安装完毕会重新调start_available --> here 安装失败就直接退出不会进行下面的操作
try:
pkg_json = cache[GROUPS_JSON_PKG]
pkg_json = cache[GROUPS_PKG_NAME]
#是否安装
if pkg_json.is_installed:
#是否可升级
if pkg_json.is_upgradable:
logging.info("groups JSON ConfigPkgs(%s) start upgrading...",self.GROUPS_JSON_PKG)
self.start_install_alone(pkgs_upgrade = [GROUPS_JSON_PKG])
logging.info("groups JSON ConfigPkgs(%s) start upgrading...",self.GROUPS_PKG_NAME)
self.start_install_alone(pkgs_upgrade = [GROUPS_PKG_NAME])
#直接退出
_success = False
header = INSTALL_ALONE_PROGRESS
return _success,header,desc
else:
logging.info("ConfigPkgs(%s) No need to upgrade...",GROUPS_JSON_PKG)
logging.info("ConfigPkgs(%s) No need to upgrade...",GROUPS_PKG_NAME)
else:
logging.info("groups JSON ConfigPkgs(%s) start new installing...",GROUPS_JSON_PKG)
self.start_install_alone(pkgs_install = [GROUPS_JSON_PKG])
logging.info("groups JSON ConfigPkgs(%s) start new installing...",GROUPS_PKG_NAME)
self.start_install_alone(pkgs_install = [GROUPS_PKG_NAME])
#直接退出
_success = False
header = INSTALL_ALONE_PROGRESS
@ -196,32 +195,20 @@ class UpdateManager():
#FIXME: 错误处理未做 报告到控制面板
except Exception as e:
logging.warning("groups JSON ConfigPkgs(%s) install failed...",GROUPS_JSON_PKG)
logging.warning("groups JSON ConfigPkgs(%s) install failed...",GROUPS_PKG_NAME)
logging.error(e)
_success = False
#3、 判断目录是JSON配置文件夹是否缺失 缺失后进行修复 卸载重新安装步骤
if not os.path.exists(self.update_list.INPUT_CONFIG_PATH):
logging.info("groups JSON Config Path(%s) Missing and Trying to fix...",self.update_list.INPUT_CONFIG_PATH)
if not os.path.exists(INPUT_CONFIG_PATH):
logging.info("groups JSON Config Path(%s) Missing and Trying to fix...",INPUT_CONFIG_PATH)
#将软件包卸载 之后进行重新安装here --> purge --> start_available 进行判断是否安装未安装重新安装
self.start_install_alone(pkgs_purge = [GROUPS_JSON_PKG])
self.start_install_alone(pkgs_purge = [GROUPS_PKG_NAME])
#直接退出
_success = False
header = INSTALL_ALONE_PROGRESS
return _success,header,desc
#4、 清空上次输出的分组JSON文件
try:
if not os.path.exists(self.update_list.OUTPUT_CONFIG_PATH):
os.makedirs(self.update_list.OUTPUT_CONFIG_PATH)
logging.info('making the configuration file is complete...')
else:
shutil.rmtree(self.update_list.OUTPUT_CONFIG_PATH)
os.makedirs(self.update_list.OUTPUT_CONFIG_PATH)
logging.info('Emptying the configuration file is complete...')
except Exception as e:
logging.warning(e)
return _success,header,desc
def refresh_cache(self):

View File

@ -15,3 +15,11 @@ Kylin-system-updater::Package-Whitelist-Strict {
};
Kylin-system-updater::DevRelease "auto";
Kylin-system-updater::LogDir "/var/log/kylin-system-updater/";
Kylin-system-updater::InputConfigDir "/usr/share/kylin-update-desktop-config/data";
Kylin-system-updater::OutputConfigDir "/var/lib/kylin-system-updater";
Kylin-system-updater::ImportantListDir "/var/lib/kylin-software-properties/template/important.list";

View File

@ -49,10 +49,10 @@ if __name__ == "__main__":
logging.basicConfig(format=FORMAT,level=logging.DEBUG)
# if options.debug:
# logging.basicConfig(format=FORMAT,level=logging.DEBUG)
# else:
# logging.basicConfig(format=FORMAT,level=logging.INFO,filename = logfile(),filemode = 'a')
# if options.debug:
# logging.basicConfig(format=FORMAT,level=logging.DEBUG)
# else:
# logging.basicConfig(format=FORMAT,level=logging.INFO,filename = logfile(),filemode = 'a')
if os.getuid() != 0:
print(_("You need to be root to run this application"))