Parcourir la source

altitude: Fix commit 455b941eb1 for python2 and add more validation

Use "requests" to avoid compatibility issues with urllib/urllib2 between
python2 and python3.

Also add more validation about what api.geonames.org might return.
Baptiste Jonglez il y a 8 ans
Parent
commit
07b261d2c5
2 fichiers modifiés avec 16 ajouts et 3 suppressions
  1. 15 3
      altitude/views.py
  2. 1 0
      requirements.txt

+ 15 - 3
altitude/views.py

@@ -1,11 +1,23 @@
-import urllib
+import requests
+import logging
 
 
-from django.http import HttpResponse
+from django.http import HttpResponse, HttpResponseServerError
 from django.conf import settings
 from django.conf import settings
 
 
+logger = logging.getLogger(__name__)
+
 
 
 def geonames_altitude(request, lat, lon):
 def geonames_altitude(request, lat, lon):
     lat = float(lat)
     lat = float(lat)
     lon = float(lon)
     lon = float(lon)
     url = settings.GEONAMES_ASTERGDEM.format(lat=lat, lon=lon)
     url = settings.GEONAMES_ASTERGDEM.format(lat=lat, lon=lon)
-    return HttpResponse(urllib.request.urlopen(url))
+    r = requests.get(url)
+    if r.status_code != 200:
+        return HttpResponseServerError()
+    # The API sometimes returns an error but still sends a 200 code,
+    # so we validate the answer just to make sure...
+    try:
+        return HttpResponse(float(r.text))
+    except ValueError:
+        logger.warning("api.geonames.org error: {}".format(r.text))
+        return HttpResponseServerError()

+ 1 - 0
requirements.txt

@@ -9,5 +9,6 @@ gunicorn==19.3.0
 kombu==3.0.30
 kombu==3.0.30
 Pillow==2.9.0
 Pillow==2.9.0
 pytz==2016.6.1
 pytz==2016.6.1
+requests==2.11.1
 static3==0.6.1
 static3==0.6.1
 wheel==0.24.0
 wheel==0.24.0