p!ranha?
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 :  /lib/python2.7/site-packages/yum/

Upload File :
Curr3nt_D!r [ Writeable ] D0cum3nt_r0Ot [ Writeable ]

 
Command :
Current File : /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