pkgs: new module to display quick information about common softwares
This commit is contained in:
parent
b517cac4cf
commit
29817ba1c1
68
modules/pkgs.py
Normal file
68
modules/pkgs.py
Normal file
@ -0,0 +1,68 @@
|
||||
"""Get information about common software"""
|
||||
|
||||
# PYTHON STUFFS #######################################################
|
||||
|
||||
import portage
|
||||
|
||||
from nemubot import context
|
||||
from nemubot.exception import IMException
|
||||
from nemubot.hooks import hook
|
||||
|
||||
from more import Response
|
||||
|
||||
DB = None
|
||||
|
||||
# MODULE CORE #########################################################
|
||||
|
||||
def get_db():
|
||||
global DB
|
||||
if DB is None:
|
||||
DB = portage.db[portage.root]["porttree"].dbapi
|
||||
return DB
|
||||
|
||||
|
||||
def package_info(pkgname):
|
||||
pv = get_db().xmatch("match-all", pkgname)
|
||||
if not pv:
|
||||
raise IMException("No package named '%s' found" % pkgname)
|
||||
|
||||
bv = get_db().xmatch("bestmatch-visible", pkgname)
|
||||
pvsplit = portage.catpkgsplit(bv if bv else pv[-1])
|
||||
info = get_db().aux_get(bv if bv else pv[-1], ["DESCRIPTION", "HOMEPAGE", "LICENSE", "IUSE", "KEYWORDS"])
|
||||
|
||||
return {
|
||||
"pkgname": '/'.join(pvsplit[:2]),
|
||||
"category": pvsplit[0],
|
||||
"shortname": pvsplit[1],
|
||||
"lastvers": '-'.join(pvsplit[2:]) if pvsplit[3] != "r0" else pvsplit[2],
|
||||
"othersvers": ['-'.join(portage.catpkgsplit(p)[2:]) for p in pv if p != bv],
|
||||
"description": info[0],
|
||||
"homepage": info[1],
|
||||
"license": info[2],
|
||||
"uses": info[3],
|
||||
"keywords": info[4],
|
||||
}
|
||||
|
||||
|
||||
# MODULE INTERFACE ####################################################
|
||||
|
||||
@hook.command("eix",
|
||||
help="Get information about a package",
|
||||
help_usage={
|
||||
"NAME": "Get information about a software NAME"
|
||||
})
|
||||
def cmd_eix(msg):
|
||||
if not len(msg.args):
|
||||
raise IMException("please give me a package to search")
|
||||
|
||||
def srch(term):
|
||||
try:
|
||||
yield package_info(term)
|
||||
except portage.exception.AmbiguousPackageName as e:
|
||||
for i in e.args[0]:
|
||||
yield package_info(i)
|
||||
|
||||
res = Response(channel=msg.channel, count=" (%d more packages)", nomore="No more package '%s'" % msg.args[0])
|
||||
for pi in srch(msg.args[0]):
|
||||
res.append_message("\x03\x02{pkgname}:\x03\x02 {description} - {homepage} - {license} - last revisions: \x03\x02{lastvers}\x03\x02{ov}".format(ov=(", " + ', '.join(pi["othersvers"])) if pi["othersvers"] else "", **pi))
|
||||
return res
|
Loading…
x
Reference in New Issue
Block a user