golden hour
/lib/python2.7/site-packages/yum
⬆️ Go Up
Upload
File/Folder
Size
Actions
Errors.py
4.26 KB
Del
OK
Errors.pyc
9.08 KB
Del
OK
__init__.py
304.17 KB
Del
OK
__init__.pyc
199.58 KB
Del
OK
callbacks.py
5.64 KB
Del
OK
callbacks.pyc
6.23 KB
Del
OK
comps.py
31.59 KB
Del
OK
comps.pyc
26.87 KB
Del
OK
config.py
49.89 KB
Del
OK
config.pyc
48.02 KB
Del
OK
constants.py
4.94 KB
Del
OK
constants.pyc
3.46 KB
Del
OK
depsolve.py
74.05 KB
Del
OK
depsolve.pyc
46.75 KB
Del
OK
drpm.py
12.65 KB
Del
OK
drpm.pyc
10.69 KB
Del
OK
failover.py
5 KB
Del
OK
failover.pyc
5.24 KB
Del
OK
fssnapshots.py
10.16 KB
Del
OK
fssnapshots.pyc
9.75 KB
Del
OK
history.py
61.13 KB
Del
OK
history.pyc
53.31 KB
Del
OK
i18n.py
20.44 KB
Del
OK
i18n.pyc
16.05 KB
Del
OK
igroups.py
9.31 KB
Del
OK
igroups.pyc
10.22 KB
Del
OK
logginglevels.py
7.9 KB
Del
OK
logginglevels.pyc
6.51 KB
Del
OK
mdparser.py
6.26 KB
Del
OK
mdparser.pyc
7.58 KB
Del
OK
metalink.py
9.19 KB
Del
OK
metalink.pyc
8.84 KB
Del
OK
misc.py
39.57 KB
Del
OK
misc.pyc
39.58 KB
Del
OK
packageSack.py
40.79 KB
Del
OK
packageSack.pyc
41.88 KB
Del
OK
packages.py
84.1 KB
Del
OK
packages.pyc
84.51 KB
Del
OK
parser.py
7.97 KB
Del
OK
parser.pyc
6.5 KB
Del
OK
pgpmsg.py
53.5 KB
Del
OK
pgpmsg.pyc
38.27 KB
Del
OK
pkgtag_db.py
4.86 KB
Del
OK
pkgtag_db.pyc
5.06 KB
Del
OK
plugins.py
28.1 KB
Del
OK
plugins.pyc
29.1 KB
Del
OK
repoMDObject.py
11.23 KB
Del
OK
repoMDObject.pyc
9.17 KB
Del
OK
repos.py
16.53 KB
Del
OK
repos.pyc
17.38 KB
Del
OK
rpmsack.py
70.25 KB
Del
OK
rpmsack.pyc
58.36 KB
Del
OK
rpmtrans.py
24.84 KB
Del
OK
rpmtrans.pyc
22.54 KB
Del
OK
sqlitesack.py
69.76 KB
Del
OK
sqlitesack.pyc
53.75 KB
Del
OK
sqlutils.py
6.27 KB
Del
OK
sqlutils.pyc
5.6 KB
Del
OK
transactioninfo.py
33.78 KB
Del
OK
transactioninfo.pyc
30.29 KB
Del
OK
update_md.py
25.9 KB
Del
OK
update_md.pyc
21.72 KB
Del
OK
updateinfo.py
18.29 KB
Del
OK
updateinfo.pyc
16.36 KB
Del
OK
yumRepo.py
83.85 KB
Del
OK
yumRepo.pyc
64.83 KB
Del
OK
Edit: mdparser.py
#! /usr/bin/python -tt # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # Copyright 2005 Duke University import gzip try: from xml.etree import cElementTree except ImportError: import cElementTree iterparse = cElementTree.iterparse from cStringIO import StringIO import warnings import Errors #TODO: document everything here class MDParser: def __init__(self, filename): # Set up mapping of meta types to handler classes handlers = { '{http://linux.duke.edu/metadata/common}metadata': PrimaryEntry, '{http://linux.duke.edu/metadata/filelists}filelists': FilelistsEntry, '{http://linux.duke.edu/metadata/other}otherdata': OtherEntry, } self.total = None self.count = 0 self._handlercls = None # Read in type, set package node handler and get total number of # packages if filename[-3:] == '.gz': fh = gzip.open(filename, 'r') else: fh = open(filename, 'r') parser = iterparse(fh, events=('start', 'end')) self.reader = parser.__iter__() event, elem = self.reader.next() self._handlercls = handlers.get(elem.tag, None) if not self._handlercls: raise ValueError('Unknown repodata type "%s" in %s' % ( elem.tag, filename)) # Get the total number of packages self.total = int(elem.get('packages', 0)) def __iter__(self): return self def next(self): for event, elem in self.reader: if event == 'end' and elem.tag[-7:] == 'package': self.count += 1 return self._handlercls(elem) raise StopIteration class BaseEntry: def __init__(self, elem): self._p = {} def __getitem__(self, k): return self._p[k] def keys(self): return self._p.keys() def values(self): return self._p.values() def has_key(self, k): warnings.warn('has_key() will go away in a future version of Yum.\n', Errors.YumFutureDeprecationWarning, stacklevel=2) return k in self._p def __iter__(self): return iter(self._p) def __str__(self): out = StringIO() keys = self.keys() keys.sort() for k in keys: line = u'%s=%s\n' % (k, self[k]) out.write(line.encode('utf8')) return out.getvalue() def _bn(self, qn): if qn.find('}') == -1: return qn return qn.split('}')[1] def _prefixprops(self, elem, prefix): ret = {} for key in elem.attrib: ret[prefix + '_' + self._bn(key)] = elem.attrib[key] return ret class PrimaryEntry(BaseEntry): def __init__(self, elem): BaseEntry.__init__(self, elem) # Avoid excess typing :) p = self._p self.prco = {} self.files = {} for child in elem: name = self._bn(child.tag) if name in ('name', 'arch', 'summary', 'description', 'url', 'packager'): p[name] = child.text elif name == 'version': p.update(child.attrib) elif name in ('time', 'size'): p.update(self._prefixprops(child, name)) elif name in ('checksum', 'location'): p.update(self._prefixprops(child, name)) p[name + '_value'] = child.text if name == 'location' and "location_base" not in p: p["location_base"] = None elif name == 'format': self.setFormat(child) p['pkgId'] = p['checksum_value'] elem.clear() def setFormat(self, elem): # Avoid excessive typing :) p = self._p for child in elem: name = self._bn(child.tag) if name in ('license', 'vendor', 'group', 'buildhost', 'sourcerpm'): p[name] = child.text elif name in ('provides', 'requires', 'conflicts', 'obsoletes'): self.prco[name] = self.getPrco(child) elif name == 'header-range': p.update(self._prefixprops(child, 'rpm_header')) elif name == 'file': file_type = child.get('type', 'file') path = child.text self.files[path] = file_type def getPrco(self, elem): members = [] for child in elem: members.append(child.attrib) return members class FilelistsEntry(BaseEntry): def __init__(self, elem): BaseEntry.__init__(self, elem) self._p['pkgId'] = elem.attrib['pkgid'] self.files = {} for child in elem: name = self._bn(child.tag) if name == 'file': file_type = child.get('type', 'file') path = child.text self.files[path] = file_type elem.clear() class OtherEntry(BaseEntry): def __init__(self, elem): BaseEntry.__init__(self, elem) self._p['pkgId'] = elem.attrib['pkgid'] self._p['changelog'] = [] for child in elem: name = self._bn(child.tag) if name == 'changelog': entry = child.attrib entry['value'] = child.text self._p['changelog'].append(entry) elem.clear() def test(): import sys parser = MDParser(sys.argv[1]) for pkg in parser: print '-' * 40 print pkg print 'read: %s packages (%s suggested)' % (parser.count, parser.total) if __name__ == '__main__': test()
Save