summaryrefslogtreecommitdiff
path: root/chimere/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/utils.py')
-rw-r--r--chimere/utils.py34
1 files changed, 19 insertions, 15 deletions
diff --git a/chimere/utils.py b/chimere/utils.py
index bb24037..73eecd0 100644
--- a/chimere/utils.py
+++ b/chimere/utils.py
@@ -71,7 +71,7 @@ class ImportManager:
pass
def create_or_update_item(self, cls, values, import_key, version=None,
- key='', pk=None):
+ key='', pk=None, overload=True):
updated, created, item = False, False, None
import_key = unicode(import_key).replace(':', '^')
if not key:
@@ -82,20 +82,24 @@ class ImportManager:
'import_source':self.importer_instance.source}
try:
if pk:
- item = cls.objects.get(pk=pk)
+ ref_item = cls.objects.get(pk=pk)
else:
- item = cls.objects.get(**dct_import)
- if version and item.import_version == int(version):
+ ref_item = cls.objects.get(**dct_import)
+ if version and ref_item.import_version == int(version):
# no update since the last import
- return item, None, None
- for k in values:
- setattr(item, k, values[k])
- try:
- item.save()
- except TypeError:
- # error on data source
- return None, False, False
- updated = True
+ return ref_item, None, None
+ if not overload and item.modified_since_import:
+ dct_import['ref_item'] = ref_item
+ else:
+ item = ref_item
+ for k in values:
+ setattr(item, k, values[k])
+ try:
+ item.save()
+ except TypeError:
+ # error on data source
+ return None, False, False
+ updated = True
except ObjectDoesNotExist:
pass
if not item:
@@ -680,7 +684,7 @@ class OSMManager(ImportManager):
or u'ODbL',
'import_version':version}
item, updated, created = self.create_or_update_item(
- Route, dct, node_id, version)
+ Route, dct, node_id, version, overload=False)
if updated:
updated_item += 1
if created:
@@ -713,7 +717,7 @@ class OSMManager(ImportManager):
or u'ODbL',
'import_version':version}
item, updated, created = self.create_or_update_item(
- Marker, dct, node_id, version)
+ Marker, dct, node_id, version, overload=False)
if updated:
updated_item += 1
if created: