You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

208 lines
6.9 KiB

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
'__autor__' == 'serkus'
import os, sys, json
from urllib import request
from utils.package import search
# import xml
import xml.etree.ElementTree as ET
# Проверяем пользователь ROOT или нет
def is_root():
return os.geteuid() == 0
# Читаем Файл построчно
def read_configs(filename):
param = {}
if os.path.exists(filename):
with open(filename) as f:
for line in f:
print(line)
else:
print("Path is not Found")
# Получаем список включенных оверлеев
def enable_overlays():
path ='/etc/portage/repos.conf/'
# Получаем список всех оверлеев
def get_list_overlays():
overlays = []
OverlayList = {}
url = "https://qa-reports.gentoo.org/output/repos/repositories.xml" # "https://api.gentoo.org/overlays/repositories.xml"
if(os.path.exists("./overlays.json")):
with open("./overlays.json", 'a') as fn:
try:
OverlayList = json.load(fn.read())
except Exception as e:
print(e)
else:
overlays = []
response = request.urlopen(url)
overlay = {}
includes = []
catalogOverls = {}
root = ET.fromstring(response.read())
#print(root.attrib)
name = ""
#print(root.tag)
description = ""
homepage = ""
feed =""
for d, dirs, files in os.walk('/var/db/repos'):
if(d == "/var/db/repos"):
inc = dirs
else:
break
for child in root.findall('repo'):
name = child.find('name').text
try:
description = child.find('description').text
except AttributeError:
description = "У overlay нет описания"
try:
homepage = child.find('homepage').text
except AttributeError:
homepage = "У overlay нет домашней страцы"
try:
feed = child.find('feed').text
except AttributeError:
feed = "У overlay нет ссылки на дерево"
overlay = dict(name = name, description = description, homepage = homepage, feed = feed)
if name in inc:
includes.append(overlay)
overlays.append(overlay)
if " for " in description:
if description.split(" for ")[1].split(" ")[0] not in catalogOverls:
catalogOverls[description.split(" for ")[1].split(" ")[0]] = []
catalogOverls[description.split(" for ")[1].split(" ")[0]].append(overlay)
elif "Personal overlay" in description or "personal overlay" in description:
if "Personal " not in catalogOverls:
catalogOverls["Personal"] = []
catalogOverls["Personal"].append(overlay)
else:
if "othes" not in catalogOverls:
catalogOverls["othes"] = []
catalogOverls["othes"].append(overlay)
#print(str(overlays))s
#print(len(overlays))
with open('./overlays.json', 'a') as f:
f.write(json.dumps({"repositories": dict(all = overlays, include = includes, categores = catalogOverls)}))
#f.close()
OverlayList = dict(all = overlays, include = includes, categores = catalogOverls)
#except Exception as e:
# print(e)
#return 1
return OverlayList # dict(all = overlays, include = includes)
def xml_element_to_dict(elem):
"Convert XML Element to a simple dict"
inner = dict(elem.attrib)
children = list(map(xml_element_to_dict, list(elem)))
text = elem.text and elem.text.strip()
if text:
inner['@text'] = text
if children:
inner['@children'] = children
return {elem.tag: inner}
def xml2json(xmldata):
pass
#doc = ET.parse(xmldata)
#root = root = ET.fromstring(xmldata)
def write_config(port = 8000, Lang ='ru', theme = "default"):
conf = dict(PORT = port, Lang = Lang, THEME = theme)
with open('./config.json', 'w') as f:
json.dump(conf, f)
return conf
def read_config():
with open('./config.json', 'r') as f:
conf = json.load(f)
return conf
def load_config():
conf = {}
if not os.path.exists("./config.json"):
write_config()
else:
conf = read_config()
return conf
# SORT IN INTALL PAKAGES
# ''
def sort_install_pkg():
#pkg =scan_config_portage()
INSTALL = {}
pkg_name =""
2 years ago
TrePortage = ScanTreePortage()
path = '/var/db/pkg/'
for d, dirs, files in os.walk(path):
for f in files:
try:
#ver = int(f.replace('.ebuild', '').split('-')[-1][0])
for pn in f.replace('.ebuild', '').split('-')[:-1]:
pkg_name = pkg_name + pn + "-"
#except TypeError:
# for pn in f.replace('.ebuild', '').split('-')[:-2]:
# pkg_name = pkg_name + pn + "-"
except Exception as e:
print(e)
#print(e)
#print(pkg_name)
if pkg_name not in INSTALL:
INSTALL[d.replace(path, "").split('/')[0]] = []
2 years ago
if
INSTALL[d.replace(path,"").split('/')[0]].append(dict(name = pkg_name[:-1], ver = f.replace(pkg_name, "")))
else:
INSTALL[d.replace(path,
"").split('/')[0]].append(dict(name = pkg_name[:-1],ver = f.replace(pkg_name, "")
if d.replace(path, "").split('/')[0] not in INSTALL:
INSTALL[d.replace(path, "").split('/')[0]] = []
INSTALL[d.replace(path, "").split('/')[0]].append(f.replace(".ebuild", "") )
INSTALL[d.replace(path,
"").split('/')[0]].append(f.replace(".ebuild", "")) #dict(name = pkg_name[:-1],ver = f.replace(pkg_name, "")
#print(str(len(INSTALL)))
#return json.dumps({'install_pkgs':INSTALL})
return INSTALL
2 years ago
def ScanTreePortage():
2 years ago
DirsRoot = ["/var/db/repos", "/usr/portage"]
2 years ago
d, ListTree, f for in os.walk('/usr/portage') and d, ListTree, f for in os.walk("/var/db/repos")
return ListTree
def scan_config_portage():
Dirs_root = ["/var/db/repos", "/usr/portage"]
Config = {}
I = 0
Dr = {}
Data = {}
Pf = {}
for Dir_root in Dirs_root:
2 years ago
for d, dirs, files in os.walk(Dir_root):
#print(str(d))
I += 1
for fl in files:
with open(d + "/" + fl) as f:
Pf[str(d.split('/')[-1]) + "/"+ fl]= f.read().split('\n')
str(d.split('/')[-1])
#print(dr)
#config = {'portage': pf}
#print("config:\t" + str(config))
return Config