src/p4l/management/commands/import_record.py
changeset 106 71684a2ea502
parent 105 62e4429f55cd
child 107 48440ff95906
--- 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)