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