diff --git a/setup.py b/setup.py index f639fc7..79e3be9 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ # This is also defined in simfin/__init__.py and must be # updated in both places. -MY_VERSION = '0.8.4' +MY_VERSION = '0.9.0' setup( name='simfin', diff --git a/simfin/__init__.py b/simfin/__init__.py index fe0af8f..654fc38 100644 --- a/simfin/__init__.py +++ b/simfin/__init__.py @@ -1,5 +1,5 @@ # This is also defined in setup.py and must be updated in both places. -__version__ = "0.8.4" +__version__ = "0.9.0" # Expose the following as top-level imports. diff --git a/simfin/download.py b/simfin/download.py index bb1c2d9..1b3a1b4 100644 --- a/simfin/download.py +++ b/simfin/download.py @@ -21,6 +21,14 @@ ########################################################################## +def _headers_dataset(): + api_key = get_api_key() + if api_key is not None: + return {'Authorization': 'api-key ' + api_key} + else: + raise ValueError('Api-Key is not set') + + def _url_dataset(dataset, market=None, variant=None): """ Compose the URL for a dataset on the SimFin server. @@ -46,13 +54,8 @@ def _url_dataset(dataset, market=None, variant=None): if market is not None: args += '&market=' + market - # API key. - api_key = get_api_key() - if api_key is not None: - args += '&api-key=' + api_key - # Base URL for the bulk-download API on the SimFin server. - base_url = 'https://simfin.com/api/bulk?' + base_url = 'https://backend.simfin.com/api/bulk-download?' # Combine base URL and arguments. url = base_url + args @@ -107,7 +110,7 @@ def _print_download_progress(downloaded_size, total_size): ########################################################################## -def _download(url, download_path): +def _download(url, headers, download_path): """ Download a file from an internet URL and save it to disk. @@ -130,7 +133,8 @@ def _download(url, download_path): """ # Open a streaming connection to the server. - with requests.get(url, stream=True) as response: + with requests.get(url, headers=headers, + stream=True) as response: # Get the status code for the connection. status_code = response.status_code @@ -173,7 +177,7 @@ def _download(url, download_path): ########################################################################## -def _maybe_download(name, url, path, download_path, refresh_days): +def _maybe_download(name, url, headers, path, download_path, refresh_days): """ Check if the file in `path` exists on disk or if it is too old, and then download the file from `url` and save it to disk. @@ -236,7 +240,7 @@ def _maybe_download(name, url, path, download_path, refresh_days): if must_download: # Download the file from the SimFin server. # This is assumed to succeed unless an exception is raised. - _download(url=url, download_path=download_path) + _download(url=url, headers=headers, download_path=download_path) if download_path.endswith('zip'): # Downloaded file must be unzipped into the data-dir. @@ -285,12 +289,14 @@ def _maybe_download_dataset(refresh_days, **kwargs): # Full path for the downloaded file. download_path = _path_download_dataset(**kwargs) + headers = _headers_dataset() + # URL to SimFin's server where the file is located. url = _url_dataset(**kwargs) return _maybe_download(name=dataset_name, path=path, download_path=download_path, - url=url, refresh_days=refresh_days) + url=url, headers=headers, refresh_days=refresh_days) ########################################################################## @@ -313,8 +319,9 @@ def _maybe_download_info(name, refresh_days): # URL to SimFin's server where the file is located. url = _url_info(name=name) + headers = _headers_dataset() return _maybe_download(name=name, path=path, download_path=download_path, - url=url, refresh_days=refresh_days) + url=url,headers=headers, refresh_days=refresh_days) ########################################################################## diff --git a/simfin/names_extra.py b/simfin/names_extra.py index dd3d1ef..3318f32 100644 --- a/simfin/names_extra.py +++ b/simfin/names_extra.py @@ -18,10 +18,10 @@ SPS = SALES_PER_SHARE = 'Sales Per Share' #: Net Income / Number of Shares. -EPS_BASIC = EPS = EARNINGS_PER_SHARE = 'Earnings per Share, Basic' +EPS_BASIC = EPS = EARNINGS_PER_SHARE = 'Earnings Per Share, Basic' #: Net Income / Number of Shares. -EPS_DILUTED = 'Earnings per Share, Diluted' +EPS_DILUTED = 'Earnings Per Share, Diluted' #: Total Equity / Number of Shares. EQ_PS = EQUITY_PER_SHARE = BV_PS = BOOK_VALUE_PER_SHARE = 'Equity Per Share' diff --git a/tests/test_load.py b/tests/test_load.py index 9d5197f..0e52335 100644 --- a/tests/test_load.py +++ b/tests/test_load.py @@ -18,11 +18,166 @@ sf.set_data_dir(data_dir='~/simfin_data/') # Load API key or use default 'free' if key-file doesn't exist. -sf.load_api_key(path='~/simfin_api_key.txt', default_key='free') +sf.load_api_key(path='~/simfin_api_key.txt') # Set number of days before refreshing data from SimFin server. refresh_days = 30 +all_dataset_test = [{"dataset": "income", "variant": "quarterly", "market": "US", "premium": "false"}, + {"dataset": "income", "variant": "annual", "market": "US", "premium": "false"}, + {"dataset": "income", "variant": "ttm", "market": "US", "premium": "false"}, + {"dataset": "income", "variant": "quarterly-full", "market": "US", "premium": "true"}, + {"dataset": "income", "variant": "annual-full", "market": "US", "premium": "true"}, + {"dataset": "income", "variant": "ttm-full", "market": "US", "premium": "true"}, + {"dataset": "income", "variant": "quarterly-asreported", "market": "US", "premium": "true"}, + {"dataset": "income", "variant": "annual-asreported", "market": "US", "premium": "true"}, + {"dataset": "income", "variant": "ttm-asreported", "market": "US", "premium": "true"}, + {"dataset": "income", "variant": "quarterly-full-asreported", "market": "US", "premium": "true"}, + {"dataset": "income", "variant": "annual-full-asreported", "market": "US", "premium": "true"}, + {"dataset": "income", "variant": "ttm-full-asreported", "market": "US", "premium": "true"}, + {"dataset": "balance", "variant": "quarterly", "market": "US", "premium": "false"}, + {"dataset": "balance", "variant": "annual", "market": "US", "premium": "false"}, + {"dataset": "balance", "variant": "ttm", "market": "US", "premium": "false"}, + {"dataset": "balance", "variant": "quarterly-full", "market": "US", "premium": "true"}, + {"dataset": "balance", "variant": "annual-full", "market": "US", "premium": "true"}, + {"dataset": "balance", "variant": "ttm-full", "market": "US", "premium": "true"}, + {"dataset": "balance", "variant": "quarterly-asreported", "market": "US", "premium": "true"}, + {"dataset": "balance", "variant": "annual-asreported", "market": "US", "premium": "true"}, + {"dataset": "balance", "variant": "ttm-asreported", "market": "US", "premium": "true"}, + {"dataset": "balance", "variant": "quarterly-full-asreported", "market": "US", "premium": "true"}, + {"dataset": "balance", "variant": "annual-full-asreported", "market": "US", "premium": "true"}, + {"dataset": "balance", "variant": "ttm-full-asreported", "market": "US", "premium": "true"}, + {"dataset": "cashflow", "variant": "quarterly", "market": "US", "premium": "false"}, + {"dataset": "cashflow", "variant": "annual", "market": "US", "premium": "false"}, + {"dataset": "cashflow", "variant": "ttm", "market": "US", "premium": "false"}, + {"dataset": "cashflow", "variant": "quarterly-full", "market": "US", "premium": "true"}, + {"dataset": "cashflow", "variant": "annual-full", "market": "US", "premium": "true"}, + {"dataset": "cashflow", "variant": "ttm-full", "market": "US", "premium": "true"}, + {"dataset": "cashflow", "variant": "quarterly-asreported", "market": "US", "premium": "true"}, + {"dataset": "cashflow", "variant": "annual-asreported", "market": "US", "premium": "true"}, + {"dataset": "cashflow", "variant": "ttm-asreported", "market": "US", "premium": "true"}, + {"dataset": "cashflow", "variant": "quarterly-full-asreported", "market": "US", "premium": "true"}, + {"dataset": "cashflow", "variant": "annual-full-asreported", "market": "US", "premium": "true"}, + {"dataset": "cashflow", "variant": "ttm-full-asreported", "market": "US", "premium": "true"}, + {"dataset": "income-banks", "variant": "quarterly", "market": "US", "premium": "false"}, + {"dataset": "income-banks", "variant": "annual", "market": "US", "premium": "false"}, + {"dataset": "income-banks", "variant": "ttm", "market": "US", "premium": "false"}, + {"dataset": "income-banks", "variant": "quarterly-full", "market": "US", "premium": "true"}, + {"dataset": "income-banks", "variant": "annual-full", "market": "US", "premium": "true"}, + {"dataset": "income-banks", "variant": "ttm-full", "market": "US", "premium": "true"}, + {"dataset": "income-banks", "variant": "quarterly-asreported", "market": "US", "premium": "true"}, + {"dataset": "income-banks", "variant": "annual-asreported", "market": "US", "premium": "true"}, + {"dataset": "income-banks", "variant": "ttm-asreported", "market": "US", "premium": "true"}, + {"dataset": "income-banks", "variant": "quarterly-full-asreported", "market": "US", + "premium": "true"}, + {"dataset": "income-banks", "variant": "annual-full-asreported", "market": "US", "premium": "true"}, + {"dataset": "income-banks", "variant": "ttm-full-asreported", "market": "US", "premium": "true"}, + {"dataset": "balance-banks", "variant": "quarterly", "market": "US", "premium": "false"}, + {"dataset": "balance-banks", "variant": "annual", "market": "US", "premium": "false"}, + {"dataset": "balance-banks", "variant": "ttm", "market": "US", "premium": "false"}, + {"dataset": "balance-banks", "variant": "quarterly-full", "market": "US", "premium": "true"}, + {"dataset": "balance-banks", "variant": "annual-full", "market": "US", "premium": "true"}, + {"dataset": "balance-banks", "variant": "ttm-full", "market": "US", "premium": "true"}, + {"dataset": "balance-banks", "variant": "quarterly-asreported", "market": "US", "premium": "true"}, + {"dataset": "balance-banks", "variant": "annual-asreported", "market": "US", "premium": "true"}, + {"dataset": "balance-banks", "variant": "ttm-asreported", "market": "US", "premium": "true"}, + {"dataset": "balance-banks", "variant": "quarterly-full-asreported", "market": "US", + "premium": "true"}, + {"dataset": "balance-banks", "variant": "annual-full-asreported", "market": "US", + "premium": "true"}, + {"dataset": "balance-banks", "variant": "ttm-full-asreported", "market": "US", "premium": "true"}, + {"dataset": "cashflow-banks", "variant": "quarterly", "market": "US", "premium": "false"}, + {"dataset": "cashflow-banks", "variant": "annual", "market": "US", "premium": "false"}, + {"dataset": "cashflow-banks", "variant": "ttm", "market": "US", "premium": "false"}, + {"dataset": "cashflow-banks", "variant": "quarterly-full", "market": "US", "premium": "true"}, + {"dataset": "cashflow-banks", "variant": "annual-full", "market": "US", "premium": "true"}, + {"dataset": "cashflow-banks", "variant": "ttm-full", "market": "US", "premium": "true"}, + {"dataset": "cashflow-banks", "variant": "quarterly-asreported", "market": "US", "premium": "true"}, + {"dataset": "cashflow-banks", "variant": "annual-asreported", "market": "US", "premium": "true"}, + {"dataset": "cashflow-banks", "variant": "ttm-asreported", "market": "US", "premium": "true"}, + {"dataset": "cashflow-banks", "variant": "quarterly-full-asreported", "market": "US", + "premium": "true"}, + {"dataset": "cashflow-banks", "variant": "annual-full-asreported", "market": "US", + "premium": "true"}, + {"dataset": "cashflow-banks", "variant": "ttm-full-asreported", "market": "US", "premium": "true"}, + {"dataset": "income-insurance", "variant": "quarterly", "market": "US", "premium": "false"}, + {"dataset": "income-insurance", "variant": "annual", "market": "US", "premium": "false"}, + {"dataset": "income-insurance", "variant": "ttm", "market": "US", "premium": "false"}, + {"dataset": "income-insurance", "variant": "quarterly-full", "market": "US", "premium": "true"}, + {"dataset": "income-insurance", "variant": "annual-full", "market": "US", "premium": "true"}, + {"dataset": "income-insurance", "variant": "ttm-full", "market": "US", "premium": "true"}, + {"dataset": "income-insurance", "variant": "quarterly-asreported", "market": "US", + "premium": "true"}, + {"dataset": "income-insurance", "variant": "annual-asreported", "market": "US", "premium": "true"}, + {"dataset": "income-insurance", "variant": "ttm-asreported", "market": "US", "premium": "true"}, + {"dataset": "income-insurance", "variant": "quarterly-full-asreported", "market": "US", + "premium": "true"}, + {"dataset": "income-insurance", "variant": "annual-full-asreported", "market": "US", + "premium": "true"}, + {"dataset": "income-insurance", "variant": "ttm-full-asreported", "market": "US", + "premium": "true"}, + {"dataset": "balance-insurance", "variant": "quarterly", "market": "US", "premium": "false"}, + {"dataset": "balance-insurance", "variant": "annual", "market": "US", "premium": "false"}, + {"dataset": "balance-insurance", "variant": "ttm", "market": "US", "premium": "false"}, + {"dataset": "balance-insurance", "variant": "quarterly-full", "market": "US", "premium": "true"}, + {"dataset": "balance-insurance", "variant": "annual-full", "market": "US", "premium": "true"}, + {"dataset": "balance-insurance", "variant": "ttm-full", "market": "US", "premium": "true"}, + {"dataset": "balance-insurance", "variant": "quarterly-asreported", "market": "US", + "premium": "true"}, + {"dataset": "balance-insurance", "variant": "annual-asreported", "market": "US", "premium": "true"}, + {"dataset": "balance-insurance", "variant": "ttm-asreported", "market": "US", "premium": "true"}, + {"dataset": "balance-insurance", "variant": "quarterly-full-asreported", "market": "US", + "premium": "true"}, + {"dataset": "balance-insurance", "variant": "annual-full-asreported", "market": "US", + "premium": "true"}, + {"dataset": "balance-insurance", "variant": "ttm-full-asreported", "market": "US", + "premium": "true"}, + {"dataset": "cashflow-insurance", "variant": "quarterly", "market": "US", "premium": "false"}, + {"dataset": "cashflow-insurance", "variant": "annual", "market": "US", "premium": "false"}, + {"dataset": "cashflow-insurance", "variant": "ttm", "market": "US", "premium": "false"}, + {"dataset": "cashflow-insurance", "variant": "quarterly-full", "market": "US", "premium": "true"}, + {"dataset": "cashflow-insurance", "variant": "annual-full", "market": "US", "premium": "true"}, + {"dataset": "cashflow-insurance", "variant": "ttm-full", "market": "US", "premium": "true"}, + {"dataset": "cashflow-insurance", "variant": "quarterly-asreported", "market": "US", + "premium": "true"}, + {"dataset": "cashflow-insurance", "variant": "annual-asreported", "market": "US", + "premium": "true"}, + {"dataset": "cashflow-insurance", "variant": "ttm-asreported", "market": "US", "premium": "true"}, + {"dataset": "cashflow-insurance", "variant": "quarterly-full-asreported", "market": "US", + "premium": "true"}, + {"dataset": "cashflow-insurance", "variant": "annual-full-asreported", "market": "US", + "premium": "true"}, + {"dataset": "cashflow-insurance", "variant": "ttm-full-asreported", "market": "US", + "premium": "true"}, + {"dataset": "derived", "variant": "quarterly", "market": "US", "premium": "true"}, + {"dataset": "derived", "variant": "annual", "market": "US", "premium": "true"}, + {"dataset": "derived", "variant": "ttm", "market": "US", "premium": "true"}, + {"dataset": "derived", "variant": "quarterly-asreported", "market": "US", "premium": "true"}, + {"dataset": "derived", "variant": "annual-asreported", "market": "US", "premium": "true"}, + {"dataset": "derived", "variant": "ttm-asreported", "market": "US", "premium": "true"}, + {"dataset": "derived-banks", "variant": "quarterly", "market": "US", "premium": "true"}, + {"dataset": "derived-banks", "variant": "annual", "market": "US", "premium": "true"}, + {"dataset": "derived-banks", "variant": "ttm", "market": "US", "premium": "true"}, + {"dataset": "derived-banks", "variant": "quarterly-asreported", "market": "US", "premium": "true"}, + {"dataset": "derived-banks", "variant": "annual-asreported", "market": "US", "premium": "true"}, + {"dataset": "derived-banks", "variant": "ttm-asreported", "market": "US", "premium": "true"}, + {"dataset": "derived-insurance", "variant": "quarterly", "market": "US", "premium": "true"}, + {"dataset": "derived-insurance", "variant": "annual", "market": "US", "premium": "true"}, + {"dataset": "derived-insurance", "variant": "ttm", "market": "US", "premium": "true"}, + {"dataset": "derived-insurance", "variant": "quarterly-asreported", "market": "US", + "premium": "true"}, + {"dataset": "derived-insurance", "variant": "annual-asreported", "market": "US", "premium": "true"}, + {"dataset": "derived-insurance", "variant": "ttm-asreported", "market": "US", "premium": "true"}, + {"dataset": "shareprices", "variant": "daily", "market": "US", "premium": "false"}, + {"dataset": "shareprices", "variant": "latest", "market": "US", "premium": "false"}, + {"dataset": "derived-shareprices", "variant": "daily", "market": "US", "premium": "true"}, + {"dataset": "derived-shareprices", "variant": "latest", "market": "US", "premium": "true"}, + {"dataset": "derived-shareprices", "variant": "daily-asreported", "market": "US", + "premium": "true"}, + {"dataset": "derived-shareprices", "variant": "latest-asreported", "market": "US", + "premium": "true"}] + + ########################################################################## # Helper functions. @@ -40,6 +195,7 @@ def _create_kwargs(variant, market): return kwargs + ########################################################################## # Test functions. @@ -102,4 +258,15 @@ def test_load_industries(): """Test simfin.bulk.load_industries()""" sf.load_industries(refresh_days=refresh_days) + ########################################################################## +def test_load_all(): + for i, item in enumerate(all_dataset_test): + print(i, item) + sf.load(dataset=item["dataset"], + variant=item["variant"], + market=item["market"], + refresh_days=refresh_days) + + +test_load_all()