diff options
Diffstat (limited to 'chimere/utils.py')
| -rw-r--r-- | chimere/utils.py | 32 | 
1 files changed, 29 insertions, 3 deletions
diff --git a/chimere/utils.py b/chimere/utils.py index 7463a50..a30d49a 100644 --- a/chimere/utils.py +++ b/chimere/utils.py @@ -24,10 +24,12 @@ Utilitaries  import csv  import datetime  import feedparser +import simplejson as json  import os  import re  import StringIO  import tempfile +from urllib import urlencode  import urllib2  import unicodedata  import zipfile @@ -505,10 +507,18 @@ class CSVManager(ImportManager):          if msg:              return (0, 0, msg)          reader = csv.reader(source, delimiter=';', quotechar='"') -        prop_cols = [] -        for pm in Marker.all_properties(): +        prop_cols, nominatim_fields = [], {} +        reverse_nominatim_dct = dict((v, k) +                    for k, v in settings.CHIMERE_NOMINATIM_FIELDS.iteritems()) +        nominatim_default_query = settings.CHIMERE_NOMINATIM_FIELDS +        for idx, pm in enumerate(Marker.all_properties()):              prop_cols.append((pm.name, pm.getAttrName(),                                pm.getAttrName()+'_set')) +            if settings.CHIMERE_NOMINATIM_FIELDS and \ +              pm.slug in reverse_nominatim_dct: +               nominatim_fields[idx+len(self.COLS)] = \ +                                           reverse_nominatim_dct[pm.slug] +               nominatim_default_query.pop(reverse_nominatim_dct[pm.slug])          cols = list(self.COLS) + prop_cols          datas = []          for idx, row in enumerate(reader): @@ -531,7 +541,23 @@ class CSVManager(ImportManager):                     'origin':self.importer_instance.origin,                     'license':self.importer_instance.license}              cls = None -            if 'POINT' in geom: +            if settings.CHIMERE_NOMINATIM_FIELDS: +                nominatim_query = settings.NOMINATIM_URL + "?" +                nominatim_keys = nominatim_default_query.copy() +                nominatim_keys['format'] = 'json' +                for idx in nominatim_fields: +                    nominatim_keys[nominatim_fields[idx]] = row[idx] +                nominatim_query += urlencode(nominatim_keys) +                remotehandle = urllib2.urlopen(nominatim_query) +                result = StringIO.StringIO(remotehandle.read()) +                remotehandle.close() +                result = json.load(result) +                if not result: +                    continue +                result = result[0] +                cls = Marker +                dct['point'] = "POINT(%s %s)" % (result['lon'], result['lat']) +            elif 'POINT' in geom:                  cls = Marker                  dct['point'] = geom              elif 'LINE' in geom:  | 
