Exemple #1
0
def safe_iterparse(filename):
    """ Works like iterparse, but hides XML errors (prints a warning). """
    try:
        for event, elem in iterparse(filename):
            yield event, elem
    except SyntaxError: # Bad XML
        print >> sys.stderr, "File is not valid XML:", filename
Exemple #2
0
def safe_iterparse(filename):
    """ Works like iterparse, but hides XML errors (prints a warning). """
    try:
        for event, elem in iterparse(filename):
            yield event, elem
    except SyntaxError:  # Bad XML
        print >> sys.stderr, "File is not valid XML:", filename
Exemple #3
0
    def parse(self, srcfile):
        self.srcfile = srcfile

        if type(srcfile) in types.StringTypes:
            # srcfile is a filename string
            try:
                infile = open(srcfile, 'rt')
            except IOError:
                raise RepoMDError, "Unable to open %s" %(srcfile,)
        else:
            # srcfile is a file object
            infile = srcfile

        # We trust any of these to mean the repomd.xml is valid.
        infile = AutoFileChecksums(infile, ['sha256', 'sha512'],
                                   ignore_missing=True, ignore_none=True)
        parser = iterparse(infile)

        try:
            for event, elem in parser:
                elem_name = ns_cleanup(elem.tag)

                if elem_name == "data":
                    thisdata = RepoData(elem=elem)
                    self.repoData[thisdata.type] = thisdata
                    try:
                        nts = int(thisdata.timestamp)
                        if nts > self.timestamp: # max() not in old python
                            self.timestamp = nts
                    except:
                        pass
                elif elem_name == "revision":
                    self.revision = elem.text
                elif elem_name == "tags":
                    for child in elem:
                        child_name = ns_cleanup(child.tag)
                        if child_name == 'content':
                            self.tags['content'].add(child.text)
                        if child_name == 'distro':
                            cpeid = child.attrib.get('cpeid', '')
                            distro = self.tags['distro'].setdefault(cpeid,set())
                            distro.add(child.text)

            self.checksums = infile.checksums.hexdigests()
            self.length    = len(infile.checksums)
        except SyntaxError, e:
            raise RepoMDError, "Damaged repomd.xml file"
Exemple #4
0
         raise CompsException
         
     if type(srcfile) in types.StringTypes:
         # srcfile is a filename string
         try:
             infile = open(srcfile, 'rt')
         except IOError, e:
             raise CompsException, 'open(%s): #%u %s' % (srcfile, e.errno, e.strerror)
     else:
         # srcfile is a file object
         infile = srcfile
     
     self.compscount += 1
     self.compiled = False
     
     parser = iterparse(infile)
     try:
         for event, elem in parser:
             if elem.tag == "group":
                 group = Group(elem)
                 self.add_group(group)
             if elem.tag == "category":
                 category = Category(elem)
                 self.add_category(category)
     except SyntaxError, e:
         raise CompsException, "comps file is empty/damaged"
         
     del parser
     
 def compile(self, pkgtuplist):
     """ compile the groups into installed/available groups """