From 03e97af6226722772fe968acd739fed9f93f88f9 Mon Sep 17 00:00:00 2001 From: serg-sg Date: Thu, 13 Jan 2022 15:14:44 +0400 Subject: [PATCH] Fixed indentation, formatting, grammar, minor bugs --- Makefile | 4 +- README.md | 56 ++- README.txt | 39 +- client.py | 4 +- config.json | 6 +- core/Untitled-1 | 1 - core/__pycache__/handler.cpython-36.pyc | Bin 3666 -> 0 bytes core/__pycache__/handler.cpython-38.pyc | Bin 3844 -> 0 bytes core/__pycache__/handler.cpython-39.pyc | Bin 5004 -> 0 bytes core/__pycache__/jwt.cpython-39.pyc | Bin 344 -> 0 bytes core/__pycache__/route.cpython-36.pyc | Bin 846 -> 0 bytes core/__pycache__/route.cpython-38.pyc | Bin 877 -> 0 bytes core/__pycache__/route.cpython-39.pyc | Bin 4493 -> 0 bytes core/handler.py | 370 +++++++++-------- core/jwt.py | 2 +- core/route.py | 267 ++++++------- recovers.txt | 4 +- server.py | 88 ++-- utils/GenRecovers.py | 20 +- utils/Untitled-1 | 397 ------------------- utils/__pycache__/GenRecovers.cpython-39.pyc | Bin 1105 -> 0 bytes utils/__pycache__/findfsdb.cpython-39.pyc | Bin 3809 -> 0 bytes utils/__pycache__/getUses.cpython-39.pyc | Bin 1029 -> 0 bytes utils/__pycache__/package.cpython-38.pyc | Bin 1270 -> 0 bytes utils/__pycache__/package.cpython-39.pyc | Bin 1268 -> 0 bytes utils/__pycache__/utils.cpython-36.pyc | Bin 3169 -> 0 bytes utils/__pycache__/utils.cpython-38.pyc | Bin 4181 -> 0 bytes utils/__pycache__/utils.cpython-39.pyc | Bin 4640 -> 0 bytes utils/findfsdb.py | 42 +- utils/getUses.py | 10 +- utils/package.py | 24 +- utils/utils.py | 307 +++++++------- 32 files changed, 620 insertions(+), 1021 deletions(-) delete mode 100644 core/Untitled-1 delete mode 100644 core/__pycache__/handler.cpython-36.pyc delete mode 100644 core/__pycache__/handler.cpython-38.pyc delete mode 100644 core/__pycache__/handler.cpython-39.pyc delete mode 100644 core/__pycache__/jwt.cpython-39.pyc delete mode 100644 core/__pycache__/route.cpython-36.pyc delete mode 100644 core/__pycache__/route.cpython-38.pyc delete mode 100644 core/__pycache__/route.cpython-39.pyc delete mode 100644 utils/Untitled-1 delete mode 100644 utils/__pycache__/GenRecovers.cpython-39.pyc delete mode 100644 utils/__pycache__/findfsdb.cpython-39.pyc delete mode 100644 utils/__pycache__/getUses.cpython-39.pyc delete mode 100644 utils/__pycache__/package.cpython-38.pyc delete mode 100644 utils/__pycache__/package.cpython-39.pyc delete mode 100644 utils/__pycache__/utils.cpython-36.pyc delete mode 100644 utils/__pycache__/utils.cpython-38.pyc delete mode 100644 utils/__pycache__/utils.cpython-39.pyc diff --git a/Makefile b/Makefile index 06b8b16..e56b183 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,11 @@ #!/bin/bash run: + #make cert && python server.py testToken: - python3 core/jwt.py + python core/jwt.py cert: openssl req -new -x509 -keyout localhost.pem -out localhost.pem -nodes -days 365 - diff --git a/README.md b/README.md index 5ca3ae4..6fad881 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,24 @@ -
-

GRUSS ALLE

- -ЧТО ЭТО ТАКОЕ: -

-Это проект WebGUI для пакетного менеджера Portage(Gentoo/Calculate-linux). -Этот продукт представляет из себя клиент-серверное приложение.

-Цели: -

-Предоставть удобный Гуй для portage, для таких утройств как Планшеты, смартфоны, -предаставить удаленный доступ к portage на клиенткой/удалеённой машине -Снизить порог вхождения для новых пользователей на дистрибутивах имеющих в свой основе пакетный менеджер Portage

- -КАК СОБРАТЬ И ЗАПУСТИТЬ: -
    -

    Нужен дистрибутив с пакетнным менеджером portage.

    -
  1. Скачайте дистрибутив сереного приложения проекта
  2. -
  3. Введите в терминале:
  4. - - git clone && cd webport - -
  5. Запустите make run
  6. -
  7. Скачайте клиент и запустите. -
  8. - -
      -
    • Откройте клиент (если вы он у вас собран)
    • -
    • Откройте в браузере localhost:8080 ну или IP адресс и порт указаный в файле config.json(если вы установили как WebClient)
    • -
    - -
-
+# Webport GRUSS ALLE + +## О ПРОЕКТЕ + +Это проект WebGUI для пакетного менеджера Portage (Gentoo/Calculate-linux). +Этот продукт представляет из себя клиент-серверное приложение. + +## ЦЕЛЬ ПРОЕКТА + +Предоставть удобный GUI-интерфейс для Portage, для таких утройств как планшеты, смартфоны, предоставить удалённый доступ к Portage на клиентской/удалённой машине, снизить порог вхождения для новых пользователей на дистрибутивах имеющих в своей основе пакетный менеджер Portage. + +## КАК СОБРАТЬ И ЗАПУСТИТЬ + +Нужен дистрибутив с пакетным менеджером Portage. +Скачайте дистрибутив серверного приложения проекта. + +1. Введите в терминале: +`git clone https://git.calculate-linux.org/serkus/webport.git && cd webport` +2. Запустите: +`make run` +3. Скачайте клиент и запустите: + +* Откройте клиент (если вы он у вас собран). +* Откройте в браузере страницу с адресом localhost:8080 или с IP-адресом и портом указанным в файле config.json (если вы установили как WebClient). diff --git a/README.txt b/README.txt index 47e34c8..8d50b7f 100644 --- a/README.txt +++ b/README.txt @@ -1,29 +1,34 @@
-

GRUSS ALLE

+

GRUSS ALLE

-ЧТО ЭТО ТАКОЕ: -

-Это проект Web GUI для пакетного менеджера Portage(Gentoo, Calcukate-linux). -Этот продукт предстовляет из себя клиент-серверное приложение.

-Цели: -

-Предоставть удобный Гуй portage, для таких утройств как Планшеты, смртфоны -Предоставить удаленный доступ к portag на клиенткой машине -Снизить порог вхождения для новых пользователей на дистрибутивах имеющих в свой основе пакетный менеджер portage

+О ПРОЕКТЕ: +

Это проект WebGUI для пакетного менеджера Portage (Gentoo/Calculate-linux). +Этот продукт представляет из себя клиент-серверное приложение.

+ЦЕЛЬ ПРОЕКТА: + +

Предоставть удобный GUI-интерфейс для Portage, для таких утройств как планшеты, смартфоны, +предоставить удалённый доступ к Portage на клиентской/удалённой машине, снизить порог вхождения для новых пользователей на дистрибутивах имеющих в своей основе пакетный менеджер Portage.

КАК СОБРАТЬ И ЗАПУСТИТЬ: +
    -

    Нужен диструтив использущий дастрибутив использующий portage.

    -
  1. Скачайте дистрибутив проекта
  2. +

    Нужен дистрибутив с пакетным менеджером Portage.

    +
  3. Скачайте дистрибутив серверного приложения проекта.
  4. Введите в терминале:
  5. - cd web_pоrt && - git clone https://github.com/brython-dev/brython.git ./view/static/js/brython - или скачайте Brython и раскакуйте его в ./view/static/js/brython + git clone https://git.calculate-linux.org/serkus/webport.git && cd webport -
  6. Запустите его ./start
  7. -
  8. Откройте в браузере localhost:8000
  9. +
  10. Запустите его ./start + + make run + +
  11. +
  12. Скачайте клиент и запустите: +
  13. Откройте клиент (если вы он у вас собран).
  14. +
  15. Откройте в браузере страницу с адресом localhost:8080 или с IP-адресом и + портом указанным в файле config.json (если вы установили как WebClient).
  16. +
\ No newline at end of file diff --git a/client.py b/client.py index f85318d..edaaeb9 100644 --- a/client.py +++ b/client.py @@ -21,7 +21,7 @@ class MainWindow(QMainWindow): self.Bryton = QTextStream(fd).readAll() fd.close() else: - self.Brython= '' + self.Brython = '' QNetworkProxyFactory.setUseSystemConfiguration(True) @@ -82,7 +82,6 @@ class MainWindow(QMainWindow): self.adjustTitle() self.view.page().mainFrame().evaluateJavaScript(self.Brython) - def highlightAllLinks(self): code = """$('a').each( function () { @@ -127,7 +126,6 @@ class MainWindow(QMainWindow): code = "$('embed').remove()" self.view.page().mainFrame().evaluateJavaScript(code) - if __name__ == '__main__': import sys diff --git a/config.json b/config.json index 0dcefdc..65a2cc1 100644 --- a/config.json +++ b/config.json @@ -1 +1,5 @@ -{"PORT": 8000, "Lang": "ru", "THEME": "default"} \ No newline at end of file +{ + "PORT": 8000, + "Lang": "ru", + "THEME": "default" +} \ No newline at end of file diff --git a/core/Untitled-1 b/core/Untitled-1 deleted file mode 100644 index e0e458c..0000000 --- a/core/Untitled-1 +++ /dev/null @@ -1 +0,0 @@ -https://youtu.be/dIv4TY7-gqM \ No newline at end of file diff --git a/core/__pycache__/handler.cpython-36.pyc b/core/__pycache__/handler.cpython-36.pyc deleted file mode 100644 index 824842583836783ef5fc73d11c07357705d44a5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3666 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 diff --git a/core/__pycache__/jwt.cpython-39.pyc b/core/__pycache__/jwt.cpython-39.pyc deleted file mode 100644 index 070cb87f1a17308adea0582ce4cdfbc378a9cd8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344 zcmYjMy-veG4E9|T2#887>`X{yATNLr5_^|2WjP%=i-t70$ahs?E)N1D55mrz35khU zV8Tu%=qLHJKg+*%GC2gs(ffz}Wd9{%7n;R2TR3NO;M5XIaM~r$P%6|eZ8V*s+CZ6L zipfSPu9?F$`{sI>Rl>VSSlqA$SsUR+IrS>_dRD_RupjmVR)jH>2hlg!nFT(+0ZHFT zKc~gQw^#(EW)+Gx-u0ehQF+4RVI42}r{UxtJ4-ftnr}zl%AicP$~&M);vqMtwRLCA sG$YCXWjouVF=aNk4Ovfh7yl2~M(H@=vh{AY#4EWj|By_vU_7Mi0Hap z$sghO(7C1JFHkY#UC@E>%HvskKHj|dcrfU_`||DmqlmHZ?A8+KKgVsKpixY5!!|tU zoczc{n>dey9~+U2S4;_&+%T2scpvA9if3$;{=iH&;y#->SZyy}zd`@#MPc>n`T5&3 zeN}7gPK&KF8m4oK{k;%N)B7Phn&n)vJW^amH!P1;tOTCePo;P!s)M~UpPrSq(=g|4 z5jv^POWbyd=7L=_iF2UEdYBVUJsO`@(yXlWF-V61h1F*9l|dI%emsFH<;l(Tq7{ zE}-Mnk?^7_+|nnZnHLUf?UO}etR8X5FgKuVOpksCXby0Ubn|2$4dsn4X`78@<4?@75SRc*-cOLi=Q$RovW znLr4QNTLKnGMXh4NI?XD1DyXB2En Mhd%G~j1P~00Zm=G_W%F@ diff --git a/core/__pycache__/route.cpython-38.pyc b/core/__pycache__/route.cpython-38.pyc deleted file mode 100644 index 8b6c77b0154042f2c49c46e82f2c9a9a064d222a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 877 zcmZ`%J#X7E5G6%QRvgE5mK5mR#Vuehor1?3#@lXa?6@DJ#reTmCY7^pFVG&%4nGN99?9;Z7hMX;wE|<}!w}sM__zOsk z(G6Qq(DBHWN3NF9SMiPA@y9qx_lCF4BWP6|!E9m8%RNLFSEx0z=sX}sIt~&{p;7zJ zHu?{UVXrE{8C8QlB%q`gi#CHT$lsUaVG>fM*2T&w6}n2TN?lv>drDo^g>7%3hw06; zftcKBMp8mU3jN$9O+!k`Q<)|}XV@WHlt2i={@nX&gsgrs0D?~B(v|Bb?q5Yi`l{xy!aoi*=T}yIepPn2wb)>{{g=~`VVmN%t=^`^{01R*eT-^KJ2P#ujMF$W6 z%v7q=j`KhI8GJnatl-mMq7aT?k+aXrj8U6MeBUj*w(Uk<*%O}dBY!_v&UO3p<@~3P z$cg+*N95bQ9N;ey1^gAH+jh$Z;chym;wjd4O3VbCiK^9i9zH_*;>Q&&*SEGFKatOy zQYY(`x`?FOIAtmAYdf-DQI#ZCo3g58qPOB_vR-hoiYjGqbT*w6wo$?nwM^_f+W5NJkjeyMSgY5PFf4K7X&G&soT82N2{VN-tVR{B!|=rU z?#9w?yf2ruRL`1v=}>;%h*h#wjg?%o6BZjUQ~@kZ5HF-ChXt%PlXAV7?NTL{vxnHG z<9vqCP7%(gqw@Gu(7sc06~V!{O%)k0ZY0`vr^SpNsR%)o+OEo4#qMtCu4b~va8E{` z5bZLGBSx}0aMb&P9YOY&seLnHd%WWcMlw6%kRjVd-3C*2kFY`PmAsAb*hi<|<56_V zlBejzCf9)e_qCd(A73}3T5^)|pLXSUQ^<@S!P~CY#W_sUlPDZkWRrLU9`M#g_cTNS z06=)=`&Hn5nJ;t1^nhaA0fNOOXgw4h2bB zQzKxLZs6L!Dt?C^lIIFO{T~z=b}eq5aomc$2!P+5D2O8J{0?D!LQKA7h{Y4jDu zjF?4T6z9Yo>IrdPTtGc3UK1BlPla>wj42Ivgn$p4O7xTUBf)>&Zg$q9IGJnbNW@LM3%0u4`!~?C-9fZ6;_aZNr$Y zDGeaN+Rs!7f6$x$OPoww2MiS2m$&A7(p(&(eYI@gz$%HAUz^#Qx7jvaQRqVA-f?E( zCEvI@QO0Xjl3kPU@@ZTZCML)Zq~5_|qfF;S971^S6SvmSxEEP#w$EoeJjNj5+baJ< z%U}mSHz5z{f=#NuHam7n@g1Mko#aMG+q??`zR|h?2Cl0#7ThX6#u1jUzoUy?y)75f zhQ;Qicn5IUFk_xtR4)Fmrn}*E6r@G67Q3Z>fTc2_4sg*Y7?Ue8 zZn?ORM(Yx!>2!KvB^x?sPhm%%llU+0F@V+jE27B}prHqT%yQ0Gpt+s;Ey&mZV(Y=e z2SBBNxLu1RDpgCQ$$$I;!T#YRMY1))j!X_JQB#`27Cg+FQn51r*Fvt(YKjZ3G81aty z5t5{T08!8Xihd8{4^aCU{}SW=$aoIp+ZfMdyaBZ3$h0xj>Ex+Z57JgQvsvfU*1=4^OFPPG0m-tKA@ce|?3X#m^8>KR z#>cSXW}IF}1J>Ki;W~^gIt$u8erx~2`A$4_1LW#$DlE5j*t0xZYOQzvjNvrqA`$9e zW30u&n(zE%wod;IwiLO}v$#+z82AgmAK~Hd5Dx^fUf4LmPl8mo!*RPoJ&%B){s>{Y z0)fHiI0zyTmY3J<=?3VqIjgBTcGE2m*2@ajI%tyA$^DpsfFAs9K zeFed6;MvzjzZdv{uZX@>G`too(zBV^O_IhUZsG@0DKZGPfTHZ~9VXUS7;jI diff --git a/core/handler.py b/core/handler.py index 6f63b11..80bff8d 100755 --- a/core/handler.py +++ b/core/handler.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: UTF-8 -*- import json -#from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer +# from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer from http.server import BaseHTTPRequestHandler import logging import os @@ -9,200 +9,198 @@ from utils.utils import get_list_overlays, load_config, write_config, sort_insta from utils.package import search from utils.findfsdb import on_find from core.route import Router +import logging from io import BytesIO #repl = '\n' def main(): - try: - with open('./pkgs.json', 'tr') as fn: - data = fn.read() - pkg_list = json.loads(data) - print(pkg_list) - return json.dumps(pkg_list) - except Exception(e): - print(e) - return "404" + try: + with open('./pkgs.json', 'tr') as fn: + data = fn.read() + pkg_list = json.loads(data) + print(pkg_list) + return json.dumps(pkg_list) + except Exception(e): + print(e) + return "404" def set_settings_app(params): - config = load_config() - #param = self.path.replace("/?st_app=", "") - list_param = param.split(',') - print(list_param) - for i in list_param: - if i.startswith('port'): - port = int(i.split('=')[1]) - elif i.startswith('Lang'): - Lang = i.split('=')[1] - - write_config(port, Lang) - print(config) - print(param) + config = load_config() + # param = self.path.replace("/?st_app=", "") + list_param = param.split(',') + print(list_param) + for i in list_param: + if i.startswith('port'): + port = int(i.split('=')[1]) + elif i.startswith('Lang'): + Lang = i.split('=')[1] + + write_config(port, Lang) + print(config) + print(param) def search(pkg): - #param = self.path.replace("/find?pkg=", "") #request['params']['name'] - Pk_list = [] - Search_result = {} - if len(param.split('/')) == 2: - param = param.split('/')[1] - P_list = on_find(param) - print(p_list) - if len(P_list) == 0: - print("Never Found") - self.r_t = str(json.dumps({"Package_result": p_list})) - else: - for p in p_list: - print(p) - if len(param.split("/")) == 2: - Pk_list.append(search(param.split("/")[1])) - else: - Pk_list.append(search(param)) - #print(pk) - Search_result = {"Package_result": Pk_list} - #self.r_t = str(json.dumps(search_result)) - return str(json.dumps(Search_result)) - #self.r_t = json.dumps(pkg_list) -def get_settings_app(): - return str(json.dumps(load_config())) + # param = self.path.replace("/find?pkg=", "") #request['params']['name'] + Pk_list = [] + Search_result = {} + if len(param.split('/')) == 2: + param = param.split('/')[1] + P_list = on_find(param) + print(p_list) + if len(P_list) == 0: + print("Never Found") + self.r_t = str(json.dumps({"Package_result": p_list})) + else: + for p in p_list: + print(p) + if len(param.split("/")) == 2: + Pk_list.append(search(param.split("/")[1])) + else: + Pk_list.append(search(param)) + # print(pk) + Search_result = {"Package_result": Pk_list} + # self.r_t = str(json.dumps(search_result)) + return str(json.dumps(Search_result)) + # self.r_t = json.dumps(pkg_list) +def get_settings_app(): + return str(json.dumps(load_config())) class Handler(BaseHTTPRequestHandler): - def _set_response(self): - self.send_response(200) - self.send_header['Access-Control-Allow-Origin', '*'] - self.send_header['Access-Control-Allow-Methods', 'GET'] - self.send_header['Access-Control-Allow-Headers', 'X-Requested-With,content-type'] - #self.send_header['Access-Control-Allow-Credentials', true] - self.end_headers() - - - def get_data(self): - #length = int(self.headers['content-length']) - data = self.rfile.read(length) - - def do_HEAD(self): - print("do_HEAD:\n") - print(str(self.path), str(self.headers)) - #self.send_header(['Access-Control-Allow-Origin', '*'], - #self.send_header(['Access-Control-Allow-Methods', 'GET'], - #self.send_header(['Access-Control-Allow-Headers', 'X-Requested-With,content-type']) - #self.send_header(['Access-Control-Allow-Credentials', true]) - #self.end_headers() - - def do_REQUEST(self): - print("do_REQUEST:\n") - print(str(self.path), str(self.headers)) - self.r_t = str(self.path), str(self.headers) - #return self.response() - - def do_GET(self): - print("do_GET:\n") - print(str(self.path), str(self.headers)) - - - #print(Router.parse_url(self)) - #print("data:\t" + self.rfile.read()) - #request = Router.parse_url(self) - self.send_response(200) - self.p_list = [] - self.r_t = "" - #length = int(self.headers['content-length']) - #self.send_header(['Access-Control-Allow-Origin', '*'], - #self.send_header(['Access-Control-Allow-Methods', 'GET'], - #self.send_header(['Access-Control-Allow-Headers', 'X-Requested-With,content-type']) - #self.send_header(['Access-Control-Allow-Credentials', true]) - #self.end_headers() - - #self.end_headers() - - if self.path =="/": - #print("data:\t" + self.get_data()) - """ - with open('./views/index.html', 'tr') as f: - self.r_t=f.read() - print(self.client_address) - """ - self.r_t = main() - self.response() - elif self.path == '/main': - #print(self.rfile.read()) - with open("./README.txt", 'r') as f: - self.r_t = str(f.read()) - #self.r_t = s - elif self.path == '/ovelays': - overlays = get_list_overlays() - #print(ovls) - if overlays: # == "": - overlays ="Error" - - self.r_t=json.dumps({"repositories": overlays}) - - elif self.path == "": - with open('./favicon.png', 'rb') as f: - self.r_t = f.read() - - elif self.path == '/logo.png': - pass - - elif self.path.startswith("/?st_app="): - config = load_config() - param = self.path.replace("/?st_app=", "") - list_param = param.split(',') - print(list_param) - for i in list_param: - if i.startswith('port'): - port = int(i.split('=')[1]) - elif i.startswith('Lang'): - Lang = i.split('=')[1] - - write_config(port, Lang) - print(config) - print(param) - - elif self.path.startswith("/find?pkg="): - param = self.path.replace("/find?pkg=", "") #request['params']['name'] - pk_list = [] - search_result = {} - if len(param.split('/')) == 2: - param = param.split('/')[1] - p_list = on_find(param) - print(p_list) - if len(p_list) == 0: - print("Never Found") - self.r_t = str(json.dumps({"Package_result": p_list})) - else: - for p in p_list: - print(p) - if len(param.split("/")) == 2: - pk_list.append(search(param.split("/")[1])) - else: - pk_list.append(search(param)) - #print(pk) - search_result = {"Package_result": pk_list} - self.r_t = str(json.dumps(search_result)) - - elif self.path == "/get_settings_app": - - self.r_t = str(json.dumps(load_config())) - - elif self.path == '/get_portage': - - #self.r_t = str(sort_inatll_pkg()) - self.r_t = str(json.dumps(scan_config_portage())) - - else: - self.send_response(404) - - self.end_headers() - print(str(self.client_address[0]) +"\t" + str(404)) + def _set_response(self): + self.send_response(200) + self.send_header['Access-Control-Allow-Origin', '*'] + self.send_header['Access-Control-Allow-Methods', 'GET'] + self.send_header['Access-Control-Allow-Headers', 'X-Requested-With,content-type'] + # self.send_header['Access-Control-Allow-Credentials', true] + self.end_headers() + + def get_data(self): + length = int(self.headers['content-length']) + data = self.rfile.read(length) + + def do_HEAD(self): + print("do_HEAD:\n") + print(str(self.path), str(self.headers)) + # self.send_header(['Access-Control-Allow-Origin', '*'], + # self.send_header(['Access-Control-Allow-Methods', 'GET'], + # self.send_header(['Access-Control-Allow-Headers', 'X-Requested-With,content-type']) + # self.send_header(['Access-Control-Allow-Credentials', true]) + # self.end_headers() + + def do_REQUEST(self): + print("do_REQUEST:\n") + print(str(self.path), str(self.headers)) + self.r_t = str(self.path), str(self.headers) + # return self.response() + + def do_GET(self): + print("do_GET:\n") + print(str(self.path), str(self.headers)) + + # print(Router.parse_url(self)) + # print("data:\t" + self.rfile.read()) + # request = Router.parse_url(self) + self.send_response(200) + self.p_list = [] + self.r_t = "" + # length = int(self.headers['content-length']) + # self.send_header(['Access-Control-Allow-Origin', '*'], + # self.send_header(['Access-Control-Allow-Methods', 'GET'], + # self.send_header(['Access-Control-Allow-Headers', 'X-Requested-With,content-type']) + # self.send_header(['Access-Control-Allow-Credentials', true]) + # self.end_headers() + + if self.path == "/": + # print("data:\t" + self.get_data()) + """ + with open('./views/index.html', 'tr') as f: + self.r_t = f.read() + print(self.client_address) + """ + self.r_t = main() + self.response() + elif self.path == '/main': + #print(self.rfile.read()) + with open("./README.txt", 'r') as f: + self.r_t = str(f.read()) + #self.r_t = s + elif self.path == '/ovelays': + overlays = get_list_overlays() + #print(ovls) + if overlays: # == "": + overlays = "Error" + + self.r_t = json.dumps({"repositories": overlays}) + + elif self.path == "": + with open('./favicon.png', 'rb') as f: + self.r_t = f.read() + + elif self.path == '/logo.png': + pass + + elif self.path.startswith("/?st_app="): + config = load_config() + param = self.path.replace("/?st_app=", "") + list_param = param.split(',') + print(list_param) + for i in list_param: + if i.startswith('port'): + port = int(i.split('=')[1]) + elif i.startswith('Lang'): + Lang = i.split('=')[1] + + write_config(port, Lang) + print(config) + print(param) + + elif self.path.startswith("/find?pkg="): + param = self.path.replace("/find?pkg=", "") #request['params']['name'] + pk_list = [] + search_result = {} + if len(param.split('/')) == 2: + param = param.split('/')[1] + p_list = on_find(param) + print(p_list) + if len(p_list) == 0: + print("Never Found") + self.r_t = str(json.dumps({"Package_result": p_list})) + else: + for p in p_list: + print(p) + if len(param.split("/")) == 2: + pk_list.append(search(param.split("/")[1])) + else: + pk_list.append(search(param)) + #print(pk) + search_result = {"Package_result": pk_list} + self.r_t = str(json.dumps(search_result)) + + elif self.path == "/get_settings_app": + + self.r_t = str(json.dumps(load_config())) + + elif self.path == '/get_portage': + + #self.r_t = str(sort_inatll_pkg()) + self.r_t = str(json.dumps(scan_config_portage())) + + else: + self.send_response(404) + + self.end_headers() + print(str(self.client_address[0]) +"\t" + str(404)) # Send the html message - #self.wfile.write(bytes(self.r_t, "utf-8")) - def response(self): - if self.r_t !=="": - #self._set_response() - try: - return self.wfile.write(BytesIO(self.r_t).getvalue()) - except TypeError: - #print("TypeError") - return self.wfile.write(bytes(self.r_t, 'UTF-8')) - else: - self.send_response(404) + # self.wfile.write(bytes(self.r_t, "utf-8")) + + def response(self): + if self.r_t != "": + #self._set_response() + try: + return self.wfile.write(BytesIO(self.r_t).getvalue()) + except TypeError: + #print("TypeError") + return self.wfile.write(bytes(self.r_t, 'UTF-8')) + else: + self.send_response(404) diff --git a/core/jwt.py b/core/jwt.py index 0f2ad5e..fba6b69 100644 --- a/core/jwt.py +++ b/core/jwt.py @@ -5,7 +5,7 @@ import secrets def genaratorSecretsToken(): return secrets.token_hex(4096) -if __name__ =='__main__': +if __name__ == '__main__': Token = genaratorSecretsToken() print(Token) #return Token \ No newline at end of file diff --git a/core/route.py b/core/route.py index 82dc85f..4d7c63c 100644 --- a/core/route.py +++ b/core/route.py @@ -8,144 +8,141 @@ from .jwt import genaratorSecretsToken import json class Router(): - def __init__(self): - routes = self.setRoutes() - super().__init__(self.setRoutes) - def add(self, url, **opts): - pass - - def find(self, url, handler): - if url in self.routes: - if "?" in url[-1]: - params.url.split("?") - return handler(params) - else: - return handler() - else: - return 1 - + def __init__(self): + routes = self.setRoutes() + super().__init__(self.setRoutes) + + def add(self, url, **opts): + pass + + def find(self, url, handler): + if url in self.routes: + if "?" in url[-1]: + params.url.split("?") + return handler(params) + else: + return handler() + else: + return 1 class RouterOld(BaseHTTPRequestHandler): - #def __init__(self): - #self.P_list = [] - #self.Response = "" - #self.Routes =[] - #self.r_t ="" - #length = int(self.headers['content-length']) - # Not work code - #self.send_header['Access-Control-Allow-Origin', '*'] - #self.send_header['Access-Control-Allow-Methods', 'GET'] - #self.send_header['Access-Control-Allow-Headers', 'X-Requested-With,content-type'] - #self.send_header['Access-Control-Allow-Credentials', true] - #self.end_headers() - #super().__init__(self, self.setRoutes()) - - def _set_response(self): - self.send_response(200) - self.send_header['Access-Control-Allow-Origin', '*'] - self.send_header['Access-Control-Allow-Methods', 'GET'] - self.send_header['Access-Control-Allow-Headers', 'X-Requested-With,content-type'] - #self.send_header['Access-Control-Allow-Credentials', true] - self.end_headers() - def do_GET(self): - #logging.info("GET request,\nPath: %s\nHeaders:\n%s\n", str(self.path), str(self.headers)) - #print(str(self.path), str(self.headers)) - self.r_t = str(self.path), str(self.headers) - return self.response() - - def do_POST(self): - - logging.info("GET request,\nPath: %s\nHeaders:\n%s\n", str(self.path), str(self.headers)) - self._set_response() - print(str(self.path), str(self.headers)) - - def do_HEAD(self): - pass - def do_REQUEST(self): - print("do_REQUEST:\n") - print(str(self.path), str(self.headers)) - self.r_t = str(self.path), str(self.headers) - return self.response() - - def _setRoutes(self, ListRoutes =[]): - self.Routes = ListRoutes - - def response(self): - try: - return self.wfile.write(BytesIO(self.r_t).getvalue()) - except TypeError: - #print("TypeError") - return self.wfile.write(bytes(self.r_t, 'UTF-8')) - - - def route(self, metod, url, handler): - print(url) - - if self.path in self.Routes.url: - if metod == 'GET' or metod == 'get': - self.get(url=url,handler=handler) - #return true - elif metod == 'POST' or metod == 'post': - self.post(url=url, handler=handler) - elif metod == 'HEAD' or metod == 'head': - self.head() - else: - self.r_404() - else: - return self.r_404() - #return false - def get(self, url, handler): - #do_GET() - return url - - def post(self, url, handler): - #do_POST() - return url - - def head(self): - #do_HEAD() - pass - - def __isAuth(selt, auth): - pass - - def getToken(self, authResult): - print(self.client_address) - #if self.__isAuth() is True: - genaratorSecretsToken() - #else: - # self.r_403() - - def parse_url(request): - print("request.rfile:\t" + str(request.rfile.read())) - #return json.loads(str(request.rfile.read())) - - def r_403(self): - self.send_response(403) - self.end_headers() - print(self.client_address) - - def r_404(self): - self.send_response(404) - self.end_headers() - print(self.client_address) - - def r_static(self): - if os.path.exists('./views/' + self.path): - self.send_response(200) - self.end_headers() - with open('./views/' + self.path, 'tr') as f: - self.Response=f.read() - - else: - self.send_response(404) - self.end_headers() - - - - + # def __init__(self): + # self.P_list = [] + # self.Response = "" + # self.Routes = [] + # length = int(self.headers['content-length']) + # Not work code + # self.send_header['Access-Control-Allow-Origin', '*'] + # self.send_header['Access-Control-Allow-Methods', 'GET'] + # self.send_header['Access-Control-Allow-Headers', 'X-Requested-With,content-type'] + # self.send_header['Access-Control-Allow-Credentials', true] + # self.end_headers() + # super().__init__(self.setRoutes) + + def _set_response(self): + self.send_response(200) + self.send_header['Access-Control-Allow-Origin', '*'] + self.send_header['Access-Control-Allow-Methods', 'GET'] + self.send_header['Access-Control-Allow-Headers', 'X-Requested-With,content-type'] + #self.send_header['Access-Control-Allow-Credentials', true] + self.end_headers() + + def do_GET(self): + # logging.info("GET request,\nPath: %s\nHeaders:\n%s\n", str(self.path), str(self.headers)) + # print(str(self.path), str(self.headers)) + self.r_t = str(self.path), str(self.headers) + return self.response() + + def do_POST(self): + logging.info("GET request,\nPath: %s\nHeaders:\n%s\n", str(self.path), str(self.headers)) + self._set_response() + print(str(self.path), str(self.headers)) + + def do_HEAD(self): + pass + + def do_REQUEST(self): + print("do_REQUEST:\n") + print(str(self.path), str(self.headers)) + self.r_t = str(self.path), str(self.headers) + return self.response() + + def _setRoutes(self, ListRoutes = []): + self.Routes = ListRoutes + + def response(self): + try: + return self.wfile.write(BytesIO(self.r_t).getvalue()) + except TypeError: + #print("TypeError") + return self.wfile.write(bytes(self.r_t, 'UTF-8')) + + def route(self, metod, url, handler): + print(url) + metod = metod.lower() + if self.path in self.Routes.url: + #if metod == 'GET' or metod == 'get': + if metod == 'get': + self.get(url = url, handler = handler) + #return true + elif metod == 'post': + self.post(url = url, handler= handler) + elif metod == 'head': + self.head() + else: + self.r_404() + else: + return self.r_404() + #return false + + def get(self, url, handler): + #do_GET() + return url + + def post(self, url, handler): + #do_POST() + return url + + def head(self): + #do_HEAD() + pass + + def __isAuth(selt, auth): + pass + + def getToken(self, authResult): + print(self.client_address) + #if self.__isAuth() is True: + genaratorSecretsToken() + #else: + # self.r_403() + + def parse_url(request): + print("request.rfile:\t" + str(request.rfile.read())) + #return json.loads(str(request.rfile.read())) + + def r_403(self): + self.send_response(403) + self.end_headers() + print(self.client_address) + + def r_404(self): + self.send_response(404) + self.end_headers() + print(self.client_address) + + def r_static(self): + if os.path.exists('./views/' + self.path): + self.send_response(200) + self.end_headers() + with open('./views/' + self.path, 'tr') as f: + self.Response = f.read() + else: + self.send_response(404) + self.end_headers() + """ - def do_GET(self): + def do_GET(self): pass def do_POST(self): diff --git a/recovers.txt b/recovers.txt index 096894f..e80251e 100644 --- a/recovers.txt +++ b/recovers.txt @@ -18,10 +18,10 @@ obs-studio kdenlive mplayer smplayer -[web-сервер] +[Web-сервер] nginx apache -[dev-util] +[Dev-util] pycharm-community [графика] gimp diff --git a/server.py b/server.py index f97ccf1..8577cbe 100755 --- a/server.py +++ b/server.py @@ -1,56 +1,56 @@ -# -*- coding: UTF-8 -*- #!/usr/bin/env pyton3 +# -*- coding: UTF-8 -*- '__autor__' =='serkus' -from http.server import HTTPServer, SimpleHTTPRequestHandler, BaseHTTPRequestHandler +from http.server import HTTPServer, SimpleHTTPRequestHandler, BaseHTTPRequestHandler import logging from core.handler import Handler as Handler -import os, sys, json, ssl +import os, sys, json, ssl from core.route import Router #PORT_NUMBER = 8000 from utils.findfsdb import create_db from utils.utils import load_config def https_server(): - https_server_address = ('', 4443) - httpd = HTTPServer(https_server_address, SimpleHTTPRequestHandler) - httpd.socket = ssl.wrap_socket(httpd.socket, - server_side=True, - certfile='localhost.pem', - ssl_version=ssl.PROTOCOL_TLS) - httpd.serve_forever() + https_server_address = ('', 4443) + httpd = HTTPServer(https_server_address, SimpleHTTPRequestHandler) + httpd.socket = ssl.wrap_socket(httpd.socket, + server_side = True, + certfile = 'localhost.pem', + ssl_version = ssl.PROTOCOL_TLS) + httpd.serve_forever() def run(): - create_db() - config = load_config() - if len(config) ==0: - print("конфиг пустой") - try: - print(config['PORT']) - except KeyError: - print("KeyError") - except KeyboardInterrupt: - pass - # Handler) - server = HTTPServer(('', config['PORT']),Handler) - #print ('Started HTTP Server on port ' , config['PORT']) - - server.socket = ssl.wrap_socket(server.socket, - server_side=True, - certfile='localhost.pem', - ssl_version=ssl.PROTOCOL_TLS) - print ('Started HTTP Server on port ' , config['PORT']) - print("https://localhost:" + str(config['PORT'])) - - try: - server.serve_forever() - except KeyboardInterrupt: - pass - httpd.server_close() - logging.info('Stopping httpd...\n') - -if __name__ == '__main__': - #https_server() - run() - https_server() - - \ No newline at end of file + create_db() + config = load_config() + if len(config) == 0: + print("Файл конфигурации пустой.") + try: + print(config['PORT']) + except KeyError: + print("KeyError") + except KeyboardInterrupt: + pass + + # server = HTTPServer(('', config['PORT']), Router) + server = HTTPServer(('', config['PORT']), Handler) + # print('Started HTTP Server on port', config['PORT']) + + server.socket = ssl.wrap_socket(server.socket, + server_side = True, + certfile = 'localhost.pem', + ssl_version = ssl.PROTOCOL_TLS) + print('Started HTTP Server on port', config['PORT']) + print("https://localhost:8000") + + try: + server.serve_forever() + except KeyboardInterrupt: + pass + server.server_close() + logging.info('Stopping httpd...\n') + +if __name__ == '__main__': + #https_server() + run() + https_server() + diff --git a/utils/GenRecovers.py b/utils/GenRecovers.py index 81710f0..211ced3 100644 --- a/utils/GenRecovers.py +++ b/utils/GenRecovers.py @@ -5,26 +5,27 @@ from utils.package import search from utils.getUses import get_local_USE def ScanRecoverFile(): - ScanResult =[] + ScanResult = [] if os.path.exists('./recovers.txt'): with open('./recovers.txt') as f: - ScanResult =f.read().split("\n") + ScanResult = f.read().split("\n") + res = GenRecoversFun(ScanResult) else: - print("Файла со список рекомедации нейден") - res = GenRecoversFun(ScanResult) + print("Файл со списком рекомедаций не найден.") + res = {} return res def GenRecoversFun(Reclist): - result ={} - cat= "" + result = {} + category = "" useDis = get_local_USE() for r in Reclist: if r.startswith("["): - cat = r.replace("[", "") and r.replace("]", "") - result[r.replace("[", "") and r.replace("]", "")]= [] + category = r.replace("[", "") and r.replace("]", "") + result[r.replace("[", "") and r.replace("]", "")] = [] else: try: - result[cat].append(search(r)) + result[category].append(search(r)) for u in search(r)['USE']: if u in useDis: print("u " + u +"\t"+ useDis[u]) @@ -32,6 +33,5 @@ def GenRecoversFun(Reclist): print(e) return result - if __name__ == '__main__': ScanRecoverFile() diff --git a/utils/Untitled-1 b/utils/Untitled-1 deleted file mode 100644 index 26f8e4b..0000000 --- a/utils/Untitled-1 +++ /dev/null @@ -1,397 +0,0 @@ -3dfx Enable support for Voodoo chipsets, also called as 3DFX and TDFX 22 -3dnow Adds support for 3dnow multimedia processor instructions 129 -a52 Enables support for decoding ATSC A/52 streams used in DVD 39 -aac Enables support for MPEG-4 AAC Audio 166 -aalib Adds support for media-libs/aalib (ASCII-Graphics Library) 108 -accessibility Adds support for accessibility (eg 'at-spi' library) 86 -acl Adds support for Access Control Lists 247 -acpi Adds support for Advanced Configuration and Power Interface 145 -adabas Adds support for the Adabas database engine 15 -adns Adds support for the adns DNS client library 35 -afs Adds OpenAFS support (distributed file system) 47 -aim Enable AIM IM protocol support 1 -alsa Adds support for media-libs/alsa-lib (Advanced Linux Sound Architecture) 1287 -altivec Adds support for optimizations for G4 and G5/ppc970 processors 441 -ao Use libao audio output library for sound playback 75 -apache2 Add Apache2 support 106 -apm Adds APM (Advanced Power Management) support 45 -aqua Include support for the Aqua / Carbon GUI 4451 -atm Enable Asynchronous Transfer Mode protocol support 43 -audiofile Adds support for libaudiofile where applicable 42 -avahi Add avahi/Zeroconf support 278 -bash-completion Enable bash-completion support 606 -bcmath Adds support for libbcmath 15 -berkdb Adds support for sys-libs/db (Berkeley DB for MySQL) 387 -bidi Enables bidirectional language support 71 -bindist Flag to enable or disable options for prebuilt (GRP) packages (eg. due to licensing issues) 206 -birdstep Adds support for the Birdstep Database Server 15 -blas Adds support for the virtual/blas numerical library 29 -bluetooth Enables Bluetooth Support 265 -bootstrap !!internal use only!! DO NOT SET THIS FLAG YOURSELF!, used during original system bootstrapping [make stage2] 220 -boundschecking Adds the bounds checking patch by Haj Ten Brugge, this will DISABLE the hardened PIE+SSP patches 7 -branding Enable Gentoo specific branding 54 -bsf Enable support for Apache Bean Scripting Framework (dev-java/bsf) 10 -build !!internal use only!! DO NOT SET THIS FLAG YOURSELF!, used for creating build images and the first half of bootstrapping [make stage1] 1025 -bzip2 Use the bzlib compression library 273 -cairo Enable support for the cairo graphics library 212 -calendar Adds support for calendars (not using mcal!) 35 -canna Adds support for the Canna kana to kanji conversion engine 25 -caps Use Linux capabilities library to control privilege 203 -cdb Adds support for the CDB database engine from the author of qmail 42 -cdda Adds Compact Disk Digital Audio (Standard Audio CD) support 75 -cddb Access cddb servers to retrieve and submit information about compact disks 60 -cdinstall Copies files from the CD rather than asking the user to copy them, mostly used with games 64 -cdparanoia Enables cdparanoia (audio CD ripper) support 41 -cdr Adds support for CD writer hardware 45 -cgi Add CGI script support 66 -chasen Enable chasen (Japanese Morphological Analysis System) support 9 -cjk Adds support for Multi-byte character languages (Chinese, Japanese, Korean) 138 -clamav Adds support for Clam AntiVirus software (usually with a plugin) 38 -coreaudio Build the CoreAudio driver on Mac OS X systems 29 -cracklib Support for cracklib strong password checking 44 -crypt Add support for encryption -- using mcrypt or gpg where applicable 499 -cscope Enables cscope interface -- in vim for example 28 -css Enables reading of encrypted DVDs 23 -ctype Enables ctype functions 9 -cups Add support for CUPS (Common Unix Printing System) 456 -curl Adds support for client-side URL transfer library 287 -curlwrappers Adds support for using curl in streams 13 -custom-cflags Build with user-specified CFLAGS (unsupported) 350 -cvs Enable CVS (Concurrent Versions System) integration 67 -cxx Builds support for C++ (bindings, extra libraries, code generation, ...) 77 -db2 Enables support for IBM DB2 database server 18 -dbase Adds support for dbase file format 13 -dbi Enable dev-db/libdbi (database-independent abstraction layer) support 41 -dbm Adds support for generic DBM databases 16 -dbmaker Adds support for dbmaker database server 15 -dbus Enable dbus support for anything that needs it (gpsd, gnomemeeting, etc) 871 -dbx Adds database abstraction layer 13 -debug Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see http://www.gentoo.org/proj/en/qa/backtraces.xml 13768 -dedicated Adds support for dedicated game servers (some packages do not provide clients and servers at the same time) 354 -dga Adds DGA (Direct Graphic Access) support for X 88 -directfb Adds support for DirectFB layer (library for FB devices) 161 -djvu support DjVu, a PDF-like document format esp. suited for scanned documents 46 -doc Adds extra documentation (API, Javadoc, etc) 12028 -dri Enable direct rendering: used for accelerated 3D and some 2D, like DMA 53 -dts Enables DTS Coherent Acoustics decoder support 25 -dv Enables support for a codec used by many camcorders 54 -dvb Adds support for DVB (Digital Video Broadcasting) 68 -dvd Adds support for DVDs 64 -dvdr Adds support for DVD writer hardware (e.g. in xcdroast) 31 -eds Enables support for Evolution-Data-Server (EDS) 141 -emacs Adds support for GNU Emacs 559 -emboss Adds support for the European Molecular Biology Open Software Suite 24 -empress Adds support for the Empress database server 15 -empress-bcs Adds local access support for the Empress database server 15 -encode Adds support for encoding of audio or video files 69 -enscript Add enscript support to colourize code stored in the repository 16 -esd Adds support for media-sound/esound (Enlightened Sound Daemon) 488 -esoob Adds support for Easysoft OOD database 15 -evo Adds support for mail-client/evolution 32 -examples Install examples, usually source code 2686 -exif Adds support for reading EXIF headers from JPEG and TIFF images 186 -expat Enable the use of dev-libs/expat for XML parsing 92 -fam Enable FAM (File Alteration Monitor) support 173 -fastcgi Add support for the FastCGI interface 77 -fbcon Adds framebuffer support for the console, via the kernel 184 -ffmpeg Enable ffmpeg-based audio/video codec support 320 -fftw Use FFTW library for computing Fourier transforms 163 -firebird Adds support for the Firebird relational database 115 -firefox Build against Firefox instead of Seamonkey/Mozilla 22 -flac Adds support for FLAC: Free Lossless Audio Codec 343 -flatfile Adds dbm support for flat files 17 -fltk Adds support for the Fast Light Toolkit gui interface 59 -fontconfig Support for configuring and customizing font access via media-libs/fontconfig 102 -foomaticdb Adds support for the foomatic printing driver database 19 -fortran Adds support for fortran (formerly f77) 287 -freetds Adds support for the TDS protocol to connect to MSSQL/Sybase databases 47 -freewnn Adds support for FreeWnn kana to kanji conversion engine 15 -frontbase Adds support for the frontbase sql server 15 -ftp Adds FTP (File Transfer Protocol) support 70 -gcj Enable building with gcj (The GNU Compiler for the Javatm Programming Language) 215 -gd Adds support for media-libs/gd (to generate graphics on the fly) 119 -gd-external Use the external version of gd rather than the bundled one (possibly dangerous) 15 -gdbm Adds support for sys-libs/gdbm (GNU database libraries) 267 -geoip Add geoip support for country and city lookup based on IPs 75 -ggi Adds support for media-libs/libggi (non-X video api/drivers) 79 -gif Adds GIF image support 215 -gimp Build a plugin for the GIMP 50 -ginac Adds sci-mathematics/ginac (symbolic math) support 4 -glut Build an OpenGL plugin using the GLUT library 29 -gmp Adds support for dev-libs/gmp (GNU MP library) 135 -gnome Adds GNOME support 1085 -gnome-keyring Enable support for storing passwords via gnome-keyring 171 -gnuplot Enable support for gnuplot (data and function plotting) 44 -gnustep Adds integration with GNUstep environment 8 -gnutls Adds support for net-libs/gnutls (TLS 1.0 and SSL 3.0 support) 559 -gphoto2 Adds digital camera support 112 -gpm Adds support for sys-libs/gpm (Console-based mouse driver) 185 -gps Adds support for Global Positioning System 49 -graphviz Adds support for the Graphviz library 129 -gsl Use the GNU scientific library for calculations 55 -gsm Adds support for the gsm lossy speech compression codec 153 -gstreamer Adds support for media-libs/gstreamer (Streaming media) 295 -gtk Adds support for x11-libs/gtk+ (The GIMP Toolkit) 1414 -gtkhtml Adds support for gnome-extra/gtkhtml 33 -guile Adds support for the guile Scheme interpreter 82 -gzip Compress files with Lempel-Ziv coding (LZ77) 279 -hal Enable Hardware Abstraction Layer (HAL) support 438 -handbook Enable handbooks generation for KDE4. 13 -hardened activate default security enhancements for toolchain (gcc, glibc, binutils) 420 -hddtemp Enable monitoring of hdd temperature (app-admin/hddtemp) 25 -hdf5 Adds support for the Hierarchical Data Format v5 38 -ibm Add support for IBM ppc64 specific systems 41 -iconv Enable support for the iconv character set conversion library 212 -icq Enable ICQ IM protocol support 8 -icu Enable ICU (Internationalization Components for Unicode) support, using dev-libs/icu 104 -idn Enable support for Internationalized Domain Names 142 -ieee1394 Enable FireWire/iLink IEEE1394 support (dv, camera, ...) 111 -imagemagick Enables support for Imagemagick (image converter) 135 -imap Adds support for IMAP (Internet Mail Application Protocol) 62 -imlib Adds support for imlib, an image loading and rendering library 80 -inifile Adds dbm support for .ini files 15 -innodb Adds innodb support for mySQL (transaction support) 3 -interbase Adds support for Interbase database 17 -iodbc Adds support for iODBC library 58 -ipod Enable support for iPod device access 76 -ipv6 Adds support for IP version 6 1553 -jabber Enable jabber IM protocol support 89 -jack Adds support for the JACK Audio Connection Kit 649 -java Adds support for Java 743 -java6 Use Java 1.6 to build package with || ( reduced deps, 1.6 features, source/target 1.6 ) 14 -javascript Enables javascript support 50 -jbig enables jbig-kit support for tiff, Hylafax, ImageMagick, etc 38 -jingle Enables voice calls for jabber 36 -joystick Add support for joysticks in all packages 112 -jpeg Adds JPEG image support 807 -jpeg2k Support for JPEG 2000, a wavelet-based image compression format 179 -kde Adds support for kde-base/kde (K Desktop Enviroment) 465 -kdeenablefinal EXPERIMENTAL: KDE ebuilds will use the enable-final flag, yielding compilation speedups at the cost of heavy mem usage and potentially causing problems. We strongly discourage setting this 3110 -kdeprefix Makes a KDE prefixed install into /usr/kde/$ if enabled or into /usr (FHS compatible) otherwise 1965 -kerberos Adds kerberos support 590 -kolab Adds support for the Kolab groupware server 24 -kontact Enable support for the KDE personal information manager (kde-base/kdepim*) 9 -ladspa Enables the ability to support ladspa plugins 103 -lame Prefer using LAME libraries for MP3 encoding support 76 -lapack Adds support for the virtual/lapack numerical library 57 -lash Adds LASH Audio Session Handler support 68 -latex Adds support for LaTeX (typesetting package) 234 -lcms Adds lcms support (color management engine) 245 -ldap Adds LDAP support (Lightweight Directory Access Protocol) 1088 -libcaca Add support for colored ASCII-art graphics 66 -libedit Use the libedit library (replacement for readline) 76 -libgda Adds GNOME Data Access support 19 -libnotify Enable desktop notification support 416 -libsamplerate Build with support for converting sample rates using libsamplerate 120 -libwww Adds libwww support (General purpose WEB API) 37 -lirc Adds support for lirc (Linux's Infra-Red Remote Control) 209 -livecd !!internal use only!! DO NOT SET THIS FLAG YOURSELF!, used during livecd building 41 -lm_sensors Adds linux lm_sensors (hardware sensors) support 48 -lua Enable Lua scripting support 221 -lzo Enables support for lzo compression 98 -m17n-lib Enable m17n-lib support 32 -mad Adds support for mad (high-quality mp3 decoder library and cli frontend) 172 -maildir Adds support for maildir (~/.maildir) style mail spools 41 -mailwrapper Adds mailwrapper support to allow multiple MTAs to be installed 67 -matroska Adds support for the matroska container format (extensions .mkv, .mka and .mks) 51 -matrox Adds Matrox MGA support to mplayer 4 -mbox Adds support for mbox (/var/spool/mail) style mail spools 82 -mcve Support for the MCVE credit card payment system 12 -memlimit Adds memory usage limiting in supporting programs 4 -mhash Adds support for the mhash library 22 -migemo Enables migemo support for Japanese 26 -mikmod Adds libmikmod support to allow playing of SoundTracker-style music files 46 -milter Adds sendmail mail filter (milter) support 23 -mime Adds MIME support 8 -minimal Install a very minimal build (disables, for example, plugins, fonts, most drivers, non-critical features) 769 -mmap Adds mmap (memory map) support 23 -mmx Adds support for optimizations for Pentium MMX and Athlon class processors 474 -mng Adds support for libmng (MNG images) 105 -modplug Adds libmodplug support 64 -modules Build the kernel modules 42 -mono Build Mono bindings to support dotnet type stuff 97 -motif Adds support for the Motif toolkit 108 -mozilla Adds support for the Mozilla web-browser 26 -mp3 Add support for reading mp3 files 357 -mp4 Support for MP4 container format 36 -mpeg Adds libmpeg3 support to various packages 67 -mpi Adds MPI (Message Passing Interface) layer to the apps that support it 186 -mplayer Enable mplayer support for playback or encoding 77 -msn Enable MSN Messenger IM protocol support 56 -msql Adds support for the MSQL database server 14 -mssql Adds support for Microsoft SQL Server database 65 -mtp Enable support for Media Transfer Protocol 63 -mule Adds multi-language support to XEmacs 9 -multilib On 64bit systems, if you want to be able to compile 32bit and 64bit binaries 368 -musepack Enable support for the musepack audio codec 111 -musicbrainz Lookup audio metadata using MusicBrainz community service (musicbrainz.org) 54 -mysql Adds mySQL Database support 1154 -mysqli Adds support for the improved mySQL libraries 18 -nas Adds support for network audio sound 333 -ncurses Adds ncurses support (console display library) 655 -netboot Enables network booting 27 -netcdf Enable NetCDF data format support 19 -networkmanager Enable net-misc/networkmanager support 170 -neXt Enable neXt toolkit 14 -nis Support for NIS/YP services 116 -nls Adds Native Language Support (using gettext - GNU locale utilities) 4047 -nntp Add support for newsgroups (Network News Transfer Protocol) 80 -nocd Install all files required to run the application without a CD mounted 9 -nocxx Disable support for C++ (DON'T USE THIS UNLESS YOU KNOW WHAT YOU'RE DOING) 320 -nptl Enable support for Native POSIX Threads Library, the new threading module (requires linux-2.6 or better usually) 293 -nsplugin Build plugin for browsers supporting the Netscape plugin architecture (that is almost any modern browser) 187 -ocaml Adds support/bindings for the Ocaml language 22 -ocamlopt Enables ocamlopt support (ocaml native code compiler) -- Produces faster programs (Warning: you have to disable/enable it at a global scale) 0 -oci8 Adds Oracle 8 Database Support 42 -oci8-instant-client Use dev-db/oracle-instantclient-basic as Oracle provider instead of requiring a full Oracle server install 23 -odbc Adds ODBC Support (Open DataBase Connectivity) 366 -offensive Enables potentially offensive items in packages 48 -ofx Enable support for importing (and exporting) OFX (Open Financial eXchange) data files 43 -ogg Adds support for the Ogg container format (commonly used by Vorbis, Theora and flac) 208 -old-linux Add support for linux-2.4 and older 19 -openal Adds support for the Open Audio Library 221 -openexr Support for the OpenEXR graphics file format 115 -opengl Adds support for OpenGL (3D graphics) 1142 -openmp Build support for the OpenMP (support parallel computing), requires >=sys-devel/gcc-4.2 built with USE="openmp" 283 -oracle Enable Oracle Database support 62 -osc Enables support for Open Sound Control 26 -oscar Enable Oscar (AIM/ICQ) IM protocol support 19 -oss Adds support for OSS (Open Sound System) 661 -pam Adds support for PAM (Pluggable Authentication Modules) - DANGEROUS to arbitrarily flip 747 -pch Enable precompiled header support for faster compilation at the expense of disk space and memory (>=sys-devel/gcc-3.4 only) 308 -pcmcia Adds support for PCMCIA slots/devices found on laptop computers 39 -pcntl Adds support for process creation functions 15 -pcre Adds support for Perl Compatible Regular Expressions 219 -pda Adds support for portable devices 47 -pdf Adds general support for PDF (Portable Document Format), this replaces the pdflib and cpdflib flags 174 -perl Adds support/bindings for the Perl language 654 -php Include support for the PHP language 80 -plasma Build optional plasma widgets that require kde-base/libplasma 45 -plotutils Add support for plotutils (library for 2-D vector graphics) 26 -png Adds support for libpng (PNG images) 724 -policykit Use sys-auth/policykit to gain privileges 150 -portaudio Adds support for the crossplatform portaudio audio API 124 -posix Adds support for POSIX-compatible functions 12 -postgres Adds support for the postgresql database 1021 -ppds Adds support for automatically generated ppd (printing driver) files 24 -prefix Defines if a Gentoo Prefix offset installation is used 0 -prelude Adds support/bindings for the Prelude Intrusion Detection System 32 -profile Adds support for software performance analysis (will likely vary from ebuild to ebuild) 1151 -pulseaudio Adds support for PulseAudio sound server 515 -python Adds support/bindings for the Python language 1286 -qdbm Adds support for the qdbm (Quick Database Manager) library 32 -qmail-spp Adds support for qmail SMTP plugins 11 -qt4 Adds support for the Qt GUI/Application Toolkit version 4.x 358 -quicktime Adds support for OpenQuickTime 56 -radius Adds support for RADIUS authentication 78 -raw Add support for raw image formats 53 -rdesktop Adds support for the remote desktop protocol, usually used to connect to Windows servers 16 -readline Enables support for libreadline, a GNU line-editing library that almost everyone wants 596 -recode Enables support for the GNU recode library 17 -rss Enables support for RSS feeds 78 -ruby Adds support/bindings for the Ruby language 253 -samba Adds support for SAMBA (Windows File and Printer sharing) 356 -sapdb Adds support for SAP DB 16 -sasl Adds support for the Simple Authentication and Security Layer 304 -savedconfig Use this to restore your config from /etc/portage/savedconfig $/$. Make sure your USE flags allow for appropriate dependencies 83 -scanner Adds support for scanner hardware (e.g. build the sane frontend in kdegraphics) 212 -sdl Adds support for Simple Direct Layer (media library) 519 -seamonkey Adds support for the Seamonkey web-browser 18 -selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur 1049 -semantic-desktop Cross-KDE support for semantic search and information retrieval 128 -session Adds persistent session support 50 -sharedext Adds support for building shared extensions in PHP 15 -sharedmem Adds support for shared memory use 17 -shorten Adds support for the shorten audio compressor 6 -simplexml support for SimpleXML 7 -skey Enable S/Key (Single use password) authentication support 42 -slang Adds support for the slang text display library (it's like ncurses, but different) 89 -slp Adds Service Locator Protocol support 50 -smartcard Enables smartcard support 44 -smp Enable support for multiprocessors or multicore systems 36 -sndfile Adds support for libsndfile 115 -snmp Adds support for the Simple Network Management Protocol if available 221 -soap Adds support for SOAP (Simple Object Access Protocol) 34 -sockets Adds support for tcp/ip sockets 30 -socks5 Adds support for the socks5 proxy 74 -solid Adds support for the Solid database engine 16 -source Zip the sources and install them 2135 -sox Adds support for Sound eXchange (SoX) 27 -speex Adds support for the speex audio codec (used for speech) 206 -spell Adds dictionary support 466 -sqlite Adds support for sqlite - embedded sql database 667 -sqlite3 Adds support for sqlite3 - embedded sql database 90 -sse fast floating point optimization for PentiumIII+ class chips 282 -sse2 faster floating point optimization for SSE2 capable chips 257 -ssl Adds support for Secure Socket Layer connections 2196 -startup-notification Enable application startup event feedback mechanism 135 -static !!do not set this during bootstrap!! Causes binaries to be statically linked instead of dynamically 1169 -static-libs Build static libraries 730 -subversion Enable subversion (version control system) support 124 -suid Enable setuid root program, with potential security risks 61 -svg Adds support for SVG (Scalable Vector Graphics) 251 -svga Adds support for SVGAlib (graphics library) 168 -sybase Adds support for the Sybase SQL Database Server 17 -sybase-ct Adds support for Sybase-CT 15 -symlink Force kernel ebuilds to automatically update the /usr/src/linux symlink 699 -syslog Enables support for syslog 119 -sysvipc Support for System V-compatible inter-process communication 15 -szip Use the szip compression library 17 -taglib Enable tagging support with taglib 74 -tcl Adds support the Tcl language 302 -tcpd Adds support for TCP wrappers 330 -test Workaround to pull in packages needed to run with FEATURES=test. Portage-2.1.2 handles this internally, so don't set it in make.conf/package.use anymore 6229 -theora Adds support for the Theora Video Compression Codec 174 -threads Adds threads support for various packages. Usually pthreads 773 -tidy Adds support for HTML Tidy 32 -tiff Adds support for the TIFF image format 373 -timidity Build with Timidity++ (MIDI sequencer) support 18 -tk Adds support for Tk GUI toolkit 376 -tokenizer Adds support for the PHP file parser 9 -truetype Adds support for FreeType and/or FreeType2 fonts 359 -uclibc Enable uclibc specific patches and build or link uclibc 27 -unicode Adds support for Unicode 502 -usb Adds USB support to applications that have optional USB support (e.g. cups) 267 -v4l Enables video4linux support 206 -v4l2 Enable video4linux2 support 135 -vanilla Do not add extra patches which change default behaviour; DO NOT USE THIS ON A GLOBAL SCALE as the severity of the meaning changes drastically 469 -vcd Video CD support 35 -vhosts Adds support for installing web-based applications into a virtual-hosting environment 743 -videos Install optional video files (used in some games) 29 -vim-syntax Pulls in related vim syntax scripts 267 -vnc Enable VNC (remote desktop viewer) support 49 -voodoo3 Adds support for 3Dfx's Voodoo3 video chipset, else defaults to Voodoo4/5 support if not in USE 2 -vorbis Adds support for the OggVorbis audio codec 496 -wavpack Add support for wavpack audio compression tools 94 -wddx Adds support for Web Distributed Data eXchange 15 -wifi Enable wireless network functions 88 -win32codecs use win32codecs package for dll avi decoding support (wmv and what not) 65 -wmf Adds support for the Windows Metafile vector image format 53 -wxwidgets Adds support for wxWidgets/wxGTK GUI toolkit 121 -X Adds support for X11 2268 -x264 Enable h264 encoding using x264 87 -xattr Adds support for extended attributes (filesystem-stored metadata) 135 -Xaw3d Adds support for the 3d athena widget set 74 -xcb Support the X C-language Binding, a replacement for Xlib 61 -xcomposite Enable support for the Xorg composite extension 147 -xemacs Add support for XEmacs 51 -xface Adds xface support used to allow a small image of xface format to be included in an email via the header 'X-Face' 36 -xft Build with support for XFT font renderer (x11-libs/libXft) 81 -xine Add support for the XINE movie libraries 82 -xinerama Add support for the xinerama X11 extension, which allows you to stretch your display across multiple monitors 783 -xinetd Add support for the xinetd super-server 128 -xml Add support for XML files 565 -xmlrpc Support for xml-rpc library 57 -xmp Enable support for Extensible Metadata Platform (Adobe XMP) 53 -xosd Sends display using the X On Screen Display library 39 -xpm Adds support for XPM graphics format 61 -xscreensaver Adds support for XScreenSaver extension 51 -xsl Check/Support flag for XSL library (version 1) 17 -xulrunner Build native browser integration against xulrunner instead of firefox or seamonkey 53 -xv Adds in optional support for the Xvideo extension (an X API for video playback) 91 -xvid Adds support for xvid.org's open-source mpeg-4 codec 57 -yahoo Enable Yahoo Messenger IM protocol support 28 -yaz Adds in optional support for the Z39.50 Protocol for Information Retrieval (YAZ) 18 -zeroconf Support for DNS Service Discovery (DNS-SD) 106 -zlib Adds support for zlib (de)compression 681 -zsh-completion Enable zsh completion support 86 \ No newline at end of file diff --git a/utils/__pycache__/GenRecovers.cpython-39.pyc b/utils/__pycache__/GenRecovers.cpython-39.pyc deleted file mode 100644 index b7fa776705484d90f1742faf5e8176932751ca50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1105 zcmYjQJ#XAb5S>|m>Y}eG0TeaD!ANt>o!qz*0t2yS!-Wu7u!Wp$9BA%FqQyH>yGvO* zkVcF%+~zNwfHdh;#DFZvNuP>xxoxWa1yz})Y)4D%?3V-6O++V+#Gt75hj&OWDxrJ7{B0>JGiWN7&`wE9m>&=K-yO2zj{2^&dk454>mh!d?g|o?-H8Z5qgkjag+`oY~7CShEKyG5Yqgfrg}_f2P)9;45y6a zG0MBz;W)uxRx2!V>K?uW^8K0neNh1%!N1QB#l!UQW; zG9u@0j_12QDdOxvNY&Mc+F+}=NuRBMtxxK=^}G6{eg3lk)0)5PQw!^}_W95CoBE94 zAGH2npPaw0PwUfm{hr*n6nIm=?}UbB%D8!?ca1L&6Q#+^axpTl6cIO`%F{#}FPF(k zoB2CpbpIobjbhYs`mL=vqL3<5;`Eboq)@+sTp(%}o!)LX6g?&6UZHx=#nU{Kx>x8V zRlO^9y7`e=xUACr-$s&(fZkX0WB^^9#TIs1h#|@^DH5ZNe;jt>7c?6kJ`hNtLQdzV zVFHy?!Yz1mR=K4+MSK48AtA=CMl8G0VAAQBRcr@Jypp^Be{LQ2m&SJ~%T{3OXsR_K zg-M|Xad*XjeSfkygZOvfQzy&_Kz$eC`J{+^6eStHbK-wlWEu|x=)$@b|45Y}@ zC>F+#a*~isdt0PEA2W0NFc!H^vQa1K2c%(2QX8M-vdTGer2BrM#H~ablm-ifqEYeE zEZRD=WUK&cm5dd}MV~}z;WxO-7%t%=d8;^&ZEW_Ma4;A~$!IX>%t()3F^)P?X0GXg zZXU&Z(T->+eu~k3d!U4Beyq{@bDdE%6obJPMz+JGrDekPVaAJ8d}ohCS(1y?GP5jf Igk diff --git a/utils/__pycache__/findfsdb.cpython-39.pyc b/utils/__pycache__/findfsdb.cpython-39.pyc deleted file mode 100644 index 6d4f05f00f435c562d0a73faacbf66ab71df316e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3809 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 YzFCF-pMQVK?9ujXGkF<`GNi?S031r%K>z>% diff --git a/utils/__pycache__/getUses.cpython-39.pyc b/utils/__pycache__/getUses.cpython-39.pyc deleted file mode 100644 index c2f1f432b58db864efb48ef89543beab1ef96d20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1029 zcmZ{jy>1gh5XWck_Uwzn!F-7%1wz6UF31H$6-5XE>5!W!iim`wi+4#*Tzr?^wSuiP zjRDcoQ6jtK1$YX2r0oz@UcnVJXCXNu>}vkIGrQWa-)vm3*MQ2$UmxP1KEQ8w=8H$p z6Ef2zksvXJ-C2vfC_U-Fhh0w!8Bps>+=5o+lx9M^!}_-b)VW0VjLdu?Nnl884beh@ zBmAs~Ug3>#0%K2l6CC=5{~TVmhoTT;U-}c&kB*yz6-)jI3!o_NIYAjL!v^fYaZ`W| zY-NP~9D%E?TEYGZ5nj^x8rcq=TTmVO2;Ig5FrU`SxjX}*06u$ra69T59p#y}@qvnR zoxM&{Whkgtr7|6dwJF}6dUx(?qJWL<~K1-VYTwiUSQi^SONtxYHLn5N=u7oEHT3( zm@(WTMv~(1g5&0_U4sjmexGM*s|9cdlx!E;gXaI)rdcOWOTwB{Ui&0dTrVLzIAzva zkhDV0FRS^jbd@D!Ss-y$t@1SPD9v9=^GmiWy3YMYmMbg`ma8oMA4SK?$^}tu4YJ=T=}dlUYBLz+v=|Y}>cENk)N}r9w)< z`Go3?*J}f)8SFsvzi~1p6^%$`Fj|=q3t~f%t8yV8#J{3Nzzki5+02>RRZWs>%G{FN z7*%~`dn>ykjk3O^%%7Q8R1{@>mt4`~Zq-DLSvJcW;#<-x>5`V_%n^UUZZ7Gy&1yH4 z)wc+&1}uMzl$Jg(ZPx4&9d+%L7Hjk{ksD)4d!(|FuQ7AQ?>Mzlv!(Zv#%r&wy^9y{ zP^&V*OXo%vL~hJ%u=AwL?ky=LC8?}r6BX7hP@C0y*hL2G-<99gMTT$xzjE2q-Bb>6 z1Ly*gxAK4;pnvfqvDiD6^^_zJEh4>H4f%efq-s-Abft^T?IpNU!n#%cDftX0-QLb{bT};hc_=4m_ro|YnrriAlt-sA z7y41%(ZTH+?-y1dt1y3fatw8Je5)UFVLtle!L6yS?m;-2g;U;-@_v%a{@3XuVMV7u z9FO8D&G{YeZ@bFd2_>IuD%L2RbLGC|B9GEUnc%JJyF8zWD3f}}f1J+wNrv3Y z(k*QJ%F$1M$^++e#aWp#PXaewT%Jt1RAw%PvhysCq;hd14kujMnTQgp{Nd$v4UWy;4rjLoqqimGdzaq1J!=T1JC5 ztQM`&2K|J-M?KmyTBc`oVL8So?cxM6h6mrHK&ykuP2(eY;zMM`)UES8#h^5e^*Ga1 qDubQkALca7BGEzEDt5*HE%gBol=t~OWs8_U(xb>dC|${+9p@iS$TrOY diff --git a/utils/__pycache__/package.cpython-39.pyc b/utils/__pycache__/package.cpython-39.pyc deleted file mode 100644 index 9722eb6b12e94f1422aee1113c1d8ead24fdd472..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1268 zcmZ`(&2A$_5bm0P+haR~XrrJ7e1JnF7OxQE1S?QtSWB!EIlEdhD2gWTmNW5qX42CM z$!La)d4N0shlCq9o`WYqb3uYrULhyGws)nKfVQf>s_yElugYzQ?RJx46=y~GXM?f7 zwe#jO;CuX_f0*BK9+qUm;lZ^r|OQlj$ zhzaS9S8ENZ8SFsvzi={T6-BHvI8`RZg4ht`s$7T%XTcc_% zZEI=!$|ze4;`YqECaKESF1x0~jjD|pvuu}5#CMcc(t=9!g2_K%w-m^G*vzYR(>FPIPRhL-tP`Sw4U4SVuzE-tfvhVQSSKS}GNpppd*<)6k zCHe;E#x0c&@GYQQdbry_kLy3X6*??2D|Be!MZ7(#@hk%G>E5%!{#V}&0&Do%Te~8k$S6~Kr|~qMi=zy=YfHDV-KZV? z@TVehE|;8ZGZsnUhUb?@Q=w`zSF*PAERIy|;zk@!L~Um>N>tq#Tu#I?@Ag_?%A+hW z!6Y!V*;KaBhxD~-Yt_-JtCjvmN!?}OW+1C%4hBbYl&ip*FR`W=TcHf+c}?P1Cf`N$ z{fGS%Q19nL&d&4x58_zU?w_kD&imPFTpwpwwUdibPEK^?d<@0N`j3xi_~ct1YLZVM z(L?g6V{}Z<*ns624`>4?9m6*~_#OeRHAKE+d;m|rkF1!wb(&+KuBNdXXPTbLr9IIP`OeA=L4w_S7R3_!MR856i1SZ)v?MNwi;%n|E{V(Nm&K~M zg8rPiDqcpvBHRyH_bXAe-;XD{ko|ttP>H-hQBR>J+v;)?$mGE!QF=gvlb-|TZ8X&e z(QL@4_D0yt*^(Txu49}+nP5NB$s`qjV$z4yk}tm2J19m;uRf>uFxed!Quii0%~Va- z$B#^qs=h1=-K10KIL2iFI-uR@=b^RGtQvQ~q^#nk%Frp>(?d3Jl*pk3NBiA8@<c?Es`>Y}pxY`-Ir8D%VxO|0c zRX$n+EjY|dZ|Dmc;5Pg4qbe-JVMBORJ`5_~^1kI8kCyFM!+r%jEMN7Q4)3?*6VB)_ zf-3kK%bj~nH%q^4l!(UPx)sblY|YKPvBUI&Zj%GZtR+9;fU3 zNv?}xy^#C8;^RbS@gvof$+%D{LNQI$`r#;xJdzmCT6IArY9Q0GPK(@x6h-5BKbd?R z2ATb_GvA{#`^W4r$B#R+KhOR-`}^$EJ6?KWk`7t!$loBd9yK@WYr}G(d>QIQjo2ER zGD~UWj^eR7k4Wh!^-g_V^l1Zm1(S_WjvE_S$NNZ7kLE;vnjG{$s>nC7<^<%r z;Gb@M6{(s-F6l_)S)nH;qjA>< z5(2j6ItC(NAHa#mqqUN7>iL_tAIelGbHMu%Ca4gEIZMF1OI*@D1|*;#B_QFQwdNWa z4YU&u?zCJnJ%{&-pSh8Zs;&Q1ULw6oZ}}PsqNRvM*QwQeoy26ynpjL;ID^UWVMvjb zLBR`Leh1vCg5+va(ke))1K71ia0n+%xmwlk6!DNZG(fn5d+M6Kx9E+G(ydu(FRK)eYuV^kJOcHz9ygJxuk1yoQyDJLI8W1np5_{E= zw;(yS7y&fRu@?Im7+A}`DNtq|Dy(Q8nt%9vYeAGYSnM$@*rUl;KJM diff --git a/utils/__pycache__/utils.cpython-38.pyc b/utils/__pycache__/utils.cpython-38.pyc deleted file mode 100644 index 9428706953c747e5241d23e8bf11ac5d9fb5fa45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4181 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 diff --git a/utils/findfsdb.py b/utils/findfsdb.py index d881337..b0f7838 100755 --- a/utils/findfsdb.py +++ b/utils/findfsdb.py @@ -7,9 +7,9 @@ from utils.utils import get_list_overlays, sort_install_pkg from utils.GenRecovers import ScanRecoverFile from utils.getUses import get_global_USE, get_local_USE from utils.package import search -# создаём разширеную базу пактов с предлизительно структурой -#pkg_list ={"category": [{name: name_pkg, versions:[list_version]}]} -# и клладём это всё в json +# создаём раcширенную базу пакетов с приблизительной структурой +# pkg_list ={"category": [{name: name_pkg, versions:[list_version]}]} +# и кладём это всё в json # AliaseCategory ={ @@ -17,10 +17,10 @@ AliaseCategory ={ "app-dicts":"Словари", "app-editors":"Текстовые редакторы", "www-client":"Браузеры", - "www-servers": "Сервера", + "www-servers": "Веб-серверы", 'app-etitor':"Текстовые редакторы", "game":"Игры", - "dev-lang":" Языка програмироыввние", + "dev-lang":" Языкы программирования", "media-video": "Видео", "media-sound": "Аудио", "dev-erlang":"Erlang", @@ -41,32 +41,32 @@ AliaseCategory ={ "sci-mathematics":"Математика", "sci-physics":"Физика", "app-office":"Офис", - "mail-client":"Е-Почта", - "net-dns":"DNS", + "mail-client":"Клиент e-mail", + "net-dns":"DNS-сервера", "sys-apps":"Системное", "sys-kernel":"Ядра", "11-themes":"Темы", - "app-emulation":"Виртальнизация", + "app-emulation":"Виртуализация", "x11-drivers":"Видеодрайвера", "app-antivirus":"Антивирус", "games-fps":"Шутеры", "games-kids":"Детские игры", - "games-rpg":"RPG Игры ", + "games-rpg":"RPG Игры", "games-puzzle":"Головоломки", "games-strategy":"Стратегии", - } + def create_db(): overlays = get_list_overlays() recovers = ScanRecoverFile() - pkg_list ={} - listUses= dict(LocalUSE=get_local_USE(), GlobalUSE=get_global_USE()) #[0] LocalUSE=get_local_USE(), - InstallPkgs= sort_install_pkg() - portage_list ={} - port_dir =["/var/db/repos", "/usr/portage"] + pkg_list = {} + listUses = dict(LocalUSE = get_local_USE(), GlobalUSE = get_global_USE()) #[0] LocalUSE = get_local_USE(), + InstallPkgs = sort_install_pkg() + portage_list = {} + port_dir = ["/var/db/repos", "/usr/portage"] if not os.path.exists('./pkgs.json'): print("Create ramdb") - pkg_name ="" + pkg_name = "" all_pkgs = {} with open('./pkgs.json', 'a') as fn: for p in port_dir: @@ -74,9 +74,9 @@ def create_db(): for f in files: if f.endswith('.ebuild'): #print(d +"/" + f) - pkg_name ="" + pkg_name = "" try: - #ver=int(f.replace('.ebuild', '').split('-')[-1][0]) + #ver = int(f.replace('.ebuild', '').split('-')[-1][0]) for pn in f.replace('.ebuild', '').split('-')[:-1]: pkg_name = pkg_name + pn + "-" except TypeError: @@ -120,11 +120,11 @@ def on_find(p_v): if not os.path.exists('./pkgs.json'): create_db() p = [] - ret_p ="" + ret_p = "" ret = {} with open('./pkgs.json', 'r') as fn: data = fn.read() - #pkg_list= fn.read() + #pkg_list = fn.read() pkg_list = data.split("\n") for i in pkg_list: @@ -142,7 +142,7 @@ def on_find(p_v): if __name__ == '__main__': if not os.path.exists('./pkgs.txt'): create_db() - if len(sys.argv) >=2: + if len(sys.argv) >= 2: on_find(sys.argv[1]) else: print("No element to find") diff --git a/utils/getUses.py b/utils/getUses.py index 6df50b9..e3a6372 100644 --- a/utils/getUses.py +++ b/utils/getUses.py @@ -3,15 +3,15 @@ import os, sys def get_global_USE(): - ListUSE={} + ListUSE = {} path = '/usr/portage/profiles/use.desc' with open(path) as f: - lines =f.read().split("\n") + lines = f.read().split("\n") for line in lines: if line.startswith('#'): pass else: - try: + try: ListUSE[line.split(' -')[0]] = str(line) except Exception (e): print(str(e)) @@ -19,10 +19,10 @@ def get_global_USE(): def get_local_USE(): - ListUSE={} + ListUSE = {} path = '/usr/portage/profiles/use.local.desc' with open(path) as f: - lines =f.read().split("\n") + lines = f.read().split("\n") for line in lines: if line.startswith('#'): pass diff --git a/utils/package.py b/utils/package.py index 3bcb73c..21ecdc2 100644 --- a/utils/package.py +++ b/utils/package.py @@ -10,17 +10,17 @@ portge = portage.db[portage.root]["porttree"].dbapi # API PORTAGE IN SEARCH def search(r_p): - Cat =[] + Cat = [] pkg = {} - Category ="" + Category = "" Name = "" - version ="" - USE ="" + version = "" + USE = "" Description = "" - Home_page ="" + Home_page = "" repository = "" try: - pametrs = ["HOMEPAGE", "IUSE","DESCRIPTION", "repository", "LICENSE"] + parametrs = ["HOMEPAGE", "IUSE","DESCRIPTION", "repository", "LICENSE"] #print(r_p) p_list = portge.xmatch('match-all', r_p) m_list = portge.xmatch('match-visible', r_p) @@ -29,9 +29,9 @@ def search(r_p): #print(len(p_list)) if len(p_list) != 0: for l in p_list: - params = portge.aux_get(l, pametrs) + params = portge.aux_get(l, parametrs) if str(Cat) in Category and str(l).split('/')[1].split('-')[0] in Name: - version = version + " " + str(l.replace(Name +"-", "")) + version = version + " " + str(l.replace(Name + "-", "")) if not l in m_list: version = str(version) +"[M]" else: @@ -41,15 +41,15 @@ def search(r_p): Category= str(Cat) #Name =str(l).split('/')[1].split('-')[0] if len(r_p.split('/')) >=2: - print(">=2") + print("> = 2") Name = r_p else: Name = l.split("/")[0] +"/" + r_p - version = str(l.replace(Name +"-", "")) + version = str(l.replace(Name + "-", "")) if not l in m_list: version = str(version) + "[M]" else: - version = str(version) +"[U]" + version = str(version) + "[U]" USE = params[1] Description = params[2] @@ -64,6 +64,6 @@ def search(r_p): print(str(e)) p_list = " ERROR IN Package " - pkg = {"Category": Category, "Name": Name,"version": version.split(" "), "USE":USE.split(" "), "Description": Description, "Home_page":Home_page, 'repo': str(repository) } + pkg = {"Category": Category, "Name": Name, "version": version.split(" "), "USE": USE.split(" "), "Description": Description, "Home_page": Home_page, 'repo': str(repository) } print(pkg) return pkg diff --git a/utils/utils.py b/utils/utils.py index cb5acdb..2b3a50d 100755 --- a/utils/utils.py +++ b/utils/utils.py @@ -1,193 +1,196 @@ -# -*- coding: UTF-8 -*- #!/usr/bin/env python3 -'__autor__'== 'serkus' +# -*- coding: UTF-8 -*- +'__autor__' == 'serkus' import os, sys, json from urllib import request from utils.package import search -#import xml +# import xml import xml.etree.ElementTree as ET -#Проверяем пользователь ROOT или нет + +# Проверяем пользователь ROOT или нет def is_root(): - return os.geteuid() == 0 - -#Читаем Файл посторочно + 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") - -#получаем список оверлеев + 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/' - + 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) + 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) + 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} + "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) + 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 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 + 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 -#'' + 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, "") + #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]] = [] 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, "") + "").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 + return INSTALL def scan_config_portage(): - dirs_root =["/var/db/repos", "/usr/portage"] + dirs_root = ["/var/db/repos", "/usr/portage"] config = {} i = 0 dr = {} data = {} - pf={} + pf = {} for dir_root in dirs_root: for d, dirs, files in os.walk(dir_root): print(str(d)) - i=i+1 + i += 1 for fl in files: with open(d + "/" + fl) as f: pf[str(d.split('/')[-1]) + "/"+ fl]= f.read().split('\n')