diff options
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 |
commit | af8522d68d00ff30bc188513525020f0eda3ae2d (patch) | |
tree | 5f1deb67741f356f7e0e66e490bf73b09eacc44b /chimere/utils.py | |
parent | fff82d3ba66485fdfc58297507ae1438bc9996ab (diff) | |
download | Chimè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.py | 34 |
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: |