def probe(self): items = sum(len(item) for item in self.root) for num, item in enumerate(itertools.chain.from_iterable(item for item in self.root)): yield TaskProgress("Probing XML file, element %d of %d" % (num + 1, items)) if item.tag == 'record': record = Record(root=item) self.records[record.id] = record self.media_paths.update((m.src, m) for m in record.media(mimetype=None)) try: old_record = Record.objects.get(record.id) except KeyError: self.record_new.add(record.id) else: if old_record.mtime == record.mtime and \ old_record.xml.strip() == record.xml.strip(): self.record_identical.add(record.id) else: self.record_conflicts.add(record.id) elif item.tag == 'collection': coll = Collection.fromxml(root=item) self.collections[coll.id] = coll try: old_coll = Collection.objects.get(coll.id) except KeyError: self.coll_new.add(coll.id) else: if old_coll == coll: self.coll_identical.add(coll.id) else: self.coll_conflicts.add(coll.id) self.calc_media_roots()