diff options
| -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  | 
