initial commit
This commit is contained in:
140
packages.py
Normal file
140
packages.py
Normal file
@@ -0,0 +1,140 @@
|
||||
import re
|
||||
import subprocess
|
||||
from time import sleep
|
||||
|
||||
def _getDist():
|
||||
with open("/etc/os-release", "r") as f:
|
||||
release = f.read().split('\n')
|
||||
for line in release:
|
||||
try:
|
||||
s = line.split("=")
|
||||
if s[0] == "ID":
|
||||
os_id = s[1]
|
||||
break
|
||||
except:
|
||||
pass
|
||||
|
||||
return os_id
|
||||
|
||||
def _isProxmox():
|
||||
ispve = {}
|
||||
ispve["ispve"] = False
|
||||
try:
|
||||
result = subprocess.run(['pveversion'], stdout=subprocess.PIPE)
|
||||
result = result.stdout.decode('utf-8')
|
||||
ispve["ispve"] = True
|
||||
ispve["string"] = result
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
return ispve
|
||||
|
||||
def _sizeMultiplier(unit):
|
||||
if unit == "KiB":
|
||||
return 1
|
||||
elif unit == "MiB":
|
||||
return 1024
|
||||
elif unit == "GiB":
|
||||
return 1024**2
|
||||
elif unit == "TiB":
|
||||
return 1024**3
|
||||
else:
|
||||
return 0
|
||||
|
||||
def getPackages():
|
||||
dist = _getDist()
|
||||
ispve = _isProxmox()
|
||||
update_cmd = "apt update"
|
||||
pkgs = {}
|
||||
pkgs["updatable"] = {}
|
||||
pkgs["installed"] = {}
|
||||
|
||||
if dist != "debian":
|
||||
if dist == "arch":
|
||||
update_cmd = "pacman -Sup --print-format %r,%n,%v"
|
||||
|
||||
if "apt" in update_cmd:
|
||||
pkgs["package_mgr"] = "apt"
|
||||
result = subprocess.run(update_cmd.split(" "), stdout=subprocess.PIPE)
|
||||
update_cmd = "apt list --upgradable"
|
||||
result = subprocess.run(update_cmd.split(" "), stdout=subprocess.PIPE)
|
||||
result = result.stdout.decode('utf-8')[11:-1].split("\n")
|
||||
if result[0] == '':
|
||||
result = []
|
||||
for pkg in result:
|
||||
try:
|
||||
pkgs["updatable"][pkg.split(" ")[0].split("/")[0]] = {}
|
||||
pkgs["updatable"][pkg.split(" ")[0].split("/")[0]]["version"] = pkg.split(" ")[1]
|
||||
pkgs["updatable"][pkg.split(" ")[0].split("/")[0]]["repository"] = pkg.split(" ")[0].split("/")[1]
|
||||
except:
|
||||
pass
|
||||
result = subprocess.run(["apt", "list"], stdout=subprocess.PIPE)
|
||||
result = result.stdout.decode('utf-8')[11:-1].split("\n")
|
||||
for pkg in result:
|
||||
pkgs["installed"][pkg.split(" ")[0].split("/")[0]] = {}
|
||||
pkgs["installed"][pkg.split(" ")[0].split("/")[0]]["version"] = pkg.split(" ")[1]
|
||||
pkgs["installed"][pkg.split(" ")[0].split("/")[0]]["repository"] = pkg.split(" ")[0].split("/")[1]
|
||||
result = subprocess.run(["dpkg-query","-W","--showformat='${Package} ${Installed-Size}\n'"], stdout=subprocess.PIPE)
|
||||
result = result.stdout.decode('utf-8')[:-2].replace("'", "").split("\n")
|
||||
for pkg in result:
|
||||
try:
|
||||
size = float(pkg.split(" ")[1])
|
||||
except:
|
||||
size = 0.0
|
||||
pkgs["installed"][pkg.split(" ")[0]]["size"] = size
|
||||
insld = {}
|
||||
for pkg in pkgs["installed"]:
|
||||
if "size" in pkgs["installed"][pkg]:
|
||||
insld[pkg] = pkgs["installed"][pkg]
|
||||
pkgs["installed"] = insld
|
||||
|
||||
if "pacman" in update_cmd:
|
||||
pkgs["package_mgr"] = "pacman"
|
||||
result = subprocess.run(update_cmd.split(" "), stdout=subprocess.PIPE)
|
||||
result = result.stdout.decode('utf-8')[:-1].split("\n")
|
||||
for pkg in result:
|
||||
pkgs["updatable"][pkg.split(",")[1]] = {}
|
||||
pkgs["updatable"][pkg.split(",")[1]]["version"] = pkg.split(",")[2]
|
||||
pkgs["updatable"][pkg.split(",")[1]]["repository"] = pkg.split(",")[0]
|
||||
result = subprocess.run(["pacman", "-Qn"], stdout=subprocess.PIPE)
|
||||
result = result.stdout.decode('utf-8')[:-1].split("\n")
|
||||
for pkg in result:
|
||||
pkgs["installed"][pkg.split(" ")[0]] = {}
|
||||
pkgs["installed"][pkg.split(" ")[0]]["version"] = pkg.split(" ")[1]
|
||||
pkgs["installed"][pkg.split(" ")[0]]["repository"] = "pacman.conf"
|
||||
result = subprocess.run(["pacman", "-Qm"], stdout=subprocess.PIPE)
|
||||
result = result.stdout.decode('utf-8')[:-1].split("\n")
|
||||
for pkg in result:
|
||||
pkgs["installed"][pkg.split(" ")[0]] = {}
|
||||
pkgs["installed"][pkg.split(" ")[0]]["version"] = pkg.split(" ")[1]
|
||||
pkgs["installed"][pkg.split(" ")[0]]["repository"] = "user/AUR"
|
||||
result = subprocess.run(["pacman", "-Qi"], stdout=subprocess.PIPE)
|
||||
result = result.stdout.decode('utf-8')[:-1].split("\n\n")
|
||||
|
||||
for pkg in result:
|
||||
p = pkg.split("\n")
|
||||
for i in p:
|
||||
if "Name" in i:
|
||||
package = i.split(": ")[1]
|
||||
if "Installed Size" in i:
|
||||
size = i.split(": ")[1]
|
||||
try:
|
||||
pkgs["installed"][package]["size"] = float(size.split(" ")[0]) * _sizeMultiplier(size.split(" ")[1])
|
||||
except:
|
||||
pass
|
||||
|
||||
total_size = 0
|
||||
for pkg in pkgs["installed"]:
|
||||
try:
|
||||
total_size += pkgs["installed"][pkg]["size"]
|
||||
except:
|
||||
pass
|
||||
pkgs["total_size"] = total_size
|
||||
|
||||
return pkgs
|
||||
|
||||
if __name__ == "__main__":
|
||||
#print(_getDist())
|
||||
#print(_isProxmox())
|
||||
print(getPackages())
|
||||
print(len(getPackages()['installed']))
|
||||
Reference in New Issue
Block a user