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