|
|
|
|
# -*- coding: UTF-8 -*-
|
|
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
'__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 =[]
|
|
|
|
|
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", '') as fn:
|
|
|
|
|
OverlayList = json.load(fn)(fn.read())
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
response = request.urlopen(url)
|
|
|
|
|
overlays = []
|
|
|
|
|
overlay = {}
|
|
|
|
|
includes =[]
|
|
|
|
|
root = ET.fromstring(response.read())
|
|
|
|
|
#print(root.tag)
|
|
|
|
|
#print(root.attrib)
|
|
|
|
|
name = ""
|
|
|
|
|
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)
|
|
|
|
|
#print(str(overlays))
|
|
|
|
|
print(len(overlays))
|
|
|
|
|
with open('./overlays.json', 'a') as f:
|
|
|
|
|
f.write(json.dumps({"repositories": dict(all=overlays, include=includes)}))
|
|
|
|
|
#f.close()
|
|
|
|
|
OverlayList = dict(all=overlays, include=includes)
|
|
|
|
|
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:
|
|
|
|
|
if f.endswith('.ebuild'):
|
|
|
|
|
|
|
|
|
|
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(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=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
|