예제 #1
0
    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
예제 #2
0
 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)
예제 #5
0
    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
예제 #6
0
 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))
예제 #7
0
 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')
예제 #8
0
 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')
예제 #9
0
 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
예제 #11
0
    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)
예제 #12
0
 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')