Total Complexity | 7 |
Total Lines | 26 |
Duplicated Lines | 0 % |
Changes | 0 |
1 | # -*- coding: utf-8 -*- |
||
22 | class Geolocator(object): |
||
23 | def __init__(self): |
||
24 | self._geocoder = geocoders.Nominatim(timeout=5, country_bias='fr') |
||
25 | |||
26 | def geocode(self, address): |
||
27 | if not isinstance(address, basestring) \ |
||
28 | and not isinstance(address, dict): |
||
29 | err_msg = u"address should either be of type: %s, or of type %s." \ |
||
30 | % (basestring, dict) |
||
31 | raise TypeError(err_msg) |
||
32 | |||
33 | try: |
||
34 | geolocation = self._geocoder.geocode(address) |
||
35 | |||
36 | if not geolocation: |
||
37 | err_msg = u"Couldn't resolve the following address: '%s'" \ |
||
38 | % address |
||
39 | raise GeolocationFailure(err_msg) |
||
40 | except (exc.GeocoderQuotaExceeded, |
||
41 | exc.GeocoderUnavailable, |
||
42 | exc.GeocoderTimedOut) as e: |
||
43 | raise TemporaryError(u'Geolocator error: %s' % e) |
||
44 | except exc.GeocoderServiceError as e: |
||
45 | raise GeolocationError(u'Geolocator error: %s' % e) |
||
46 | |||
47 | return geolocation |
||
48 |