Server IP : 103.169.32.36 / Your IP : 216.73.217.13 Web Server : Apache System : Linux web.dpmptsp 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 User : apache ( 48) PHP Version : 5.6.40 Disable Function : NONE MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/lib/python2.7/site-packages/yum/ |
Upload File : |
| Current File : /usr/lib/python2.7/site-packages/yum/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()
| N4m3 |
5!z3 |
L45t M0d!f!3d |
0wn3r / Gr0up |
P3Rm!55!0n5 |
0pt!0n5 |
| .. |
-- |
December 21 2023 09:18:24 |
0 / 0 |
0755 |
|
| | | | | |
| Errors.py |
4.265 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| Errors.pyc |
9.084 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| __init__.py |
304.096 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| __init__.pyc |
199.779 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| callbacks.py |
5.64 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| callbacks.pyc |
6.232 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| comps.py |
31.586 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| comps.pyc |
26.872 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| config.py |
49.886 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| config.pyc |
48.018 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| constants.py |
4.516 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| constants.pyc |
3.42 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| depsolve.py |
74.046 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| depsolve.pyc |
46.906 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| drpm.py |
12.851 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| drpm.pyc |
10.834 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| failover.py |
5.005 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| failover.pyc |
5.236 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| fssnapshots.py |
10.159 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| fssnapshots.pyc |
9.752 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| history.py |
61.125 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| history.pyc |
53.306 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| i18n.py |
20.437 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| i18n.pyc |
16.05 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| igroups.py |
9.313 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| igroups.pyc |
10.218 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| logginglevels.py |
7.904 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| logginglevels.pyc |
6.511 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| mdparser.py |
6.258 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| mdparser.pyc |
7.58 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| metalink.py |
9.188 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| metalink.pyc |
8.836 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| misc.py |
39.567 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| misc.pyc |
39.58 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| packageSack.py |
40.786 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| packageSack.pyc |
41.88 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| packages.py |
84.104 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| packages.pyc |
84.514 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| parser.py |
7.973 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| parser.pyc |
6.499 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| pgpmsg.py |
53.5 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| pgpmsg.pyc |
38.268 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| pkgtag_db.py |
4.864 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| pkgtag_db.pyc |
5.061 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| plugins.py |
28.1 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| plugins.pyc |
29.097 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| repoMDObject.py |
11.231 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| repoMDObject.pyc |
9.17 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| repos.py |
16.528 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| repos.pyc |
17.383 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| rpmsack.py |
70.255 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| rpmsack.pyc |
58.355 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| rpmtrans.py |
24.845 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| rpmtrans.pyc |
22.544 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| sqlitesack.py |
69.763 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| sqlitesack.pyc |
53.751 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| sqlutils.py |
6.271 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| sqlutils.pyc |
5.602 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| transactioninfo.py |
33.784 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| transactioninfo.pyc |
30.293 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| update_md.py |
25.9 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| update_md.pyc |
21.722 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| updateinfo.py |
18.29 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| updateinfo.pyc |
16.36 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|
| yumRepo.py |
83.852 KB |
October 01 2020 17:03:44 |
0 / 0 |
0755 |
|
| yumRepo.pyc |
64.827 KB |
October 01 2020 17:03:44 |
0 / 0 |
0644 |
|