summaryrefslogtreecommitdiff
path: root/chimere/utils.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2012-12-07 02:54:15 +0100
committerÉtienne Loks <etienne.loks@peacefrogs.net>2012-12-07 02:54:15 +0100
commitaf8522d68d00ff30bc188513525020f0eda3ae2d (patch)
tree5f1deb67741f356f7e0e66e490bf73b09eacc44b /chimere/utils.py
parentfff82d3ba66485fdfc58297507ae1438bc9996ab (diff)
downloadChimère-af8522d68d00ff30bc188513525020f0eda3ae2d.tar.bz2
Chimère-af8522d68d00ff30bc188513525020f0eda3ae2d.zip
Admin: improve non overloading imports
* improve non overloading import management in OSM * add a warning message to "modified" items form
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: