Source code for pyowm.geocodingapi10.geocoding_manager

from pyowm.commons.http_client import HttpClient
from pyowm.commons.uris import ROOT_GEOCODING_API_URL, DIRECT_GEOCODING_URI, REVERSE_GEOCODING_URI
from pyowm.constants import GEOCODING_API_VERSION
from pyowm.utils import geo
from pyowm.weatherapi30.location import Location


[docs] class GeocodingManager: """ A manager objects that provides a full interface to OWM Geocoding API. :param API_key: the OWM API key :type API_key: str :param config: the configuration dictionary :type config: dict :returns: an *GeocodingManager* instance :raises: *AssertionError* when no API Key is provided """ def __init__(self, API_key, config): assert API_key is not None, 'You must provide a valid API Key' self.API_key = API_key assert isinstance(config, dict) self.http_client = HttpClient(API_key, config, ROOT_GEOCODING_API_URL)
[docs] def geocoding_api_version(self): return GEOCODING_API_VERSION
[docs] def geocode(self, toponym, country=None, state_code=None, limit=None): """ Invokes the direct geocoding API endpoint :param toponym: the name of the location :type toponym: `str` :param country: the 2-chars ISO symbol of the country :type country: `str` or `None` :param state_code: the 2-chars ISO symbol of state (only useful in case the country is US) :type state_code: `str` or `None` :param limit: the max number of results to be returned in case of multiple matchings (no limits by default) :type limit: `int` or `None` :returns: a list of *Location* instances :raises: *AssertionError*, *ValueError*, *APIRequestError* """ assert toponym, 'Toponym must be specified' if country is not None and len(country) != 2: raise ValueError("Country must be a 2-char string") if state_code is not None and len(state_code) != 2: raise ValueError("State Code must be a 2-char string") if limit is not None: assert isinstance(limit, int) assert limit > 0 query = toponym if state_code is not None: query += ',' + state_code if country is not None: query += ',' + country params = {'q': query} if limit is not None: params['limit'] = limit _, json_data = self.http_client.get_json(DIRECT_GEOCODING_URI, params=params) return [Location.from_dict(item) for item in json_data]
[docs] def reverse_geocode(self, lat, lon, limit=None): geo.assert_is_lon(lon) geo.assert_is_lat(lat) if limit is not None: assert isinstance(limit, int) assert limit > 0 params = {'lat': lat, 'lon': lon} if limit is not None: params['limit'] = limit _, json_data = self.http_client.get_json(REVERSE_GEOCODING_URI, params=params) return [Location.from_dict(item) for item in json_data]
def __repr__(self): return '<%s.%s>' % (__name__, self.__class__.__name__)