diff options
Diffstat (limited to 'chimere/utils.py')
-rw-r--r-- | chimere/utils.py | 53 |
1 files changed, 19 insertions, 34 deletions
diff --git a/chimere/utils.py b/chimere/utils.py index fb478dc..c89ec56 100644 --- a/chimere/utils.py +++ b/chimere/utils.py @@ -70,14 +70,15 @@ class ImportManager: def put(self): pass - def create_or_update_item(self, cls, values, import_key, version=None): + def create_or_update_item(self, cls, values, import_key, version=None, + key=''): updated, created, item = False, False, None import_key = unicode(import_key).replace(':', '^') + if not key: + key = self.importer_instance.importer_type if import_key: dct_import = { - 'import_key__icontains':'%s:%s;' % ( - self.importer_instance.importer_type, - import_key), + 'import_key__icontains':'%s:%s;' % (key, import_key), 'import_source':self.importer_instance.source} try: item = cls.objects.get(**dct_import) @@ -105,8 +106,7 @@ class ImportManager: return None, False, False created = True if import_key: - item.set_key(self.importer_instance.importer_type, - import_key) + item.set_key(key, import_key) item.categories.clear() for cat in self.importer_instance.categories.all(): item.categories.add(cat) @@ -235,36 +235,21 @@ class KMLManager(ImportManager): if coord.tag == ns + 'coordinates': x, y, z = coord.text.split(',') point = 'SRID=4326;POINT(%s %s)' % (x, y) + cls = None + dct = {'description':description, + 'name':name, + 'origin':self.importer_instance.origin, + 'license':self.importer_instance.license} if point: - dct = {'point':point, - 'description':description, - 'name':name, - 'origin':self.importer_instance.origin, - 'license':self.importer_instance.license} - m = None - if pl_id: - dct_import = { - 'import_key__icontains':'%s:%s;' % (pl_key, pl_id), - 'import_source':self.importer_instance.source} - try: - m = Marker.objects.get(**dct_import) - for k in dct: - setattr(m, k, dct[k]) - m.save() - updated_item += 1 - except ObjectDoesNotExist: - m = None - dct.update({ - 'import_source':self.importer_instance.source}) - if not m: - dct['status'] = 'I' - m = Marker.objects.create(**dct) + dct['point'] = point + cls = Marker + if cls: + item, updated, created = self.create_or_update_item( + cls, dct, pl_id, key=pl_key) + if updated: + updated_item += 1 + if created: new_item += 1 - if pl_id: - m.set_key(pl_key, pl_id) - m.categories.clear() - for cat in self.importer_instance.categories.all(): - m.categories.add(cat) return (new_item, updated_item, msg) @classmethod |