summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chimere/tests.py25
-rw-r--r--chimere/utils.py32
2 files changed, 53 insertions, 4 deletions
diff --git a/chimere/tests.py b/chimere/tests.py
index 89c6ee3..f97afab 100644
--- a/chimere/tests.py
+++ b/chimere/tests.py
@@ -19,7 +19,7 @@ from django.test.client import Client
from chimere.admin import managed_modified, MarkerAdmin
from chimere.models import Icon, Importer, Category, SubCategory, Marker,\
- Route, News, Map, MapUsers, MapGroups
+ Route, News, Map, MapUsers, MapGroups, PropertyModel
from chimere.forms import MarkerForm, MapAdminForm
from chimere.templatetags.chimere_tags import display_news
from chimere.utils import ShapefileManager
@@ -133,6 +133,14 @@ def map_setup():
public_propose=False, public_write=False))
return maps
+def propertymodel_setup():
+ pms = []
+ pms.append(PropertyModel.objects.create(name='Address', order=10, available=False,
+ mandatory=False, slug='address', type='T'))
+ pms.append(PropertyModel.objects.create(name='City', order=20, available=False,
+ mandatory=False, slug='town', type='T'))
+ return pms
+
def users_setup():
adminuser = User.objects.create_superuser('admin',
'admin@test.com',
@@ -315,6 +323,21 @@ class GeoRSSImporterTest(TestCase, ImporterTest):
self.marker_importers = [(importer1, 1), (importer2, 32)]
+class CSVImporterTest(TestCase, ImporterTest):
+ def setUp(self):
+ subcategories = subcategory_setup()
+ pm = propertymodel_setup()
+ importer1 = Importer.objects.create(importer_type='CSV',
+ source=test_dir_path+'tests/test.csv')
+ importer1.categories.add(subcategories[0])
+ self.old_settings = settings.CHIMERE_NOMINATIM_FIELDS
+ settings.CHIMERE_NOMINATIM_FIELDS = {'street':'address',
+ 'city':'town', 'country':u'Great Britain'}
+ self.marker_importers = [(importer1, 2)]
+
+ def tearDown(self):
+ settings.CHIMERE_NOMINATIM_FIELDS = self.old_settings
+
class FeedsTest(TestCase):
def setUp(self):
self.areas = areas_setup()
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: