优化代码 从配置文件中读取目录等常量
This commit is contained in:
parent
2f6d3d1119
commit
f1b49646a4
|
@ -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)
|
||||
|
||||
#日志回滚
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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"))
|
||||
|
|
Loading…
Reference in New Issue