summaryrefslogtreecommitdiff
path: root/chimere/utils.py
diff options
context:
space:
mode:
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
commit00a806255a1f0f1185a883b60ed75701fc3ffcf0 (patch)
treeb74d6e8c3d2238d72f35cce52499224e092526f6 /chimere/utils.py
parentcf53b91f3f7a0d5e4c48eaae0d547a4e88dee62e (diff)
downloadChimè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.py32
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: