[yum-git] plugins/list-data
James Antill
james at linux.duke.edu
Thu Mar 6 06:47:47 UTC 2008
plugins/list-data/list-data.py | 85 +++++++++++++++++++++++++++--------------
1 file changed, 58 insertions(+), 27 deletions(-)
New commits:
commit 10e2335faf53c991cf5f15dbc098d206eda19073
Author: James Antill <james at and.org>
Date: Thu Mar 6 01:46:14 2008 -0500
Show unique values in info-* for size range, and baseurl.
Make buildhosts output much more readable (use dnsdomainname grouping).
diff --git a/plugins/list-data/list-data.py b/plugins/list-data/list-data.py
index 8d5dea4..11bfb9e 100755
--- a/plugins/list-data/list-data.py
+++ b/plugins/list-data/list-data.py
@@ -74,7 +74,7 @@ Display aggregate data on the %s attribute of a group of packages""" % self.attr
def doCheck(self, base, basecmd, extcmds):
pass
- def show_pkgs(self, msg, pkgs):
+ def show_pkgs(self, msg, gval, pkgs):
pass
def show_data(self, msg, pkgs, name):
@@ -84,12 +84,12 @@ Display aggregate data on the %s attribute of a group of packages""" % self.attr
pkgs.sort(key=lambda x: x.name)
calc = {}
for pkg in pkgs:
- data = self.get_data(pkg)
+ (data, rdata) = self.get_data(pkg)
if type(data) != type([]):
- calc.setdefault(data, []).append(pkg)
+ calc.setdefault(data, []).append((pkg, rdata))
else:
for sdata in data:
- calc.setdefault(sdata, []).append(pkg)
+ calc.setdefault(sdata, []).append((pkg, rdata))
maxlen = 0
totlen = 0
for data in calc:
@@ -101,29 +101,31 @@ Display aggregate data on the %s attribute of a group of packages""" % self.attr
for data in sorted(calc):
val = len(calc[data])
msg(fmt % (str(data), loc_num(val), (100 * val) / totlen))
- self.show_pkgs(msg, calc[data])
+ self.show_pkgs(msg, data, calc[data])
# pkg.vendor has weird values, for instance
def get_data(self, data, strip=True):
if not hasattr(data, self.attr):
- return self.unknown
+ return (self.unknown, self.unknown)
val = getattr(data, self.attr)
if val is None:
return self.unknown
if type(val) == type([]):
- return self.unknown
+ return (self.unknown, self.unknown)
tval = str(val).strip()
if tval == "":
- return self.unknown
+ return (self.unknown, self.unknown)
if strip:
- return tval
+ return (tval, tval)
- return val
+ return (val, val)
def doCommand(self, base, basecmd, extcmds):
+ self.base = base
+
logger = logging.getLogger("yum.verbose.main")
def msg(x):
logger.log(logginglevels.INFO_2, x)
@@ -149,16 +151,39 @@ class InfoDataCommands(ListDataCommands):
def getSummary(self):
return self._getSummary() + "\nAnd list all the packages under each"
- def show_pkgs(self, msg, pkgs):
- for pkg in pkgs:
- msg(" %s" % (pkg))
-
-def url_get_data(self, data): # Special version for baseurl
- val = self.oget_data(data)
+ def show_pkgs(self, msg, gval, pkgs):
+ for (pkg, val) in pkgs:
+ if gval == val:
+ msg(" %s" % pkg)
+ continue
+
+ if type(val) == type([]):
+ val = ", ".join(sorted(val))
+ linelen = len(val) + len(str(pkg))
+ if linelen < 77:
+ msg(" %s %*s%s" % (pkg, 77 - linelen, '', val))
+ else:
+ msg(" %s" % pkg)
+ msg(" => %s" % val)
+ msg('')
+ if pkgs:
+ msg('')
+
+def buildhost_get_data(self, data): # Just show the dnsname
+ val = self.oget_data(data)[0]
if val == self.unknown:
- return val
+ return (val, val)
+ dns_names = val.split('.')
+ if len(dns_names) > 2:
+ dns_names[0] = '*'
+ return (".".join(dns_names), val)
+
+def url_get_data(self, data): # Just show the hostname
+ val = self.oget_data(data)[0]
+ if val == self.unknown:
+ return (val, val)
(scheme, netloc, path, query, fragid) = urlparse.urlsplit(val)
- return "%s://%s/" % (scheme, netloc)
+ return ("%s://%s/" % (scheme, netloc), val)
class SizeRangeData:
def __init__(self, beg, msg):
@@ -179,10 +204,13 @@ class SizeRangeData:
def __hash__(self):
return hash(self._msg)
+def _format_size(base, num, max):
+ return "%s (%*s)" %(base.format_number(num),len(loc_num(max)),loc_num(num))
+
def size_get_data(self, data):
- val = self.oget_data(data, strip=False)
+ val = self.oget_data(data, strip=False)[0]
if val == self.unknown:
- return val
+ return (val, val)
# Even if it was sane, don't put 1GB and up here, or the alpha sorting
# won't be correct.
@@ -204,16 +232,19 @@ def size_get_data(self, data):
pnum = (0, " 0B")
if val <= pnum[0]:
msg = "[ %s - %s ] " % (" " * len(pnum[1]), pnum[1])
- return SizeRangeData(pnum[0], msg)
+ return (SizeRangeData(pnum[0], msg),
+ _format_size(self.base, val, pnum[0]))
pnum = (1, " 1B")
for num in nums:
if val >= pnum[0] and val <= num[0]:
msg = "[ %s - %s ] " % (pnum[1], num[1])
- return SizeRangeData(pnum[0], msg)
+ return (SizeRangeData(pnum[0], msg),
+ _format_size(self.base, val, num[0]))
pnum = num
msg = "[ %s - %s ] " % (pnum[1], " " * len(pnum[1]))
- return SizeRangeData(pnum[0], msg)
+ return (SizeRangeData(pnum[0], msg),
+ _format_size(self.base, val, pnum[0] * 20))
all_yum_grp_mbrs = {}
@@ -240,8 +271,8 @@ def yum_group_free_data(self):
def yum_group_get_data(self, pkg):
if pkg.name not in all_yum_grp_mbrs:
- return self.unknown
- return all_yum_grp_mbrs[pkg.name]
+ return (self.unknown, self.unknown)
+ return (all_yum_grp_mbrs[pkg.name], all_yum_grp_mbrs[pkg.name])
def _list_data_custom(conduit, data, func, beg=None, end=None):
cmd = ListDataCommands(*data)
@@ -275,11 +306,11 @@ def config_hook(conduit):
('packagers', 'packager'),
('licenses', 'license'),
('arches', 'arch'),
- ('committers', 'committer'),
- ('buildhosts', 'buildhost')]:
+ ('committers', 'committer')]:
conduit.registerCommand(ListDataCommands(*data))
conduit.registerCommand(InfoDataCommands(*data))
+ _list_data_custom(conduit, ('buildhosts', 'buildhost'), buildhost_get_data)
_list_data_custom(conduit, ('baseurls', 'url'), url_get_data)
_list_data_custom(conduit, ('package-sizes', 'packagesize'), size_get_data)
_list_data_custom(conduit, ('archive-sizes', 'archivesize'), size_get_data)
More information about the Yum-cvs-commits
mailing list