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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/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 =""
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]] = []
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
def ScanTreePortage():
DirsRoot = ["/var/db/repos", "/usr/portage"]
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:
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