diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2013-08-12 20:25:48 +0200 |
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2013-08-12 20:25:48 +0200 |
| commit | 00a806255a1f0f1185a883b60ed75701fc3ffcf0 (patch) | |
| tree | b74d6e8c3d2238d72f35cce52499224e092526f6 /chimere/utils.py | |
| parent | cf53b91f3f7a0d5e4c48eaae0d547a4e88dee62e (diff) | |
| download | Chimère-00a806255a1f0f1185a883b60ed75701fc3ffcf0.tar.bz2 Chimère-00a806255a1f0f1185a883b60ed75701fc3ffcf0.zip | |
Import: allow use of CSV for imports
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: |
