From fa9b3df3ca18eaa5aa01b249a9140f72bd4e5e69 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?=
Date: Sat, 30 Apr 2016 23:53:02 +0200
Subject: [PATCH] base adresse: add support for geocoding API (#10326)
---
.../base_adresse/base_adresse_detail.html | 8 ++---
passerelle/apps/base_adresse/views.py | 38 +++++++++++++++++++---
2 files changed, 37 insertions(+), 9 deletions(-)
diff --git a/passerelle/apps/base_adresse/templates/base_adresse/base_adresse_detail.html b/passerelle/apps/base_adresse/templates/base_adresse/base_adresse_detail.html
index 0c71f99..ea72dd5 100644
--- a/passerelle/apps/base_adresse/templates/base_adresse/base_adresse_detail.html
+++ b/passerelle/apps/base_adresse/templates/base_adresse/base_adresse_detail.html
@@ -29,10 +29,10 @@ format.
diff --git a/passerelle/apps/base_adresse/views.py b/passerelle/apps/base_adresse/views.py
index 7500965..ae79ee8 100644
--- a/passerelle/apps/base_adresse/views.py
+++ b/passerelle/apps/base_adresse/views.py
@@ -49,15 +49,43 @@ class BaseAddresseDeleteView(DeleteView):
class SearchView(View, SingleObjectMixin):
model = BaseAddresse
+ def get_query(self, request, *args, **kwargs):
+ if not 'q' in request.GET:
+ return HttpResponseBadRequest('missing parameter')
+ return request.GET['q']
+
def get(self, request, *args, **kwargs):
- raise NotImplementedError()
+ response_format = 'json'
+ if 'format' in request.GET:
+ response_format = request.GET['format']
+ if response_format != 'json':
+ raise NotImplementedError()
+
+ scheme, netloc, path, params, query, fragment = urlparse.urlparse(
+ self.get_object().service_url)
+ path = '/search/'
+ query = urllib.urlencode({'q': self.get_query(request, *args, **kwargs), 'limit': 1})
+ url = urlparse.urlunparse((scheme, netloc, path, params, query, fragment))
+ result_response = requests.get(url)
+ result = []
-class SearchPathView(View, SingleObjectMixin):
- model = BaseAddresse
+ for feature in result_response.json().get('features'):
+ if not feature['geometry']['type'] == 'Point':
+ continue # skip unknown
+ result.append({
+ 'lon': str(feature['geometry']['coordinates'][0]),
+ 'lat': str(feature['geometry']['coordinates'][1]),
+ 'display_name': feature['properties']['label'],
+ })
+ break
- def get(self, request, *args, **kwargs):
- raise NotImplementedError()
+ return utils.response_for_json(request, result)
+
+
+class SearchPathView(SearchView):
+ def get_query(self, request, *args, **kwargs):
+ return kwargs.get('path')
class ReverseView(View, SingleObjectMixin):
--
2.8.1