diff -r 62e4429f55cd -r 71684a2ea502 src/p4l/management/commands/import_record.py --- a/src/p4l/management/commands/import_record.py Fri Sep 20 03:08:34 2013 +0200 +++ b/src/p4l/management/commands/import_record.py Fri Sep 20 03:19:31 2013 +0200 @@ -38,6 +38,12 @@ default= 50, help= 'number of object to import in bulk operations' ), + make_option('-p', '--preserve', + dest= 'preserve', + action='store_true', + default=False, + help= 'preserve existing record' + ), ) def __init__(self, *args, **kwargs): @@ -122,13 +128,17 @@ - def build_record(self, graph): + def build_record(self, graph, delete=True): record_uri = self.extract_single_value_form_graph(graph,"SELECT DISTINCT ?s WHERE { ?s rdf:type iiep:Record .}") + record_identifier = self.extract_single_value_form_graph(graph,"SELECT DISTINCT ?o WHERE { ?s dct:identifier ?o .}", bindings={'s':URIRef(record_uri)}) + + if delete: + Record.objects.filter(identifier=record_identifier).delete() record = Record() record.uri = record_uri - record.identifier = self.extract_single_value_form_graph(graph,"SELECT DISTINCT ?o WHERE { ?s dct:identifier ?o .}", bindings={'s':URIRef(record.uri)}) + record.identifier = record_identifier record.notes = self.extract_single_value_form_graph(graph,"SELECT DISTINCT ?o WHERE { ?s iiep:notes ?o .}", bindings={'s':URIRef(record.uri)}) record.recordType = self.extract_single_value_form_graph(graph,"SELECT DISTINCT ?o WHERE { ?s dct:type ?o .}", bindings={'s':URIRef(record.uri)}) record.isDocumentPart = self.extract_single_value_form_graph(graph,"SELECT DISTINCT ?o WHERE { ?s iiep:isDocumentPart ?o .}", bindings={'s':URIRef(record.uri)}, convert=self.convert_bool) @@ -317,9 +327,8 @@ writer = show_progress(i, total_records, "Processing record nb %d " % i, 50, writer=writer) try: record_graph = get_empty_graph() - record_graph.parse(data=ET.tostring(elem, encoding='utf-8'), format='xml') - # add transaction management - self.build_record(record_graph) + record_graph.parse(data=ET.tostring(elem, encoding='utf-8'), format='xml') + self.build_record(record_graph, delete=(not self.preserve)) except Exception as e: transaction.rollback() msg = "Error processing resource %d in %s : %s" % (i, records_url, repr(e)) @@ -355,6 +364,7 @@ def handle(self, *args, **options): self.batch_size = options.get('batch_size', 50) + self.preserve = options.get("preserve", False) transaction.enter_transaction_management() transaction.managed(True)