def get_no2(self, params_dict): """ Invokes the NO2 Index endpoint :param params_dict: dict of parameters :returns: a string containing raw JSON data :raises: *ValueError*, *APICallError* """ lat = str(params_dict['lat']) lon = str(params_dict['lon']) start = params_dict['start'] interval = params_dict['interval'] # build request URL if start is None: timeref = 'current' else: if interval is None: timeref = self._trim_to( timeformatutils.to_date(start), 'year') else: timeref = self._trim_to( timeformatutils.to_date(start), interval) fixed_url = '%s/%s,%s/%s.json' % (NO2_INDEX_URL, lat, lon, timeref) uri = http_client.HttpClient.to_url(fixed_url, self._API_key, None) _, json_data = self._client.cacheable_get_json(uri) return json_data
def test_to_date(self): unixtime = 1378459200 iso = "2013-09-06 09:20:00+00" date = datetime(2013, 9, 6, 9, 20, 0) self.assertEqual(date, timeformatutils.to_date(unixtime)) self.assertEqual(date, timeformatutils.to_date(iso)) self.assertEqual(date, timeformatutils.to_date(date))
def get_coi(self, params_dict, timeout=socket._GLOBAL_DEFAULT_TIMEOUT): """ Invokes the CO Index endpoint :param params_dict: dict of parameters :param timeout: how many seconds to wait for connection establishment \ (defaults to ``socket._GLOBAL_DEFAULT_TIMEOUT``) :type timeout: int :returns: a string containing raw JSON data :raises: *ValueError*, *APICallError* """ lat = str(params_dict['lat']) lon = str(params_dict['lon']) start = params_dict['start'] interval = params_dict['interval'] # build request URL url_template = '%s%s/%s,%s/%s.json?appid=%s' if start is None: timeref = 'current' else: if interval is None: timeref = self._trim_to(timeformatutils.to_date(start), 'year') else: timeref = self._trim_to(timeformatutils.to_date(start), interval) url = url_template % (ROOT_POLLUTION_API_URL, CO_INDEX_URL, lat, lon, timeref, self._API_key) return self._lookup_cache_or_invoke_API(self._cache, url, timeout)
def get_coi(self, params_dict, timeout=socket._GLOBAL_DEFAULT_TIMEOUT): """ Invokes the CO Index endpoint :param params_dict: dict of parameters :param timeout: how many seconds to wait for connection establishment \ (defaults to ``socket._GLOBAL_DEFAULT_TIMEOUT``) :type timeout: int :returns: a string containing raw JSON data :raises: *ValueError*, *APICallError* """ lat = str(params_dict['lat']) lon = str(params_dict['lon']) start = params_dict['start'] interval = params_dict['interval'] # build request URL url_template = '%s%s/%s,%s/%s.json?appid=%s' if start is None: timeref = 'current' else: if interval is None: timeref = self._trim_to( timeformatutils.to_date(start), 'year') else: timeref = self._trim_to( timeformatutils.to_date(start), interval) url = url_template % (ROOT_POLLUTION_API_URL, CO_INDEX_URL, lat, lon, timeref, self._API_key) return self._lookup_cache_or_invoke_API(self._cache, url, timeout)
def get_no2(self, params_dict): """ Invokes the NO2 Index endpoint :param params_dict: dict of parameters :returns: a string containing raw JSON data :raises: *ValueError*, *APICallError* """ lat = str(params_dict['lat']) lon = str(params_dict['lon']) start = params_dict['start'] interval = params_dict['interval'] # build request URL if start is None: timeref = 'current' else: if interval is None: timeref = self._trim_to(timeformatutils.to_date(start), 'year') else: timeref = self._trim_to(timeformatutils.to_date(start), interval) fixed_url = '%s/%s,%s/%s.json' % (NO2_INDEX_URL, lat, lon, timeref) uri = http_client.HttpClient.to_url(fixed_url, self._API_key, None) _, json_data = self._client.cacheable_get_json(uri) return json_data
def test_creation_time(self): buf = Buffer(self.station_id) ts = buf.creation_time() iso_result = buf.creation_time(timeformat='iso') self.assertEqual(to_ISO8601(ts), iso_result) date_result = buf.creation_time(timeformat='date') self.assertEqual(to_date(ts), date_result) with self.assertRaises(ValueError): buf.creation_time(timeformat='unknown')
def test_trim_to(self): ts = timeformatutils.to_date(1463041620) # 2016-05-12T08:27:00Z self.assertEquals(self.__instance._trim_to(ts, 'minute'), '2016-05-12T08:27Z') self.assertEquals(self.__instance._trim_to(ts, 'hour'), '2016-05-12T08Z') self.assertEquals(self.__instance._trim_to(ts, 'day'), '2016-05-12Z') self.assertEquals(self.__instance._trim_to(ts, 'month'), '2016-05Z') self.assertEquals(self.__instance._trim_to(ts, 'year'), '2016Z') self.assertRaises(ValueError, self.__instance._trim_to, ts, 'abcdef')
def test_get_uvi(self): # case: current UV index params = {'lon': 8.25, 'lat': 43.75, 'start': None, 'interval': None} bkp = self.__instance._lookup_cache_or_invoke_API def mock_func(cache, API_full_url, timeout): return API_full_url self.__instance._lookup_cache_or_invoke_API = mock_func expected_url = 'http://api.openweathermap.org/v3/uvi/43.75,8.25/current.json?appid=xyz' result = self.__instance.get_uvi(params) self.assertEquals(expected_url, result) ts = timeformatutils.to_date(1463041620) # 2016-05-12T08:27:00Z # case: no interval specified params = {'lon': 8.25, 'lat': 43.75, 'start': ts, 'interval': None} expected_url = 'http://api.openweathermap.org/v3/uvi/43.75,8.25/2016Z.json?appid=xyz' result = self.__instance.get_uvi(params) self.assertEquals(expected_url, result) # case: 'minute' specified params = {'lon': 8.25, 'lat': 43.75, 'start': ts, 'interval': 'minute'} expected_url = 'http://api.openweathermap.org/v3/uvi/43.75,8.25/2016-05-12T08:27Z.json?appid=xyz' result = self.__instance.get_uvi(params) self.assertEquals(expected_url, result) # case: 'hour' specified params = {'lon': 8.25, 'lat': 43.75, 'start': ts, 'interval': 'hour'} expected_url = 'http://api.openweathermap.org/v3/uvi/43.75,8.25/2016-05-12T08Z.json?appid=xyz' result = self.__instance.get_uvi(params) self.assertEquals(expected_url, result) # case: 'day' specified params = {'lon': 8.25, 'lat': 43.75, 'start': ts, 'interval': 'day'} expected_url = 'http://api.openweathermap.org/v3/uvi/43.75,8.25/2016-05-12Z.json?appid=xyz' result = self.__instance.get_uvi(params) self.assertEquals(expected_url, result) # case: 'month' specified params = {'lon': 8.25, 'lat': 43.75, 'start': ts, 'interval': 'month'} expected_url = 'http://api.openweathermap.org/v3/uvi/43.75,8.25/2016-05Z.json?appid=xyz' result = self.__instance.get_uvi(params) self.assertEquals(expected_url, result) # case: 'year' specified params = {'lon': 8.25, 'lat': 43.75, 'start': ts, 'interval': 'year'} expected_url = 'http://api.openweathermap.org/v3/uvi/43.75,8.25/2016Z.json?appid=xyz' result = self.__instance.get_uvi(params) self.assertEquals(expected_url, result) self.__instance._lookup_cache_or_invoke_API = bkp
def test_get_coi(self): # case: current CO index params = {'lon': 8.25, 'lat': 43.75, 'start': None, 'interval': None} def mock_func(uri, params=None, headers=None): return 200, uri self.__instance._client.cacheable_get_json = mock_func expected_url = 'http://api.openweathermap.org/pollution/v1/co/43.75,8.25/current.json?APPID=xyz' result = self.__instance.get_coi(params) self.assertEqual(expected_url, result) ts = timeformatutils.to_date(1463041620) # 2016-05-12T08:27:00Z # case: no interval specified params = {'lon': 8.25, 'lat': 43.75, 'start': ts, 'interval': None} expected_url = 'http://api.openweathermap.org/pollution/v1/co/43.75,8.25/2016Z.json?APPID=xyz' result = self.__instance.get_coi(params) self.assertEqual(expected_url, result) # case: 'minute' specified params = {'lon': 8.25, 'lat': 43.75, 'start': ts, 'interval': 'minute'} expected_url = 'http://api.openweathermap.org/pollution/v1/co/43.75,8.25/2016-05-12T08:27Z.json?APPID=xyz' result = self.__instance.get_coi(params) self.assertEquals(expected_url, result) # case: 'hour' specified params = {'lon': 8.25, 'lat': 43.75, 'start': ts, 'interval': 'hour'} expected_url = 'http://api.openweathermap.org/pollution/v1/co/43.75,8.25/2016-05-12T08Z.json?APPID=xyz' result = self.__instance.get_coi(params) self.assertEquals(expected_url, result) # case: 'day' specified params = {'lon': 8.25, 'lat': 43.75, 'start': ts, 'interval': 'day'} expected_url = 'http://api.openweathermap.org/pollution/v1/co/43.75,8.25/2016-05-12Z.json?APPID=xyz' result = self.__instance.get_coi(params) self.assertEquals(expected_url, result) # case: 'month' specified params = {'lon': 8.25, 'lat': 43.75, 'start': ts, 'interval': 'month'} expected_url = 'http://api.openweathermap.org/pollution/v1/co/43.75,8.25/2016-05Z.json?APPID=xyz' result = self.__instance.get_coi(params) self.assertEquals(expected_url, result) # case: 'year' specified params = {'lon': 8.25, 'lat': 43.75, 'start': ts, 'interval': 'year'} expected_url = 'http://api.openweathermap.org/pollution/v1/co/43.75,8.25/2016Z.json?APPID=xyz' result = self.__instance.get_coi(params) self.assertEquals(expected_url, result)
def test_trim_to(self): ts = timeformatutils.to_date(1463041620) # 2016-05-12T08:27:00Z self.assertEqual(self.__instance._trim_to(ts, 'minute'), '2016-05-12T08:27Z') self.assertEqual(self.__instance._trim_to(ts, 'hour'), '2016-05-12T08Z') self.assertEqual(self.__instance._trim_to(ts, 'day'), '2016-05-12Z') self.assertEqual(self.__instance._trim_to(ts, 'month'), '2016-05Z') self.assertEqual(self.__instance._trim_to(ts, 'year'), '2016Z') self.assertRaises(ValueError, self.__instance._trim_to, ts, 'abcdef')