|
|
#!/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 =""
|
|
|
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]] = []
|
|
|
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
|
|
|
|
|
|
def scan_config_portage():
|
|
|
Dirs_root = ["/var/db/repos", "/usr/portage"]
|
|
|
Config = {}
|
|
|
I = 0
|
|
|
Dr = {}
|
|
|
Data = {}
|
|
|
Pf = {}
|
|
|
for Dir_root in Dirs_root:
|
|
|
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
|