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
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"
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 """