Ejemplo n.º 1
0
    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()