def test_quandl_exceptions(self): quandl_errors = [('QELx04', 429, LimitExceededError), ('QEMx01', 500, InternalServerError), ('QEAx01', 400, AuthenticationError), ('QEPx02', 403, ForbiddenError), ('QESx03', 422, InvalidRequestError), ('QECx05', 404, NotFoundError), ('QEXx01', 503, ServiceUnavailableError), ('QEZx02', 400, QuandlError)] httpretty.register_uri(httpretty.GET, "https://www.quandl.com/api/v3/databases", responses=[ httpretty.Response(body=json.dumps({ 'quandl_error': { 'code': x[0], 'message': 'something went wrong' } }), status=x[1]) for x in quandl_errors ]) for expected_error in quandl_errors: self.assertRaises(expected_error[2], lambda: Connection.request('get', 'databases'))
def test_parse_error(self): httpretty.register_uri(httpretty.GET, "https://www.quandl.com/api/v3/databases", body="not json", status=500) self.assertRaises(QuandlError, lambda: Connection.request('get', 'databases'))
def setUpClass(cls): httpretty.enable() dataset_data = {'dataset_data': DatasetDataFactory.build()} httpretty.register_uri( httpretty.GET, re.compile('https://www.quandl.com/api/v3/datasets*'), body=json.dumps(dataset_data)) cls.expected_raw_data = [{ 'date': datetime.date(2015, 7, 11), 'column1': 444.3, 'column2': 10, 'column3': 3 }, { 'date': datetime.date(2015, 7, 13), 'column1': 433.3, 'column2': 4, 'column3': 3 }, { 'date': datetime.date(2015, 7, 14), 'column1': 437.5, 'column2': 3, 'column3': 3 }, { 'date': datetime.date(2015, 7, 15), 'column1': 440.0, 'column2': 2, 'column3': 3 }] cls.expected_list_values = [[datetime.date(2015, 7, 11), 444.3, 10, 3], [datetime.date(2015, 7, 13), 433.3, 4, 3], [datetime.date(2015, 7, 14), 437.5, 3, 3], [datetime.date(2015, 7, 15), 440.0, 2, 3]]
def test_parse_error(self, request_method): ApiConfig.retry_backoff_factor = 0 httpretty.register_uri(getattr(httpretty, request_method), "https://www.quandl.com/api/v3/databases", body="not json", status=500) self.assertRaises( QuandlError, lambda: Connection.request(request_method, 'databases'))
def test_non_quandl_error(self): httpretty.register_uri(httpretty.GET, "https://www.quandl.com/api/v3/databases", body=json.dumps( {'foobar': {'code': 'blah', 'message': 'something went wrong'}}), status=500) self.assertRaises( QuandlError, lambda: Connection.request('get', 'databases'))
def test_correct_response_exception_raised_for_errors_not_in_retry_status_codes(self): ApiConfig.retry_status_codes = [] mock_responses = [self.error_response] httpretty.register_uri(httpretty.GET, "https://www.quandl.com/api/v3/databases", responses=mock_responses) self.assertRaises(InternalServerError, Connection.request, 'get', 'databases')
def test_exception_raised_if_column_and_data_row_mistmatch(self): dataset_data = { 'dataset_data': DatasetDataFactory.build(column_names=['blah'])} httpretty.register_uri(httpretty.GET, re.compile( 'https://www.quandl.com/api/v3/datasets*'), body=json.dumps(dataset_data)) self.assertRaises(InvalidDataError, lambda: Data.all())
def setUpClass(cls): httpretty.enable() datasets = {'datasets': DatasetFactory.build_batch(3)} meta = {'meta': MetaFactory.build(current_page=1, total_pages=1)} datasets.update(meta) httpretty.register_uri(httpretty.GET, re.compile( 'https://www.quandl.com/api/v3/datasets*'), body=json.dumps(datasets))
def test_correct_response_exception_raised_if_retries_fail(self): ApiConfig.number_of_retries = 2 ApiConfig.retry_status_codes = [self.error_response.status] mock_responses = [self.error_response] * 3 httpretty.register_uri(httpretty.GET, "https://www.quandl.com/api/v3/databases", responses=mock_responses) self.assertRaises(InternalServerError, Connection.request, 'get', 'databases')
def test_non_quandl_error(self, request_method): ApiConfig.retry_backoff_factor = 0 httpretty.register_uri(getattr(httpretty, request_method), "https://www.quandl.com/api/v3/databases", body=json.dumps( {'foobar': {'code': 'blah', 'message': 'something went wrong'}}), status=500) self.assertRaises( QuandlError, lambda: Connection.request(request_method, 'databases'))
def test_exception_raised_if_column_and_data_row_mistmatch(self): dataset_data = { 'dataset_data': DatasetDataFactory.build(column_names=['blah']) } httpretty.register_uri( httpretty.GET, re.compile('https://www.quandl.com/api/v3/datasets*'), body=json.dumps(dataset_data)) self.assertRaises(InvalidDataError, lambda: Data.all())
def setUpClass(cls): httpretty.enable() database = {'database': DatabaseFactory.build(database_code='NSE')} httpretty.register_uri(httpretty.GET, re.compile( 'https://www.quandl.com/api/v3/databases/*'), body=json.dumps(database)) cls.db_instance = Database(Database.get_code_from_meta( database['database']), database['database'])
def setUpClass(cls): httpretty.enable() dataset = {'dataset': DatasetFactory.build( database_code='NSE', dataset_code='OIL')} httpretty.register_uri(httpretty.GET, re.compile( 'https://www.quandl.com/api/v3/datasets/*'), body=json.dumps(dataset)) dataset_code = Dataset.get_code_from_meta(dataset['dataset']) cls.dataset_instance = Dataset(dataset_code, dataset['dataset'])
def setUpClass(cls): httpretty.enable() databases = {'databases': DatabaseFactory.build_batch(10)} meta = {'meta': MetaFactory.build()} databases.update(meta) httpretty.register_uri(httpretty.GET, re.compile( 'https://www.quandl.com/api/v3/databases*'), body=json.dumps(databases)) cls.expected_databases = databases
def test_bulk_download_raises_exception_when_error_response(self): httpretty.register_uri(httpretty.GET, re.compile( 'https://www.quandl.com/api/v3/databases/*'), body=json.dumps( {'quandl_error': {'code': 'QEMx01', 'message': 'something went wrong'}}), status=500) self.assertRaises( InternalServerError, lambda: self.database.bulk_download_to_file('.'))
def setUpClass(cls): httpretty.enable() httpretty.register_uri(httpretty.GET, re.compile( 'https://www.quandl.com/api/v3/databases/*'), adding_headers={ 'Location': 'https://www.blah.com/download/db.zip' }, body='{}', status=302) httpretty.register_uri(httpretty.GET, re.compile('https://www.blah.com/'), body='{}')
def test_correct_response_returned_if_retries_succeed(self): ApiConfig.number_of_retries = 3 ApiConfig.retry_status_codes = [self.error_response.status] mock_responses = [self.error_response] + [self.error_response] + [self.success_response] httpretty.register_uri(httpretty.GET, "https://www.quandl.com/api/v3/databases", responses=mock_responses) response = Connection.request('get', 'databases') self.assertEqual(response.json(), self.datatable) self.assertEqual(response.status_code, self.success_response.status)
def setUp(self): httpretty.enable() httpretty.register_uri(httpretty.GET, re.compile( 'https://www.quandl.com/api/v3/databases/*'), adding_headers={ 'Location': 'https://www.blah.com/download/db.zip' }, body='{}', status=302) httpretty.register_uri(httpretty.GET, re.compile('https://www.blah.com/'), body='{}') database = {'database': DatabaseFactory.build(database_code='NSE')} self.database = Database(database['database']['database_code'], database['database']) ApiConfig.api_key = 'api_token' ApiConfig.api_version = '2015-04-09'
def setUp(self): httpretty.enable() httpretty.register_uri( httpretty.GET, re.compile('https://www.quandl.com/api/v3/databases/*'), adding_headers={ 'Location': 'https://www.blah.com/download/db.zip' }, body='{}', status=302) httpretty.register_uri(httpretty.GET, re.compile('https://www.blah.com/'), body='{}') database = {'database': DatabaseFactory.build(database_code='NSE')} self.database = Database(database['database']['database_code'], database['database']) ApiConfig.api_key = 'api_token' ApiConfig.api_version = '2015-04-09'
def setUpClass(cls): httpretty.enable() dataset_data = {'dataset_data': DatasetDataFactory.build()} httpretty.register_uri(httpretty.GET, re.compile( 'https://www.quandl.com/api/v3/datasets*'), body=json.dumps(dataset_data)) cls.expected_raw_data = [{'date': datetime.date(2015, 7, 11), 'column1': 444.3, 'column2': 10, 'column3': 3}, {'date': datetime.date(2015, 7, 13), 'column1': 433.3, 'column2': 4, 'column3': 3}, {'date': datetime.date(2015, 7, 14), 'column1': 437.5, 'column2': 3, 'column3': 3}, {'date': datetime.date(2015, 7, 15), 'column1': 440.0, 'column2': 2, 'column3': 3}] cls.expected_list_values = [[datetime.date(2015, 7, 11), 444.3, 10, 3], [datetime.date(2015, 7, 13), 433.3, 4, 3], [datetime.date(2015, 7, 14), 437.5, 3, 3], [datetime.date(2015, 7, 15), 440.0, 2, 3]]
def test_quandl_exceptions(self): quandl_errors = [('QELx04', 429, LimitExceededError), ('QEMx01', 500, InternalServerError), ('QEAx01', 400, AuthenticationError), ('QEPx02', 403, ForbiddenError), ('QESx03', 422, InvalidRequestError), ('QECx05', 404, NotFoundError), ('QEXx01', 503, ServiceUnavailableError), ('QEZx02', 400, QuandlError)] httpretty.register_uri(httpretty.GET, "https://www.quandl.com/api/v3/databases", responses=[httpretty.Response(body=json.dumps( {'quandl_error': {'code': x[0], 'message': 'something went wrong'}}), status=x[1]) for x in quandl_errors] ) for expected_error in quandl_errors: self.assertRaises( expected_error[2], lambda: Connection.request('get', 'databases'))
def test_parse_error(self): httpretty.register_uri(httpretty.GET, "https://www.quandl.com/api/v3/databases", body="not json", status=500) self.assertRaises( QuandlError, lambda: Connection.request('get', 'databases'))