summaryrefslogtreecommitdiff
path: root/chimere/utils.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2012-10-06 14:30:27 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2012-10-06 14:30:27 +0200
commit99b03a18a8d8a4d8ee9f9b78b927d8b5c9fb4004 (patch)
tree93511176adb62b2a9e1e6cdb2e57c4a277a191a6 /chimere/utils.py
parent4f78a7501a0371763cd4c5ddebc0f44797dd944d (diff)
downloadChimère-99b03a18a8d8a4d8ee9f9b78b927d8b5c9fb4004.tar.bz2
Chimère-99b03a18a8d8a4d8ee9f9b78b927d8b5c9fb4004.zip
Import: simplify KML import code
Diffstat (limited to 'chimere/utils.py')
-rw-r--r--chimere/utils.py53
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