From e7c0628751788693b6073ada637fc38b63ad9e38 Mon Sep 17 00:00:00 2001 From: Antonio Date: Thu, 4 Jan 2018 15:00:52 +0100 Subject: [PATCH] Solving errors and refactor --- .../cartodb_services/mapbox/__init__.py | 1 - .../cartodb_services/mapbox/exceptions.py | 18 ---------- .../cartodb_services/mapbox/geocoder.py | 4 +-- .../cartodb_services/mapbox/matrix_client.py | 4 +-- .../cartodb_services/mapbox/routing.py | 4 +-- .../cartodb_services/mapzen/exceptions.py | 33 ------------------- .../cartodb_services/mapzen/geocoder.py | 4 ++- .../cartodb_services/mapzen/isochrones.py | 4 ++- .../cartodb_services/mapzen/matrix_client.py | 2 +- .../cartodb_services/mapzen/routing.py | 4 ++- .../cartodb_services/tools/__init__.py | 2 +- .../cartodb_services/tools/exceptions.py | 28 ++++++++++++++++ .../cartodb_services/tools/qps.py | 5 +-- .../test/test_mapboxgeocoder.py | 2 +- .../test/test_mapboxmatrix.py | 2 +- .../test/test_mapboxrouting.py | 2 +- .../test/test_mapzengeocoder.py | 3 +- .../test/test_mapzenisochrones.py | 2 +- .../test/test_mapzenrouting.py | 2 +- .../python/cartodb_services/test/test_qps.py | 8 +++-- 20 files changed, 60 insertions(+), 74 deletions(-) delete mode 100644 server/lib/python/cartodb_services/cartodb_services/mapbox/exceptions.py delete mode 100644 server/lib/python/cartodb_services/cartodb_services/mapzen/exceptions.py diff --git a/server/lib/python/cartodb_services/cartodb_services/mapbox/__init__.py b/server/lib/python/cartodb_services/cartodb_services/mapbox/__init__.py index 87be984..c613cdc 100644 --- a/server/lib/python/cartodb_services/cartodb_services/mapbox/__init__.py +++ b/server/lib/python/cartodb_services/cartodb_services/mapbox/__init__.py @@ -2,4 +2,3 @@ from routing import MapboxRouting, MapboxRoutingResponse from geocoder import MapboxGeocoder from isolines import MapboxIsolines, MapboxIsochronesResponse from matrix_client import MapboxMatrixClient -from exceptions import ServiceException diff --git a/server/lib/python/cartodb_services/cartodb_services/mapbox/exceptions.py b/server/lib/python/cartodb_services/cartodb_services/mapbox/exceptions.py deleted file mode 100644 index c2573d0..0000000 --- a/server/lib/python/cartodb_services/cartodb_services/mapbox/exceptions.py +++ /dev/null @@ -1,18 +0,0 @@ -''' -Exceptions for the Mapbox services Python wrapper. -''' - - -class ServiceException(Exception): - ''' - Exception to be raised if any Service problem is found. - ''' - - def __init__(self, code, message): - self.code = code - self.message = message - - def __str__(self): - return repr('ServiceException ({code}): {message}'.format( - code=self.code, - message=self.message)) diff --git a/server/lib/python/cartodb_services/cartodb_services/mapbox/geocoder.py b/server/lib/python/cartodb_services/cartodb_services/mapbox/geocoder.py index c546b68..89b2002 100644 --- a/server/lib/python/cartodb_services/cartodb_services/mapbox/geocoder.py +++ b/server/lib/python/cartodb_services/cartodb_services/mapbox/geocoder.py @@ -6,7 +6,7 @@ import json import requests from mapbox import Geocoder from cartodb_services.metrics import Traceable -from cartodb_services.mapbox.exceptions import ServiceException +from cartodb_services.tools.exceptions import ServiceException from cartodb_services.tools.qps import qps_retry GEOCODER_NAME = 'geocoder_name' @@ -69,4 +69,4 @@ class MapboxGeocoder(Traceable): if response.status_code == requests.codes.ok: return self._parse_geocoder_response(response.text) else: - raise ServiceException(response.status_code, response.content) + raise ServiceException(response.status_code, response) diff --git a/server/lib/python/cartodb_services/cartodb_services/mapbox/matrix_client.py b/server/lib/python/cartodb_services/cartodb_services/mapbox/matrix_client.py index 771ec2f..8081ec8 100644 --- a/server/lib/python/cartodb_services/cartodb_services/mapbox/matrix_client.py +++ b/server/lib/python/cartodb_services/cartodb_services/mapbox/matrix_client.py @@ -6,7 +6,7 @@ import requests from cartodb_services.metrics import Traceable from cartodb_services.tools.coordinates import (validate_coordinates, marshall_coordinates) -from exceptions import ServiceException +from cartodb_services.tools.exceptions import ServiceException from cartodb_services.tools.qps import qps_retry BASEURI = ('https://api.mapbox.com/directions-matrix/v1/mapbox/{profile}/' @@ -69,4 +69,4 @@ class MapboxMatrixClient(Traceable): if response.status_code == requests.codes.ok: return response.text else: - raise ServiceException(response.status_code, response.content) + raise ServiceException(response.status_code, response) diff --git a/server/lib/python/cartodb_services/cartodb_services/mapbox/routing.py b/server/lib/python/cartodb_services/cartodb_services/mapbox/routing.py index b78ffd4..bd490c1 100644 --- a/server/lib/python/cartodb_services/cartodb_services/mapbox/routing.py +++ b/server/lib/python/cartodb_services/cartodb_services/mapbox/routing.py @@ -8,7 +8,7 @@ from cartodb_services.metrics import Traceable from cartodb_services.tools import PolyLine from cartodb_services.tools.coordinates import (validate_coordinates, marshall_coordinates) -from cartodb_services.mapbox.exceptions import ServiceException +from cartodb_services.tools.exceptions import ServiceException from cartodb_services.tools.qps import qps_retry BASEURI = ('https://api.mapbox.com/directions/v5/mapbox/{profile}/' @@ -86,7 +86,7 @@ class MapboxRouting(Traceable): elif response.status_code == requests.codes.bad_request: return MapboxRoutingResponse(None, None, None) else: - raise ServiceException(response.status_code, response.content) + raise ServiceException(response.status_code, response) class MapboxRoutingResponse: diff --git a/server/lib/python/cartodb_services/cartodb_services/mapzen/exceptions.py b/server/lib/python/cartodb_services/cartodb_services/mapzen/exceptions.py deleted file mode 100644 index 4877f6a..0000000 --- a/server/lib/python/cartodb_services/cartodb_services/mapzen/exceptions.py +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/local/bin/python -# -*- coding: utf-8 -*- -import json - - -class WrongParams(Exception): - def __init__(self, value): - self.value = value - - def __str__(self): - return repr('Wrong parameters passed: ' + json.dumps(self.value)) - - -class MalformedResult(Exception): - def __str__(self): - return repr('Result structure is malformed') - - -class TimeoutException(Exception): - def __str__(self): - return repr('Timeout requesting to mapzen server') - - -class ServiceException(Exception): - def __init__(self, message, response): - self.message = message - self.response = response - - def response(self): - return self.response - - def __str__(self): - return self.message diff --git a/server/lib/python/cartodb_services/cartodb_services/mapzen/geocoder.py b/server/lib/python/cartodb_services/cartodb_services/mapzen/geocoder.py index 58fdfae..afc2ac8 100644 --- a/server/lib/python/cartodb_services/cartodb_services/mapzen/geocoder.py +++ b/server/lib/python/cartodb_services/cartodb_services/mapzen/geocoder.py @@ -3,7 +3,9 @@ import json import re from requests.adapters import HTTPAdapter -from exceptions import WrongParams, MalformedResult, ServiceException +from cartodb_services.tools.exceptions import (WrongParams, + MalformedResult, + ServiceException) from cartodb_services.tools.qps import qps_retry from cartodb_services.tools import Coordinate, PolyLine from cartodb_services.metrics import Traceable diff --git a/server/lib/python/cartodb_services/cartodb_services/mapzen/isochrones.py b/server/lib/python/cartodb_services/cartodb_services/mapzen/isochrones.py index 6c46648..d5b4652 100644 --- a/server/lib/python/cartodb_services/cartodb_services/mapzen/isochrones.py +++ b/server/lib/python/cartodb_services/cartodb_services/mapzen/isochrones.py @@ -3,7 +3,9 @@ import json import re from requests.adapters import HTTPAdapter -from exceptions import WrongParams, MalformedResult, ServiceException +from cartodb_services.tools.exceptions import (WrongParams, + MalformedResult, + ServiceException) from cartodb_services.tools.qps import qps_retry diff --git a/server/lib/python/cartodb_services/cartodb_services/mapzen/matrix_client.py b/server/lib/python/cartodb_services/cartodb_services/mapzen/matrix_client.py index 68f3e48..4ac4102 100644 --- a/server/lib/python/cartodb_services/cartodb_services/mapzen/matrix_client.py +++ b/server/lib/python/cartodb_services/cartodb_services/mapzen/matrix_client.py @@ -1,7 +1,7 @@ import requests import json from cartodb_services.tools.qps import qps_retry -from exceptions import ServiceException +from cartodb_services.tools.exceptions import ServiceException from cartodb_services.metrics import Traceable diff --git a/server/lib/python/cartodb_services/cartodb_services/mapzen/routing.py b/server/lib/python/cartodb_services/cartodb_services/mapzen/routing.py index e1d8cdb..2dc0823 100644 --- a/server/lib/python/cartodb_services/cartodb_services/mapzen/routing.py +++ b/server/lib/python/cartodb_services/cartodb_services/mapzen/routing.py @@ -3,7 +3,9 @@ import json import re from requests.adapters import HTTPAdapter -from exceptions import WrongParams, MalformedResult, ServiceException +from cartodb_services.tools.exceptions import (WrongParams, + MalformedResult, + ServiceException) from cartodb_services.tools.qps import qps_retry from cartodb_services.tools import Coordinate, PolyLine from cartodb_services.metrics import MetricsDataGatherer, Traceable diff --git a/server/lib/python/cartodb_services/cartodb_services/tools/__init__.py b/server/lib/python/cartodb_services/cartodb_services/tools/__init__.py index 16072f8..485a5f9 100644 --- a/server/lib/python/cartodb_services/cartodb_services/tools/__init__.py +++ b/server/lib/python/cartodb_services/cartodb_services/tools/__init__.py @@ -4,4 +4,4 @@ from polyline import PolyLine from log import Logger, LoggerConfig from rate_limiter import RateLimiter from service_manager import ServiceManager, RateLimitExceeded -from legacy_service_manager import LegacyServiceManager +from legacy_service_manager import LegacyServiceManager diff --git a/server/lib/python/cartodb_services/cartodb_services/tools/exceptions.py b/server/lib/python/cartodb_services/cartodb_services/tools/exceptions.py index ceb5edb..a970679 100644 --- a/server/lib/python/cartodb_services/cartodb_services/tools/exceptions.py +++ b/server/lib/python/cartodb_services/cartodb_services/tools/exceptions.py @@ -1,3 +1,31 @@ +import json + + class TimeoutException(Exception): def __str__(self): return repr('Timeout requesting to server') + + +class ServiceException(Exception): + def __init__(self, message, response): + self.message = message + self.response = response + + def response(self): + return self.response + + def __str__(self): + return self.message + + +class WrongParams(Exception): + def __init__(self, value): + self.value = value + + def __str__(self): + return repr('Wrong parameters passed: ' + json.dumps(self.value)) + + +class MalformedResult(Exception): + def __str__(self): + return repr('Result structure is malformed') diff --git a/server/lib/python/cartodb_services/cartodb_services/tools/qps.py b/server/lib/python/cartodb_services/cartodb_services/tools/qps.py index 59cec1e..074155b 100644 --- a/server/lib/python/cartodb_services/cartodb_services/tools/qps.py +++ b/server/lib/python/cartodb_services/cartodb_services/tools/qps.py @@ -6,7 +6,8 @@ from exceptions import TimeoutException DEFAULT_RETRY_TIMEOUT = 60 DEFAULT_QUERIES_PER_SECOND = 10 -def qps_retry(original_function=None,**options): + +def qps_retry(original_function=None, **options): """ Query Per Second retry decorator The intention of this decorator is to retry requests against third party services that has QPS restriction. @@ -55,7 +56,7 @@ class QPSService: def retry(self, first_request_time, retry_count): elapsed = datetime.now() - first_request_time - if elapsed.total_seconds() > self._retry_timeout: + if elapsed.total_seconds() > self._retry_timeout: raise TimeoutException() # inverse qps * (1.5 ^ i) is an increased sleep time of 1.5x per diff --git a/server/lib/python/cartodb_services/test/test_mapboxgeocoder.py b/server/lib/python/cartodb_services/test/test_mapboxgeocoder.py index 50368ed..61a2f5f 100644 --- a/server/lib/python/cartodb_services/test/test_mapboxgeocoder.py +++ b/server/lib/python/cartodb_services/test/test_mapboxgeocoder.py @@ -1,7 +1,7 @@ import unittest from mock import Mock from cartodb_services.mapbox import MapboxGeocoder -from cartodb_services.mapbox import ServiceException +from cartodb_services.tools.exceptions import ServiceException VALID_TOKEN = 'pk.eyJ1IjoiYWNhcmxvbiIsImEiOiJjamJuZjQ1Zjc0Ymt4Mnh0YmFrMmhtYnY4In0.gt9cw0VeKc3rM2mV5pcEmg' INVALID_TOKEN = 'invalid_token' diff --git a/server/lib/python/cartodb_services/test/test_mapboxmatrix.py b/server/lib/python/cartodb_services/test/test_mapboxmatrix.py index 173a7ce..4df64fa 100644 --- a/server/lib/python/cartodb_services/test/test_mapboxmatrix.py +++ b/server/lib/python/cartodb_services/test/test_mapboxmatrix.py @@ -2,7 +2,7 @@ import unittest from mock import Mock from cartodb_services.mapbox import MapboxMatrixClient from cartodb_services.mapbox.matrix_client import DEFAULT_PROFILE -from cartodb_services.mapbox import ServiceException +from cartodb_services.tools.exceptions import ServiceException from cartodb_services.tools import Coordinate VALID_TOKEN = 'pk.eyJ1IjoiYWNhcmxvbiIsImEiOiJjamJuZjQ1Zjc0Ymt4Mnh0YmFrMmhtYnY4In0.gt9cw0VeKc3rM2mV5pcEmg' diff --git a/server/lib/python/cartodb_services/test/test_mapboxrouting.py b/server/lib/python/cartodb_services/test/test_mapboxrouting.py index 2c4dc70..4b88fa6 100644 --- a/server/lib/python/cartodb_services/test/test_mapboxrouting.py +++ b/server/lib/python/cartodb_services/test/test_mapboxrouting.py @@ -2,7 +2,7 @@ import unittest from mock import Mock from cartodb_services.mapbox import MapboxRouting from cartodb_services.mapbox.routing import DEFAULT_PROFILE -from cartodb_services.mapbox import ServiceException +from cartodb_services.tools.exceptions import ServiceException from cartodb_services.tools import Coordinate VALID_TOKEN = 'pk.eyJ1IjoiYWNhcmxvbiIsImEiOiJjamJuZjQ1Zjc0Ymt4Mnh0YmFrMmhtYnY4In0.gt9cw0VeKc3rM2mV5pcEmg' diff --git a/server/lib/python/cartodb_services/test/test_mapzengeocoder.py b/server/lib/python/cartodb_services/test/test_mapzengeocoder.py index 3a3b1e6..44bb7dd 100644 --- a/server/lib/python/cartodb_services/test/test_mapzengeocoder.py +++ b/server/lib/python/cartodb_services/test/test_mapzengeocoder.py @@ -6,7 +6,8 @@ import requests_mock from mock import Mock from cartodb_services.mapzen import MapzenGeocoder -from cartodb_services.mapzen.exceptions import MalformedResult, TimeoutException +from cartodb_services.tools.exceptions import (MalformedResult, + TimeoutException) requests_mock.Mocker.TEST_PREFIX = 'test_' diff --git a/server/lib/python/cartodb_services/test/test_mapzenisochrones.py b/server/lib/python/cartodb_services/test/test_mapzenisochrones.py index 184b010..549a82c 100644 --- a/server/lib/python/cartodb_services/test/test_mapzenisochrones.py +++ b/server/lib/python/cartodb_services/test/test_mapzenisochrones.py @@ -4,7 +4,7 @@ import requests_mock from mock import Mock from cartodb_services.mapzen import MapzenIsochrones -from cartodb_services.mapzen.exceptions import ServiceException +from cartodb_services.tools.exceptions import ServiceException requests_mock.Mocker.TEST_PREFIX = 'test_' diff --git a/server/lib/python/cartodb_services/test/test_mapzenrouting.py b/server/lib/python/cartodb_services/test/test_mapzenrouting.py index 916558a..54e90cd 100644 --- a/server/lib/python/cartodb_services/test/test_mapzenrouting.py +++ b/server/lib/python/cartodb_services/test/test_mapzenrouting.py @@ -9,7 +9,7 @@ from urlparse import urlparse, parse_qs from mock import Mock from cartodb_services.mapzen import MapzenRouting, MapzenRoutingResponse -from cartodb_services.mapzen.exceptions import WrongParams +from cartodb_services.tools.exceptions import WrongParams from cartodb_services.tools import Coordinate requests_mock.Mocker.TEST_PREFIX = 'test_' diff --git a/server/lib/python/cartodb_services/test/test_qps.py b/server/lib/python/cartodb_services/test/test_qps.py index bf396ca..87b6760 100644 --- a/server/lib/python/cartodb_services/test/test_qps.py +++ b/server/lib/python/cartodb_services/test/test_qps.py @@ -2,13 +2,15 @@ import requests from unittest import TestCase from nose.tools import assert_raises from datetime import datetime, date -from cartodb_services.mapzen.qps import qps_retry -from cartodb_services.mapzen.exceptions import ServiceException, TimeoutException +from cartodb_services.tools.qps import qps_retry +from cartodb_services.tools.exceptions import (ServiceException, + TimeoutException) import requests_mock import mock requests_mock.Mocker.TEST_PREFIX = 'test_' + @requests_mock.Mocker() class TestQPS(TestCase): QPS_ERROR_MESSAGE = "Queries per second exceeded: Queries exceeded (10 allowed)" @@ -26,7 +28,7 @@ class TestQPS(TestCase): return self.QPS_ERROR_MESSAGE req_mock.register_uri('GET', 'http://localhost/test_qps', - text=_text_cb) + text=_text_cb) with self.assertRaises(TimeoutException): c = TestClass() c.test()