Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2c6531b2 authored by Adam Tauber's avatar Adam Tauber
Browse files

[enh] add routing directions to osm search - closes #254

parent 785f0938
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -10,7 +10,9 @@
 @parse       url, title
"""

import re
from json import loads
from flask_babel import gettext

# engine dependent config
categories = ['map']
@@ -21,10 +23,15 @@ base_url = 'https://nominatim.openstreetmap.org/'
search_string = 'search/{query}?format=json&polygon_geojson=1&addressdetails=1'
result_base_url = 'https://openstreetmap.org/{osm_type}/{osm_id}'

route_url = 'https://graphhopper.com/maps/?point={}&point={}&locale=en-US&vehicle=car&weighting=fastest&turn_costs=true&use_miles=false&layer=Omniscale'
route_re = re.compile('(?:from )?(.+) to (.+)')


# do search-request
def request(query, params):

    params['url'] = base_url + search_string.format(query=query.decode('utf-8'))
    params['route'] = route_re.match(query.decode('utf-8'))

    return params

@@ -34,6 +41,13 @@ def response(resp):
    results = []
    json = loads(resp.text)


    if resp.search_params['route']:
        results.append({
            'answer': gettext('Get directions'),
            'url': route_url.format(*resp.search_params['route'].groups()),
        })

    # parse results
    for r in json:
        if 'display_name' not in r:
+2 −4
Original line number Diff line number Diff line
@@ -37,10 +37,8 @@ def post_search(request, search):
            ip = x_forwarded_for[0]
        else:
            ip = request.remote_addr
        search.result_container.answers.clear()
        search.result_container.answers.add(ip)
        search.result_container.answers['ip'] = {'answer': ip}
    elif p.match(search.search_query.query):
        ua = request.user_agent
        search.result_container.answers.clear()
        search.result_container.answers.add(ua)
        search.result_container.answers['user-agent'] = {'answer': ua}
    return True
+2 −2
Original line number Diff line number Diff line
@@ -131,7 +131,7 @@ class ResultContainer(object):
        self._merged_results = []
        self.infoboxes = []
        self.suggestions = set()
        self.answers = set()
        self.answers = {}
        self.corrections = set()
        self._number_of_results = []
        self._ordered = False
@@ -146,7 +146,7 @@ class ResultContainer(object):
                self.suggestions.add(result['suggestion'])
                results.remove(result)
            elif 'answer' in result:
                self.answers.add(result['answer'])
                self.answers[result['answer']] = result
                results.remove(result)
            elif 'correction' in result:
                self.corrections.add(result['correction'])
+6 −2
Original line number Diff line number Diff line
@@ -33,8 +33,12 @@

    {% if answers %}
    <div id="answers"><span>{{ _('Answers') }}</span>
        {% for answer in answers %}
        <span>{{ answer }}</span>
        {% for answer in answers.values() %}
            {% if answer.url %}
            <a href="{{ answer.url }}">{{ answer.answer }}</a>
            {% else %}
            <span>{{ answer.answer }}</span>
            {% endif %}
        {% endfor %}
    </div>
    {% endif %}
+6 −2
Original line number Diff line number Diff line
@@ -94,9 +94,13 @@
            {%- endif %}

            {% if answers -%}
            {%- for answer in answers %}
            {%- for answer in answers.values() %}
            <div class="result well">
                <span>{{ answer }}</span>
              {% if answer.url %}
                <a href="{{ answer.url }}">{{ answer.answer }}</a>
              {% else %}
                <span>{{ answer.answer }}</span>
              {% endif %}
            </div>
            {%- endfor %}
            {%- endif %}
Loading