def test_online_query_year(self): cisco_eox_api = CiscoEoxApi() with pytest.raises(CiscoApiCallFailed): cisco_eox_api.query_year(self.TEST_YEAR, 1) cisco_eox_api.load_client_credentials() cisco_eox_api.create_temporary_access_token() assert cisco_eox_api.amount_of_pages() == 0 assert cisco_eox_api.get_current_page() == 0 assert cisco_eox_api.amount_of_total_records() == 0 assert cisco_eox_api.get_page_record_count() == 0 _ = cisco_eox_api.query_year(self.TEST_YEAR, 1) assert cisco_eox_api.amount_of_pages() == 14 assert cisco_eox_api.get_current_page() == 1 assert cisco_eox_api.amount_of_total_records() >= 13203 assert cisco_eox_api.get_page_record_count() == 1000 assert cisco_eox_api.has_api_error() is False
def test_online_query_year(self): cisco_eox_api = CiscoEoxApi() with pytest.raises(CiscoApiCallFailed): cisco_eox_api.query_year(self.TEST_YEAR, 1) cisco_eox_api.load_client_credentials() cisco_eox_api.create_temporary_access_token() assert cisco_eox_api.amount_of_pages() == 0 assert cisco_eox_api.get_current_page() == 0 assert cisco_eox_api.amount_of_total_records() == 0 assert cisco_eox_api.get_page_record_count() == 0 _ = cisco_eox_api.query_year(self.TEST_YEAR, 1) # the response for the year is not stable over time, so just check that something was provided assert cisco_eox_api.amount_of_pages() > 2 assert cisco_eox_api.get_current_page() == 1 assert cisco_eox_api.amount_of_total_records() >= 1001 assert cisco_eox_api.get_page_record_count() == 1000 assert cisco_eox_api.has_api_error() is False
def test_offline_query_year(self, monkeypatch): class MockSession: def get(self, *args, **kwargs): r = Response() r.status_code = 200 with open( "app/ciscoeox/tests/data/cisco_eox_response_page_1_of_1.json" ) as f: r._content = f.read().encode("utf-8") return r monkeypatch.setattr(requests, "Session", MockSession) cisco_eox_api = CiscoEoxApi() monkeypatch.setattr( cisco_eox_api, "create_temporary_access_token", lambda force_new_token=True: mock_access_token_generation()) cisco_eox_api.load_client_credentials() cisco_eox_api.create_temporary_access_token() assert cisco_eox_api.get_eox_records() == [] assert cisco_eox_api.amount_of_pages() == 0 assert cisco_eox_api.get_current_page() == 0 assert cisco_eox_api.amount_of_total_records() == 0 assert cisco_eox_api.get_page_record_count() == 0 jresult = cisco_eox_api.query_year(self.TEST_YEAR, 1) assert "EOXRecord" in jresult assert "PaginationResponseRecord" in jresult assert len(jresult["EOXRecord"]) == 3 assert cisco_eox_api.get_eox_records() == jresult["EOXRecord"] assert cisco_eox_api.amount_of_pages() == 1 assert cisco_eox_api.get_current_page() == 1 assert cisco_eox_api.amount_of_total_records() == 3 assert cisco_eox_api.get_page_record_count() == 3 assert cisco_eox_api.has_api_error() is False assert cisco_eox_api.get_api_error_message() == "no error" assert cisco_eox_api.get_error_description( jresult["EOXRecord"][0]) == "" assert cisco_eox_api.get_error_description( jresult["EOXRecord"][0]) == ""
def get_raw_api_data(api_query=None, year=None): """ returns all EoX records for a specific query (from all pages) :param api_query: single query that is send to the Cisco EoX API :param year: get all EoX data that are announced in a specific year :raises CiscoApiCallFailed: exception raised if Cisco EoX API call failed :return: list that contains all EoX records from the Cisco EoX API """ if api_query is None and year is None: raise ValueError("either year or the api_query must be provided") if api_query: if type(api_query) is not str: raise ValueError("api_query must be a string value") if year: if type(year) is not int: raise ValueError("year must be an integer value") # load application settings and check, that the API is enabled app_settings = AppSettings() if not app_settings.is_cisco_api_enabled(): msg = "Cisco API access not enabled" logger.warning(msg) raise CiscoApiCallFailed(msg) # start Cisco EoX API query logger.info("send query to Cisco EoX database: %s" % api_query) eoxapi = CiscoEoxApi() eoxapi.load_client_credentials() results = [] try: current_page = 1 result_pages = 999 while current_page <= result_pages: logger.info("Executing API query %s on page '%d" % ('%s' % api_query if api_query else "for year %d" % year, current_page)) # will raise a CiscoApiCallFailed exception on error if year: eoxapi.query_year(year_to_query=year, page=current_page) else: eoxapi.query_product(product_id=api_query, page=current_page) result_pages = eoxapi.amount_of_pages() if eoxapi.get_page_record_count() > 0: results.extend(eoxapi.get_eox_records()) current_page += 1 except ConnectionFailedException: logger.error("Query failed, server not reachable: %s" % api_query, exc_info=True) raise except CiscoApiCallFailed: logger.fatal("Query failed: %s" % api_query, exc_info=True) raise logger.debug("found %d records for year %s" % (len(results), year)) return results