Projet

Général

Profil

0001-workflows-handle-bytes-returned-from-geolocation-ser.patch

Frédéric Péters, 27 janvier 2020 15:37

Télécharger (4,81 ko)

Voir les différences:

Subject: [PATCH] workflows: handle bytes returned from geolocation service
 (#39302)

 tests/test_workflows.py | 14 +++++++-------
 wcs/wf/geolocate.py     |  4 ++--
 2 files changed, 9 insertions(+), 9 deletions(-)
tests/test_workflows.py
2766 2766

  
2767 2767
    with mock.patch('wcs.wf.geolocate.http_get_page') as http_get_page:
2768 2768
        http_get_page.return_value = (None, 200,
2769
                json.dumps([{'lat':'48.8337085','lon':'2.3233693'}]), None)
2769
                force_bytes(json.dumps([{'lat':'48.8337085','lon':'2.3233693'}])), None)
2770 2770
        item.perform(formdata)
2771 2771
        assert 'https://nominatim.entrouvert.org/search' in http_get_page.call_args[0][0]
2772 2772
        assert urlparse.quote('169 rue du chateau, paris') in http_get_page.call_args[0][0]
......
2777 2777
    pub.site_options.set('options', 'nominatim_key', 'KEY')
2778 2778
    with mock.patch('wcs.wf.geolocate.http_get_page') as http_get_page:
2779 2779
        http_get_page.return_value = (None, 200,
2780
                json.dumps([{'lat':'48.8337085', 'lon':'2.3233693'}]), None)
2780
                force_bytes(json.dumps([{'lat':'48.8337085', 'lon':'2.3233693'}])), None)
2781 2781
        item.perform(formdata)
2782 2782
        assert 'https://nominatim.entrouvert.org/search' in http_get_page.call_args[0][0]
2783 2783
        assert urlparse.quote('169 rue du chateau, paris') in http_get_page.call_args[0][0]
......
2789 2789
    pub.site_options.set('options', 'geocoding_service_url', 'http://example.net/')
2790 2790
    with mock.patch('wcs.wf.geolocate.http_get_page') as http_get_page:
2791 2791
        http_get_page.return_value = (None, 200,
2792
                json.dumps([{'lat':'48.8337085','lon':'2.3233693'}]), None)
2792
                force_bytes(json.dumps([{'lat':'48.8337085', 'lon':'2.3233693'}])), None)
2793 2793
        item.perform(formdata)
2794 2794
        assert 'http://example.net/?q=' in http_get_page.call_args[0][0]
2795 2795

  
2796 2796
    pub.site_options.set('options', 'geocoding_service_url', 'http://example.net/?param=value')
2797 2797
    with mock.patch('wcs.wf.geolocate.http_get_page') as http_get_page:
2798 2798
        http_get_page.return_value = (None, 200,
2799
                json.dumps([{'lat':'48.8337085','lon':'2.3233693'}]), None)
2799
                force_bytes(json.dumps([{'lat':'48.8337085', 'lon':'2.3233693'}])), None)
2800 2800
        item.perform(formdata)
2801 2801
        assert 'http://example.net/?param=value&' in http_get_page.call_args[0][0]
2802 2802

  
......
2816 2816
    formdata.geolocations = None
2817 2817
    with mock.patch('wcs.wf.geolocate.http_get_page') as http_get_page:
2818 2818
        http_get_page.return_value = (None, 500,
2819
                json.dumps([{'lat':'48.8337085','lon':'2.3233693'}]), None)
2819
                force_bytes(json.dumps([{'lat':'48.8337085', 'lon':'2.3233693'}])), None)
2820 2820
        item.perform(formdata)
2821 2821
        assert formdata.geolocations == {}
2822 2822

  
2823 2823
    # check for nominatim returning an empty result set
2824 2824
    formdata.geolocations = None
2825 2825
    with mock.patch('wcs.wf.geolocate.http_get_page') as http_get_page:
2826
        http_get_page.return_value = (None, 200, json.dumps([]), None)
2826
        http_get_page.return_value = (None, 200, force_bytes(json.dumps([])), None)
2827 2827
        item.perform(formdata)
2828 2828
        assert formdata.geolocations == {}
2829 2829

  
2830 2830
    # check for nominatim bad json
2831 2831
    formdata.geolocations = None
2832 2832
    with mock.patch('wcs.wf.geolocate.http_get_page') as http_get_page:
2833
        http_get_page.return_value = (None, 200, 'bad json', None)
2833
        http_get_page.return_value = (None, 200, b'bad json', None)
2834 2834
        item.perform(formdata)
2835 2835
        assert formdata.geolocations == {}
2836 2836

  
wcs/wf/geolocate.py
26 26
from django.utils.six.moves.urllib import parse as urlparse
27 27
from quixote import get_publisher
28 28

  
29
from ..qommon import _
29
from ..qommon import _, force_str
30 30
from ..qommon import get_logger
31 31
from ..qommon.errors import ConnectionError
32 32
from ..qommon.form import RadiobuttonsWidget, ComputedExpressionWidget, CheckboxWidget
......
132 132
            get_logger().error('error calling geocoding service [%s]', str(e))
133 133
            return
134 134
        try:
135
            data = json.loads(data)
135
            data = json.loads(force_str(data))
136 136
        except ValueError:
137 137
            get_logger().error('non-JSON response from geocoding service')
138 138
            return
139
-