From 732a6149379930fd1ff5bfb3d1266fe1e8be7ecd Mon Sep 17 00:00:00 2001 From: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Date: Sat, 8 Oct 2022 12:30:23 +0200 Subject: [PATCH] Allow users to change api keys through OpenBB SDK (#2642) * set fred keys through api * linting * doc change * expose api keys dict * allow optional persistency of api key change * black * place decorators * add keys paths * av and fmp keys * some fixes * rewrite av, fmp, fred cassettes * quandl key * polygon key * rewrite polygon cassette * news and tradier * cmc key * change some docstring * change some docstring * filtered keys dict on mykeys * simplify mykeys collection * revert arg to persist * finnhub * iex key * reddit key * reddit docstring * check for prefix before removing * glassnode key * glassnode virtual path * bitquery keys * twitter key * robinhood key * degiro keys * oanda key * binance keys * si key * coinbase key * refactor btcrb dates and logic * walert key * coinglass key * regenerate cassettes * cpanic keys * ethplorer keys * replace ouput status failed msg * smartstake keys * gitub keys * messari keys * eodhd keys * santiment keys * remove unused imports * typo formatting test * remove forbidden arg * fix btcrb test * fix test import * revert cassette changes * fix more tests * fix last failing * black * try to change status to int code * change status to int * first try at keys controller refactoring * fix some tests accordingly * display msg on set * change some vars * remove elifs * add progress bar and remove duplicate key check * add mykeys and refresh to menu * remove unused import * change mykeys output to df * remove check keys from keys ctrl tests * update test split to new structure * reduce duplicate code * upper case * change var name * rename mykeys df cols * add keys integrations tests * add mykeys test to keys controller * fix mykeys * fix wrong eodhd var name * pylint * test_set_key * black * patch dotenv kinda * fix mypy * remove refresh * filter mykeys df * filter mykeys df * update integration tests * first unit test for set api key * add 2 more test cases to fred * add persist test to fred unittest * add av unittest * add polygon unittest * generate av cassettes * add unittests av, fmp, quandl, polygon, fred * change si token to key * forgot controller func * unittest: news, tradier, cmc, finnhub, iex, bitquery * add si unittest * update eodhd key name * add unittest: walert, glassnode, coinglass, cpanic, ethplorer, github, messari, eodhd, santiment * black * add reddit unittest * refactor unittests to handle multi args * regenerate cassettes * add more unittests * add degiro, oanda and rh unittest * generate oanda records * fix rh and degiro unittest * fix oanda unittest * black * flake8 * fix si controller test * move tmp * pylint * fix av test * fix fmp key check * rewrite fmp * rewrite oanda output * fix quandl check * rewrite expected * supress logger exception * fix iex cloud key * remove iex warning * fix coinglass check key * cpanic fix * regenerate cpanic cassettes * flake8 * fix smartstake keys check * regenerate expected output * fix eodhd * try at binance * black * fix controller tests * pylint * disable warning * flake * add option to show keys * add Enum to model * regenerate test output * update contributing * flake * fix type hint * remove status msg dict * pylint * regenerate and remove unecessary cassettes * remove duplicate return * supress traceback * remove unused imports * update some docstrings * add todo * add export option to mykeys * minor change * refactor color scheme * update contributing * update contributing * regenerate cassettes * fix check output * small msg change * small details * rewrite some tests Co-authored-by: hjoaquim Co-authored-by: Colin Delahunty <72827203+colin99d@users.noreply.github.com> --- CONTRIBUTING.md | 129 +- custom_pre_commit/check_config_terminal.py | 4 +- i18n/en.yml | 4 +- .../openbb-settings/schema/settings.json | 2 +- openbb_terminal/api.py | 37 +- openbb_terminal/config_terminal.py | 6 +- .../due_diligence/glassnode_model.py | 25 + .../due_diligence/glassnode_view.py | 11 +- .../overview/overview_controller.py | 7 +- openbb_terminal/keys_controller.py | 1274 ++--------- openbb_terminal/keys_model.py | 2034 +++++++++++++++++ openbb_terminal/keys_view.py | 45 + .../fundamental_analysis/eodhd_model.py | 2 +- .../stocks/fundamental_analysis/eodhd_view.py | 2 +- .../stocks/options/options_controller.py | 14 +- .../stocks/options/tradier_model.py | 10 +- openbb_terminal/stocks/stocks_models.py | 2 +- scripts/test_keys_.openbb | 3 + tests/formatting/test_best_practices.py | 2 +- tests/openbb_terminal/.tmp | 0 .../test_call_av[other1].yaml | 87 + .../test_call_av[other2].yaml | 87 + .../test_call_cpanic[other1].yaml | 4 +- .../test_call_cpanic[other2].yaml | 4 +- .../test_call_iex[other1].yaml | 43 + .../test_call_iex[other2].yaml | 43 + ...rgs0-False-True-defined, test passed].yaml | 87 + ...gs1-False-False-defined, test passed].yaml | 88 + ...args2-True-True-defined, test passed].yaml | 88 + ...rgs0-False-True-defined, test failed].yaml | 134 ++ ...gs1-False-False-defined, test failed].yaml | 134 ++ ...args2-True-True-defined, test failed].yaml | 134 ++ ...rgs0-False-True-defined, test failed].yaml | 46 + ...gs1-False-False-defined, test failed].yaml | 46 + ...args2-True-True-defined, test failed].yaml | 46 + ...rgs0-False-True-defined, test failed].yaml | 66 + ...gs1-False-False-defined, test failed].yaml | 66 + ...args2-True-True-defined, test failed].yaml | 66 + ...rgs0-False-True-defined, test failed].yaml | 74 + ...gs1-False-False-defined, test failed].yaml | 74 + ...args2-True-True-defined, test failed].yaml | 74 + ...rgs0-False-True-defined, test failed].yaml | 56 + ...gs1-False-False-defined, test failed].yaml | 56 + ...args2-True-True-defined, test failed].yaml | 56 + ...rgs0-False-True-defined, test failed].yaml | 38 + ...gs1-False-False-defined, test failed].yaml | 38 + ...args2-True-True-defined, test failed].yaml | 38 + ...rgs0-False-True-defined, test failed].yaml | 46 + ...gs1-False-False-defined, test failed].yaml | 46 + ...args2-True-True-defined, test failed].yaml | 46 + ...rgs0-False-True-defined, test failed].yaml | 34 + ...gs1-False-False-defined, test failed].yaml | 34 + ...args2-True-True-defined, test failed].yaml | 34 + ...rgs0-False-True-defined, test failed].yaml | 52 + ...gs1-False-False-defined, test failed].yaml | 52 + ...args2-True-True-defined, test failed].yaml | 52 + ...rgs0-False-True-defined, test failed].yaml | 41 + ...gs1-False-False-defined, test failed].yaml | 41 + ...args2-True-True-defined, test failed].yaml | 43 + ...rgs0-False-True-defined, test failed].yaml | 39 + ...gs1-False-False-defined, test failed].yaml | 39 + ...args2-True-True-defined, test failed].yaml | 39 + ...rgs0-False-True-defined, test failed].yaml | 37 + ...gs1-False-False-defined, test failed].yaml | 37 + ...args2-True-True-defined, test failed].yaml | 37 + ...rgs0-False-True-defined, test failed].yaml | 43 + ...gs1-False-False-defined, test failed].yaml | 43 + ...args2-True-True-defined, test failed].yaml | 43 + ...rgs0-False-True-defined, test failed].yaml | 37 + ...gs1-False-False-defined, test failed].yaml | 37 + ...args2-True-True-defined, test failed].yaml | 37 + ...rgs0-False-True-defined, test failed].yaml | 50 + ...gs1-False-False-defined, test failed].yaml | 50 + ...args2-True-True-defined, test failed].yaml | 50 + ...rgs0-False-True-defined, test failed].yaml | 46 + ...gs1-False-False-defined, test failed].yaml | 46 + ...args2-True-True-defined, test failed].yaml | 46 + ...rgs0-False-True-defined, test failed].yaml | 37 + ...gs1-False-False-defined, test failed].yaml | 37 + ...args2-True-True-defined, test failed].yaml | 37 + ...rgs0-False-True-defined, test failed].yaml | 76 + ...gs1-False-False-defined, test failed].yaml | 76 + ...args2-True-True-defined, test failed].yaml | 76 + ...rgs0-False-True-defined, test failed].yaml | 68 + ...gs1-False-False-defined, test failed].yaml | 68 + ...args2-True-True-defined, test failed].yaml | 68 + ...rgs0-False-True-defined, test failed].yaml | 60 + ...gs1-False-False-defined, test failed].yaml | 60 + ...args2-True-True-defined, test failed].yaml | 60 + ...rgs0-False-True-defined, test failed].yaml | 28 + ...gs1-False-False-defined, test failed].yaml | 28 + ...args2-True-True-defined, test failed].yaml | 28 + ...rgs0-False-True-defined, test failed].yaml | 50 + ...gs1-False-False-defined, test failed].yaml | 50 + ...args2-True-True-defined, test failed].yaml | 50 + ...rgs0-False-True-defined, test failed].yaml | 38 + ...gs1-False-False-defined, test failed].yaml | 38 + ...args2-True-True-defined, test failed].yaml | 38 + ...rgs0-False-True-defined, test failed].yaml | 43 + ...gs1-False-False-defined, test failed].yaml | 43 + ...args2-True-True-defined, test failed].yaml | 43 + ...rgs0-False-True-defined, test failed].yaml | 48 + ...gs1-False-False-defined, test failed].yaml | 48 + ...args2-True-True-defined, test failed].yaml | 48 + .../test_display_btc_rainbow.yaml | 23 +- .../due_diligence/test_glassnode_view.py | 2 +- .../test_display_btc_rainbow.txt | 2 + .../stocks/options/test_options_controller.py | 4 +- tests/openbb_terminal/test_keys_controller.py | 222 +- tests/openbb_terminal/test_keys_model.py | 1592 +++++++++++++ ...args0-False-True-defined, test passed].txt | 2 + ...rgs1-False-False-defined, test passed].txt | 0 ...[args2-True-True-defined, test passed].txt | 2 + ...t_av_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...ance_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...uery_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ..._cmc_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...base_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...lass_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...anic_key[args3-False-True-not defined].txt | 2 + ...[args0-False-True-defined, not tested].txt | 2 + ...args1-False-False-defined, not tested].txt | 0 ...y[args2-True-True-defined, not tested].txt | 2 + ...giro_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...odhd_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...orer_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...nhub_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ..._fmp_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...fred_key[args3-False-True-not defined].txt | 2 + ...[args0-False-True-defined, not tested].txt | 2 + ...args1-False-False-defined, not tested].txt | 0 ...y[args2-True-True-defined, not tested].txt | 2 + ...thub_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...node_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ..._iex_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...sari_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...news_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...anda_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...ygon_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...andl_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...ddit_key[args3-False-True-not defined].txt | 2 + ...[args0-False-True-defined, not tested].txt | 2 + ...args1-False-False-defined, not tested].txt | 0 ...y[args2-True-True-defined, not tested].txt | 2 + ...t_rh_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...ment_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...t_si_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...take_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...dier_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...tter_key[args3-False-True-not defined].txt | 2 + ...args0-False-True-defined, test failed].txt | 2 + ...rgs1-False-False-defined, test failed].txt | 0 ...[args2-True-True-defined, test failed].txt | 2 + ...lert_key[args3-False-True-not defined].txt | 2 + 226 files changed, 8648 insertions(+), 1378 deletions(-) create mode 100644 openbb_terminal/keys_model.py create mode 100644 openbb_terminal/keys_view.py create mode 100644 scripts/test_keys_.openbb create mode 100644 tests/openbb_terminal/.tmp create mode 100644 tests/openbb_terminal/cassettes/test_keys_controller/test_call_av[other1].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_controller/test_call_av[other2].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_controller/test_call_iex[other1].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_controller/test_call_iex[other2].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_av_key[args0-False-True-defined, test passed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_av_key[args1-False-False-defined, test passed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_av_key[args2-True-True-defined, test passed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_binance_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_binance_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_binance_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_bitquery_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_bitquery_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_bitquery_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_cmc_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_cmc_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_cmc_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_coinbase_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_coinbase_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_coinbase_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_coinglass_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_coinglass_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_coinglass_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_cpanic_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_cpanic_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_cpanic_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_eodhd_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_eodhd_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_eodhd_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_ethplorer_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_ethplorer_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_ethplorer_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_finnhub_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_finnhub_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_finnhub_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_fmp_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_fmp_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_fmp_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_fred_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_fred_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_fred_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_glassnode_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_glassnode_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_glassnode_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_iex_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_iex_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_iex_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_messari_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_messari_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_messari_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_news_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_news_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_news_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_oanda_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_oanda_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_oanda_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_polygon_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_polygon_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_polygon_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_quandl_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_quandl_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_quandl_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_reddit_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_reddit_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_reddit_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_santiment_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_santiment_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_santiment_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_si_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_si_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_si_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_smartstake_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_smartstake_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_smartstake_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_tradier_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_tradier_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_tradier_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_twitter_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_twitter_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_twitter_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_walert_key[args0-False-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_walert_key[args1-False-False-defined, test failed].yaml create mode 100644 tests/openbb_terminal/cassettes/test_keys_model/test_set_walert_key[args2-True-True-defined, test failed].yaml create mode 100644 tests/openbb_terminal/test_keys_model.py create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_av_key[args0-False-True-defined, test passed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_av_key[args1-False-False-defined, test passed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_av_key[args2-True-True-defined, test passed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_av_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_binance_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_binance_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_binance_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_binance_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_bitquery_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_bitquery_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_bitquery_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_bitquery_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_cmc_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_cmc_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_cmc_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_cmc_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_coinbase_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_coinbase_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_coinbase_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_coinbase_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_coinglass_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_coinglass_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_coinglass_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_coinglass_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_cpanic_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_cpanic_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_cpanic_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_cpanic_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_degiro_key[args0-False-True-defined, not tested].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_degiro_key[args1-False-False-defined, not tested].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_degiro_key[args2-True-True-defined, not tested].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_degiro_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_eodhd_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_eodhd_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_eodhd_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_eodhd_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_ethplorer_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_ethplorer_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_ethplorer_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_ethplorer_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_finnhub_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_finnhub_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_finnhub_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_finnhub_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_fmp_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_fmp_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_fmp_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_fmp_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_fred_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_fred_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_fred_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_fred_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_github_key[args0-False-True-defined, not tested].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_github_key[args1-False-False-defined, not tested].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_github_key[args2-True-True-defined, not tested].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_github_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_glassnode_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_glassnode_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_glassnode_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_glassnode_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_iex_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_iex_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_iex_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_iex_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_messari_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_messari_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_messari_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_messari_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_news_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_news_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_news_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_news_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_oanda_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_oanda_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_oanda_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_oanda_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_polygon_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_polygon_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_polygon_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_polygon_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_quandl_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_quandl_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_quandl_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_quandl_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_reddit_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_reddit_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_reddit_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_reddit_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_rh_key[args0-False-True-defined, not tested].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_rh_key[args1-False-False-defined, not tested].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_rh_key[args2-True-True-defined, not tested].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_rh_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_santiment_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_santiment_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_santiment_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_santiment_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_si_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_si_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_si_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_si_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_smartstake_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_smartstake_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_smartstake_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_smartstake_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_tradier_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_tradier_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_tradier_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_tradier_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_twitter_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_twitter_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_twitter_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_twitter_key[args3-False-True-not defined].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_walert_key[args0-False-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_walert_key[args1-False-False-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_walert_key[args2-True-True-defined, test failed].txt create mode 100644 tests/openbb_terminal/txt/test_keys_model/test_set_walert_key[args3-False-True-not defined].txt diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f70698b9a38..23b89da2abb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,51 +6,50 @@ The following is a set of guidelines for contributing to OpenBB Terminal. These Use your best judgment, and feel free to propose changes to this document in a pull request. - [CONTRIBUTING](#contributing) - - [BASIC](#basic) - - [Adding a new command](#adding-a-new-command) - - [Select Feature](#select-feature) - - [Model](#model) - - [View](#view) - - [Controller](#controller) - - [Add API endpint](#add-api-endpoint) - - [Add Documentation](#add-documentation) - - [Open a Pull Request](#open-a-pull-request) - - [Review Process](#review-process) - - [Understand Code Structure](#understand-code-structure) - - [Follow Coding Guidelines](#follow-coding-guidelines) - - [General Code Requirements](#general-code-requirements) - - [File Specific Requirements](#file-specific-requirements) - - [Coding Style](#coding-style) - - [OpenBB Style Guide](#openbb-style-guide) - - [Flags](#flags) - - [Output format](#output-format) - - [Time-related](#time-related) - - [Data selection and manipulation](#data-selection-and-manipulation) - - [Financial instrument characteristics](#financial-instrument-characteristics) - - [Naming Convention](#naming-convention) - - [Docstrings](#docstrings) - - [Linters](#linters) - - [Command names](#command-names) - - [External API Keys](#external-api-keys) - - [Creating API key](#creating-api-key) - - [Setting and checking API key](#setting-and-checking-api-key) - - [ADVANCED](#advanced) - - [Important functions and classes](#important-functions-and-classes) - - [Base controller class](#base-controller-class) - - [Default Data Sources](#default-data-sources) - - [Export Data](#export-data) - - [Queue and pipeline](#queue-and-pipeline) - - [Auto Completer](#auto-completer) - - [Logging](#logging) - - [Internationalization](#internationalization) - - [Write Code and Commit](#write-code-and-commit) - - [Pre Commit Hooks](#pre-commit-hooks) - - [Coding](#coding) - - [Git Process](#git-process) - - [Add a Test](#add-a-test) - - [Pytest](#pytest) - - [Coverage](#coverage) - - [VCR](#vcr) +- [BASIC](#basic) + - [Adding a new command](#adding-a-new-command) + - [Select Feature](#select-feature) + - [Model](#model) + - [View](#view) + - [Controller](#controller) + - [Add API endpoint](#add-api-endpoint) + - [Add Documentation](#add-documentation) + - [Open a Pull Request](#open-a-pull-request) + - [Review Process](#review-process) + - [Understand Code Structure](#understand-code-structure) + - [Backend](#backend) + - [Frontend](#frontend) + - [Follow Coding Guidelines](#follow-coding-guidelines) + - [General Code Requirements](#general-code-requirements) + - [File Specific Requirements](#file-specific-requirements) + - [Coding Style](#coding-style) + - [OpenBB Style Guide](#openbb-style-guide) + - [Flags](#flags) + - [Output format](#output-format) + - [Time-related](#time-related) + - [Data selection and manipulation](#data-selection-and-manipulation) + - [Financial instrument characteristics](#financial-instrument-characteristics) + - [Naming Convention](#naming-convention) + - [Docstrings](#docstrings) + - [Linters](#linters) + - [Command names](#command-names) + - [External API Keys](#external-api-keys) + - [Creating API key](#creating-api-key) + - [Setting and checking API key](#setting-and-checking-api-key) +- [ADVANCED](#advanced) + - [Important functions and classes](#important-functions-and-classes) + - [Base controller class](#base-controller-class) + - [Default Data Sources](#default-data-sources) + - [Export Data](#export-data) + - [Queue and pipeline](#queue-and-pipeline) + - [Auto Completer](#auto-completer) + - [Logging](#logging) + - [Internationalization](#internationalization) + - [Write Code and Commit](#write-code-and-commit) + - [Pre Commit Hooks](#pre-commit-hooks) + - [Coding](#coding) + - [Git Process](#git-process) + - [Add a Test](#add-a-test) # BASIC @@ -1137,23 +1136,36 @@ One of the first steps once adding a new data source that requires an API key is The following code allows to check the validity of the IEX Cloud API key. ```python -def check_iex_key(self, show_output: bool = False) -> None: - """Check IEX Cloud key""" - self.cfg_dict["IEXCLOUD"] = "iex" +def check_iex_key(show_output: bool = False) -> str: + """Check IEX Cloud key + + Parameters + ---------- + show_output: bool + Display status string or not. + + Returns + ------- + status: str + + """ + if cfg.API_IEX_TOKEN == "REPLACE_ME": # nosec logger.info("IEX Cloud key not defined") - self.key_dict["IEXCLOUD"] = "not defined" + status = KeyStatus.NOT_DEFINED else: try: - pyEX.Client(api_token=cfg.API_IEX_TOKEN, version="v1") + pyEX.Client(api_token=cfg.API_IEX_TOKEN, version="v1").quote(symbol="AAPL") logger.info("IEX Cloud key defined, test passed") - self.key_dict["IEXCLOUD"] = "defined, test passed" - except PyEXception: - logger.exception("IEX Cloud key defined, test failed") - self.key_dict["IEXCLOUD"] = "defined, test failed" + status = KeyStatus.DEFINED_TEST_PASSED + except Exception as _: # noqa: F841 + logger.warning("IEX Cloud key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED if show_output: - console.print(self.key_dict["IEXCLOUD"] + "\n") + console.print(status.colorize() + "\n") + + return status ``` Note that there are usually 3 states: @@ -1190,10 +1202,9 @@ def call_iex(self, other_args: List[str]): other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_IEX_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_IEX_KEY", ns_parser.key) - cfg.API_IEX_TOKEN = ns_parser.key - self.check_iex_key(show_output=True) + self.status_dict["iex"] = keys_model.set_iex_key( + key=ns_parser.key, persist=True, show_output=True + ) ``` # ADVANCED diff --git a/custom_pre_commit/check_config_terminal.py b/custom_pre_commit/check_config_terminal.py index 08552bafdb2..f9c421cd6d4 100755 --- a/custom_pre_commit/check_config_terminal.py +++ b/custom_pre_commit/check_config_terminal.py @@ -50,14 +50,14 @@ settings = { "OANDA_ACCOUNT_TYPE": 'OANDA_ACCOUNT_TYPE = os.getenv("OPENBB_OANDA_ACCOUNT_TYPE") or "practice"', "OANDA_ACCOUNT": 'OANDA_ACCOUNT = os.getenv("OPENBB_OANDA_ACCOUNT") or "REPLACE_ME"', "OANDA_TOKEN": 'OANDA_TOKEN = os.getenv("OPENBB_OANDA_TOKEN") or "REPLACE_ME"', - "TRADIER_TOKEN": 'TRADIER_TOKEN = os.getenv("OPENBB_API_TRADIER_TOKEN") or "REPLACE_ME"', + "API_TRADIER_TOKEN": 'API_TRADIER_TOKEN = os.getenv("OPENBB_API_TRADIER_TOKEN") or "REPLACE_ME"', "WEBDRIVER_TO_USE": 'WEBDRIVER_TO_USE = "chrome"', "PATH_TO_SELENIUM_DRIVER": 'PATH_TO_SELENIUM_DRIVER = None # Replace with "PATH"', "API_CMC_KEY": 'API_CMC_KEY = os.getenv("OPENBB_API_CMC_KEY") or "REPLACE_ME"', "API_BINANCE_KEY": 'API_BINANCE_KEY = os.getenv("OPENBB_API_BINANCE_KEY") or "REPLACE_ME"', "API_BINANCE_SECRET": 'API_BINANCE_SECRET = os.getenv("OPENBB_API_BINANCE_SECRET") or "REPLACE_ME"', "API_FINNHUB_KEY": 'API_FINNHUB_KEY = os.getenv("OPENBB_API_FINNHUB_KEY") or "REPLACE_ME"', - "API_IEX_TOKEN": 'API_IEX_TOKEN = os.getenv("OPENBB_API_IEX_KEY") or "REPLACE_ME"', + "API_IEX_TOKEN": 'API_IEX_TOKEN = os.getenv("OPENBB_API_IEX_TOKEN") or "REPLACE_ME"', "API_SENTIMENTINVESTOR_TOKEN": 'API_SENTIMENTINVESTOR_TOKEN = os.getenv("OPENBB_API_SENTIMENTINVESTOR_TOKEN") or "REPLACE_ME"', # noqa "API_COINBASE_KEY": 'API_COINBASE_KEY = os.getenv("OPENBB_API_COINBASE_KEY") or "REPLACE_ME"', "API_COINBASE_SECRET": 'API_COINBASE_SECRET = os.getenv("OPENBB_API_COINBASE_SECRET") or "REPLACE_ME"', diff --git a/i18n/en.yml b/i18n/en.yml index 8e1d6d04b30..aa16438e6e2 100644 --- a/i18n/en.yml +++ b/i18n/en.yml @@ -16,11 +16,13 @@ en: _configure_: Configure your own terminal _main_menu_: Main menu keys/_keys_: This menu allows you to set your own API keys. Type 'about' for more information + keys/mykeys: get your defined keys + keys/_status_: Status defined, test passed: defined, test passed defined, test failed: defined, test failed not defined: not defined defined, not tested: defined, not tested - defined, test unsuccessful: defined, test unsuccessful + defined, test inconclusive: defined, test inconclusive sources/_info_: Get and set default data sources sources/get: get available data sources associated with command sources/set: set default data source for a command diff --git a/jupyterlab/openbb-settings/schema/settings.json b/jupyterlab/openbb-settings/schema/settings.json index d976a7e5675..347fd6b825c 100644 --- a/jupyterlab/openbb-settings/schema/settings.json +++ b/jupyterlab/openbb-settings/schema/settings.json @@ -386,7 +386,7 @@ "default": "REPLACE_ME", "value": "" }, - "OPENBB_API_IEX_KEY": + "OPENBB_API_IEX_TOKEN": { "type": "string", "form": "password", diff --git a/openbb_terminal/api.py b/openbb_terminal/api.py index e65f387d800..11369c2fc84 100644 --- a/openbb_terminal/api.py +++ b/openbb_terminal/api.py @@ -521,8 +521,11 @@ functions = { "model": "openbb_terminal.cryptocurrency.due_diligence.glassnode_model.get_active_addresses", "view": "openbb_terminal.cryptocurrency.due_diligence.glassnode_view.display_active_addresses", }, - "crypto.dd.btcrb": { + "crypto.dd.close": { "model": "openbb_terminal.cryptocurrency.due_diligence.glassnode_model.get_close_price", + }, + "crypto.dd.btcrb": { + "model": "openbb_terminal.cryptocurrency.due_diligence.glassnode_model.get_btc_rainbow", "view": "openbb_terminal.cryptocurrency.due_diligence.glassnode_view.display_btc_rainbow", }, "crypto.dd.eb": { @@ -1884,6 +1887,36 @@ functions = { "etf.candle": {"model": "openbb_terminal.stocks.stocks_helper.display_candle"}, "forex.candle": {"model": "openbb_terminal.forex.forex_helper.display_candle"}, "forex.load": {"model": "openbb_terminal.forex.forex_helper.load"}, + "keys.av": {"model": "openbb_terminal.keys_model.set_av_key"}, + "keys.fmp": {"model": "openbb_terminal.keys_model.set_fmp_key"}, + "keys.quandl": {"model": "openbb_terminal.keys_model.set_quandl_key"}, + "keys.polygon": {"model": "openbb_terminal.keys_model.set_polygon_key"}, + "keys.fred": {"model": "openbb_terminal.keys_model.set_fred_key"}, + "keys.news": {"model": "openbb_terminal.keys_model.set_news_key"}, + "keys.tradier": {"model": "openbb_terminal.keys_model.set_tradier_key"}, + "keys.cmc": {"model": "openbb_terminal.keys_model.set_cmc_key"}, + "keys.finnhub": {"model": "openbb_terminal.keys_model.set_finnhub_key"}, + "keys.iex": {"model": "openbb_terminal.keys_model.set_iex_key"}, + "keys.reddit": {"model": "openbb_terminal.keys_model.set_reddit_key"}, + "keys.twitter": {"model": "openbb_terminal.keys_model.set_twitter_key"}, + "keys.rh": {"model": "openbb_terminal.keys_model.set_rh_key"}, + "keys.degiro": {"model": "openbb_terminal.keys_model.set_degiro_key"}, + "keys.oanda": {"model": "openbb_terminal.keys_model.set_oanda_key"}, + "keys.binance": {"model": "openbb_terminal.keys_model.set_binance_key"}, + "keys.bitquery": {"model": "openbb_terminal.keys_model.set_bitquery_key"}, + "keys.si": {"model": "openbb_terminal.keys_model.set_si_key"}, + "keys.coinbase": {"model": "openbb_terminal.keys_model.set_coinbase_key"}, + "keys.walert": {"model": "openbb_terminal.keys_model.set_walert_key"}, + "keys.glassnode": {"model": "openbb_terminal.keys_model.set_glassnode_key"}, + "keys.coinglass": {"model": "openbb_terminal.keys_model.set_coinglass_key"}, + "keys.cpanic": {"model": "openbb_terminal.keys_model.set_cpanic_key"}, + "keys.ethplorer": {"model": "openbb_terminal.keys_model.set_ethplorer_key"}, + "keys.smartstake": {"model": "openbb_terminal.keys_model.set_smartstake_key"}, + "keys.github": {"model": "openbb_terminal.keys_model.set_github_key"}, + "keys.messari": {"model": "openbb_terminal.keys_model.set_messari_key"}, + "keys.eodhd": {"model": "openbb_terminal.keys_model.set_eodhd_key"}, + "keys.santiment": {"model": "openbb_terminal.keys_model.set_santiment_key"}, + "keys.mykeys": {"model": "openbb_terminal.keys_model.get_keys"}, } @@ -1941,7 +1974,7 @@ def change_docstring(api_callable, model: Callable, view=None): index = view.__doc__.find("Parameters") all_parameters = ( "\nAPI function, use the chart kwarg for getting the view model and it's plot. " - "See every parmater below:\n\n\t" + "See every parmater below:\n\n " + view.__doc__[index:] + """chart: bool If the view and its chart shall be used""" diff --git a/openbb_terminal/config_terminal.py b/openbb_terminal/config_terminal.py index 0e84dad04eb..20182160420 100644 --- a/openbb_terminal/config_terminal.py +++ b/openbb_terminal/config_terminal.py @@ -106,7 +106,7 @@ OANDA_ACCOUNT = os.getenv("OPENBB_OANDA_ACCOUNT") or "REPLACE_ME" OANDA_TOKEN = os.getenv("OPENBB_OANDA_TOKEN") or "REPLACE_ME" # https://tradier.com/products/market-data-api -TRADIER_TOKEN = os.getenv("OPENBB_API_TRADIER_TOKEN") or "REPLACE_ME" +API_TRADIER_TOKEN = os.getenv("OPENBB_API_TRADIER_TOKEN") or "REPLACE_ME" # Selenium Webbrowser drivers can be found at https://selenium-python.readthedocs.io/installation.html WEBDRIVER_TO_USE = "chrome" @@ -123,7 +123,7 @@ API_BINANCE_SECRET = os.getenv("OPENBB_API_BINANCE_SECRET") or "REPLACE_ME" API_FINNHUB_KEY = os.getenv("OPENBB_API_FINNHUB_KEY") or "REPLACE_ME" # https://iexcloud.io -API_IEX_TOKEN = os.getenv("OPENBB_API_IEX_KEY") or "REPLACE_ME" +API_IEX_TOKEN = os.getenv("OPENBB_API_IEX_TOKEN") or "REPLACE_ME" # https://www.sentimentinvestor.com API_SENTIMENTINVESTOR_TOKEN = ( @@ -170,4 +170,4 @@ API_GITHUB_KEY = os.getenv("OPENBB_API_GITHUB_KEY") or "REPLACE_ME" API_SANTIMENT_KEY = os.getenv("OPENBB_API_SANTIMENT_KEY") or "REPLACE_ME" # https://eodhistoricaldata.com/r/?ref=869U7F4J -API_EODHD_TOKEN = os.getenv("OPENBB_API_EODHD_KEY") or "REPLACE_ME" +API_EODHD_KEY = os.getenv("OPENBB_API_EODHD_KEY") or "REPLACE_ME" diff --git a/openbb_terminal/cryptocurrency/due_diligence/glassnode_model.py b/openbb_terminal/cryptocurrency/due_diligence/glassnode_model.py index 2d1c2b4adf7..dc6f8c7f517 100644 --- a/openbb_terminal/cryptocurrency/due_diligence/glassnode_model.py +++ b/openbb_terminal/cryptocurrency/due_diligence/glassnode_model.py @@ -550,3 +550,28 @@ def get_exchange_net_position_change( console.print(r.text) return df + + +@log_start_end(log=logger) +def get_btc_rainbow( + start_date: str = "2010-01-01", + end_date: str = datetime.now().strftime("%Y-%m-%d"), +): + """Get bitcoin price data + [Price data from source: https://glassnode.com] + [Inspired by: https://blockchaincenter.net] + + Parameters + ---------- + start_date : int + Initial date timestamp. Default is initial BTC timestamp: 1_325_376_000 + end_date : int + Final date timestamp. Default is current BTC timestamp + """ + + dt_start_date = int(datetime.strptime(start_date, "%Y-%m-%d").timestamp()) + dt_end_date = int(datetime.strptime(end_date, "%Y-%m-%d").timestamp()) + + df_data = get_close_price("BTC", dt_start_date, dt_end_date) + + return df_data diff --git a/openbb_terminal/cryptocurrency/due_diligence/glassnode_view.py b/openbb_terminal/cryptocurrency/due_diligence/glassnode_view.py index 12109214cc8..803736525ee 100644 --- a/openbb_terminal/cryptocurrency/due_diligence/glassnode_view.py +++ b/openbb_terminal/cryptocurrency/due_diligence/glassnode_view.py @@ -16,7 +16,7 @@ from openbb_terminal.decorators import check_api_key from openbb_terminal import config_plot as cfgPlot from openbb_terminal.cryptocurrency.due_diligence.glassnode_model import ( get_active_addresses, - get_close_price, + get_btc_rainbow, get_exchange_balances, get_exchange_net_position_change, get_hashrate, @@ -35,8 +35,8 @@ logger = logging.getLogger(__name__) @log_start_end(log=logger) @check_api_key(["API_GLASSNODE_KEY"]) def display_btc_rainbow( - start_date: int = int(datetime(2010, 1, 1).timestamp()), - end_date: int = int(datetime.now().timestamp()), + start_date: str = "2010-01-01", + end_date: str = datetime.now().strftime("%Y-%m-%d"), export: str = "", external_axes: Optional[List[plt.Axes]] = None, ): @@ -55,7 +55,8 @@ def display_btc_rainbow( external_axes : Optional[List[plt.Axes]], optional External axes (1 axis is expected in the list), by default None """ - df_data = get_close_price("BTC", start_date, end_date) + + df_data = get_btc_rainbow(start_date, end_date) if df_data.empty: return @@ -69,7 +70,7 @@ def display_btc_rainbow( return d0 = datetime.strptime("2012-01-01", "%Y-%m-%d") - dend = datetime.fromtimestamp(end_date) + dend = datetime.strptime(end_date, "%Y-%m-%d") x = range((df_data.index[0] - d0).days, (dend - d0).days + 1) diff --git a/openbb_terminal/cryptocurrency/overview/overview_controller.py b/openbb_terminal/cryptocurrency/overview/overview_controller.py index 1fae8eca192..d2bdf5f64fc 100644 --- a/openbb_terminal/cryptocurrency/overview/overview_controller.py +++ b/openbb_terminal/cryptocurrency/overview/overview_controller.py @@ -315,9 +315,12 @@ class OverviewController(BaseController): parser, other_args, EXPORT_BOTH_RAW_DATA_AND_FIGURES ) if ns_parser: + start_date = ns_parser.since.strftime("%Y-%m-%d") + end_date = ns_parser.until.strftime("%Y-%m-%d") + display_btc_rainbow( - start_date=int(ns_parser.since.timestamp()), - end_date=int(ns_parser.until.timestamp()), + start_date=start_date, + end_date=end_date, export=ns_parser.export, ) diff --git a/openbb_terminal/keys_controller.py b/openbb_terminal/keys_controller.py index 0f8e082a9af..d3cd09ee284 100644 --- a/openbb_terminal/keys_controller.py +++ b/openbb_terminal/keys_controller.py @@ -5,38 +5,22 @@ __docformat__ = "numpy" import argparse import logging -import os from typing import Dict, List -import binance -import oandapyV20.endpoints.pricing -import dotenv -import praw -import pyEX -import quandl -import requests -from prawcore.exceptions import ResponseException -from alpha_vantage.timeseries import TimeSeries -from coinmarketcapapi import CoinMarketCapAPI, CoinMarketCapAPIError from prompt_toolkit.completion import NestedCompleter -from pyEX.common.exception import PyEXception -from oandapyV20 import API as oanda_API -from oandapyV20.exceptions import V20Error +from tqdm import tqdm -from openbb_terminal import config_terminal as cfg -from openbb_terminal import feature_flags as obbff +from openbb_terminal import feature_flags as obbff, keys_view +from openbb_terminal import keys_model from openbb_terminal.core.config.paths import USER_ENV_FILE -from openbb_terminal.cryptocurrency.coinbase_helpers import ( - CoinbaseProAuth, - make_coinbase_request, - CoinbaseApiException, -) from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import parse_simple_args +from openbb_terminal.helper_funcs import ( + EXPORT_ONLY_RAW_DATA_ALLOWED, + parse_simple_args, +) from openbb_terminal.menu import session from openbb_terminal.parent_classes import BaseController from openbb_terminal.rich_config import console, MenuText, translate -from openbb_terminal.terminal_helper import suppress_stdout logger = logging.getLogger(__name__) @@ -44,40 +28,41 @@ logger = logging.getLogger(__name__) class KeysController(BaseController): # pylint: disable=too-many-public-methods """Keys Controller class""" - CHOICES_COMMANDS: List[str] = [ - "av", - "fmp", - "quandl", - "polygon", - "fred", - "news", - "tradier", - "cmc", - "finnhub", - "iex", - "reddit", - "twitter", - "rh", - "degiro", - "oanda", - "binance", - "bitquery", - "si", - "coinbase", - "walert", - "glassnode", - "coinglass", - "cpanic", - "ethplorer", - "smartstake", - "github", - "eodhd", - "messari", - "santiment", - ] + API_DICT: Dict = { + "av": "ALPHA_VANTAGE", + "fmp": "FINANCIAL_MODELING_PREP", + "quandl": "QUANDL", + "polygon": "POLYGON", + "fred": "FRED", + "news": "NEWSAPI", + "tradier": "TRADIER", + "cmc": "COINMARKETCAP", + "finnhub": "FINNHUB", + "iex": "IEXCLOUD", + "reddit": "REDDIT", + "twitter": "TWITTER", + "rh": "ROBINHOOD", + "degiro": "DEGIRO", + "oanda": "OANDA", + "binance": "BINANCE", + "bitquery": "BITQUERY", + "si": "SENTIMENT_INVESTOR", + "coinbase": "COINBASE", + "walert": "WHALE_ALERT", + "glassnode": "GLASSNODE", + "coinglass": "COINGLASS", + "cpanic": "CRYPTO_PANIC", + "ethplorer": "ETHPLORER", + "smartstake": "SMARTSTAKE", + "github": "GITHUB", + "messari": "MESSARI", + "eodhd": "EODHD", + "santiment": "SANTIMENT", + } + API_LIST = list(API_DICT.keys()) + CHOICES_COMMANDS: List[str] = ["mykeys"] + API_LIST PATH = "/keys/" - key_dict: Dict = {} - cfg_dict: Dict = {} + status_dict: Dict = {} def __init__( self, @@ -89,8 +74,6 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods super().__init__(queue) self.env_file = env_file if menu_usage: - self.check_keys_status() - if session and obbff.USE_PROMPT_TOOLKIT: choices: dict = {c: {} for c in self.controller_choices} @@ -98,761 +81,11 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods self.completer = NestedCompleter.from_nested_dict(choices) - def check_github_key(self, show_output: bool = False) -> None: - """Check GitHub key""" - self.cfg_dict["GITHUB"] = "github" - if cfg.API_GITHUB_KEY == "REPLACE_ME": # pragma: allowlist secret - logger.info("GitHub key not defined") - self.key_dict["GITHUB"] = "not defined" - else: - self.key_dict["GITHUB"] = "defined" - # github api will not fail for the first requests without key - # only after certain amount of requests the user will get rate limited - - if show_output: - console.print(self.key_dict["GITHUB"] + "\n") - - def check_av_key(self, show_output: bool = False) -> None: - """Check Alpha Vantage key""" - self.cfg_dict["ALPHA_VANTAGE"] = "av" - if cfg.API_KEY_ALPHAVANTAGE == "REPLACE_ME": # pragma: allowlist secret - logger.info("Alpha Vantage key not defined") - self.key_dict["ALPHA_VANTAGE"] = "not defined" - else: - df = TimeSeries( - key=cfg.API_KEY_ALPHAVANTAGE, output_format="pandas" - ).get_intraday(symbol="AAPL") - if df[0].empty: # pylint: disable=no-member - logger.warning("Alpha Vantage key defined, test failed") - self.key_dict["ALPHA_VANTAGE"] = "defined, test failed" - else: - logger.info("Alpha Vantage key defined, test passed") - self.key_dict["ALPHA_VANTAGE"] = "defined, test passed" - - if show_output: - console.print(self.key_dict["ALPHA_VANTAGE"] + "\n") - - def check_fmp_key(self, show_output: bool = False) -> None: - """Check Financial Modeling Prep key""" - self.cfg_dict["FINANCIAL_MODELING_PREP"] = "fmp" - if ( - cfg.API_KEY_FINANCIALMODELINGPREP - == "REPLACE_ME" # pragma: allowlist secret - ): # pragma: allowlist secret - logger.info("Financial Modeling Prep key not defined") - self.key_dict["FINANCIAL_MODELING_PREP"] = "not defined" - else: - r = requests.get( - f"https://financialmodelingprep.com/api/v3/profile/AAPL?apikey={cfg.API_KEY_FINANCIALMODELINGPREP}" - ) - if r.status_code in [403, 401]: - logger.warning("Financial Modeling Prep key defined, test failed") - self.key_dict["FINANCIAL_MODELING_PREP"] = "defined, test failed" - elif r.status_code == 200: - logger.info("Financial Modeling Prep key defined, test passed") - self.key_dict["FINANCIAL_MODELING_PREP"] = "defined, test passed" - else: - logger.warning("Financial Modeling Prep key defined, test inconclusive") - self.key_dict["FINANCIAL_MODELING_PREP"] = "defined, test inconclusive" - - if show_output: - console.print(self.key_dict["FINANCIAL_MODELING_PREP"] + "\n") - - def check_quandl_key(self, show_output: bool = False) -> None: - """Check Quandl key""" - self.cfg_dict["QUANDL"] = "quandl" - if cfg.API_KEY_QUANDL == "REPLACE_ME": # pragma: allowlist secret - logger.info("Quandl key not defined") - self.key_dict["QUANDL"] = "not defined" - else: - try: - quandl.save_key(cfg.API_KEY_QUANDL) - quandl.get_table( - "ZACKS/FC", - paginate=True, - ticker=["AAPL", "MSFT"], - per_end_date={"gte": "2015-01-01"}, - qopts={"columns": ["ticker", "per_end_date"]}, - ) - logger.info("Quandl key defined, test passed") - self.key_dict["QUANDL"] = "defined, test passed" - except Exception as _: # noqa: F841 - logger.exception("Quandl key defined, test failed") - self.key_dict["QUANDL"] = "defined, test failed" - - if show_output: - console.print(self.key_dict["QUANDL"] + "\n") - - def check_polygon_key(self, show_output: bool = False) -> None: - """Check Polygon key""" - self.cfg_dict["POLYGON"] = "polygon" - if cfg.API_POLYGON_KEY == "REPLACE_ME": - logger.info("Polygon key not defined") - self.key_dict["POLYGON"] = "not defined" - else: - r = requests.get( - "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2020-06-01/2020-06-17" - f"?apiKey={cfg.API_POLYGON_KEY}" - ) - if r.status_code in [403, 401]: - logger.warning("Polygon key defined, test failed") - self.key_dict["POLYGON"] = "defined, test failed" - elif r.status_code == 200: - logger.info("Polygon key defined, test passed") - self.key_dict["POLYGON"] = "defined, test passed" - else: - logger.warning("Polygon key defined, test inconclusive") - self.key_dict["POLYGON"] = "defined, test inconclusive" - - if show_output: - console.print(self.key_dict["POLYGON"] + "\n") - - def check_fred_key(self, show_output: bool = False) -> None: - """Check FRED key""" - self.cfg_dict["FRED"] = "fred" - if cfg.API_FRED_KEY == "REPLACE_ME": - logger.info("FRED key not defined") - self.key_dict["FRED"] = "not defined" - else: - r = requests.get( - f"https://api.stlouisfed.org/fred/series?series_id=GNPCA&api_key={cfg.API_FRED_KEY}" - ) - if r.status_code in [403, 401, 400]: - logger.warning("FRED key defined, test failed") - self.key_dict["FRED"] = "defined, test failed" - elif r.status_code == 200: - logger.info("FRED key defined, test passed") - self.key_dict["FRED"] = "defined, test passed" - else: - logger.warning("FRED key defined, test inconclusive") - self.key_dict["FRED"] = "defined, test inconclusive" - - if show_output: - console.print(self.key_dict["FRED"] + "\n") - - def check_news_key(self, show_output: bool = False) -> None: - """Check News API key""" - self.cfg_dict["NEWSAPI"] = "news" - if cfg.API_NEWS_TOKEN == "REPLACE_ME": # nosec - logger.info("News API key not defined") - self.key_dict["NEWSAPI"] = "not defined" - else: - r = requests.get( - f"https://newsapi.org/v2/everything?q=keyword&apiKey={cfg.API_NEWS_TOKEN}" - ) - if r.status_code in [401, 403]: - logger.warning("News API key defined, test failed") - self.key_dict["NEWSAPI"] = "defined, test failed" - elif r.status_code == 200: - logger.info("News API key defined, test passed") - self.key_dict["NEWSAPI"] = "defined, test passed" - else: - logger.warning("News API key defined, test inconclusive") - self.key_dict["NEWSAPI"] = "defined, test inconclusive" - - if show_output: - console.print(self.key_dict["NEWSAPI"] + "\n") - - def check_tradier_key(self, show_output: bool = False) -> None: - """Check Tradier key""" - self.cfg_dict["TRADIER"] = "tradier" - if cfg.TRADIER_TOKEN == "REPLACE_ME": # nosec - logger.info("Tradier key not defined") - self.key_dict["TRADIER"] = "not defined" - else: - r = requests.get( - "https://sandbox.tradier.com/v1/markets/quotes", - params={"symbols": "AAPL"}, - headers={ - "Authorization": f"Bearer {cfg.TRADIER_TOKEN}", - "Accept": "application/json", - }, - ) - if r.status_code in [401, 403]: - logger.warning("Tradier key not defined, test failed") - self.key_dict["TRADIER"] = "defined, test failed" - elif r.status_code == 200: - logger.info("Tradier key not defined, test passed") - self.key_dict["TRADIER"] = "defined, test passed" - else: - logger.warning("Tradier key not defined, test inconclusive") - self.key_dict["TRADIER"] = "defined, test inconclusive" - - if show_output: - console.print(self.key_dict["TRADIER"] + "\n") - - def check_cmc_key(self, show_output: bool = False) -> None: - """Check Coinmarketcap key""" - self.cfg_dict["COINMARKETCAP"] = "cmc" - if cfg.API_CMC_KEY == "REPLACE_ME": - logger.info("Coinmarketcap key not defined") - self.key_dict["COINMARKETCAP"] = "not defined" - else: - cmc = CoinMarketCapAPI(cfg.API_CMC_KEY) - - try: - cmc.cryptocurrency_map() - logger.info("Coinmarketcap key defined, test passed") - self.key_dict["COINMARKETCAP"] = "defined, test passed" - except CoinMarketCapAPIError: - logger.exception("Coinmarketcap key defined, test failed") - self.key_dict["COINMARKETCAP"] = "defined, test failed" - - if show_output: - console.print(self.key_dict["COINMARKETCAP"] + "\n") - - def check_finnhub_key(self, show_output: bool = False) -> None: - """Check Finnhub key""" - self.cfg_dict["FINNHUB"] = "finnhub" - if cfg.API_FINNHUB_KEY == "REPLACE_ME": - logger.info("Finnhub key not defined") - self.key_dict["FINNHUB"] = "not defined" - else: - r = r = requests.get( - f"https://finnhub.io/api/v1/quote?symbol=AAPL&token={cfg.API_FINNHUB_KEY}" - ) - if r.status_code in [403, 401, 400]: - logger.warning("Finnhub key defined, test failed") - self.key_dict["FINNHUB"] = "defined, test failed" - elif r.status_code == 200: - logger.info("Finnhub key defined, test passed") - self.key_dict["FINNHUB"] = "defined, test passed" - else: - logger.warning("Finnhub key defined, test inconclusive") - self.key_dict["FINNHUB"] = "defined, test inconclusive" - - if show_output: - console.print(self.key_dict["FINNHUB"] + "\n") - - def check_iex_key(self, show_output: bool = False) -> None: - """Check IEX Cloud key""" - self.cfg_dict["IEXCLOUD"] = "iex" - if cfg.API_IEX_TOKEN == "REPLACE_ME": # nosec - logger.info("IEX Cloud key not defined") - self.key_dict["IEXCLOUD"] = "not defined" - else: - try: - pyEX.Client(api_token=cfg.API_IEX_TOKEN, version="v1") - logger.info("IEX Cloud key defined, test passed") - self.key_dict["IEXCLOUD"] = "defined, test passed" - except PyEXception: - logger.exception("IEX Cloud key defined, test failed") - self.key_dict["IEXCLOUD"] = "defined, test failed" - - if show_output: - console.print(self.key_dict["IEXCLOUD"] + "\n") - - def check_reddit_key(self, show_output: bool = False) -> None: - """Check Reddit key""" - self.cfg_dict["REDDIT"] = "reddit" - reddit_keys = [ - cfg.API_REDDIT_CLIENT_ID, - cfg.API_REDDIT_CLIENT_SECRET, - cfg.API_REDDIT_USERNAME, - cfg.API_REDDIT_PASSWORD, - cfg.API_REDDIT_USER_AGENT, - ] - if "REPLACE_ME" in reddit_keys: - logger.info("Reddit key not defined") - self.key_dict["REDDIT"] = "not defined" - else: - - try: - with suppress_stdout(): - praw_api = praw.Reddit( - client_id=cfg.API_REDDIT_CLIENT_ID, - client_secret=cfg.API_REDDIT_CLIENT_SECRET, - username=cfg.API_REDDIT_USERNAME, - user_agent=cfg.API_REDDIT_USER_AGENT, - password=cfg.API_REDDIT_PASSWORD, - check_for_updates=False, - comment_kind="t1", - message_kind="t4", - redditor_kind="t2", - submission_kind="t3", - subreddit_kind="t5", - trophy_kind="t6", - oauth_url="https://oauth.reddit.com", - reddit_url="https://www.reddit.com", - short_url="https://redd.it", - ratelimit_seconds=5, - timeout=16, - ) - - praw_api.user.me() - logger.info("Reddit key defined, test passed") - self.key_dict["REDDIT"] = "defined, test passed" - except (Exception, ResponseException): - logger.warning("Reddit key defined, test failed") - self.key_dict["REDDIT"] = "defined, test failed" - - if show_output: - console.print(self.key_dict["REDDIT"] + "\n") - - def check_twitter_key(self, show_output: bool = False) -> None: - """Check Twitter key""" - self.cfg_dict["TWITTER"] = "twitter" - twitter_keys = [ - cfg.API_TWITTER_KEY, - cfg.API_TWITTER_SECRET_KEY, - cfg.API_TWITTER_BEARER_TOKEN, - ] - if "REPLACE_ME" in twitter_keys: - logger.info("Twitter key not defined") - self.key_dict["TWITTER"] = "not defined" - else: - params = { - "query": "(\\$AAPL) (lang:en)", - "max_results": "10", - "tweet.fields": "created_at,lang", - } - r = requests.get( - "https://api.twitter.com/2/tweets/search/recent", - params=params, # type: ignore - headers={"authorization": "Bearer " + cfg.API_TWITTER_BEARER_TOKEN}, - ) - if r.status_code == 200: - logger.info("Twitter key defined, test passed") - self.key_dict["TWITTER"] = "defined, test passed" - elif r.status_code in [401, 403]: - logger.warning("Twitter key defined, test failed") - self.key_dict["TWITTER"] = "defined, test failed" - else: - logger.warning("Twitter key defined, test failed") - self.key_dict["TWITTER"] = "defined, test inconclusive" - - if show_output: - console.print(self.key_dict["TWITTER"] + "\n") - - def check_rh_key(self, show_output: bool = False) -> None: - """Check Robinhood key""" - self.cfg_dict["ROBINHOOD"] = "rh" - rh_keys = [cfg.RH_USERNAME, cfg.RH_PASSWORD] - if "REPLACE_ME" in rh_keys: - logger.info("Robinhood key not defined") - self.key_dict["ROBINHOOD"] = "not defined" - else: - logger.info("Robinhood key defined, not tested") - self.key_dict["ROBINHOOD"] = "defined, not tested" - - if show_output: - console.print(self.key_dict["ROBINHOOD"] + "\n") - - def check_degiro_key(self, show_output: bool = False) -> None: - """Check Degiro key""" - self.cfg_dict["DEGIRO"] = "degiro" - dg_keys = [cfg.DG_USERNAME, cfg.DG_PASSWORD, cfg.DG_TOTP_SECRET] - if "REPLACE_ME" in dg_keys: - logger.info("Degiro key not defined") - self.key_dict["DEGIRO"] = "not defined" - else: - logger.info("Degiro key defined, not tested") - self.key_dict["DEGIRO"] = "defined, not tested" - - if show_output: - console.print(self.key_dict["DEGIRO"] + "\n") - - def check_oanda_key(self, show_output: bool = False) -> None: - """Check Oanda key""" - self.cfg_dict["OANDA"] = "oanda" - oanda_keys = [cfg.OANDA_TOKEN, cfg.OANDA_ACCOUNT] - if "REPLACE_ME" in oanda_keys: - logger.info("Oanda key not defined") - self.key_dict["OANDA"] = "not defined" - else: - client = oanda_API(access_token=cfg.OANDA_TOKEN) - account = cfg.OANDA_ACCOUNT - try: - parameters = {"instruments": "EUR_USD"} - request = oandapyV20.endpoints.pricing.PricingInfo( - accountID=account, params=parameters - ) - client.request(request) - logger.info("Oanda key defined, test passed") - self.key_dict["OANDA"] = "defined, test passed" - - except V20Error as e: - logger.exception(str(e)) - logger.info("Oanda key defined, test failed") - self.key_dict["OANDA"] = "defined, test failed" - - if show_output: - console.print(self.key_dict["OANDA"] + "\n") - - def check_binance_key(self, show_output: bool = False) -> None: - """Check Binance key""" - self.cfg_dict["BINANCE"] = "binance" - - if "REPLACE_ME" in [cfg.API_BINANCE_KEY, cfg.API_BINANCE_SECRET]: - logger.info("Binance key not defined") - self.key_dict["BINANCE"] = "not defined" - - else: - try: - client = binance.Client(cfg.API_BINANCE_KEY, cfg.API_BINANCE_SECRET) - candles = client.get_klines( - symbol="BTCUSDT", interval=client.KLINE_INTERVAL_1DAY - ) - - if len(candles) > 0: - logger.info("Binance key defined, test passed") - self.key_dict["BINANCE"] = "defined, test passed" - else: - logger.info("Binance key defined, test failed") - self.key_dict["BINANCE"] = "defined, test failed" - except Exception: - logger.info("Binance key defined, test failed") - self.key_dict["BINANCE"] = "defined, test failed" - - if show_output: - console.print(self.key_dict["BINANCE"] + "\n") - - def check_bitquery_key(self, show_output: bool = False) -> None: - """Check Bitquery key""" - self.cfg_dict["BITQUERY"] = "bitquery" - bitquery = cfg.API_BITQUERY_KEY - if "REPLACE_ME" in bitquery: - logger.info("Bitquery key not defined") - self.key_dict["BITQUERY"] = "not defined" - else: - headers = {"x-api-key": cfg.API_BITQUERY_KEY} - query = """ - { - ethereum { - dexTrades(options: {limit: 10, desc: "count"}) { - count - protocol - }}} - """ - r = requests.post( - "https://graphql.bitquery.io", json={"query": query}, headers=headers - ) - if r.status_code == 200: - logger.info("Bitquery key defined, test passed") - self.key_dict["BITQUERY"] = "defined, test passed" - else: - logger.warning("Bitquery key defined, test failed") - self.key_dict["BITQUERY"] = "defined, test failed" - - if show_output: - console.print(self.key_dict["BITQUERY"] + "\n") - - def check_si_key(self, show_output: bool = False) -> None: - """Check Sentiment Investor key""" - self.cfg_dict["SENTIMENT_INVESTOR"] = "si" - si_keys = [cfg.API_SENTIMENTINVESTOR_TOKEN] - if "REPLACE_ME" in si_keys: - logger.info("Sentiment Investor key not defined") - self.key_dict["SENTIMENT_INVESTOR"] = "not defined" - else: - try: - account = requests.get( - f"https://api.sentimentinvestor.com/v1/trending" - f"?token={cfg.API_SENTIMENTINVESTOR_TOKEN}" - ) - if account.ok and account.json().get("success", False): - logger.info("Sentiment Investor key defined, test passed") - self.key_dict["SENTIMENT_INVESTOR"] = "defined, test passed" - else: - logger.warning("Sentiment Investor key defined, test failed") - self.key_dict["SENTIMENT_INVESTOR"] = "defined, test unsuccessful" - except Exception: - logger.warning("Sentiment Investor key defined, test failed") - self.key_dict["SENTIMENT_INVESTOR"] = "defined, test unsuccessful" - - if show_output: - console.print(self.key_dict["SENTIMENT_INVESTOR"] + "\n") - - def check_coinbase_key(self, show_output: bool = False) -> None: - """Check Coinbase key""" - self.cfg_dict["COINBASE"] = "coinbase" - if "REPLACE_ME" in [ - cfg.API_COINBASE_KEY, - cfg.API_COINBASE_SECRET, - cfg.API_COINBASE_PASS_PHRASE, - ]: - logger.info("Coinbase key not defined") - self.key_dict["COINBASE"] = "not defined" - else: - auth = CoinbaseProAuth( - cfg.API_COINBASE_KEY, - cfg.API_COINBASE_SECRET, - cfg.API_COINBASE_PASS_PHRASE, - ) - try: - resp = make_coinbase_request("/accounts", auth=auth) - except CoinbaseApiException: - resp = None - if not resp: - logger.warning("Coinbase key defined, test failed") - self.key_dict["COINBASE"] = "defined, test unsuccessful" - else: - logger.info("Coinbase key defined, test passed") - self.key_dict["COINBASE"] = "defined, test passed" - - if show_output: - console.print(self.key_dict["COINBASE"] + "\n") - - def check_walert_key(self, show_output: bool = False) -> None: - """Check Walert key""" - self.cfg_dict["WHALE_ALERT"] = "walert" - if cfg.API_WHALE_ALERT_KEY == "REPLACE_ME": - logger.info("Walert key not defined") - self.key_dict["WHALE_ALERT"] = "not defined" - else: - url = ( - "https://api.whale-alert.io/v1/transactions?api_key=" - + cfg.API_WHALE_ALERT_KEY - ) - try: - response = requests.get(url, timeout=2) - if not 200 <= response.status_code < 300: - logger.warning("Walert key defined, test failed") - self.key_dict["WHALE_ALERT"] = "defined, test unsuccessful" - else: - logger.info("Walert key defined, test passed") - self.key_dict["WHALE_ALERT"] = "defined, test passed" - except Exception: - logger.exception("Walert key defined, test failed") - self.key_dict["WHALE_ALERT"] = "defined, test unsuccessful" - - if show_output: - console.print(self.key_dict["WHALE_ALERT"] + "\n") - - def check_glassnode_key(self, show_output: bool = False) -> None: - """Check glassnode key""" - self.cfg_dict["GLASSNODE"] = "glassnode" - if cfg.API_GLASSNODE_KEY == "REPLACE_ME": - logger.info("Glassnode key not defined") - self.key_dict["GLASSNODE"] = "not defined" - else: - url = "https://api.glassnode.com/v1/metrics/market/price_usd_close" - - parameters = { - "api_key": cfg.API_GLASSNODE_KEY, - "a": "BTC", - "i": "24h", - "s": str(1_614_556_800), - "u": str(1_641_227_783_561), - } - - r = requests.get(url, params=parameters) - if r.status_code == 200: - logger.info("Glassnode key defined, test passed") - self.key_dict["GLASSNODE"] = "defined, test passed" - else: - logger.warning("Glassnode key defined, test failed") - self.key_dict["GLASSNODE"] = "defined, test unsuccessful" - - if show_output: - console.print(self.key_dict["GLASSNODE"] + "\n") - - def check_coinglass_key(self, show_output: bool = False) -> None: - """Check coinglass key""" - self.cfg_dict["COINGLASS"] = "coinglass" - if cfg.API_COINGLASS_KEY == "REPLACE_ME": - logger.info("Coinglass key not defined") - self.key_dict["COINGLASS"] = "not defined" - else: - url = "https://open-api.coinglass.com/api/pro/v1/futures/openInterest/chart?&symbol=BTC&interval=0" - - headers = {"coinglassSecret": cfg.API_COINGLASS_KEY} - - response = requests.request("GET", url, headers=headers) - - if response.status_code == 200: - logger.info("Coinglass key defined, test passed") - self.key_dict["COINGLASS"] = "defined, test passed" - else: - logger.warning("Coinglass key defined, test failed") - self.key_dict["COINGLASS"] = "defined, test unsuccessful" - - if show_output: - console.print(self.key_dict["COINGLASS"] + "\n") - - def check_cpanic_key(self, show_output: bool = False) -> None: - """Check cpanic key""" - self.cfg_dict["CRYPTO_PANIC"] = "cpanic" - if cfg.API_CRYPTO_PANIC_KEY == "REPLACE_ME": - logger.info("cpanic key not defined") - self.key_dict["CRYPTO_PANIC"] = "not defined" - else: - crypto_panic_url = f"https://cryptopanic.com/api/v1/posts/?auth_token={cfg.API_CRYPTO_PANIC_KEY}&kind=all" - response = requests.get(crypto_panic_url) - - if not 200 <= response.status_code < 300: - logger.warning("cpanic key defined, test failed") - self.key_dict["CRYPTO_PANIC"] = "defined, test unsuccessful" - try: - logger.info("cpanic key defined, test passed") - self.key_dict["CRYPTO_PANIC"] = "defined, test passed" - except Exception as _: # noqa: F841 - logger.warning("cpanic key defined, test failed") - self.key_dict["CRYPTO_PANIC"] = "defined, test unsuccessful" - - if show_output: - console.print(self.key_dict["CRYPTO_PANIC"] + "\n") - - def check_ethplorer_key(self, show_output: bool = False) -> None: - """Check ethplorer key""" - self.cfg_dict["ETHPLORER"] = "ethplorer" - if cfg.API_ETHPLORER_KEY == "REPLACE_ME": - logger.info("ethplorer key not defined") - self.key_dict["ETHPLORER"] = "not defined" - else: - ethplorer_url = "https://api.ethplorer.io/getTokenInfo/0x1f9840a85d5af5bf1d1762f925bdaddc4201f984?apiKey=" - ethplorer_url += cfg.API_ETHPLORER_KEY - response = requests.get(ethplorer_url) - try: - if response.status_code == 200: - logger.info("ethplorer key defined, test passed") - self.key_dict["ETHPLORER"] = "defined, test passed" - else: - logger.warning("ethplorer key defined, test failed") - self.key_dict["ETHPLORER"] = "defined, test unsuccessful" - except Exception as _: # noqa: F841 - logger.exception("ethplorer key defined, test failed") - self.key_dict["ETHPLORER"] = "defined, test unsuccessful" - - if show_output: - console.print(self.key_dict["ETHPLORER"] + "\n") - - def check_smartstake_key(self, show_output: bool = False) -> None: - """Check Smartstake key""" - self.cfg_dict["SMARTSTAKE"] = "smartstake" - if "REPLACE_ME" in [ - cfg.API_SMARTSTAKE_TOKEN, - cfg.API_SMARTSTAKE_KEY, - ]: - self.key_dict["SMARTSTAKE"] = "not defined" - else: - payload = { - "type": "history", - "dayCount": 30, - "key": cfg.API_SMARTSTAKE_KEY, - "token": cfg.API_SMARTSTAKE_TOKEN, - } - - smartstake_url = "https://prod.smartstakeapi.com/listData?app=TERRA" - response = requests.get(smartstake_url, params=payload) # type: ignore - - try: - if response.status_code == 200: - self.key_dict["SMARTSTAKE"] = "defined, test passed" - else: - self.key_dict["SMARTSTAKE"] = "defined, test unsuccessful" - except Exception as _: # noqa: F841 - self.key_dict["SMARTSTAKE"] = "defined, test unsuccessful" - - if show_output: - console.print(self.key_dict["SMARTSTAKE"] + "\n") - - def check_messari_key(self, show_output: bool = False) -> None: - """Check Messari key""" - self.cfg_dict["MESSARI"] = "messari" - if ( - cfg.API_MESSARI_KEY == "REPLACE_ME" # pragma: allowlist secret - ): # pragma: allowlist secret - logger.info("Messari key not defined") - self.key_dict["MESSARI"] = "not defined" - else: - - url = "https://data.messari.io/api/v2/assets/bitcoin/profile" - headers = {"x-messari-api-key": cfg.API_MESSARI_KEY} - params = {"fields": "profile/general/overview/official_links"} - r = requests.get(url, headers=headers, params=params) - - if r.status_code == 200: - logger.info("FMessari key defined, test passed") - self.key_dict["MESSARI"] = "defined, test passed" - else: - logger.warning("Messari key defined, test failed") - self.key_dict["MESSARI"] = "defined, test failed" - - if show_output: - console.print(self.key_dict["MESSARI"] + "\n") - - def check_eodhd_key(self, show_output: bool = False) -> None: - """Check End of Day Historical Data key""" - self.cfg_dict["EODHD"] = "eodhd" - if cfg.API_EODHD_TOKEN == "REPLACE_ME": # nosec - logger.info("End of Day Historical Data key not defined") - self.key_dict["EODHD"] = "not defined" - else: - try: - pyEX.Client(api_token=cfg.API_EODHD_TOKEN, version="v1") - logger.info("End of Day Historical Data key defined, test passed") - self.key_dict["EODHD"] = "defined, test passed" - except PyEXception: - logger.exception("End of Day Historical Data key defined, test failed") - self.key_dict["EODHD"] = "defined, test failed" - - if show_output: - console.print(self.key_dict["EODHD"] + "\n") - - def check_santiment_key(self, show_output: bool = False) -> None: - """Check Santiment key""" - self.cfg_dict["SANTIMENT"] = "santiment" - if cfg.API_SANTIMENT_KEY == "REPLACE_ME": - logger.info("santiment key not defined") - self.key_dict["SANTIMENT"] = "not defined" - else: - headers = { - "Content-Type": "application/graphql", - "Authorization": f"Apikey {cfg.API_SANTIMENT_KEY}", - } - - # pylint: disable=line-too-long - data = '\n{{ getMetric(metric: "dev_activity"){{ timeseriesData( slug: "ethereum" from: ""2020-02-10T07:00:00Z"" to: "2020-03-10T07:00:00Z" interval: "1w"){{ datetime value }} }} }}' # noqa: E501 - - response = requests.post( - "https://api.santiment.net/graphql", headers=headers, data=data - ) - try: - if response.status_code == 200: - logger.info("santiment key defined, test passed") - self.key_dict["SANTIMENT"] = "defined, test passed" - else: - logger.warning("santiment key defined, test failed") - self.key_dict["SANTIMENT"] = "defined, test failed" - except Exception as _: # noqa: F841 - logger.exception("santiment key defined, test failed") - self.key_dict["SANTIMENT"] = "defined, test failed" - - if show_output: - console.print(self.key_dict["SANTIMENT"] + "\n") - def check_keys_status(self) -> None: """Check keys status""" - self.check_av_key() - self.check_fmp_key() - self.check_quandl_key() - self.check_polygon_key() - self.check_fred_key() - self.check_news_key() - self.check_tradier_key() - self.check_cmc_key() - self.check_finnhub_key() - self.check_iex_key() - self.check_reddit_key() - self.check_twitter_key() - self.check_rh_key() - self.check_degiro_key() - self.check_oanda_key() - self.check_binance_key() - self.check_bitquery_key() - self.check_si_key() - self.check_coinbase_key() - self.check_walert_key() - self.check_glassnode_key() - self.check_coinglass_key() - self.check_cpanic_key() - self.check_ethplorer_key() - self.check_smartstake_key() - self.check_github_key() - self.check_messari_key() - self.check_eodhd_key() - self.check_santiment_key() + + for api in tqdm(self.API_LIST, desc="Checking keys status"): + self.status_dict[api] = getattr(keys_model, "check_" + str(api) + "_key")() def print_help(self): """Print help""" @@ -860,54 +93,53 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods mt = MenuText("keys/") mt.add_info("_keys_") mt.add_raw("\n") - for k, v in self.key_dict.items(): - cmd_name = self.cfg_dict[k] - c = "red" - if v == "defined, test passed": + mt.add_cmd("mykeys") + mt.add_raw("\n") + mt.add_info("_status_") + + for cmd_name, status_msg in self.status_dict.items(): + api_name = self.API_DICT[cmd_name] + + c = "grey30" + if status_msg == str(keys_model.KeyStatus.DEFINED_TEST_PASSED): c = "green" - elif v == "defined": - c = "green" - elif v == "defined, test inconclusive": + elif status_msg == str(keys_model.KeyStatus.DEFINED_TEST_FAILED): + c = "red" + elif status_msg == str(keys_model.KeyStatus.DEFINED_NOT_TESTED): c = "yellow" - elif v == "not defined": + elif status_msg == str(keys_model.KeyStatus.DEFINED_TEST_INCONCLUSIVE): + c = "yellow" + elif status_msg == str(keys_model.KeyStatus.NOT_DEFINED): c = "grey30" + mt.add_raw( - f" [cmds]{cmd_name}[/cmds] {(20 - len(cmd_name)) * ' '}" - f" [{c}] {k} {(25 - len(k)) * ' '} {translate(v)} [/{c}]\n" + f" [cmds]{cmd_name}[/cmds] {(20 - len(cmd_name)) * ' '}" + f" [{c}] {api_name} {(25 - len(api_name)) * ' '} {translate(status_msg)} [/{c}]\n" ) console.print(text=mt.menu_text, menu="Keys") @log_start_end(log=logger) - def call_github(self, other_args: List[str]): - """Process github command""" + def call_mykeys(self, other_args: List[str]): + """Display current keys""" parser = argparse.ArgumentParser( add_help=False, formatter_class=argparse.ArgumentDefaultsHelpFormatter, - prog="github", - description="Set GitHub API key.", + prog="mykeys", + description="Display current keys.", ) parser.add_argument( - "-k", - "--key", - type=str, - dest="key", - help="key", + "-s", "--show", type=bool, dest="show", help="show", default=False + ) + if other_args and "-s" in other_args[0]: + other_args.insert(1, "True") + + ns_parser = self.parse_known_args_and_warn( + parser, other_args, export_allowed=EXPORT_ONLY_RAW_DATA_ALLOWED ) - if not other_args: - console.print( - "For your API Key, visit: https://docs.github.com/en/rest/guides/getting-started-with-the-rest-api\n" - ) - return - if other_args and "-" not in other_args[0][0]: - other_args.insert(0, "-k") - ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_GITHUB_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_GITHUB_KEY", ns_parser.key) - cfg.API_GITHUB_KEY = ns_parser.key - self.check_github_key(show_output=True) + keys_view.display_keys(show=ns_parser.show, export=ns_parser.export) @log_start_end(log=logger) def call_av(self, other_args: List[str]): @@ -935,10 +167,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_KEY_ALPHAVANTAGE"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_KEY_ALPHAVANTAGE", ns_parser.key) - cfg.API_KEY_ALPHAVANTAGE = ns_parser.key - self.check_av_key(show_output=True) + self.status_dict["av"] = keys_model.set_av_key( + key=ns_parser.key, persist=True, show_output=True + ) @log_start_end(log=logger) def call_fmp(self, other_args: List[str]): @@ -966,12 +197,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_KEY_FINANCIALMODELINGPREP"] = ns_parser.key - dotenv.set_key( - self.env_file, "OPENBB_API_KEY_FINANCIALMODELINGPREP", ns_parser.key + self.status_dict["fmp"] = keys_model.set_fmp_key( + key=ns_parser.key, persist=True, show_output=True ) - cfg.API_KEY_FINANCIALMODELINGPREP = ns_parser.key - self.check_fmp_key(show_output=True) @log_start_end(log=logger) def call_quandl(self, other_args: List[str]): @@ -997,10 +225,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_KEY_QUANDL"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_KEY_QUANDL", ns_parser.key) - cfg.API_KEY_QUANDL = ns_parser.key - self.check_quandl_key(show_output=True) + self.status_dict["quandl"] = keys_model.set_quandl_key( + key=ns_parser.key, persist=True, show_output=True + ) @log_start_end(log=logger) def call_polygon(self, other_args: List[str]): @@ -1026,10 +253,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_POLYGON_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_POLYGON_KEY", ns_parser.key) - cfg.API_POLYGON_KEY = ns_parser.key - self.check_polygon_key(show_output=True) + self.status_dict["polygon"] = keys_model.set_polygon_key( + key=ns_parser.key, persist=True, show_output=True + ) @log_start_end(log=logger) def call_fred(self, other_args: List[str]): @@ -1055,10 +281,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_FRED_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_FRED_KEY", ns_parser.key) - cfg.API_FRED_KEY = ns_parser.key - self.check_fred_key(show_output=True) + self.status_dict["fred"] = keys_model.set_fred_key( + key=ns_parser.key, persist=True, show_output=True + ) @log_start_end(log=logger) def call_news(self, other_args: List[str]): @@ -1084,10 +309,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_NEWS_TOKEN"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_NEWS_TOKEN", ns_parser.key) - cfg.API_NEWS_TOKEN = ns_parser.key - self.check_news_key(show_output=True) + self.status_dict["news"] = keys_model.set_news_key( + key=ns_parser.key, persist=True, show_output=True + ) @log_start_end(log=logger) def call_tradier(self, other_args: List[str]): @@ -1113,10 +337,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_TRADIER_TOKEN"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_TRADIER_TOKEN", ns_parser.key) - cfg.TRADIER_TOKEN = ns_parser.key - self.check_tradier_key(show_output=True) + self.status_dict["tradier"] = keys_model.set_tradier_key( + key=ns_parser.key, persist=True, show_output=True + ) @log_start_end(log=logger) def call_cmc(self, other_args: List[str]): @@ -1141,10 +364,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_CMC_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_CMC_KEY", ns_parser.key) - cfg.API_CMC_KEY = ns_parser.key - self.check_cmc_key(show_output=True) + self.status_dict["cmc"] = keys_model.set_cmc_key( + key=ns_parser.key, persist=True, show_output=True + ) @log_start_end(log=logger) def call_finnhub(self, other_args: List[str]): @@ -1169,10 +391,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_FINNHUB_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_FINNHUB_KEY", ns_parser.key) - cfg.API_FINNHUB_KEY = ns_parser.key - self.check_finnhub_key(show_output=True) + self.status_dict["finnhub"] = keys_model.set_finnhub_key( + key=ns_parser.key, persist=True, show_output=True + ) @log_start_end(log=logger) def call_iex(self, other_args: List[str]): @@ -1197,10 +418,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_IEX_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_IEX_KEY", ns_parser.key) - cfg.API_IEX_TOKEN = ns_parser.key - self.check_iex_key(show_output=True) + self.status_dict["iex"] = keys_model.set_iex_key( + key=ns_parser.key, persist=True, show_output=True + ) @log_start_end(log=logger) def call_reddit(self, other_args: List[str]): @@ -1257,42 +477,21 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods return ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_REDDIT_CLIENT_ID"] = ns_parser.client_id - dotenv.set_key( - self.env_file, "OPENBB_API_REDDIT_CLIENT_ID", ns_parser.client_id - ) - cfg.API_REDDIT_CLIENT_ID = ns_parser.client_id - - os.environ["OPENBB_API_REDDIT_CLIENT_SECRET"] = ns_parser.client_secret - dotenv.set_key( - self.env_file, - "OPENBB_API_REDDIT_CLIENT_SECRET", - ns_parser.client_secret, - ) - cfg.API_REDDIT_CLIENT_SECRET = ns_parser.client_secret - - os.environ["OPENBB_API_REDDIT_PASSWORD"] = ns_parser.password - dotenv.set_key( - self.env_file, "OPENBB_API_REDDIT_PASSWORD", ns_parser.password - ) - cfg.API_REDDIT_PASSWORD = ns_parser.password - - os.environ["OPENBB_API_REDDIT_USERNAME"] = ns_parser.username - dotenv.set_key( - self.env_file, "OPENBB_API_REDDIT_USERNAME", ns_parser.username - ) - cfg.API_REDDIT_USERNAME = ns_parser.username slash_components = "".join([f"/{val}" for val in self.queue]) useragent = " ".join(ns_parser.user_agent) + " " + slash_components useragent = useragent.replace('"', "") self.queue = [] - os.environ["OPENBB_API_REDDIT_USER_AGENT"] = useragent - dotenv.set_key(self.env_file, "OPENBB_API_REDDIT_USER_AGENT", useragent) - cfg.API_REDDIT_USER_AGENT = useragent - - self.check_reddit_key(show_output=True) + self.status_dict["reddit"] = keys_model.set_reddit_key( + client_id=ns_parser.client_id, + client_secret=ns_parser.client_secret, + password=ns_parser.password, + username=ns_parser.username, + useragent=useragent, + persist=True, + show_output=True, + ) @log_start_end(log=logger) def call_twitter(self, other_args: List[str]): @@ -1315,7 +514,7 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods "-s", "--secret", type=str, - dest="secret_key", + dest="secret", help="Secret key", required="-h" not in other_args, ) @@ -1323,7 +522,7 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods "-t", "--token", type=str, - dest="bearer_token", + dest="token", help="Bearer token", required="-h" not in other_args, ) @@ -1332,23 +531,13 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods return ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_TWITTER_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_TWITTER_KEY", ns_parser.key) - cfg.API_TWITTER_KEY = ns_parser.key - - os.environ["OPENBB_API_TWITTER_SECRET_KEY"] = ns_parser.secret_key - dotenv.set_key( - self.env_file, "OPENBB_API_TWITTER_SECRET_KEY", ns_parser.secret_key + self.status_dict["twitter"] = keys_model.set_twitter_key( + key=ns_parser.key, + secret=ns_parser.secret, + access_token=ns_parser.token, + persist=True, + show_output=True, ) - cfg.API_TWITTER_SECRET_KEY = ns_parser.secret_key - - os.environ["OPENBB_API_TWITTER_BEARER_TOKEN"] = ns_parser.bearer_token - dotenv.set_key( - self.env_file, "OPENBB_API_TWITTER_BEARER_TOKEN", ns_parser.bearer_token - ) - cfg.API_TWITTER_BEARER_TOKEN = ns_parser.bearer_token - - self.check_twitter_key(show_output=True) @log_start_end(log=logger) def call_rh(self, other_args: List[str]): @@ -1378,15 +567,12 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods return ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_RH_USERNAME"] = ns_parser.username - dotenv.set_key(self.env_file, "OPENBB_RH_USERNAME", ns_parser.username) - cfg.RH_USERNAME = ns_parser.username - - os.environ["OPENBB_RH_PASSWORD"] = ns_parser.password - dotenv.set_key(self.env_file, "OPENBB_RH_PASSWORD", ns_parser.password) - cfg.RH_PASSWORD = ns_parser.password - - self.check_rh_key(show_output=True) + self.status_dict["rh"] = keys_model.set_rh_key( + username=ns_parser.username, + password=ns_parser.password, + persist=True, + show_output=True, + ) @log_start_end(log=logger) def call_degiro(self, other_args: List[str]): @@ -1417,26 +603,20 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods type=str, dest="secret", help="TOPT Secret", + default="", ) if not other_args: console.print("For your API Key, visit: https://www.degiro.fr\n") return ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_DG_USERNAME"] = ns_parser.username - dotenv.set_key(self.env_file, "OPENBB_DG_USERNAME", ns_parser.username) - cfg.DG_USERNAME = ns_parser.username - - os.environ["OPENBB_DG_PASSWORD"] = ns_parser.password - dotenv.set_key(self.env_file, "OPENBB_DG_PASSWORD", ns_parser.password) - cfg.DG_PASSWORD = ns_parser.password - - if ns_parser.secret: - os.environ["OPENBB_DG_TOTP_SECRET"] = ns_parser.secret - dotenv.set_key(self.env_file, "OPENBB_DG_TOTP_SECRET", ns_parser.secret) - cfg.DG_TOTP_SECRET = ns_parser.secret - - self.check_degiro_key(show_output=True) + self.status_dict["degiro"] = keys_model.set_degiro_key( + username=ns_parser.username, + password=ns_parser.password, + secret=ns_parser.secret, + persist=True, + show_output=True, + ) @log_start_end(log=logger) def call_oanda(self, other_args: List[str]): @@ -1472,24 +652,14 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods console.print("For your API Key, visit: https://developer.oanda.com\n") return ns_parser = parse_simple_args(parser, other_args) - if not ns_parser: - return - if ns_parser.account: - os.environ["OPENBB_OANDA_ACCOUNT"] = ns_parser.account - dotenv.set_key(self.env_file, "OPENBB_OANDA_ACCOUNT", ns_parser.account) - cfg.OANDA_ACCOUNT = ns_parser.account - if ns_parser.token: - os.environ["OPENBB_OANDA_TOKEN"] = ns_parser.token - dotenv.set_key(self.env_file, "OPENBB_OANDA_TOKEN", ns_parser.token) - cfg.OANDA_TOKEN = ns_parser.token - if ns_parser.account_type: - os.environ["OPENBB_OANDA_ACCOUNT_TYPE"] = ns_parser.account_type - dotenv.set_key( - self.env_file, "OPENBB_OANDA_ACCOUNT_TYPE", ns_parser.account_type + if ns_parser: + self.status_dict["oanda"] = keys_model.set_oanda_key( + account=ns_parser.account, + access_token=ns_parser.token, + account_type=ns_parser.account_type, + persist=True, + show_output=True, ) - cfg.OANDA_ACCOUNT_TYPE = ns_parser.account_type - - self.check_oanda_key(show_output=True) @log_start_end(log=logger) def call_binance(self, other_args: List[str]): @@ -1511,7 +681,7 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods "-s", "--secret", type=str, - dest="secret_key", + dest="secret", help="Secret key", ) if not other_args: @@ -1519,17 +689,12 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods return ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_BINANCE_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_BINANCE_KEY", ns_parser.key) - cfg.API_BINANCE_KEY = ns_parser.key - - os.environ["OPENBB_API_BINANCE_SECRET"] = ns_parser.secret_key - dotenv.set_key( - self.env_file, "OPENBB_API_BINANCE_SECRET", ns_parser.secret_key + self.status_dict["binance"] = keys_model.set_binance_key( + key=ns_parser.key, + secret=ns_parser.secret, + persist=True, + show_output=True, ) - cfg.API_BINANCE_SECRET = ns_parser.secret_key - - self.check_binance_key(show_output=True) @log_start_end(log=logger) def call_bitquery(self, other_args: List[str]): @@ -1554,11 +719,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_BITQUERY_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_BITQUERY_KEY", ns_parser.key) - cfg.API_BITQUERY_KEY = ns_parser.key - - self.check_bitquery_key(show_output=True) + self.status_dict["bitquery"] = keys_model.set_bitquery_key( + key=ns_parser.key, persist=True, show_output=True + ) @log_start_end(log=logger) def call_si(self, other_args: List[str]): @@ -1583,13 +746,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_SENTIMENTINVESTOR_TOKEN"] = ns_parser.key - dotenv.set_key( - self.env_file, "OPENBB_API_SENTIMENTINVESTOR_TOKEN", ns_parser.key + self.status_dict["si"] = keys_model.set_si_key( + key=ns_parser.key, persist=True, show_output=True ) - cfg.API_SENTIMENTINVESTOR_TOKEN = ns_parser.key - - self.check_si_key(show_output=True) @log_start_end(log=logger) def call_coinbase(self, other_args: List[str]): @@ -1611,7 +770,7 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods "-s", "--secret", type=str, - dest="secret_key", + dest="secret", help="Secret key", ) parser.add_argument( @@ -1626,23 +785,13 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods return ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_COINBASE_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_COINBASE_KEY", ns_parser.key) - cfg.API_COINBASE_KEY = ns_parser.key - - os.environ["OPENBB_API_COINBASE_SECRET"] = ns_parser.secret_key - dotenv.set_key( - self.env_file, "OPENBB_API_COINBASE_SECRET", ns_parser.secret_key + self.status_dict["coinbase"] = keys_model.set_coinbase_key( + key=ns_parser.key, + secret=ns_parser.secret, + passphrase=ns_parser.passphrase, + persist=True, + show_output=True, ) - cfg.API_COINBASE_SECRET = ns_parser.secret_key - - os.environ["OPENBB_API_COINBASE_PASS_PHRASE"] = ns_parser.passphrase - dotenv.set_key( - self.env_file, "OPENBB_API_COINBASE_PASS_PHRASE", ns_parser.passphrase - ) - cfg.API_COINBASE_PASS_PHRASE = ns_parser.passphrase - - self.check_coinbase_key(show_output=True) @log_start_end(log=logger) def call_walert(self, other_args: List[str]): @@ -1667,11 +816,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_WHALE_ALERT_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_WHALE_ALERT_KEY", ns_parser.key) - cfg.API_WHALE_ALERT_KEY = ns_parser.key - - self.check_walert_key(show_output=True) + self.status_dict["walert"] = keys_model.set_walert_key( + key=ns_parser.key, persist=True, show_output=True + ) @log_start_end(log=logger) def call_glassnode(self, other_args: List[str]): @@ -1680,7 +827,7 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods add_help=False, formatter_class=argparse.ArgumentDefaultsHelpFormatter, prog="glassnode", - description="Set Whale Alert API key.", + description="Set Glassnode API key.", ) parser.add_argument( "-k", @@ -1698,11 +845,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_GLASSNODE_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_GLASSNODE_KEY", ns_parser.key) - cfg.API_GLASSNODE_KEY = ns_parser.key - - self.check_glassnode_key(show_output=True) + self.status_dict["glassnode"] = keys_model.set_glassnode_key( + key=ns_parser.key, persist=True, show_output=True + ) @log_start_end(log=logger) def call_coinglass(self, other_args: List[str]): @@ -1729,12 +874,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - print(type(ns_parser.key)) - os.environ["OPENBB_API_COINGLASS_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_COINGLASS_KEY", ns_parser.key) - cfg.API_COINGLASS_KEY = ns_parser.key - - self.check_coinglass_key(show_output=True) + self.status_dict["coinglass"] = keys_model.set_coinglass_key( + key=ns_parser.key, persist=True, show_output=True + ) @log_start_end(log=logger) def call_cpanic(self, other_args: List[str]): @@ -1761,11 +903,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_CRYPTO_PANIC_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_CRYPTO_PANIC_KEY", ns_parser.key) - cfg.API_CRYPTO_PANIC_KEY = ns_parser.key - - self.check_cpanic_key(show_output=True) + self.status_dict["cpanic"] = keys_model.set_cpanic_key( + key=ns_parser.key, persist=True, show_output=True + ) @log_start_end(log=logger) def call_ethplorer(self, other_args: List[str]): @@ -1792,11 +932,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_ETHPLORER_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_ETHPLORER_KEY", ns_parser.key) - cfg.API_ETHPLORER_KEY = ns_parser.key - - self.check_ethplorer_key(show_output=True) + self.status_dict["ethplorer"] = keys_model.set_ethplorer_key( + key=ns_parser.key, persist=True, show_output=True + ) @log_start_end(log=logger) def call_smartstake(self, other_args: List[str]): @@ -1827,17 +965,42 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_SMARTSTAKE_TOKEN"] = ns_parser.token - dotenv.set_key( - self.env_file, "OPENBB_API_SMARTSTAKE_TOKEN", ns_parser.token + self.status_dict["smartstake"] = keys_model.set_smartstake_key( + key=ns_parser.key, + access_token=ns_parser.token, + persist=True, + show_output=True, ) - cfg.API_SMARTSTAKE_TOKEN = ns_parser.token - os.environ["OPENBB_API_SMARTSTAKE_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_SMARTSTAKE_KEY", ns_parser.key) - cfg.API_SMARTSTAKE_KEY = ns_parser.key + @log_start_end(log=logger) + def call_github(self, other_args: List[str]): + """Process github command""" + parser = argparse.ArgumentParser( + add_help=False, + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + prog="github", + description="Set GitHub API key.", + ) + parser.add_argument( + "-k", + "--key", + type=str, + dest="key", + help="key", + ) + if not other_args: + console.print( + "For your API Key, visit: https://docs.github.com/en/rest/guides/getting-started-with-the-rest-api\n" + ) + return - self.check_smartstake_key(show_output=True) + if other_args and "-" not in other_args[0][0]: + other_args.insert(0, "-k") + ns_parser = parse_simple_args(parser, other_args) + if ns_parser: + self.status_dict["github"] = keys_model.set_github_key( + key=ns_parser.key, persist=True, show_output=True + ) @log_start_end(log=logger) def call_messari(self, other_args: List[str]): @@ -1863,10 +1026,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_MESSARI_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_MESSARI_KEY", ns_parser.key) - cfg.API_MESSARI_KEY = ns_parser.key - self.check_messari_key(show_output=True) + self.status_dict["messari"] = keys_model.set_messari_key( + key=ns_parser.key, persist=True, show_output=True + ) @log_start_end(log=logger) def call_eodhd(self, other_args: List[str]): @@ -1893,10 +1055,9 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["API_EODHD_TOKEN"] = ns_parser.key - dotenv.set_key(self.env_file, "API_EODHD_TOKEN", ns_parser.key) - cfg.API_EODHD_TOKEN = ns_parser.key - self.check_eodhd_key(show_output=True) + self.status_dict["eodhd"] = keys_model.set_eodhd_key( + key=ns_parser.key, persist=True, show_output=True + ) def call_santiment(self, other_args: List[str]): """Process santiment command""" @@ -1923,7 +1084,6 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods other_args.insert(0, "-k") ns_parser = parse_simple_args(parser, other_args) if ns_parser: - os.environ["OPENBB_API_SANTIMENT_KEY"] = ns_parser.key - dotenv.set_key(self.env_file, "OPENBB_API_SANTIMENT_KEY", ns_parser.key) - cfg.API_SANTIMENT_KEY = ns_parser.key - self.check_santiment_key(show_output=True) + self.status_dict["santiment"] = keys_model.set_santiment_key( + key=ns_parser.key, persist=True, show_output=True + ) diff --git a/openbb_terminal/keys_model.py b/openbb_terminal/keys_model.py new file mode 100644 index 00000000000..bccfae7c044 --- /dev/null +++ b/openbb_terminal/keys_model.py @@ -0,0 +1,2034 @@ +"""Keys model""" +__docformat__ = "numpy" + +import sys +import logging +import os +from enum import Enum +import binance +import dotenv +import pandas as pd +import quandl +import requests +from prawcore.exceptions import ResponseException +import praw +import pyEX +import oandapyV20.endpoints.pricing +from oandapyV20 import API as oanda_API +from coinmarketcapapi import CoinMarketCapAPI +from alpha_vantage.timeseries import TimeSeries +from openbb_terminal.cryptocurrency.coinbase_helpers import ( + CoinbaseProAuth, + make_coinbase_request, + CoinbaseApiException, +) +from openbb_terminal import config_terminal as cfg +from openbb_terminal.core.config.paths import USER_ENV_FILE +from openbb_terminal.rich_config import console + +from openbb_terminal.terminal_helper import suppress_stdout + +# pylint: disable=too-many-lines + +logger = logging.getLogger(__name__) + +sys.tracebacklimit = 0 + + +class KeyStatus(str, Enum): + """Class to handle status messages and colors""" + + DEFINED_TEST_FAILED = "defined, test failed" + NOT_DEFINED = "not defined" + DEFINED_TEST_PASSED = "defined, test passed" + DEFINED_TEST_INCONCLUSIVE = "defined, test inconclusive" + DEFINED_NOT_TESTED = "defined, not tested" + + def __str__(self): + return self.value + + def colorize(self): + if self.name == self.DEFINED_TEST_FAILED.name: + c = "red" + elif self.name == self.NOT_DEFINED.name: + c = "grey30" + elif self.name == self.DEFINED_TEST_PASSED.name: + c = "green" + elif self.name == self.DEFINED_TEST_INCONCLUSIVE.name: + c = "yellow" + elif self.name == self.DEFINED_NOT_TESTED.name: + c = "yellow" + + return f"[{c}]{self.value}[/{c}]" + + +def set_key(env_var_name: str, env_var_value: str, persist: bool = False) -> None: + """Set API key. + + Parameters + ---------- + env_var_name: str + API name + env_var_value: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + """ + if persist: + os.environ[env_var_name] = env_var_value + dotenv.set_key(str(USER_ENV_FILE), env_var_name, env_var_value) + + # Remove "OPENBB_" prefix from env_var + if env_var_name.startswith("OPENBB_"): + env_var_name = env_var_name[7:] + + # Set cfg.env_var_name = env_var_value + setattr(cfg, env_var_name, env_var_value) + + +def get_keys(show: bool = False) -> pd.DataFrame: + """Get currently set API keys. + + Parameters + ---------- + show: bool + Flag to choose whether to show actual keys or not. + By default, False. + + Returns: + pd.DataFrame: currents keys + """ + + # TODO: Refactor api variables without prefix API_ and extend API_SOURCE_KEY format + + var_list = [v for v in dir(cfg) if v.startswith("API_")] + + current_keys = {} + + for cfg_var_name in var_list: + cfg_var_value = getattr(cfg, cfg_var_name) + if cfg_var_value != "REPLACE_ME": + current_keys[cfg_var_name[4:]] = cfg_var_value + + if current_keys: + df = pd.DataFrame.from_dict(current_keys, orient="index") + df.index.name = "API" + df = df.rename(columns={0: "Key"}) + if show: + return df + df["Key"] = "*******" + return df + + return pd.DataFrame() + + +def set_av_key(key: str, persist: bool = False, show_output: bool = False) -> str: + """Set Alpha Vantage key + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_KEY_ALPHAVANTAGE", key, persist) + return check_av_key(show_output) + + +def check_av_key(show_output: bool = False) -> str: + """Check Alpha Vantage key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if cfg.API_KEY_ALPHAVANTAGE == "REPLACE_ME": # pragma: allowlist secret + logger.info("Alpha Vantage key not defined") + status = KeyStatus.NOT_DEFINED + else: + df = TimeSeries( + key=cfg.API_KEY_ALPHAVANTAGE, output_format="pandas" + ).get_intraday(symbol="AAPL") + if df[0].empty: # pylint: disable=no-member + logger.warning("Alpha Vantage key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + else: + logger.info("Alpha Vantage key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_fmp_key(key: str, persist: bool = False, show_output: bool = False) -> str: + """Set Financial Modeling Prep key + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_KEY_FINANCIALMODELINGPREP", key, persist) + return check_fmp_key(show_output) + + +def check_fmp_key(show_output: bool = False) -> str: + """Check Financial Modeling Prep key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if ( + cfg.API_KEY_FINANCIALMODELINGPREP == "REPLACE_ME" # pragma: allowlist secret + ): # pragma: allowlist secret + logger.info("Financial Modeling Prep key not defined") + status = KeyStatus.NOT_DEFINED + else: + r = requests.get( + f"https://financialmodelingprep.com/api/v3/profile/AAPL?apikey={cfg.API_KEY_FINANCIALMODELINGPREP}" + ) + if r.status_code in [403, 401] or "Error Message" in str(r.content): + logger.warning("Financial Modeling Prep key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + elif r.status_code == 200: + logger.info("Financial Modeling Prep key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + else: + logger.warning("Financial Modeling Prep key defined, test inconclusive") + status = KeyStatus.DEFINED_TEST_INCONCLUSIVE + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_quandl_key(key: str, persist: bool = False, show_output: bool = False) -> str: + """Set Quandl key + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_KEY_QUANDL", key, persist) + return check_quandl_key(show_output) + + +def check_quandl_key(show_output: bool = False) -> str: + """Check Quandl key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if cfg.API_KEY_QUANDL == "REPLACE_ME": # pragma: allowlist secret + logger.info("Quandl key not defined") + status = KeyStatus.NOT_DEFINED + else: + try: + quandl.save_key(cfg.API_KEY_QUANDL) + quandl.get("EIA/PET_RWTC_D") + logger.info("Quandl key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + except Exception as _: # noqa: F841 + logger.warning("Quandl key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_polygon_key(key: str, persist: bool = False, show_output: bool = False) -> str: + """Set Polygon key + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_POLYGON_KEY", key, persist) + return check_polygon_key(show_output) + + +def check_polygon_key(show_output: bool = False) -> str: + """Check Polygon key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if cfg.API_POLYGON_KEY == "REPLACE_ME": + logger.info("Polygon key not defined") + status = KeyStatus.NOT_DEFINED + else: + r = requests.get( + "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2020-06-01/2020-06-17" + f"?apiKey={cfg.API_POLYGON_KEY}" + ) + if r.status_code in [403, 401]: + logger.warning("Polygon key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + elif r.status_code == 200: + logger.info("Polygon key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + else: + logger.warning("Polygon key defined, test inconclusive") + status = KeyStatus.DEFINED_TEST_INCONCLUSIVE + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_fred_key(key: str, persist: bool = False, show_output: bool = False) -> str: + """Set FRED key + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_FRED_KEY", key, persist) + return check_fred_key(show_output) + + +def check_fred_key(show_output: bool = False) -> str: + """Check FRED key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if cfg.API_FRED_KEY == "REPLACE_ME": + logger.info("FRED key not defined") + status = KeyStatus.NOT_DEFINED + else: + r = requests.get( + f"https://api.stlouisfed.org/fred/series?series_id=GNPCA&api_key={cfg.API_FRED_KEY}" + ) + if r.status_code in [403, 401, 400]: + logger.warning("FRED key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + elif r.status_code == 200: + logger.info("FRED key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + else: + logger.warning("FRED key defined, test inconclusive") + status = KeyStatus.DEFINED_TEST_INCONCLUSIVE + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_news_key(key: str, persist: bool = False, show_output: bool = False) -> str: + """Set News key + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_NEWS_TOKEN", key, persist) + return check_news_key(show_output) + + +def check_news_key(show_output: bool = False) -> str: + """Check News key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if cfg.API_NEWS_TOKEN == "REPLACE_ME": # nosec + logger.info("News API key not defined") + status = KeyStatus.NOT_DEFINED + else: + r = requests.get( + f"https://newsapi.org/v2/everything?q=keyword&apiKey={cfg.API_NEWS_TOKEN}" + ) + if r.status_code in [401, 403]: + logger.warning("News API key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + elif r.status_code == 200: + logger.info("News API key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + else: + logger.warning("News API key defined, test inconclusive") + status = KeyStatus.DEFINED_TEST_INCONCLUSIVE + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_tradier_key(key: str, persist: bool = False, show_output: bool = False) -> str: + """Set Tradier key + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_TRADIER_TOKEN", key, persist) + return check_tradier_key(show_output) + + +def check_tradier_key(show_output: bool = False) -> str: + """Check Tradier key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if cfg.API_TRADIER_TOKEN == "REPLACE_ME": # nosec + logger.info("Tradier key not defined") + status = KeyStatus.NOT_DEFINED + else: + r = requests.get( + "https://sandbox.tradier.com/v1/markets/quotes", + params={"symbols": "AAPL"}, + headers={ + "Authorization": f"Bearer {cfg.API_TRADIER_TOKEN}", + "Accept": "application/json", + }, + ) + if r.status_code in [401, 403]: + logger.warning("Tradier key not defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + elif r.status_code == 200: + logger.info("Tradier key not defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + else: + logger.warning("Tradier key not defined, test inconclusive") + status = KeyStatus.DEFINED_TEST_INCONCLUSIVE + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_cmc_key(key: str, persist: bool = False, show_output: bool = False) -> str: + """Set Coinmarketcap key + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_CMC_KEY", key, persist) + return check_cmc_key(show_output) + + +def check_cmc_key(show_output: bool = False) -> str: + """Check Coinmarketcap key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if cfg.API_CMC_KEY == "REPLACE_ME": + logger.info("Coinmarketcap key not defined") + status = KeyStatus.NOT_DEFINED + else: + cmc = CoinMarketCapAPI(cfg.API_CMC_KEY) + + try: + cmc.cryptocurrency_map() + logger.info("Coinmarketcap key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + except Exception: + logger.info("Coinmarketcap key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_finnhub_key(key: str, persist: bool = False, show_output: bool = False) -> str: + """Set Finnhub key + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_FINNHUB_KEY", key, persist) + return check_finnhub_key(show_output) + + +def check_finnhub_key(show_output: bool = False) -> str: + """Check Finnhub key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if cfg.API_FINNHUB_KEY == "REPLACE_ME": + logger.info("Finnhub key not defined") + status = KeyStatus.NOT_DEFINED + else: + r = r = requests.get( + f"https://finnhub.io/api/v1/quote?symbol=AAPL&token={cfg.API_FINNHUB_KEY}" + ) + if r.status_code in [403, 401, 400]: + logger.warning("Finnhub key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + elif r.status_code == 200: + logger.info("Finnhub key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + else: + logger.warning("Finnhub key defined, test inconclusive") + status = KeyStatus.DEFINED_TEST_INCONCLUSIVE + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_iex_key(key: str, persist: bool = False, show_output: bool = False) -> str: + """Set IEX Cloud key + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_IEX_TOKEN", key, persist) + return check_iex_key(show_output) + + +def check_iex_key(show_output: bool = False) -> str: + """Check IEX Cloud key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if cfg.API_IEX_TOKEN == "REPLACE_ME": # nosec + logger.info("IEX Cloud key not defined") + status = KeyStatus.NOT_DEFINED + else: + try: + pyEX.Client(api_token=cfg.API_IEX_TOKEN, version="v1").quote(symbol="AAPL") + logger.info("IEX Cloud key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + except Exception as _: # noqa: F841 + logger.warning("IEX Cloud key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_reddit_key( + client_id: str, + client_secret: str, + password: str, + username: str, + useragent: str, + persist: bool = False, + show_output: bool = False, +) -> str: + """Set Reddit key + + Parameters + ---------- + client_id: str + client_secret: str + password: str + username: str + useragent: str + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_REDDIT_CLIENT_ID", client_id, persist) + set_key("OPENBB_API_REDDIT_CLIENT_SECRET", client_secret, persist) + set_key("OPENBB_API_REDDIT_PASSWORD", password, persist) + set_key("OPENBB_API_REDDIT_USERNAME", username, persist) + set_key("OPENBB_API_REDDIT_USER_AGENT", useragent, persist) + + return check_reddit_key(show_output) + + +def check_reddit_key(show_output: bool = False) -> str: + """Check Reddit key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + reddit_keys = [ + cfg.API_REDDIT_CLIENT_ID, + cfg.API_REDDIT_CLIENT_SECRET, + cfg.API_REDDIT_USERNAME, + cfg.API_REDDIT_PASSWORD, + cfg.API_REDDIT_USER_AGENT, + ] + if "REPLACE_ME" in reddit_keys: + logger.info("Reddit key not defined") + status = KeyStatus.NOT_DEFINED + else: + + try: + with suppress_stdout(): + praw_api = praw.Reddit( + client_id=cfg.API_REDDIT_CLIENT_ID, + client_secret=cfg.API_REDDIT_CLIENT_SECRET, + username=cfg.API_REDDIT_USERNAME, + user_agent=cfg.API_REDDIT_USER_AGENT, + password=cfg.API_REDDIT_PASSWORD, + check_for_updates=False, + comment_kind="t1", + message_kind="t4", + redditor_kind="t2", + submission_kind="t3", + subreddit_kind="t5", + trophy_kind="t6", + oauth_url="https://oauth.reddit.com", + reddit_url="https://www.reddit.com", + short_url="https://redd.it", + ratelimit_seconds=5, + timeout=16, + ) + + praw_api.user.me() + logger.info("Reddit key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + except (Exception, ResponseException): + logger.warning("Reddit key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_bitquery_key(key: str, persist: bool = False, show_output: bool = False) -> str: + """Set Bitquery key + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_BITQUERY_KEY", key, persist) + return check_bitquery_key(show_output) + + +def check_bitquery_key(show_output: bool = False) -> str: + """Check Bitquery key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + bitquery = cfg.API_BITQUERY_KEY + if "REPLACE_ME" in bitquery: + logger.info("Bitquery key not defined") + status = KeyStatus.NOT_DEFINED + else: + headers = {"x-api-key": cfg.API_BITQUERY_KEY} + query = """ + { + ethereum { + dexTrades(options: {limit: 10, desc: "count"}) { + count + protocol + }}} + """ + r = requests.post( + "https://graphql.bitquery.io", json={"query": query}, headers=headers + ) + if r.status_code == 200: + logger.info("Bitquery key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + else: + logger.warning("Bitquery key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_twitter_key( + key: str, + secret: str, + access_token: str, + persist: bool = False, + show_output: bool = False, +) -> str: + """Set Twitter key + + Parameters + ---------- + key: str + secret: str + access_token: str + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_TWITTER_KEY", key, persist) + set_key("OPENBB_API_TWITTER_SECRET_KEY", secret, persist) + set_key("OPENBB_API_TWITTER_BEARER_TOKEN", access_token, persist) + + return check_twitter_key(show_output) + + +def check_twitter_key(show_output: bool = False) -> str: + """Check Twitter key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + twitter_keys = [ + cfg.API_TWITTER_KEY, + cfg.API_TWITTER_SECRET_KEY, + cfg.API_TWITTER_BEARER_TOKEN, + ] + if "REPLACE_ME" in twitter_keys: + logger.info("Twitter key not defined") + status = KeyStatus.NOT_DEFINED + else: + params = { + "query": "(\\$AAPL) (lang:en)", + "max_results": "10", + "tweet.fields": "created_at,lang", + } + r = requests.get( + "https://api.twitter.com/2/tweets/search/recent", + params=params, # type: ignore + headers={"authorization": "Bearer " + cfg.API_TWITTER_BEARER_TOKEN}, + ) + if r.status_code == 200: + logger.info("Twitter key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + elif r.status_code in [401, 403]: + logger.warning("Twitter key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + else: + logger.warning("Twitter key defined, test failed") + status = KeyStatus.DEFINED_TEST_INCONCLUSIVE + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_rh_key( + username: str, + password: str, + persist: bool = False, + show_output: bool = False, +) -> str: + """Set Robinhood key + + Parameters + ---------- + username: str + password: str + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_RH_USERNAME", username, persist) + set_key("OPENBB_RH_PASSWORD", password, persist) + + return check_rh_key(show_output) + + +def check_rh_key(show_output: bool = False) -> str: + """Check Robinhood key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + rh_keys = [cfg.RH_USERNAME, cfg.RH_PASSWORD] + if "REPLACE_ME" in rh_keys: + logger.info("Robinhood key not defined") + status = KeyStatus.NOT_DEFINED + else: + logger.info("Robinhood key defined, not tested") + status = KeyStatus.DEFINED_NOT_TESTED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_degiro_key( + username: str, + password: str, + secret: str = "", + persist: bool = False, + show_output: bool = False, +) -> str: + """Set Degiro key + + Parameters + ---------- + username: str + password: str + secret: str + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_DG_USERNAME", username, persist) + set_key("OPENBB_DG_PASSWORD", password, persist) + set_key("OPENBB_DG_TOTP_SECRET", secret, persist) + + return check_degiro_key(show_output) + + +def check_degiro_key(show_output: bool = False) -> str: + """Check Degiro key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + dg_keys = [cfg.DG_USERNAME, cfg.DG_PASSWORD, cfg.DG_TOTP_SECRET] + if "REPLACE_ME" in dg_keys: + logger.info("Degiro key not defined") + status = KeyStatus.NOT_DEFINED + else: + logger.info("Degiro key defined, not tested") + status = KeyStatus.DEFINED_NOT_TESTED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_oanda_key( + account: str, + access_token: str, + account_type: str = "", + persist: bool = False, + show_output: bool = False, +) -> str: + """Set Oanda key + + Parameters + ---------- + account: str + access_token: str + account_type: str + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_OANDA_ACCOUNT", account, persist) + set_key("OPENBB_OANDA_TOKEN", access_token, persist) + set_key("OPENBB_OANDA_ACCOUNT_TYPE", account_type, persist) + + return check_oanda_key(show_output) + + +def check_oanda_key(show_output: bool = False) -> str: + """Check Oanda key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + oanda_keys = [cfg.OANDA_TOKEN, cfg.OANDA_ACCOUNT] + if "REPLACE_ME" in oanda_keys: + logger.info("Oanda key not defined") + status = KeyStatus.NOT_DEFINED + else: + client = oanda_API(access_token=cfg.OANDA_TOKEN) + account = cfg.OANDA_ACCOUNT + try: + parameters = {"instruments": "EUR_USD"} + request = oandapyV20.endpoints.pricing.PricingInfo( + accountID=account, params=parameters + ) + client.request(request) + logger.info("Oanda key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + + except Exception: + logger.info("Oanda key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_binance_key( + key: str, + secret: str, + persist: bool = False, + show_output: bool = False, +) -> str: + """Set Binance key + + Parameters + ---------- + key: str + secret: str + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_BINANCE_KEY", key, persist) + set_key("OPENBB_API_BINANCE_SECRET", secret, persist) + + return check_binance_key(show_output) + + +def check_binance_key(show_output: bool = False) -> str: + """Check Binance key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if "REPLACE_ME" in [cfg.API_BINANCE_KEY, cfg.API_BINANCE_SECRET]: + logger.info("Binance key not defined") + status = KeyStatus.NOT_DEFINED + + else: + try: + client = binance.Client(cfg.API_BINANCE_KEY, cfg.API_BINANCE_SECRET) + client.get_account_api_permissions() + logger.info("Binance key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + except Exception: + logger.warning("Binance key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_si_key( + key: str, + persist: bool = False, + show_output: bool = False, +) -> str: + """Set Sentimentinvestor key. + + Parameters + ---------- + key: str + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_SENTIMENTINVESTOR_TOKEN", key, persist) + + return check_si_key(show_output) + + +def check_si_key(show_output: bool = False) -> str: + """Check Sentimentinvestor key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + + """ + + si_keys = [cfg.API_SENTIMENTINVESTOR_TOKEN] + if "REPLACE_ME" in si_keys: + logger.info("Sentiment Investor key not defined") + status = KeyStatus.NOT_DEFINED + else: + try: + account = requests.get( + f"https://api.sentimentinvestor.com/v1/trending" + f"?token={cfg.API_SENTIMENTINVESTOR_TOKEN}" + ) + if account.ok and account.json().get("success", False): + logger.info("Sentiment Investor key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + else: + logger.warning("Sentiment Investor key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + except Exception: + logger.warning("Sentiment Investor key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_coinbase_key( + key: str, + secret: str, + passphrase: str, + persist: bool = False, + show_output: bool = False, +) -> str: + """Set Coinbase key + + Parameters + ---------- + key: str + secret: str + passphrase: str + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_COINBASE_KEY", key, persist) + set_key("OPENBB_API_COINBASE_SECRET", secret, persist) + set_key("OPENBB_API_COINBASE_PASS_PHRASE", passphrase, persist) + + return check_coinbase_key(show_output) + + +def check_coinbase_key(show_output: bool = False) -> str: + """Check Coinbase key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if "REPLACE_ME" in [ + cfg.API_COINBASE_KEY, + cfg.API_COINBASE_SECRET, + cfg.API_COINBASE_PASS_PHRASE, + ]: + logger.info("Coinbase key not defined") + status = KeyStatus.NOT_DEFINED + else: + auth = CoinbaseProAuth( + cfg.API_COINBASE_KEY, + cfg.API_COINBASE_SECRET, + cfg.API_COINBASE_PASS_PHRASE, + ) + try: + resp = make_coinbase_request("/accounts", auth=auth) + except CoinbaseApiException: + resp = None + if not resp: + logger.warning("Coinbase key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + else: + logger.info("Coinbase key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_walert_key(key: str, persist: bool = False, show_output: bool = False) -> str: + """Set Walert key + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_WHALE_ALERT_KEY", key, persist) + return check_walert_key(show_output) + + +def check_walert_key(show_output: bool = False) -> str: + """Check Walert key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if cfg.API_WHALE_ALERT_KEY == "REPLACE_ME": + logger.info("Walert key not defined") + status = KeyStatus.NOT_DEFINED + else: + url = ( + "https://api.whale-alert.io/v1/transactions?api_key=" + + cfg.API_WHALE_ALERT_KEY + ) + try: + response = requests.get(url, timeout=2) + if not 200 <= response.status_code < 300: + logger.warning("Walert key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + else: + logger.info("Walert key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + except Exception: + logger.info("Walert key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_glassnode_key( + key: str, persist: bool = False, show_output: bool = False +) -> str: + """Set Glassnode key. + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_GLASSNODE_KEY", key, persist) + return check_glassnode_key(show_output) + + +def check_glassnode_key(show_output: bool = False) -> str: + """Check Glassnode key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if cfg.API_GLASSNODE_KEY == "REPLACE_ME": + logger.info("Glassnode key not defined") + status = KeyStatus.NOT_DEFINED + else: + url = "https://api.glassnode.com/v1/metrics/market/price_usd_close" + + parameters = { + "api_key": cfg.API_GLASSNODE_KEY, + "a": "BTC", + "i": "24h", + "s": str(1_614_556_800), + "u": str(1_641_227_783_561), + } + + r = requests.get(url, params=parameters) + if r.status_code == 200: + logger.info("Glassnode key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + else: + logger.warning("Glassnode key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_coinglass_key( + key: str, persist: bool = False, show_output: bool = False +) -> str: + """Set Coinglass key. + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_COINGLASS_KEY", key, persist) + return check_coinglass_key(show_output) + + +def check_coinglass_key(show_output: bool = False) -> str: + """Check Coinglass key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if cfg.API_COINGLASS_KEY == "REPLACE_ME": + logger.info("Coinglass key not defined") + status = KeyStatus.NOT_DEFINED + else: + url = "https://open-api.coinglass.com/api/pro/v1/futures/openInterest/chart?&symbol=BTC&interval=0" + + headers = {"coinglassSecret": cfg.API_COINGLASS_KEY} + + response = requests.request("GET", url, headers=headers) + + if """success":false""" in str(response.content): + logger.warning("Coinglass key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + elif response.status_code == 200: + logger.info("Coinglass key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + else: + logger.warning("Coinglass key defined, test inconclusive") + status = KeyStatus.DEFINED_TEST_INCONCLUSIVE + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_cpanic_key(key: str, persist: bool = False, show_output: bool = False) -> str: + """Set Cpanic key. + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_CRYPTO_PANIC_KEY", key, persist) + return check_cpanic_key(show_output) + + +def check_cpanic_key(show_output: bool = False) -> str: + """Check Cpanic key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if cfg.API_CRYPTO_PANIC_KEY == "REPLACE_ME": + logger.info("cpanic key not defined") + status = KeyStatus.NOT_DEFINED + else: + crypto_panic_url = f"https://cryptopanic.com/api/v1/posts/?auth_token={cfg.API_CRYPTO_PANIC_KEY}" + response = requests.get(crypto_panic_url) + + if response.status_code == 200: + logger.info("Cpanic key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + else: + logger.warning("Cpanic key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_ethplorer_key( + key: str, persist: bool = False, show_output: bool = False +) -> str: + """Set Ethplorer key. + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_ETHPLORER_KEY", key, persist) + return check_ethplorer_key(show_output) + + +def check_ethplorer_key(show_output: bool = False) -> str: + """Check Ethplorer key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if cfg.API_ETHPLORER_KEY == "REPLACE_ME": + logger.info("ethplorer key not defined") + status = KeyStatus.NOT_DEFINED + else: + ethplorer_url = "https://api.ethplorer.io/getTokenInfo/0x1f9840a85d5af5bf1d1762f925bdaddc4201f984?apiKey=" + ethplorer_url += cfg.API_ETHPLORER_KEY + + try: + response = requests.get(ethplorer_url) + if response.status_code == 200: + logger.info("ethplorer key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + else: + logger.warning("ethplorer key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + except Exception as _: # noqa: F841 + logger.info("ethplorer key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_smartstake_key( + key: str, access_token: str, persist: bool = False, show_output: bool = False +): + """Set Smartstake key. + + Parameters + ---------- + key: str + API key + access_token: str + API token + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_SMARTSTAKE_KEY", key, persist) + set_key("OPENBB_API_SMARTSTAKE_TOKEN", access_token, persist) + return check_smartstake_key(show_output) + + +def check_smartstake_key(show_output: bool = False) -> str: + """Check Smartstake key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if "REPLACE_ME" in [ + cfg.API_SMARTSTAKE_TOKEN, + cfg.API_SMARTSTAKE_KEY, + ]: + status = KeyStatus.NOT_DEFINED + else: + payload = { + "type": "history", + "dayCount": 30, + "key": cfg.API_SMARTSTAKE_KEY, + "token": cfg.API_SMARTSTAKE_TOKEN, + } + + smartstake_url = "https://prod.smartstakeapi.com/listData?app=TERRA" + response = requests.get(smartstake_url, params=payload) # type: ignore + + try: + if ( + "errors" in str(response.content) + or response.status_code < 200 + or response.status_code >= 300 + ): + logger.warning("Smartstake key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + elif 200 <= response.status_code < 300: + logger.info("Smartstake key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + else: + logger.warning("Smartstake key defined, test inconclusive") + status = KeyStatus.DEFINED_TEST_INCONCLUSIVE + except Exception as _: # noqa: F841 + logger.warning("Smartstake key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_github_key(key: str, persist: bool = False, show_output: bool = False) -> str: + """Set GitHub key. + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_GITHUB_KEY", key, persist) + return check_github_key(show_output) + + +def check_github_key(show_output: bool = False) -> str: + """Check GitHub key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if cfg.API_GITHUB_KEY == "REPLACE_ME": # pragma: allowlist secret + logger.info("GitHub key not defined") + status = KeyStatus.NOT_DEFINED + else: + status = KeyStatus.DEFINED_NOT_TESTED + # github api will not fail for the first requests without key + # only after certain amount of requests the user will get rate limited + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_messari_key(key: str, persist: bool = False, show_output: bool = False) -> str: + """Set Messari key. + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_MESSARI_KEY", key, persist) + return check_messari_key(show_output) + + +def check_messari_key(show_output: bool = False) -> str: + """Check Messari key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if ( + cfg.API_MESSARI_KEY == "REPLACE_ME" # pragma: allowlist secret + ): # pragma: allowlist secret + logger.info("Messari key not defined") + status = KeyStatus.NOT_DEFINED + else: + + url = "https://data.messari.io/api/v2/assets/bitcoin/profile" + headers = {"x-messari-api-key": cfg.API_MESSARI_KEY} + params = {"fields": "profile/general/overview/official_links"} + r = requests.get(url, headers=headers, params=params) + + if r.status_code == 200: + logger.info("Messari key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + else: + logger.warning("Messari key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_eodhd_key(key: str, persist: bool = False, show_output: bool = False) -> str: + """Set Eodhd key. + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_EODHD_KEY", key, persist) + return check_eodhd_key(show_output) + + +def check_eodhd_key(show_output: bool = False) -> str: + """Check Eodhd key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if cfg.API_EODHD_KEY == "REPLACE_ME": # nosec + logger.info("End of Day Historical Data key not defined") + status = KeyStatus.NOT_DEFINED + else: + request_url = f"https://eodhistoricaldata.com/api/exchanges-list/?api_token={cfg.API_EODHD_KEY}&fmt=json" + r = requests.get(request_url) + if r.status_code == 200: + logger.info("Eodhd key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + else: + logger.warning("Eodhd key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) + + +def set_santiment_key( + key: str, persist: bool = False, show_output: bool = False +) -> str: + """Set Santiment key. + + Parameters + ---------- + key: str + API key + persist: bool + If False, api key change will be contained to where it was changed. For example, Jupyter notebook. + If True, api key change will be global, i.e. it will affect terminal environment variables. + By default, False. + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + set_key("OPENBB_API_SANTIMENT_KEY", key, persist) + return check_santiment_key(show_output) + + +def check_santiment_key(show_output: bool = False) -> str: + """Check Santiment key + + Parameters + ---------- + show_output: bool + Display status string or not. By default, False. + + Returns + ------- + status: str + + """ + + if cfg.API_SANTIMENT_KEY == "REPLACE_ME": + logger.info("santiment key not defined") + status = KeyStatus.NOT_DEFINED + else: + headers = { + "Content-Type": "application/graphql", + "Authorization": f"Apikey {cfg.API_SANTIMENT_KEY}", + } + + # pylint: disable=line-too-long + data = '\n{{ getMetric(metric: "dev_activity"){{ timeseriesData( slug: "ethereum" from: ""2020-02-10T07:00:00Z"" to: "2020-03-10T07:00:00Z" interval: "1w"){{ datetime value }} }} }}' # noqa: E501 + + response = requests.post( + "https://api.santiment.net/graphql", headers=headers, data=data + ) + try: + if response.status_code == 200: + logger.info("santiment key defined, test passed") + status = KeyStatus.DEFINED_TEST_PASSED + else: + logger.warning("santiment key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + except Exception as _: # noqa: F841 + logger.info("santiment key defined, test failed") + status = KeyStatus.DEFINED_TEST_FAILED + + if show_output: + console.print(status.colorize() + "\n") + + return str(status) diff --git a/openbb_terminal/keys_view.py b/openbb_terminal/keys_view.py new file mode 100644 index 00000000000..c47ddb7f33f --- /dev/null +++ b/openbb_terminal/keys_view.py @@ -0,0 +1,45 @@ +"""Keys view""" +__docformat__ = "numpy" + +import logging +import os +from openbb_terminal import keys_model + +from openbb_terminal.decorators import log_start_end +from openbb_terminal.helper_funcs import export_data, print_rich_table +from openbb_terminal.rich_config import console + +logger = logging.getLogger(__name__) + + +@log_start_end(log=logger) +def display_keys(show: bool = False, export: str = ""): + """Display currently set API keys. + + Parameters + ---------- + show: bool + Flag to choose whether to show actual keys or not. + By default, False. + export : str + Export dataframe data to csv,json,xlsx file + """ + + df = keys_model.get_keys(show=show) + if df.empty: + console.print("No keys available\n") + return + + print_rich_table( + df, + show_index=True, + index_name="API", + title="Current keys", + ) + + export_data( + export, + os.path.dirname(os.path.abspath(__file__)), + "mykeys", + df, + ) diff --git a/openbb_terminal/stocks/fundamental_analysis/eodhd_model.py b/openbb_terminal/stocks/fundamental_analysis/eodhd_model.py index f1e51e2ad7c..9f1fed9dfa1 100644 --- a/openbb_terminal/stocks/fundamental_analysis/eodhd_model.py +++ b/openbb_terminal/stocks/fundamental_analysis/eodhd_model.py @@ -41,7 +41,7 @@ def get_financials( request_url = ( "https://eodhistoricaldata.com/api/fundamentals/" f"{symbol}?" - f"api_token={cfg.API_EODHD_TOKEN}" + f"api_token={cfg.API_EODHD_KEY}" f"&filter=Financials::{statement}" f"::{['yearly', 'quarterly'][quarterly]}" ) diff --git a/openbb_terminal/stocks/fundamental_analysis/eodhd_view.py b/openbb_terminal/stocks/fundamental_analysis/eodhd_view.py index 052f0ed0179..7798abc09cc 100644 --- a/openbb_terminal/stocks/fundamental_analysis/eodhd_view.py +++ b/openbb_terminal/stocks/fundamental_analysis/eodhd_view.py @@ -20,7 +20,7 @@ logger = logging.getLogger(__name__) @log_start_end(log=logger) -@check_api_key(["API_EODHD_TOKEN"]) +@check_api_key(["API_EODHD_KEY"]) def display_fundamentals( symbol: str, statement: str, diff --git a/openbb_terminal/stocks/options/options_controller.py b/openbb_terminal/stocks/options/options_controller.py index 151eb569968..747443e297f 100644 --- a/openbb_terminal/stocks/options/options_controller.py +++ b/openbb_terminal/stocks/options/options_controller.py @@ -10,7 +10,7 @@ import pandas as pd from prompt_toolkit.completion import NestedCompleter from openbb_terminal import feature_flags as obbff -from openbb_terminal.config_terminal import TRADIER_TOKEN +from openbb_terminal.config_terminal import API_TRADIER_TOKEN from openbb_terminal.decorators import log_start_end from openbb_terminal.helper_funcs import ( EXPORT_BOTH_RAW_DATA_AND_FIGURES, @@ -121,7 +121,7 @@ class OptionsController(BaseController): self.source = "" if ticker: - if TRADIER_TOKEN == "REPLACE_ME": # nosec + if API_TRADIER_TOKEN == "REPLACE_ME": # nosec console.print("Loaded expiry dates from Yahoo Finance") self.expiry_dates = yfinance_model.option_expirations(self.ticker) else: @@ -696,7 +696,7 @@ class OptionsController(BaseController): ns_parser.export, ) - elif TRADIER_TOKEN != "REPLACE_ME": # nosec + elif API_TRADIER_TOKEN != "REPLACE_ME": # nosec tradier_view.display_historical( symbol=self.ticker, expiry=self.selected_date, @@ -766,7 +766,7 @@ class OptionsController(BaseController): if self.ticker: if self.selected_date: if ns_parser.source == "Tradier" or self.source == "Tradier": - if TRADIER_TOKEN != "REPLACE_ME": # nosec + if API_TRADIER_TOKEN != "REPLACE_ME": # nosec tradier_view.display_chains( symbol=self.ticker, expiry=self.selected_date, @@ -852,7 +852,7 @@ class OptionsController(BaseController): if self.selected_date: if ( ns_parser.source == "Tradier" - and TRADIER_TOKEN != "REPLACE_ME" # nosec + and API_TRADIER_TOKEN != "REPLACE_ME" # nosec ) or self.source == "Tradier": tradier_view.plot_vol( symbol=self.ticker, @@ -930,7 +930,7 @@ class OptionsController(BaseController): if self.selected_date: if ( ns_parser.source == "Tradier" - and TRADIER_TOKEN != "REPLACE_ME" # nosec + and API_TRADIER_TOKEN != "REPLACE_ME" # nosec ) or self.source == "Tradier": tradier_view.plot_volume_open_interest( symbol=self.ticker, @@ -1018,7 +1018,7 @@ class OptionsController(BaseController): if self.selected_date: if ( ns_parser.source == "Tradier" - and TRADIER_TOKEN != "REPLACE_ME" # nosec + and API_TRADIER_TOKEN != "REPLACE_ME" # nosec ) or self.source == "Tradier": tradier_view.plot_oi( symbol=self.ticker, diff --git a/openbb_terminal/stocks/options/tradier_model.py b/openbb_terminal/stocks/options/tradier_model.py index c8c38cb73d0..d239ed3709a 100644 --- a/openbb_terminal/stocks/options/tradier_model.py +++ b/openbb_terminal/stocks/options/tradier_model.py @@ -90,7 +90,7 @@ def get_historical_options( "https://sandbox.tradier.com/v1/markets/history", params={"symbol": {symbol}, "interval": "daily"}, headers={ - "Authorization": f"Bearer {cfg.TRADIER_TOKEN}", + "Authorization": f"Bearer {cfg.API_TRADIER_TOKEN}", "Accept": "application/json", }, ) @@ -131,7 +131,7 @@ def option_expirations(symbol: str) -> List[str]: "https://sandbox.tradier.com/v1/markets/options/expirations", params={"symbol": symbol, "includeAllRoots": "true", "strikes": "false"}, headers={ - "Authorization": f"Bearer {cfg.TRADIER_TOKEN}", + "Authorization": f"Bearer {cfg.API_TRADIER_TOKEN}", "Accept": "application/json", }, ) @@ -167,7 +167,7 @@ def get_option_chains(symbol: str, expiry: str) -> pd.DataFrame: params = {"symbol": symbol, "expiration": expiry, "greeks": "true"} headers = { - "Authorization": f"Bearer {cfg.TRADIER_TOKEN}", + "Authorization": f"Bearer {cfg.API_TRADIER_TOKEN}", "Accept": "application/json", } @@ -177,7 +177,7 @@ def get_option_chains(symbol: str, expiry: str) -> pd.DataFrame: headers=headers, ) if response.status_code != 200: - console.print("Error in request. Check TRADIER_TOKEN\n") + console.print("Error in request. Check API_TRADIER_TOKEN\n") return pd.DataFrame() chains = process_chains(response) @@ -239,7 +239,7 @@ def last_price(symbol: str): "https://sandbox.tradier.com/v1/markets/quotes", params={"symbols": symbol, "includeAllRoots": "true", "strikes": "false"}, headers={ - "Authorization": f"Bearer {cfg.TRADIER_TOKEN}", + "Authorization": f"Bearer {cfg.API_TRADIER_TOKEN}", "Accept": "application/json", }, ) diff --git a/openbb_terminal/stocks/stocks_models.py b/openbb_terminal/stocks/stocks_models.py index 5bc708c5e70..4c8a74aac04 100644 --- a/openbb_terminal/stocks/stocks_models.py +++ b/openbb_terminal/stocks/stocks_models.py @@ -99,7 +99,7 @@ def load_stock_eodhd( f"{start_date.strftime('%Y-%m-%d')}&" f"to={end_date.strftime('%Y-%m-%d')}&" f"period={int_}&" - f"api_token={cfg.API_EODHD_TOKEN}&" + f"api_token={cfg.API_EODHD_KEY}&" f"fmt=json&" f"order=d" ) diff --git a/scripts/test_keys_.openbb b/scripts/test_keys_.openbb new file mode 100644 index 00000000000..249f8938396 --- /dev/null +++ b/scripts/test_keys_.openbb @@ -0,0 +1,3 @@ +keys +mykeys +exit \ No newline at end of file diff --git a/tests/formatting/test_best_practices.py b/tests/formatting/test_best_practices.py index 45f6c342050..ca1482102c5 100644 --- a/tests/formatting/test_best_practices.py +++ b/tests/formatting/test_best_practices.py @@ -79,7 +79,7 @@ def test_bad_parameters(): if all_overlaps: for overlaps, func_name, func_path, overlap_str in all_overlaps: final_str += ( - f"Forbidden parameter{'s' if len(overlaps) > 1 else ''} in funcition" + f"Forbidden parameter{'s' if len(overlaps) > 1 else ''} in function" f" '{func_name}' at {func_path}. Replace the following: {overlap_str}\n\n" ) diff --git a/tests/openbb_terminal/.tmp b/tests/openbb_terminal/.tmp new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/cassettes/test_keys_controller/test_call_av[other1].yaml b/tests/openbb_terminal/cassettes/test_keys_controller/test_call_av[other1].yaml new file mode 100644 index 00000000000..648ded0e19f --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_controller/test_call_av[other1].yaml @@ -0,0 +1,87 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=AAPL&interval=15min&outputsize=compact&apikey=1234&datatype=json + response: + body: + string: !!binary | + H4sIAAAAAAAAA7yVwU+DMBTG7/4VLz1pgrUtFAo3ox6WzGicXrzVrToSoAt0M9P4vxswTKbEvsNi + wqn9eLzf9/XR9yMAAHJtnIZL7TTJ4L1b6pY5hUn1bOtSu9xWJAMyqVytF3oLx1yWeXUCdmWqAJb5 + yzKAwr4GMC9sY2BV53PTgK4WsLHFujQk+C4rKMy25ZMt2orn57fT4WZIYaobB3fmuTbN0ixakWBC + nLL0NGQgWMbaZ/hO1PbpTL3RXcmuteG+pHCzdqu1g1n+ZlrJhS1Xeu6GopjCfV4aeLRVJ3mYnV3p + xpm6Ip3o40tLOtHM1Llpehf2XRtrdijorW2t69oNEyrFHlFvU+trL4lHJCFtTd8VYb8VEf1K5K8P + SdqHlAGRLJSC7AQfwSgYT7NIYsBiBJj0ggkEWOgB44lSMQYsxCWW+sHSQyQW+8DCSEkUGMclxvxg + ygumEIkpX2IpZxwDhpuxsXP2AyxhBwFLfYlxHiMSU8gZS/yJJYkPbMydX0fRl5hgTCgM2H/OGCKx + 2JuY4EpgwHAzNvaz+gnGDvJX9CYmOUMlhrzH5AHAIsyMcd89FjMW+cES7IyNJfYJAAD//6yZ2a3d + QAxDOxpoX/pvLHA+gvjG1ySQ14CBMxQlWvrwWCAwUwKsUVccy6LIGJPNUdQ95qjC7kGQPb3PnUxk + ehkyxmVzxCGZAc3mCHTZHEWhamasGDD5KckMumwSgwmSzExUCLKibDbHDJM1lEwIyQSRRXQqQ8bZ + LBSQ7RlFZEpoZgaHdMokQ0baDFdjwmrcJsiQZhEpasugMUbb0wNF2/qJchSYhSt7aokMkozVQo70 + O1vIMRCulhjVz494l61kIp1Bc0o2lPRD4Egj0L684R1NRI1pI0mZbU8rRPNEaBlYtcru90jc6t3C + oBFmuyQJXJCS+Y6Gg8jzG95V05RIImMF6bWIXYA276pdxaa4INUTLQvMu4tBc0o1d6haNUKzTIgW + IfE+19y1ehg0pVTzgmjRCdC0sGqOVjzmJs4VJOc1r0RoCQtSuxaiVShIkDkRRBxxymt6BKHp0fzX + jnc0F0K1hhHSpt0ZNM5rA/YhF5qJvqM97TruaNcbwtxvqqUMmlKq6UA02/V3tFms2grcOrZSf2tO + eU0f298HWr+HyOt9GqumC0Pk/h79EM1IrxkuyF41hKYQrbod7YozIhg0p1Tzhm0kDXVI+I/95Q0/ + vNbrvgwa5zU4svWEobm2gtFwh7QWb6ogOa81Clp6xpHXxBKjwb/stakk5ppSXrPrkuavaHY6EdrT + MekT7ekr9wwpmpPNoDFes8dauqH5477mbzQ7ATukndIZcJnZsFoGTSnVYIe0s/OeRvRsYrSBJ4xp + X2aBoJTX7JhvAjQPVJADk79dGz8FBbkRToxsIb2G1pBf3vtekJKrEM0TFORW1wiDxs21xmgJO6QT + XoN7SK8a82DQOK8pRrNNgBZKdEh4kt+KMGXQyLlmOgCtoGpmWDV4yqgMt8AFKctmyIGqgZPh9VPD + qIaOGbPXjjUYNM5rKTBoIdXkzBAZEl4zSmaUIeMiZON/mh3YRQqTJSTTKOIfW5acaqq4iQiMWUQ4 + Hrj0kbAgNBtyqMFqNHSnuWJ/ET0E7VfdrcIYMs5nq//dQvQMQRbwD1vKShgybqSt+Z++/wsAAP// + rJxLjiM5DET3cxhD/Ini4frugxxvpm1Xx2s494UCniV+FAzmD51xzHtP+0IGbuOYb2E7WF6HkLE4 + W/o2LlNn1kDLmi0r2jaQ9BuGWebXYWaPAxosOcLuthwCxl5podurlE2xHxBlqlBfc6cmYCzITuk3 + WkqwpcFCndjUHgRGYiw+zh5e39VbgTXIiy0fnxMD0iKyiWR89IC8pkUhzgWYzMTDlRZyLq0IcAU6 + MNkLx0fj2wtXaa7UDeP1egVghg5MWbGuA1sKTBopfvgvLzbwYWAsxFbeEGJ6bgH0nXIwIFxFI6zu + ODDXByYtZrYjjICxEAvTYOeWmyhtLza+CBgLsdRgKXOHrxtyh+0edGIsxGTfER9tzr+DBQAreRV9 + A1FnJYyxWDdUMRJjoaU4t03AYBnTyUN1iuwqymzvfjYCYzGmFhJ++JO/Tx5a0Kml1rR84P7ZPdqA + PwKUsZTaQF2jXgXG9s9+aLn/HmzdIA14Gzgxtn92vTf0o0XVMf9of397tJhcSGhvAgZVfD0xC/ka + M3AV5eDdapRT7gkGlUV9FXWruMAo0PSjJY7mOlDAn9BccjYxdoPgYXNU4/EEgyGmwVR9tsc4kKik + meDkDgLG1PvTWsmxOyQqVxr3zix0YtBqpV1kI09sA9OOfI151AJJsWGMnZRgp+6YSsgVz4ghV7Gp + dK/BRpoImpyYXBis3ejEWBlba7lKHlIGHgA20q6Trvy1TzAo3OvGI8/3YP7xZfPqr10k32/aK9rX + ZA66e9drI+7blOPvScYqWfYNZHGHwh2RJzYhY2GW2j0wIcliWvb3ci93sjycoLFiNjrQdn2fGl1/ + r2CmYi9wagXLGTg1b+nUSW3THLUPU94nBqGxgpZ3VGoHlTpP/3kfJmNrc+0Tje3DdEhLdKYyEDTo + h+UAMO3sbiNoLNbkpMweKfdhGixoSRNShLe0jl1oSf1VGm1vFWsGLqS1bETOzCRBY7Fm4EJq6xjx + V7U2/C2kWyV8oqV+yZR8ohlwxZm8kLnW2ehCwgZyA4fVe0F+Sf5FMuSINOLLy0CfFbiDNIXWshtZ + QJRb1yq4ssXtDIIGW8j1tcfq0rfe93ff9cZSeqPlIqpBUMUxS2rEsmQPkENSvmj29cmrTdBYrAG3 + d58/bwx+Vu/etLmsEYLIVJEe0mGsHZ1GjughXX9D6b/fsJRRc2x7ETQ2Pyvt21Gdv6PO/2yF1mfO + HIJ22wRN6T0BjMOhv6PkZ/bUEDQ4p9Yel5Hj3DCAdtSS/xqT6+IXGt09O9qXpDYGHdhQ4+Nk53X3 + 7PQ4QWN1rfwOAYHEmlZWe1cjNBZrNsARki4yJBjMlP6ghsXk/5P/85Oq//z6FwAA//8DAGHlm8aB + VgAA + headers: + Allow: + - GET, HEAD, OPTIONS + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 75408923a87103b6-LIS + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Sun, 02 Oct 2022 21:29:49 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + Vary: + - Cookie + Via: + - 1.1 vegur + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_controller/test_call_av[other2].yaml b/tests/openbb_terminal/cassettes/test_keys_controller/test_call_av[other2].yaml new file mode 100644 index 00000000000..cffef4a8e18 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_controller/test_call_av[other2].yaml @@ -0,0 +1,87 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=AAPL&interval=15min&outputsize=compact&apikey=1234&datatype=json + response: + body: + string: !!binary | + H4sIAAAAAAAAA7yaS28bRxCE7/kVC54SQJn0Yx49uhlJDgYcJIiSS26MvY4JSKRA0Q4cw/89WBpy + RGrFKsBEAJ2o0YrfVFd3T89++GoYhmHx07hbDj8sd8vF5fBh/9H+Y03D8/XrzfZmuVtt1ovLYfF8 + vdsuXy3fD19ruVmtvxk2t+P6Yniz+uvNxXC9+ftieHm9uRuH2+3q5Xg3LNevhneb67c34+Liv8da + Gq7e3/y5uZ6e+OzZLy8e/tLT8GJ5txt+HV9vx7s346tpkYnZt9K/dRlMLmX6efg3efqeu3H7brl/ + 5P6rPfx9ScPPb3e3b3fD1eqfcVry/ebmdvly93BRTcNvq5tx+GOz3i/5/eq7H5d3u3G7XuwXffy0 + drFfdDVuV+Pd/S4c7trcl3244H5rp63bf11vqdgB0f02Tft6v6TOLPE0bfrnh8jjFTl9UuTUPyrp + XqTLYVHEiy0+L/h4MQum/TIXBqwSYAWCGQHmAExbRGXAnFOsY7B+DsUqAvMchQJTTjHBYAHBglAs + kGJdRRkwzmNzcXYE1uQsYB0pploJxYL0WMOKtYbA5nbnUSgixUzEggH7Pz1GKFahYqZhDBjnsblk + dQwmZ8mKULGiQilG1rFyBrDMeExRHasiGYM11mNYsZYRmCkB1lBWDCuVImNMFklR9oikCrMHQTa3 + P4dkItE6Q8a4LJI4JDOgWSSBLoukqKmKCKsMmJxLMoMui4LBBElmJioEWaVsFskMkzUomRCSCSLL + uRVlyDibZQVkPYUiMiU0M4NFukgUhoy0GY7GAqOxN4IMaZZzEbXOoDFG66kFFK3Xc4SjwF64lha1 + Ez1IYayWJUk7zZYlGWiuOlGq5zfxULYqkYszaE7Jhjr9LLCkEWhP7OEhmogak0YKZbaemkI0Lwit + ZKxaLa2dbombemvCoBFmmyTJOCCllNNouBGZ38ND1bRILkSPlUmv5dw7QIvTqk3Bpjgg1QsaFpi3 + Vhk0p1Rzh6rVhtCsFIiWs+TTdc1dawsGTSnVvEK03ApA04pVczTiMTdxLiA5r3ktCK3AgNRWO0Sr + WUEHWSJnoh1xymuaBKFp0vLYjodoLoRqDbaQFs2dQeO8FmAeMqGZ6Gm0uVnHIdq0h7DvN9WqDJpS + qmlANOvdT6NFx6p1gVPHptRpzSmv6Wz6O0Jrp5vIaX8aVk07bCL7vvRDNCO9ZjggW1dDaArRamuO + ZsUl58ygOaWaN5hGiqEMCc/YT+zhkddad+8MGuc1WLI1ZUN1rQtGwxnSmnijApLzWkONlqZw5DWx + gtHgKbtb1ELUNaW8ZtNNmp9Es9QKQpu7TDpGm3vKYQ8pWqI0Bo3xms3G0gGaz85rHqJZyjBDWqoa + AW5merbaGTSlVIMZ0lKP092Ipl4wWsArjGjemQGCUl6zZN4LQPOMAjJg52/TxE9BQPacnSjZQnoN + jSGf2O/DgJTSFaJ5AQHZa6shDBpX1xpGKzBDOuE1OIf0WsM8M2ic1xSjWS8ALSuRIeGVfK85mzJo + ZF0zDYBWoWpmWDV4lVFLdss4IKWzPWRA1cCV4XSoYVRDlxnRpxlrZtA4rxWBjRZSTVIE0UPC24wq + EcqQcS1kw2eaHjCLVExWIJnmSpyxpZNVTRUnEYFtFtEcBxz6SLZMaBZkUYPRaOieZmr7K5FD0HzV + 3Wo2hozzWdcvTiGagiDL8IQt1aowZFxJ6+YBOmPvj3vaIzIiGrtaBa8diJVgyDifCY5GUaRZI2ZZ + vcKKVpVI+o20Wc5fbDNNQTRY8Aq7Nc2dAeNOaY7bqwybYgvCZahQT/dOjQHjTBYFn9EyBBMM5kix + XmqnwBiP+ezdw/G5uiKwRuTFBg+f3TuRFqnXRLLPvgNynBbBcM6JmxlPhmYhMc2KCC6nBIO9sM++ + +HbEVTBXxg3jdHolwJQSDL2KNQkmCAy+SPHEU45eA+8cGGcxyWewGL63IOY7xYgLQimsw8o5BDMs + GHzFTKu7MmCMxf4FAAD//6ycSZJbMQxD9zmMS5xE8XC5e8rxJrHdjdflv/cGFkcQ+HEL08DOJZEo + ZS82vggwlmKpgaWsHb4uqB22e9CLsRSTc0e8lTn/DywAsJKh6BuQOithjsW6oIuRHAtNxbltAgy2 + MV081KTIQlFWe/ezETCWY8qQ8MVPfl48NKFTS9m0fKD/7BpuwG8B2lhKbqDup14FjPnPvhi5fw5s + XUANeBt4MeY/u+8bemlRfczfyt9flhaThoT2JsAgi68vZiG3MQOhKA/vVqOUcg9gkFnUoahHxQVO + gaaXljga14EE/oTGJW8TYxcQHjZHDR4PYDDFNDDVn+02DigqKSY4uYMAY+z9ac3k2BUUlSuOe2cW + ejEotdIqspEvtoFoR25jHrVAUWyYYyclsFNXXCWkxTNiSCg2pe41sJEigiYvJg2DtRu9GGtjay1X + xUPSwAOAjZTrpCt97QMYJO714JHnc2D+drN51tcuUu83nRXtY2QOpnvXthH3bUrx90DGOln2Bcji + CoY7Ik9sgoylWWr1wIREFtNyvpe+3MnycAKNNbPRibbr89Lo+nsFMxV7gVcr2M7Aq3lLpU5qmeYo + P0x5nxgEjTW0vKJTO+jUefp7P0zG1uLaBzTmh+mQkuhMJSBoMA/LA2Da2d1GoLFck5cyu6X0wzQw + aEkRUoS3lI7doSXVV2loe6tcMxCQ1nIQOTOTBBrLNQMBqaVjRF/VWvC3EG+VcEVLvcmUXNEMqOJM + BmSudTYKSDhAbqCwem3IT8W/SIUcUUZ8eRmYswJPkKagtZxGFiDl1t0KrmRxO4NAgyPk+lhjdee3 + Xv27r3xjKb7RchHWICjjmCU5YtmyB9AhKTeaff/k1SbQWK4BtXef7x2D79m7F24uawQhMlVkhnSY + a0eXkSNmSNffUPr7H5YSao5tLwKN3c9K63bU5O9o8j9bQeszZw6BdtkFTfE9AYTDob+j5Gf21BBo + 8E6tNS4jz7lhANpRJv81Ju3id2jUe3a0Lkk5Bh3IUOPtZefZe3Z6nEBjfa38CgKB5JpmVntXI2gs + 12yAIiRdVEhwmCn9QQ2LyX+L/+OTqr9+/wEAAP//AwBh5ZvGgVYAAA== + headers: + Allow: + - GET, HEAD, OPTIONS + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754089271a1d03de-LIS + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Sun, 02 Oct 2022 21:29:50 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + Vary: + - Cookie + Via: + - 1.1 vegur + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_controller/test_call_cpanic[other1].yaml b/tests/openbb_terminal/cassettes/test_keys_controller/test_call_cpanic[other1].yaml index c1302ba10df..1d4c61d10ed 100644 --- a/tests/openbb_terminal/cassettes/test_keys_controller/test_call_cpanic[other1].yaml +++ b/tests/openbb_terminal/cassettes/test_keys_controller/test_call_cpanic[other1].yaml @@ -11,7 +11,7 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: https://cryptopanic.com/api/v1/posts/?auth_token=1234&kind=all + uri: https://cryptopanic.com/api/v1/posts/?auth_token=1234 response: body: string: '{"status":"Incomplete","info":"Token not found"}' @@ -23,7 +23,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 22 Sep 2022 07:06:53 GMT + - Tue, 04 Oct 2022 10:22:30 GMT Server: - nginx/1.19.3 Strict-Transport-Security: diff --git a/tests/openbb_terminal/cassettes/test_keys_controller/test_call_cpanic[other2].yaml b/tests/openbb_terminal/cassettes/test_keys_controller/test_call_cpanic[other2].yaml index c1302ba10df..8b31abbb418 100644 --- a/tests/openbb_terminal/cassettes/test_keys_controller/test_call_cpanic[other2].yaml +++ b/tests/openbb_terminal/cassettes/test_keys_controller/test_call_cpanic[other2].yaml @@ -11,7 +11,7 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: https://cryptopanic.com/api/v1/posts/?auth_token=1234&kind=all + uri: https://cryptopanic.com/api/v1/posts/?auth_token=1234 response: body: string: '{"status":"Incomplete","info":"Token not found"}' @@ -23,7 +23,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 22 Sep 2022 07:06:53 GMT + - Tue, 04 Oct 2022 10:22:31 GMT Server: - nginx/1.19.3 Strict-Transport-Security: diff --git a/tests/openbb_terminal/cassettes/test_keys_controller/test_call_iex[other1].yaml b/tests/openbb_terminal/cassettes/test_keys_controller/test_call_iex[other1].yaml new file mode 100644 index 00000000000..b37326992ef --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_controller/test_call_iex[other1].yaml @@ -0,0 +1,43 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://cloud.iexapis.com/v1/stock/AAPL/quote?token=1234 + response: + body: + string: The API key provided is not valid. + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - Origin, X-Requested-With, Content-Type, Accept, Request-Source + Access-Control-Allow-Methods: + - GET, OPTIONS + Access-Control-Allow-Origin: + - '*' + Connection: + - keep-alive + Date: + - Tue, 04 Oct 2022 10:22:23 GMT + Server: + - nginx + Set-Cookie: + - ctoken=15bbf3161b68483fa51c4fa4837aae04; Max-Age=43200; Path=/; Expires=Tue, + 04 Oct 2022 22:22:23 GMT + Strict-Transport-Security: + - max-age=15768000 + Transfer-Encoding: + - chunked + status: + code: 403 + message: The API key provided is not valid. +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_controller/test_call_iex[other2].yaml b/tests/openbb_terminal/cassettes/test_keys_controller/test_call_iex[other2].yaml new file mode 100644 index 00000000000..b658ed46ad5 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_controller/test_call_iex[other2].yaml @@ -0,0 +1,43 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://cloud.iexapis.com/v1/stock/AAPL/quote?token=1234 + response: + body: + string: The API key provided is not valid. + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - Origin, X-Requested-With, Content-Type, Accept, Request-Source + Access-Control-Allow-Methods: + - GET, OPTIONS + Access-Control-Allow-Origin: + - '*' + Connection: + - keep-alive + Date: + - Tue, 04 Oct 2022 10:22:23 GMT + Server: + - nginx + Set-Cookie: + - ctoken=23f725d8baeb433aa0abdd164cd7a4dc; Max-Age=43200; Path=/; Expires=Tue, + 04 Oct 2022 22:22:23 GMT + Strict-Transport-Security: + - max-age=15768000 + Transfer-Encoding: + - chunked + status: + code: 403 + message: The API key provided is not valid. +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_av_key[args0-False-True-defined, test passed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_av_key[args0-False-True-defined, test passed].yaml new file mode 100644 index 00000000000..9acfca3a66e --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_av_key[args0-False-True-defined, test passed].yaml @@ -0,0 +1,87 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=AAPL&interval=15min&outputsize=compact&apikey=test_key&datatype=json + response: + body: + string: !!binary | + H4sIAAAAAAAAA6yVT2vcMBDF7/kUg08tOKqsP5a8t9D2EEhIyaaX3tRdpWtYW4utTUhCvnuRFycO + 6zJTWPBJehrmN09PfjkDAMiufXTwzUWXLeBlWBqWCwaX7X3oGhfr0GYLyC7b2Lm1e4JPhW7q9jOE + nW9z2NR/Njlsw2MOq23oPey6euV7cO0aHsJ23/gsfy8rGCyfmt9hmypeXPy4mm5KBleuj3Dr7zvf + b/w6iQQX4rzg51yC4AuevukZlfqMvntwQ8mhtem+ZnCzj7t9hGX97JPka2h2bhWnopLBXd14+BXa + QfJz+eW766Pv2mwQvR602SBa+q72/TiFj1Oba3YqGEebRje0qwSz1QeicUxprgeJZJwfSyRLQx+L + mJkiih0cGTWVOdZoNpqUREYImb0JXvNZsKJaKI2DzXf932C2JIBpFExqSwGTNMdOAsZP4JgwWmgK + WKEpYFoiYIJZiYFpgYNZgYBZK0lctIipEuXSFcalCFy6xG6isKbCwSwpYoIZ3DCDGqY0AUwhYFKa + QlDAaBEzBr+JGgMrDQ5mOOaYrYyigNEiZgkRU+hrX54iYoWwFC5axEqrLXYTccNmihwZhj32UhUE + LkNMWPmPv/NfAAAA//+8mlmO5DAMQ29kaLd0/4sN8tepcocEOpgLFOqZJrU4P7mi++8OK0dZ317C + gJEOUwxmUDAiEwtlYu0uhoszWG1CsDe4Tgd4F8wznAEjHZYYTN7I+moAtnc2cROLtVhjsH4FDBex + 2d0MGecxJjz6v0jWGRoMGGeywHdxYHiEE2CDTBZlOcqgcTbb+ULnYUR+BLqN23YJE/lJGm2IuQVH + fhDRmAmMliNjm0EjR7JUiLaf0XQFM5IJQAtp9woGTd9Rzdb0G61wJ5w29/ahVCO91vlX1c7V/Att + 1J9V26rpxAATpNe63/DaJPZaiyLVdCYZNM5rgTusgap5E6o18JqNdVczaJzXZBIuCqBqUli1qM5n + tNQ0oy4k5zVxiGaBErIJ1WR6QF8s3UlsQZz0muCExGhDqCae9YwmWlPFoDFe0+Ne9wNNG6EZEf6C + 9iBRrqbJoDFe0xUKLqTCRkuJGDmf4UdCjsreDJpQqvk0QgtHaBIYLeAMqmo2RDdilNdkDVobnNuo + n2iyWr4j4gsNL+ZKjJlDjfSa2iA089oIDakmx9HoI0bK1YtBU0o1uHXUZQVVU3whVVHJLguqrhnl + NVmOLqQcX9juaCYKVWu4oIvZwXQjSnqt7bu1+0CbQGjS+EK6iMFGK5iEVNJrJjD8Daq2N0br60nz + ea0qmU6hcXXNsNdyQ6/lwIQ0NIr6dF5+JNDIupYY7dCz3+uaDo4RM7jkF3NmgSDv1TWfQeFPlGwP + tECIzE5l0Aiv+ayJjdBOI8sPNJ/VhNcG9pDdpk2hEV7zOfY/HwkZzwnps3yDzv86Q3QhsyOCeSik + PgvxXlXPCXnRP7fH3svQ7viXM7y/z7iPEAkp1Ich178Cql2aPE/Zvq+3QoB2PsN7D6nbQwnZhPo2 + xPvokxtbH21yl01KGrEZMptb21CqKaVaDiTrRmSJupFffuWuWkW0M2Sc1bKwZthqgslKYOOv3rg5 + liad5uYNyLIQmQYmwx++dI9SZJzPTgudD7KSN8gczqEzMc2QMT7bR4v8AwAA//+8nNGOJDcIRd/z + LzsCY8D+uPx75ERaqaur+1xpS3kfjeo0YGO4cCGL78WDqJ82TzxBqAE1LX1KNlPirFE3dyzidO6n + YDOnK23XEor9JolEFJP1rY7xAkYZ1odf8DUNqZGpgIVkMRJTfPikV7C5GSzpzJ+ZsRQwLchITHHA + 2BWNwaqxyxtCpcdajDEqhxywSWDDGayxHCJ1nazEGJsbwWoRWAwGC0r13XuYAqbFWBiDscWmEGN4 + R+/0rYBpMRYTwUB1++GfXMEmgqW35IpajHkgGD3N+scFVxyo//ZlQoqfYozdfdMFLNAVXTg8HGMs + oyUwJcYK22jnkwxzKuEeM2zIlNKOMUkcEoXikA9/8grGmUfd1lqv7RihsmOSNOR89WSwRWBrMBhP + xUS74IqSMOT8kM5gTWC1BDCOMd9DAdNijGScxx5osSrBFUOYY1oKmPgg4+M+8UGG2rIDTwKsNb53 + BW3/ChMnz85X83Ff44kkOLF6apEDwbTJsw9ffQXDCzqFCzrZFdcqBUzLFVNIgvcjz5bABsxKCUx8 + j9kD2T0XF4WHpm83V8C0GBMemm2PgJHKJdxLsNgSY6zZYt1YxE/BFRcWTe3rcf8b7P+MMcFiqG2P + 4WsoYI/dY2WPnIposXSTLCbeY/kA2FRizLH8ZjYZTK0rNlusHynmJGf3I0si08r3/kQpuJQyFRW5 + 3ez7SO5vMq1NZoFkIEY9/2QIRW6eoV6jFDB7ymQDo2wlgxmZbBy5lkBWaj96MFmjyYT+n2P/b85O + V8i0MJvcaacy9/pxwWaDJY1pKxUyMczYGxO9cbdAhqKWmeZjK2gm6XV6odF2PeGOxo327FVbyEFS + lFlZo2AHdH9HsbJY1dLYUCpbM0NB02RWOJ9reKUJaB9+w0vf1nwox0iKMqtmmVUkoXHj9vyG3d9T + 4vboNgVNkw/7ZIe0zO9onIhsHhc/8xAzhRxrirE257uG9KqMTpQPOzukBwlR54juUtBCE30HWq1Q + YzsyEW1OmzDMFF69FDRNqh/FksZOQPMSRN/YwI1hoTmkKNUHSeO026fcBa1rI1pNmIkcR68ppCPa + CNq9gPaisfUbSfcrWgizI4EtwTlWRyhoWqzhfrIzOfM+qPCKVoLo2wrz/uFerqBpUn1fPBazd4Do + ez+gjPbdLr3W1BE0XIPit1uELlL9FiZ+NiaR+9+rH9GGGGuDHbKP1hDQHNGqO6hWnHNOBU0bi7mT + ol8HLAbPjggDFjgTOXpHbAVNi7XgsZg56F7bJgxYNKNZtOSQWqw1JVqOa/P8x0YyGr6y91iVwr3m + 6m6eYfGHa738tpn0NqSLa73Mc2UraNoaA2EbivM+JWG0uvx9P9ilM7PnqK2gaWsMBk+N7/U9G/Fb + yfv7Xg2y2urYLwWE/xaq/vX3PwAAAP//AwB6g930f1YAAA== + headers: + Allow: + - GET, HEAD, OPTIONS + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e825f581203d6-LIS + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:11:53 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + Vary: + - Cookie + Via: + - 1.1 vegur + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_av_key[args1-False-False-defined, test passed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_av_key[args1-False-False-defined, test passed].yaml new file mode 100644 index 00000000000..08d5055ad81 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_av_key[args1-False-False-defined, test passed].yaml @@ -0,0 +1,88 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=AAPL&interval=15min&outputsize=compact&apikey=test_key&datatype=json + response: + body: + string: !!binary | + H4sIAAAAAAAAA7yaT28bNxDF7/0UC51awNkOZzjk0Leg7SFAihZ1e+lNtTe1AFsyZDlFGuS7F6vA + qf5s9F4RoYBPEk3sj4/vcTir9191XdfNfhw28+77+WY+u+zebz/afpz67tXyzWp9P98sVsvZZTd7 + tdys5zfzd93Xye8Xy2+61cOwvOhuF3/eXnR3q78uuuu71ePQPawX18NjN1/edG9Xd0/3w+zi32m1 + 767e3f+xuhtnfPny59e7X1rfvZ4/brpfhjfr4fF2uBkHqai+SPJCrFO5lPFv93/y+JybYf12vp1y + +2i733vf/fS0eXjadFeLv4dxyHer+4f59WZ3UOm7Xxf3Q/f7arkd8tvVtz/MHzfDejnbDvrwcexs + O+hqWC+Gx+dV2F+1qYfdHfC8tOPSbR83ax9tj+h5mcZ1/TjEepHjIdaPi/48SZ2YJPcfFXke0+rx + GO+fRRoHVVWbfRrw4WISLLXL7Bhs+qn/M1gUAswhmHkwYMYpdhYwOYNiWl2dAUvOgLkBMO3DEJgr + BgsFYBFGcXEWywVyeUNcmeDygnaiRm0YLCiLaV+xYBUKlp0AywDMrCZlwDiL1Yp3oiOwUjFYFaRY + tJoZMM5iQVgsw7Qv57BY0mC4OIuV8EA7EQs2McmRYCjsLSeCq5IOKw07LEd8ucOKoawPK8KAkQ5L + GEyhYEQmFpSJpUZhuDiDlUoIdg6uqQXcF8w8GwNGOswxmJwj60sAsFo9iJ1YWIsFBouzgOFDrNUI + hozzGBMe8b9IFp5TZsA4k2W8FxsMj2wEWEMmy0W9JQaNs1n1M1QeSuRHRruxai3CRL6TRmvEvQVH + fiai0R0YzZs0rQwaeSXzBNHqabTUZ+ZKJgAtS5iVzKCl86imfYtzlMLh8LZZqzVKNdJr4V+q2vRp + foTWkp1WrabkRlxgMum1iHN4rTn2WkhCqqXWnEHjvJZxhdWgahaEagG8pk0jSjBonNekOWwUQNWk + YNVyCT+N5slVqQ3JeU0MomlGCRmEatKigbpYIpzoghjpNcEJidEaoZqYl9NokkorhUFjvJYm+7oH + aCkQmhLhL6gPkoslTc6gMV5LfU5gQyZYaCUiRqbX8CAhW5JaGTShVLMWCC0bQpOM0TK8g6ak2ohq + RCmvSd9Q22C6jNpFkz7kOCKO0HBjrogy91AlvZa0ITS1UhEaUk0mr0YHMVIsWWHQEqUa7DqmXgtU + LeENmRI6sotm6lxTymvSG9qQMvmGbR9NJUHVAjbocquZqUYS6bXQ49LuAK1lhCaBN6SJKCy0MpOQ + ifSaCgx/harVitFifKV5uq0q7kahceeaYq95hV7zBhNS0VXUWvjoRwKNPNcco03U7PvnWmo4RlRh + k1/UmAaCnO9cs9ZQ+BNHtmXUQMju4YlBI7xmrW+5IrSpK8sOmrU+CK81WENGaAoKjfCatcn65yAh + 8+mEtNZbBZX/uIZoQ3rknJkXhdTPQiz6Uk4n5Eh/ujy26BX1jj+zhvvvZ8yaEAkp1A9DxqcCqo2a + nL5lWx3fFQK06TXcryFTtZwI2YT6bYjFpE/22GLSJvuySZFAbIrMZhraKNUSpZo3SBaByBxVI5+Z + ZV+1knMYQ8ZZzQvWDFtNMFkRWPgnC1wcS5BOM7UAZF4QWcqYDP/wJaIliozz2VRD54CsyDnIDN5D + W8stGDLGZ3XSIv8AAAD//7yc0Y4kNwhF3/MvOwJjwP64/HvkRFqpq6v7XGlLeR+N6jRgY7hwIYvv + xYOonzZPPEGoATUtfUo2U+KsUTd3LOJ07qdgM6crbdcSiv0miUQUk/WtjvECRhnWh1/wNQ2pkamA + hWQxElN8+KRXsLkZLOnMn5mxFDAtyEhMccDYFY3BqrHLG0Klx1qMMSqHHLBJYMMZrLEcInWdrMQY + mxvBahFYDAYLSvXde5gCpsVYGIOxxaYQY3hH7/StgGkxFhPBQHX74Z9cwSaCpbfkilqMeSAYPc36 + xwVXHKj/9mVCip9ijN190wUs0BVdODwcYyyjJTAlxgrbaOeTDHMq4R4zbMiU0o4xSRwSheKQD3/y + CsaZR93WWq/tGKGyY5I05Hz1ZLBFYGswGE/FRLvgipIw5PyQzmBNYLUEMI4x30MB02KMZJzHHmix + KsEVQ5hjWgqY+CDj4z7xQYbasgNPAqw1vncFbf8KEyfPzlfzcV/jiSQ4sXpqkQPBtMmzD199BcML + OoULOtkV1yoFTMsVU0iC9yPPlsAGzEoJTHyP2QPZPRcXhYembzdXwLQYEx6abY+Akcol3Euw2BJj + rNli3VjET8EVFxZN7etx/xvs/4wxwWKobY/hayhgj91jZY+cimixdJMsJt5j+QDYVGLMsfxmNhlM + rSs2W6wfKeYkZ/cjSyLTyvf+RCm4lDIVFbnd7PtI7m8yrU1mgWQgRj3/ZAhFbp6hXqMUMHvKZAOj + bCWDGZlsHLmWQFZqP3owWaPJhP6fY/9vzk5XyLQwm9xppzL3+nHBZoMljWkrFTIxzNgbE71xt0CG + opaZ5mMraCbpdXqh0XY94Y7GjfbsVVvIQVKUWVmjYAd0f0exsljV0thQKlszQ0HTZFY4n2t4pQlo + H37DS9/WfCjHSIoyq2aZVSShceP2/Ibd31Pi9ug2BU2TD/tkh7TM72iciGweFz/zEDOFHGuKsTbn + u4b0qoxOlA87O6QHCVHniO5S0EITfQdarVBjOzIRbU6bMMwUXr0UNE2qH8WSxk5A8xJE39jAjWGh + OaQo1QdJ47Tbp9wFrWsjWk2YiRxHrymkI9oI2r2A9qKx9RtJ9ytaCLMjgS3BOVZHKGharOF+sjM5 + 8z6o8IpWgujbCvP+4V6uoGlSfV88FrN3gOh7P6CM9t0uvdbUETRcg+K3W4QuUv0WJn42JpH736sf + 0YYYa4Mdso/WENAc0ao7qFacc04FTRuLuZOiXwcsBs+OCAMWOBM5ekdsBU2LteCxmDnoXtsmDFg0 + o1m05JBarDUlWo5r8/zHRjIavrL3WJXCvebqbp5h8Ydrvfy2mfQ2pItrvcxzZSto2hoDYRuK8z4l + YbS6/H0/2KUzs+eoraBpawwGT43v9T0b8VvJ+/teDbLa6tgvBYT/Fqr+9fc/AAAA//8DAHqD3fR/ + VgAA + headers: + Allow: + - GET, HEAD, OPTIONS + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e82627b219504-LIS + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:11:53 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + Vary: + - Cookie + Via: + - 1.1 vegur + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_av_key[args2-True-True-defined, test passed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_av_key[args2-True-True-defined, test passed].yaml new file mode 100644 index 00000000000..60e9cfda80e --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_av_key[args2-True-True-defined, test passed].yaml @@ -0,0 +1,88 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=AAPL&interval=15min&outputsize=compact&apikey=test_key&datatype=json + response: + body: + string: !!binary | + H4sIAAAAAAAAAwAAAP//vJpPbxs3EMXv/RQLnVrA2Q5nOOTQt6DtIUCKFnV76U21N7UAWzJkOUUa + 5LsXq8Cp/mz0XhGhgE8STeyPj+9xOKv3X3Vd181+HDbz7vv5Zj677N5vP9p+nPru1fLNan0/3yxW + y9llN3u13KznN/N33dfJ7xfLb7rVw7C86G4Xf95edHervy6667vV49A9rBfXw2M3X950b1d3T/fD + 7OLfabXvrt7d/7G6G2d8+fLn17tfWt+9nj9uul+GN+vh8Xa4GQepqL5I8kKsU7mU8W/3f/L4nJth + /Xa+nXL7aLvfe9/99LR5eNp0V4u/h3HId6v7h/n1ZndQ6btfF/dD9/tquR3y29W3P8wfN8N6OdsO + +vBx7Gw76GpYL4bH51XYX7Wph90d8Ly049JtHzdrH22P6HmZxnX9OMR6keMh1o+L/jxJnZgk9x8V + eR7T6vEY759FGgdVVZt9GvDhYhIstcvsGGz6qf8zWBQCzCGYeTBgxil2FjA5g2JaXZ0BS86AuQEw + 7cMQmCsGCwVgEUZxcRbLBXJ5Q1yZ4PKCdqJGbRgsKItpX7FgFQqWnQDLAMysJmXAOIvVineiI7BS + MVgVpFi0mhkwzmJBWCzDtC/nsFjSYLg4i5XwQDsRCzYxyZFgKOwtJ4Krkg4rDTssR3y5w4qhrA8r + woCRDksYTKFgRCYWlImlRmG4OIOVSgh2Dq6pBdwXzDwbA0Y6zDGYnCPrSwCwWj2InVhYiwUGi7OA + 4UOs1QiGjPMYEx7xv0gWnlNmwDiTZbwXGwyPbARYQybLRb0lBo2zWfUzVB5K5EdGu7FqLcJEvpNG + a8S9BUd+JqLRHRjNmzStDBp5JfME0epptNRn5komAC1LmJXMoKXzqKZ9i3OUwuHwtlmrNUo10mvh + X6ra9Gl+hNaSnVatpuRGXGAy6bWIc3itOfZaSEKqpdacQeO8lnGF1aBqFoRqAbymTSNKMGic16Q5 + bBRA1aRg1XIJP43myVWpDcl5TQyiaUYJGYRq0qKBulginOiCGOk1wQmJ0RqhmpiX02iSSiuFQWO8 + lib7ugdoKRCaEuEvqA+SiyVNzqAxXkt9TmBDJlhoJSJGptfwICFbkloZNKFUsxYILRtCk4zRMryD + pqTaiGpEKa9J31DbYLqM2kWTPuQ4Io7QcGOuiDL3UCW9lrQhNLVSERpSTSavRgcxUixZYdASpRrs + OqZeC1Qt4Q2ZEjqyi2bqXFPKa9Ib2pAy+YZtH00lQdUCNuhyq5mpRhLptdDj0u4ArWWEJoE3pIko + LLQyk5CJ9JoKDH+FqtWK0WJ8pXm6rSruRqFx55pir3mFXvMGE1LRVdRa+OhHAo081xyjTdTs++da + ajhGVGGTX9SYBoKc71yz1lD4E0e2ZdRAyO7hiUEjvGatb7kitKkryw6atT4IrzVYQ0ZoCgqN8Jq1 + yfrnICHz6YS01lsFlf+4hmhDeuScmReF1M9CLPpSTifkSH+6PLboFfWOP7OG++9nzJoQCSnUD0PG + pwKqjZqcvmVbHd8VArTpNdyvIVO1nAjZhPptiMWkT/bYYtIm+7JJkUBsisxmGtoo1RKlmjdIFoHI + HFUjn5llX7WScxhDxlnNC9YMW00wWRFY+CcLXBxLkE4ztQBkXhBZypgM//AloiWKjPPZVEPngKzI + OcgM3kNbyy0YMsZnddIi/wAAAP//vJzRjiQ3CEXf8y87AmPA/rj8e+REWqmrq/tcaUt5H43qNGBj + uHAhi+/Fg6ifNk88QagBNS19SjZT4qxRN3cs4nTup2Azpytt1xKK/SaJRBST9a2O8QJGGdaHX/A1 + DamRqYCFZDESU3z4pFewuRks6cyfmbEUMC3ISExxwNgVjcGqscsbQqXHWowxKoccsElgwxmssRwi + dZ2sxBibG8FqEVgMBgtK9d17mAKmxVgYg7HFphBjeEfv9K2AaTEWE8FAdfvhn1zBJoKlt+SKWox5 + IBg9zfrHBVccqP/2ZUKKn2KM3X3TBSzQFV04PBxjLKMlMCXGCtto55MMcyrhHjNsyJTSjjFJHBKF + 4pAPf/IKxplH3dZar+0YobJjkjTkfPVksEVgazAYT8VEu+CKkjDk/JDOYE1gtQQwjjHfQwHTYoxk + nMceaLEqwRVDmGNaCpj4IOPjPvFBhtqyA08CrDW+dwVt/woTJ8/OV/NxX+OJJDixemqRA8G0ybMP + X30Fwws6hQs62RXXKgVMyxVTSIL3I8+WwAbMSglMfI/ZA9k9FxeFh6ZvN1fAtBgTHpptj4CRyiXc + S7DYEmOs2WLdWMRPwRUXFk3t63H/G+z/jDHBYqhtj+FrKGCP3WNlj5yKaLF0kywm3mP5ANhUYsyx + /GY2GUytKzZbrB8p5iRn9yNLItPK9/5EKbiUMhUVud3s+0jubzKtTWaBZCBGPf9kCEVunqFeoxQw + e8pkA6NsJYMZmWwcuZZAVmo/ejBZo8mE/p9j/2/OTlfItDCb3GmnMvf6ccFmgyWNaSsVMjHM2BsT + vXG3QIailpnmYytoJul1eqHRdj3hjsaN9uxVW8hBUpRZWaNgB3R/R7GyWNXS2FAqWzNDQdNkVjif + a3ilCWgffsNL39Z8KMdIijKrZplVJKFx4/b8ht3fU+L26DYFTZMP+2SHtMzvaJyIbB4XP/MQM4Uc + a4qxNue7hvSqjE6UDzs7pAcJUeeI7lLQQhN9B1qtUGM7MhFtTpswzBRevRQ0TaofxZLGTkDzEkTf + 2MCNYaE5pCjVB0njtNun3AWtayNaTZiJHEevKaQj2gjavYD2orH1G0n3K1oIsyOBLcE5VkcoaFqs + 4X6yMznzPqjwilaC6NsK8/7hXq6gaVJ9XzwWs3eA6Hs/oIz23S691tQRNFyD4rdbhC5S/RYmfjYm + kfvfqx/Rhhhrgx2yj9YQ0BzRqjuoVpxzTgVNG4u5k6JfBywGz44IAxY4Ezl6R2wFTYu14LGYOehe + 2yYMWDSjWbTkkFqsNSVajmvz/MdGMhq+svdYlcK95upunmHxh2u9/LaZ9Daki2u9zHNlK2jaGgNh + G4rzPiVhtLr8fT/YpTOz56itoGlrDAZPje/1PRvxW8n7+14Nstrq2C8FhP8Wqv719z8AAAD//wMA + eoPd9H9WAAA= + headers: + Allow: + - GET, HEAD, OPTIONS + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e8265a942950c-LIS + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:11:54 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + Vary: + - Cookie + Via: + - 1.1 vegur + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_binance_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_binance_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..bf06b92f71d --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_binance_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,134 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 + Safari/537.36 + X-MBX-APIKEY: + - test_key + method: GET + uri: https://api.binance.com/api/v3/ping + response: + body: + string: '{}' + headers: + Access-Control-Allow-Methods: + - GET, HEAD, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-cache, no-store, must-revalidate + Connection: + - keep-alive + Content-Length: + - '2' + Content-Security-Policy: + - default-src 'self' + Content-Type: + - application/json;charset=UTF-8 + Date: + - Tue, 04 Oct 2022 14:12:10 GMT + Expires: + - '0' + Pragma: + - no-cache + Server: + - nginx + Strict-Transport-Security: + - max-age=31536000; includeSubdomains + Via: + - 1.1 79a6afa6a11c254cebe52d84950e0d76.cloudfront.net (CloudFront) + X-Amz-Cf-Id: + - nCHRyWu55jLvRtsDNLy9HqcXbzCQ69HdLXTV-_XLrGeW_--TSpK3tA== + X-Amz-Cf-Pop: + - LIS50-C1 + X-Cache: + - Miss from cloudfront + X-Content-Security-Policy: + - default-src 'self' + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-WebKit-CSP: + - default-src 'self' + X-Xss-Protection: + - 1; mode=block + x-mbx-used-weight: + - '1' + x-mbx-used-weight-1m: + - '1' + x-mbx-uuid: + - 72fbf1bb-e2f9-4cb5-ac9d-cdb0fd440707 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 + Safari/537.36 + X-MBX-APIKEY: + - test_key + method: GET + uri: https://api.binance.com/sapi/v1/account/apiRestrictions?timestamp=1664892728004&signature=23890d508f8c897a37371a64edcee7240b865da874b48dd4d61aa34ebb8ffba0 + response: + body: + string: '{"code":-2008,"msg":"Invalid Api-Key ID."}' + headers: + Cache-Control: + - no-cache, no-store, must-revalidate + Connection: + - keep-alive + Content-Length: + - '42' + Content-Security-Policy: + - default-src 'self' + Content-Type: + - application/json;charset=UTF-8 + Date: + - Tue, 04 Oct 2022 14:12:10 GMT + Expires: + - '0' + Pragma: + - no-cache + Server: + - nginx + Strict-Transport-Security: + - max-age=31536000; includeSubdomains + Via: + - 1.1 79a6afa6a11c254cebe52d84950e0d76.cloudfront.net (CloudFront) + X-Amz-Cf-Id: + - 4w0_iUeGNkUFn6Q9lv-bHI3fEAgmt6XNg9P0bYZG4NquieFQg0gYwA== + X-Amz-Cf-Pop: + - LIS50-C1 + X-Cache: + - Error from cloudfront + X-Content-Security-Policy: + - default-src 'self' + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-WebKit-CSP: + - default-src 'self' + X-Xss-Protection: + - 1; mode=block + status: + code: 400 + message: '' +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_binance_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_binance_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..082428e29f6 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_binance_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,134 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 + Safari/537.36 + X-MBX-APIKEY: + - test_key + method: GET + uri: https://api.binance.com/api/v3/ping + response: + body: + string: '{}' + headers: + Access-Control-Allow-Methods: + - GET, HEAD, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-cache, no-store, must-revalidate + Connection: + - keep-alive + Content-Length: + - '2' + Content-Security-Policy: + - default-src 'self' + Content-Type: + - application/json;charset=UTF-8 + Date: + - Tue, 04 Oct 2022 14:12:11 GMT + Expires: + - '0' + Pragma: + - no-cache + Server: + - nginx + Strict-Transport-Security: + - max-age=31536000; includeSubdomains + Via: + - 1.1 590ad044183138a492a9344ba0b0a7ac.cloudfront.net (CloudFront) + X-Amz-Cf-Id: + - SQrvV5aih38a1Tp4mw-itGBCnXBosr3QhtUNsimJdrGsQ2JwJldSQw== + X-Amz-Cf-Pop: + - LIS50-C1 + X-Cache: + - Miss from cloudfront + X-Content-Security-Policy: + - default-src 'self' + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-WebKit-CSP: + - default-src 'self' + X-Xss-Protection: + - 1; mode=block + x-mbx-used-weight: + - '2' + x-mbx-used-weight-1m: + - '2' + x-mbx-uuid: + - 0785405a-361e-4002-886b-66ec81c14013 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 + Safari/537.36 + X-MBX-APIKEY: + - test_key + method: GET + uri: https://api.binance.com/sapi/v1/account/apiRestrictions?timestamp=1664892728598&signature=887e290954eee47e9749f93076164023ba4bdd8f2000c2788b882f9f261ade60 + response: + body: + string: '{"code":-2008,"msg":"Invalid Api-Key ID."}' + headers: + Cache-Control: + - no-cache, no-store, must-revalidate + Connection: + - keep-alive + Content-Length: + - '42' + Content-Security-Policy: + - default-src 'self' + Content-Type: + - application/json;charset=UTF-8 + Date: + - Tue, 04 Oct 2022 14:12:11 GMT + Expires: + - '0' + Pragma: + - no-cache + Server: + - nginx + Strict-Transport-Security: + - max-age=31536000; includeSubdomains + Via: + - 1.1 590ad044183138a492a9344ba0b0a7ac.cloudfront.net (CloudFront) + X-Amz-Cf-Id: + - 0AM6Rc4yMFaN-mgbgSYAEBZPNoIvrn-Dm4k8n-URbno389i-av16Vw== + X-Amz-Cf-Pop: + - LIS50-C1 + X-Cache: + - Error from cloudfront + X-Content-Security-Policy: + - default-src 'self' + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-WebKit-CSP: + - default-src 'self' + X-Xss-Protection: + - 1; mode=block + status: + code: 400 + message: '' +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_binance_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_binance_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..8af2e3c7659 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_binance_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,134 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 + Safari/537.36 + X-MBX-APIKEY: + - test_key + method: GET + uri: https://api.binance.com/api/v3/ping + response: + body: + string: '{}' + headers: + Access-Control-Allow-Methods: + - GET, HEAD, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-cache, no-store, must-revalidate + Connection: + - keep-alive + Content-Length: + - '2' + Content-Security-Policy: + - default-src 'self' + Content-Type: + - application/json;charset=UTF-8 + Date: + - Tue, 04 Oct 2022 14:12:11 GMT + Expires: + - '0' + Pragma: + - no-cache + Server: + - nginx + Strict-Transport-Security: + - max-age=31536000; includeSubdomains + Via: + - 1.1 96d159daae033b1bb1f9f14f4fc55aae.cloudfront.net (CloudFront) + X-Amz-Cf-Id: + - 9DQPbCtC_91_5aPUvDoZc_YwPk6pjEFVjlx5GS7peC0Z7VFYlmGC7w== + X-Amz-Cf-Pop: + - LIS50-C1 + X-Cache: + - Miss from cloudfront + X-Content-Security-Policy: + - default-src 'self' + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-WebKit-CSP: + - default-src 'self' + X-Xss-Protection: + - 1; mode=block + x-mbx-used-weight: + - '3' + x-mbx-used-weight-1m: + - '3' + x-mbx-uuid: + - db85ea6c-d855-4c94-a1ad-b76c4f1e3759 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 + Safari/537.36 + X-MBX-APIKEY: + - test_key + method: GET + uri: https://api.binance.com/sapi/v1/account/apiRestrictions?timestamp=1664892729222&signature=1996f1d370189ad66ac44603fe80ea1abaa30bc5bf162ee9b85ae984fffbb784 + response: + body: + string: '{"code":-2008,"msg":"Invalid Api-Key ID."}' + headers: + Cache-Control: + - no-cache, no-store, must-revalidate + Connection: + - keep-alive + Content-Length: + - '42' + Content-Security-Policy: + - default-src 'self' + Content-Type: + - application/json;charset=UTF-8 + Date: + - Tue, 04 Oct 2022 14:12:11 GMT + Expires: + - '0' + Pragma: + - no-cache + Server: + - nginx + Strict-Transport-Security: + - max-age=31536000; includeSubdomains + Via: + - 1.1 96d159daae033b1bb1f9f14f4fc55aae.cloudfront.net (CloudFront) + X-Amz-Cf-Id: + - vURjjoVoqeFj3Rbn2eg808K2k6l4QBOArL6u_VyKLOh2bP12vKkUFA== + X-Amz-Cf-Pop: + - LIS50-C1 + X-Cache: + - Error from cloudfront + X-Content-Security-Policy: + - default-src 'self' + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-WebKit-CSP: + - default-src 'self' + X-Xss-Protection: + - 1; mode=block + status: + code: 400 + message: '' +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_bitquery_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_bitquery_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..9e7ea8f9161 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_bitquery_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,46 @@ +interactions: +- request: + body: '{"query": "\n {\n ethereum {\n dexTrades(options: + {limit: 10, desc: \"count\"}) {\n count\n protocol\n }}}\n "}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '168' + Content-Type: + - application/json + User-Agent: + - python-requests/2.28.1 + x-api-key: + - test_key + method: POST + uri: https://graphql.bitquery.io/ + response: + body: + string: "\r\n401 Authorization Required\r\n\r\n

401 + Authorization Required

\r\n
nginx
\r\n\r\n\r\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Connection: + - keep-alive + Content-Length: + - '172' + Content-Type: + - text/html + Date: + - Tue, 04 Oct 2022 14:12:07 GMT + Server: + - nginx + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_bitquery_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_bitquery_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..3452cf0a1b5 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_bitquery_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,46 @@ +interactions: +- request: + body: '{"query": "\n {\n ethereum {\n dexTrades(options: + {limit: 10, desc: \"count\"}) {\n count\n protocol\n }}}\n "}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '168' + Content-Type: + - application/json + User-Agent: + - python-requests/2.28.1 + x-api-key: + - test_key + method: POST + uri: https://graphql.bitquery.io/ + response: + body: + string: "\r\n401 Authorization Required\r\n\r\n

401 + Authorization Required

\r\n
nginx
\r\n\r\n\r\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Connection: + - keep-alive + Content-Length: + - '172' + Content-Type: + - text/html + Date: + - Tue, 04 Oct 2022 14:12:08 GMT + Server: + - nginx + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_bitquery_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_bitquery_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..3452cf0a1b5 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_bitquery_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,46 @@ +interactions: +- request: + body: '{"query": "\n {\n ethereum {\n dexTrades(options: + {limit: 10, desc: \"count\"}) {\n count\n protocol\n }}}\n "}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '168' + Content-Type: + - application/json + User-Agent: + - python-requests/2.28.1 + x-api-key: + - test_key + method: POST + uri: https://graphql.bitquery.io/ + response: + body: + string: "\r\n401 Authorization Required\r\n\r\n

401 + Authorization Required

\r\n
nginx
\r\n\r\n\r\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Connection: + - keep-alive + Content-Length: + - '172' + Content-Type: + - text/html + Date: + - Tue, 04 Oct 2022 14:12:08 GMT + Server: + - nginx + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_cmc_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_cmc_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..7ccf5b03482 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_cmc_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,66 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - deflate, gzip + Accepts: + - application/json + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + X-CMC_PRO_API_KEY: + - test_key + method: GET + uri: https://pro-api.coinmarketcap.com/v1/cryptocurrency/map + response: + body: + string: "{\n \"status\": {\n \"timestamp\": \"2022-10-04T14:12:02.906Z\",\n + \ \"error_code\": 1001,\n \"error_message\": \"This API Key is + invalid.\",\n \"elapsed\": 0,\n \"credit_count\": 0\n }\n}" + headers: + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '203' + Content-Type: + - application/json; charset=utf-8 + Date: + - Tue, 04 Oct 2022 14:12:02 GMT + Referrer-Policy: + - origin-when-cross-origin + Server: + - Tengine + Strict-Transport-Security: + - max-age=31536000; includeSubdomains + Vary: + - origin + Via: + - 1.1 60d5d039ddd1dfa7f8fb545bcd965e3a.cloudfront.net (CloudFront) + X-Amz-Cf-Id: + - qbJ1ukKUhoed9l7Ps7uv6M5c3bJzFJVF0ovpb_7Kt6Bqt6dByxF5Hg== + X-Amz-Cf-Pop: + - LIS50-C1 + X-Cache: + - Error from cloudfront + X-Content-Type-Options: + - nosniff + X-Envoy-Decorator-Operation: + - coinmarketcap-pro-apis.cmc-api.svc.cluster.local:80/* + X-Envoy-Upstream-Service-Time: + - '3' + X-Frame-Options: + - SAMEORIGIN + X-Traefik-Route: + - coinmarketcap-pro-apis + X-Xss-Protection: + - 1; mode=block + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_cmc_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_cmc_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..feedaec8bf8 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_cmc_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,66 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - deflate, gzip + Accepts: + - application/json + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + X-CMC_PRO_API_KEY: + - test_key + method: GET + uri: https://pro-api.coinmarketcap.com/v1/cryptocurrency/map + response: + body: + string: "{\n \"status\": {\n \"timestamp\": \"2022-10-04T14:12:03.105Z\",\n + \ \"error_code\": 1001,\n \"error_message\": \"This API Key is + invalid.\",\n \"elapsed\": 0,\n \"credit_count\": 0\n }\n}" + headers: + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '203' + Content-Type: + - application/json; charset=utf-8 + Date: + - Tue, 04 Oct 2022 14:12:03 GMT + Referrer-Policy: + - origin-when-cross-origin + Server: + - Tengine + Strict-Transport-Security: + - max-age=31536000; includeSubdomains + Vary: + - origin + Via: + - 1.1 6cda321fa7ffaa5f463d18f171e22d8e.cloudfront.net (CloudFront) + X-Amz-Cf-Id: + - rmKrPjs7NUkW7LeBxi63gOUCMEym8roHw6VhVdY0d7pUnxZ0MSMfCg== + X-Amz-Cf-Pop: + - LIS50-C1 + X-Cache: + - Error from cloudfront + X-Content-Type-Options: + - nosniff + X-Envoy-Decorator-Operation: + - coinmarketcap-pro-apis.cmc-api.svc.cluster.local:80/* + X-Envoy-Upstream-Service-Time: + - '2' + X-Frame-Options: + - SAMEORIGIN + X-Traefik-Route: + - coinmarketcap-pro-apis + X-Xss-Protection: + - 1; mode=block + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_cmc_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_cmc_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..a7d092731bd --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_cmc_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,66 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - deflate, gzip + Accepts: + - application/json + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + X-CMC_PRO_API_KEY: + - test_key + method: GET + uri: https://pro-api.coinmarketcap.com/v1/cryptocurrency/map + response: + body: + string: "{\n \"status\": {\n \"timestamp\": \"2022-10-04T14:12:03.295Z\",\n + \ \"error_code\": 1001,\n \"error_message\": \"This API Key is + invalid.\",\n \"elapsed\": 0,\n \"credit_count\": 0\n }\n}" + headers: + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '203' + Content-Type: + - application/json; charset=utf-8 + Date: + - Tue, 04 Oct 2022 14:12:03 GMT + Referrer-Policy: + - origin-when-cross-origin + Server: + - Tengine + Strict-Transport-Security: + - max-age=31536000; includeSubdomains + Vary: + - origin + Via: + - 1.1 fd9cb9e48122da1a05d6c3c1a873d502.cloudfront.net (CloudFront) + X-Amz-Cf-Id: + - xvL6RO0nJkIRHLGiTLux8t3UqXXPge1-4DuqzZ5PtdBSOQX_vdpudw== + X-Amz-Cf-Pop: + - LIS50-C1 + X-Cache: + - Error from cloudfront + X-Content-Type-Options: + - nosniff + X-Envoy-Decorator-Operation: + - coinmarketcap-pro-apis.cmc-api.svc.cluster.local:80/* + X-Envoy-Upstream-Service-Time: + - '2' + X-Frame-Options: + - SAMEORIGIN + X-Traefik-Route: + - coinmarketcap-pro-apis + X-Xss-Protection: + - 1; mode=block + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_coinbase_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_coinbase_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..32a4605c7c0 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_coinbase_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,74 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CB-ACCESS-KEY: + - test_key + CB-ACCESS-PASSPHRASE: + - test_passphrase + CB-ACCESS-SIGN: + - '' + CB-ACCESS-TIMESTAMP: + - '1664892730.9341774' + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.pro.coinbase.com/accounts + response: + body: + string: '{"message":"Invalid API Key"}' + headers: + Access-Control-Allow-Headers: + - Content-Type, Accept, cb-session, cb-fp, cb-form-factor + Access-Control-Allow-Methods: + - GET,POST,DELETE,PUT + Access-Control-Allow-Origin: + - '*' + Access-Control-Expose-Headers: + - cb-before, cb-after, cb-gdpr + Access-Control-Max-Age: + - '7200' + CF-Cache-Status: + - MISS + CF-RAY: + - 754e82e0acbb5d2b-LIS + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Length: + - '29' + Content-Type: + - application/json; charset=utf-8 + Date: + - Tue, 04 Oct 2022 14:12:13 GMT + Etag: + - W/"1d-mmRSeO9uba2rhQtGfy4YjixIkt4" + Server: + - cloudflare + Strict-Transport-Security: + - max-age=15552000; includeSubDomains + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Dns-Prefetch-Control: + - 'off' + X-Download-Options: + - noopen + X-Frame-Options: + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_coinbase_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_coinbase_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..eb55e6a65ec --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_coinbase_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,74 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CB-ACCESS-KEY: + - test_key + CB-ACCESS-PASSPHRASE: + - test_passphrase + CB-ACCESS-SIGN: + - '' + CB-ACCESS-TIMESTAMP: + - '1664892731.1623147' + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.pro.coinbase.com/accounts + response: + body: + string: '{"message":"Invalid API Key"}' + headers: + Access-Control-Allow-Headers: + - Content-Type, Accept, cb-session, cb-fp, cb-form-factor + Access-Control-Allow-Methods: + - GET,POST,DELETE,PUT + Access-Control-Allow-Origin: + - '*' + Access-Control-Expose-Headers: + - cb-before, cb-after, cb-gdpr + Access-Control-Max-Age: + - '7200' + CF-Cache-Status: + - MISS + CF-RAY: + - 754e82e1fd1fda76-LIS + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Length: + - '29' + Content-Type: + - application/json; charset=utf-8 + Date: + - Tue, 04 Oct 2022 14:12:13 GMT + Etag: + - W/"1d-mmRSeO9uba2rhQtGfy4YjixIkt4" + Server: + - cloudflare + Strict-Transport-Security: + - max-age=15552000; includeSubDomains + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Dns-Prefetch-Control: + - 'off' + X-Download-Options: + - noopen + X-Frame-Options: + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_coinbase_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_coinbase_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..3d982b810a7 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_coinbase_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,74 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CB-ACCESS-KEY: + - test_key + CB-ACCESS-PASSPHRASE: + - test_passphrase + CB-ACCESS-SIGN: + - '' + CB-ACCESS-TIMESTAMP: + - '1664892731.3799975' + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.pro.coinbase.com/accounts + response: + body: + string: '{"message":"Invalid API Key"}' + headers: + Access-Control-Allow-Headers: + - Content-Type, Accept, cb-session, cb-fp, cb-form-factor + Access-Control-Allow-Methods: + - GET,POST,DELETE,PUT + Access-Control-Allow-Origin: + - '*' + Access-Control-Expose-Headers: + - cb-before, cb-after, cb-gdpr + Access-Control-Max-Age: + - '7200' + CF-Cache-Status: + - MISS + CF-RAY: + - 754e82e36d69da82-LIS + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Length: + - '29' + Content-Type: + - application/json; charset=utf-8 + Date: + - Tue, 04 Oct 2022 14:12:14 GMT + Etag: + - W/"1d-mmRSeO9uba2rhQtGfy4YjixIkt4" + Server: + - cloudflare + Strict-Transport-Security: + - max-age=15552000; includeSubDomains + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Dns-Prefetch-Control: + - 'off' + X-Download-Options: + - noopen + X-Frame-Options: + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_coinglass_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_coinglass_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..b388cba9f50 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_coinglass_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,56 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + coinglassSecret: + - test_key + method: GET + uri: https://open-api.coinglass.com/api/pro/v1/futures/openInterest/chart?&symbol=BTC&interval=0 + response: + body: + string: !!binary | + H4sIAAAAAAAAAKpWSs5PSVWyUjI2MDAwVNJRyi1OB/KKU5OLUksUMvPKEnMyU4DCxaXJyanFxUpW + aYk5xam1AAAAAP//AwANMldNNwAAAA== + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - rt,obe,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type + Access-Control-Allow-Methods: + - GET,POST,OPTIONS,DELETE + Access-Control-Allow-Origin: + - '*' + Access-Control-Max-Age: + - '1728000' + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:12:16 GMT + Server: + - nginx + Transfer-Encoding: + - chunked + X-RateLimit-Burst-Capacity: + - '20' + X-RateLimit-Remaining: + - '19' + X-RateLimit-Replenish-Rate: + - '3' + vary: + - accept-encoding + status: + code: 200 + message: OK +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_coinglass_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_coinglass_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..4474f638181 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_coinglass_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,56 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + coinglassSecret: + - test_key + method: GET + uri: https://open-api.coinglass.com/api/pro/v1/futures/openInterest/chart?&symbol=BTC&interval=0 + response: + body: + string: !!binary | + H4sIAAAAAAAAAKpWSs5PSVWyUjI2MDAwVNJRyi1OB/KKU5OLUksUMvPKEnMyU4DCxaXJyanFxUpW + aYk5xam1AAAAAP//AwANMldNNwAAAA== + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - rt,obe,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type + Access-Control-Allow-Methods: + - GET,POST,OPTIONS,DELETE + Access-Control-Allow-Origin: + - '*' + Access-Control-Max-Age: + - '1728000' + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:12:17 GMT + Server: + - nginx + Transfer-Encoding: + - chunked + X-RateLimit-Burst-Capacity: + - '20' + X-RateLimit-Remaining: + - '19' + X-RateLimit-Replenish-Rate: + - '3' + vary: + - accept-encoding + status: + code: 200 + message: OK +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_coinglass_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_coinglass_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..e778a1ee905 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_coinglass_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,56 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + coinglassSecret: + - test_key + method: GET + uri: https://open-api.coinglass.com/api/pro/v1/futures/openInterest/chart?&symbol=BTC&interval=0 + response: + body: + string: !!binary | + H4sIAAAAAAAAAKpWSs5PSVWyUjI2MDAwVNJRyi1OB/KKU5OLUksUMvPKEnMyU4DCxaXJyanFxUpW + aYk5xam1AAAAAP//AwANMldNNwAAAA== + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - rt,obe,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type + Access-Control-Allow-Methods: + - GET,POST,OPTIONS,DELETE + Access-Control-Allow-Origin: + - '*' + Access-Control-Max-Age: + - '1728000' + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:12:18 GMT + Server: + - nginx + Transfer-Encoding: + - chunked + X-RateLimit-Burst-Capacity: + - '20' + X-RateLimit-Remaining: + - '19' + X-RateLimit-Replenish-Rate: + - '3' + vary: + - accept-encoding + status: + code: 200 + message: OK +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_cpanic_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_cpanic_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..ff0b710f172 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_cpanic_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,38 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://cryptopanic.com/api/v1/posts/?auth_token=test_key + response: + body: + string: '{"status":"Incomplete","info":"Token not found"}' + headers: + Connection: + - keep-alive + Content-Length: + - '48' + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:12:18 GMT + Server: + - nginx/1.19.3 + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Cookie + X-Frame-Options: + - SAMEORIGIN + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_cpanic_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_cpanic_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..96e8243e0b1 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_cpanic_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,38 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://cryptopanic.com/api/v1/posts/?auth_token=test_key + response: + body: + string: '{"status":"Incomplete","info":"Token not found"}' + headers: + Connection: + - keep-alive + Content-Length: + - '48' + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:12:19 GMT + Server: + - nginx/1.19.3 + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Cookie + X-Frame-Options: + - SAMEORIGIN + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_cpanic_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_cpanic_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..96e8243e0b1 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_cpanic_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,38 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://cryptopanic.com/api/v1/posts/?auth_token=test_key + response: + body: + string: '{"status":"Incomplete","info":"Token not found"}' + headers: + Connection: + - keep-alive + Content-Length: + - '48' + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:12:19 GMT + Server: + - nginx/1.19.3 + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Cookie + X-Frame-Options: + - SAMEORIGIN + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_eodhd_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_eodhd_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..44f7aa51438 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_eodhd_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,46 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://eodhistoricaldata.com/api/exchanges-list/?api_token=test_key&fmt=json + response: + body: + string: Unauthenticated + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With + Access-Control-Allow-Methods: + - GET, POST, PUT, DELETE, OPTIONS + Cache-Control: + - max-age=0, no-cache + Connection: + - keep-alive + Content-Type: + - text/html; charset=UTF-8 + Date: + - Tue, 04 Oct 2022 14:12:24 GMT + Server: + - nginx/1.19.10 + Transfer-Encoding: + - chunked + X-Page-Speed: + - 1.13.35.2-0 + X-RateLimit-Limit: + - '2000' + X-RateLimit-Remaining: + - '1999' + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_eodhd_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_eodhd_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..49877b71ffd --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_eodhd_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,46 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://eodhistoricaldata.com/api/exchanges-list/?api_token=test_key&fmt=json + response: + body: + string: Unauthenticated + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With + Access-Control-Allow-Methods: + - GET, POST, PUT, DELETE, OPTIONS + Cache-Control: + - max-age=0, no-cache + Connection: + - keep-alive + Content-Type: + - text/html; charset=UTF-8 + Date: + - Tue, 04 Oct 2022 14:12:24 GMT + Server: + - nginx/1.19.10 + Transfer-Encoding: + - chunked + X-Page-Speed: + - 1.13.35.2-0 + X-RateLimit-Limit: + - '2000' + X-RateLimit-Remaining: + - '1998' + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_eodhd_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_eodhd_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..e2856b3a890 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_eodhd_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,46 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://eodhistoricaldata.com/api/exchanges-list/?api_token=test_key&fmt=json + response: + body: + string: Unauthenticated + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With + Access-Control-Allow-Methods: + - GET, POST, PUT, DELETE, OPTIONS + Cache-Control: + - max-age=0, no-cache + Connection: + - keep-alive + Content-Type: + - text/html; charset=UTF-8 + Date: + - Tue, 04 Oct 2022 14:12:25 GMT + Server: + - nginx/1.19.10 + Transfer-Encoding: + - chunked + X-Page-Speed: + - 1.13.35.2-0 + X-RateLimit-Limit: + - '2000' + X-RateLimit-Remaining: + - '1997' + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_ethplorer_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_ethplorer_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..cd95463f59d --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_ethplorer_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,34 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.ethplorer.io/getTokenInfo/0x1f9840a85d5af5bf1d1762f925bdaddc4201f984?apiKey=test_key + response: + body: + string: '{"error":{"code":1,"message":"Invalid API key"}}' + headers: + Access-Control-Allow-Origin: + - '*' + Connection: + - keep-alive + Content-Length: + - '48' + Content-Type: + - text/html + Date: + - Tue, 04 Oct 2022 14:12:19 GMT + ETag: + - '"5e85ab36-30"' + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_ethplorer_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_ethplorer_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..cd95463f59d --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_ethplorer_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,34 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.ethplorer.io/getTokenInfo/0x1f9840a85d5af5bf1d1762f925bdaddc4201f984?apiKey=test_key + response: + body: + string: '{"error":{"code":1,"message":"Invalid API key"}}' + headers: + Access-Control-Allow-Origin: + - '*' + Connection: + - keep-alive + Content-Length: + - '48' + Content-Type: + - text/html + Date: + - Tue, 04 Oct 2022 14:12:19 GMT + ETag: + - '"5e85ab36-30"' + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_ethplorer_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_ethplorer_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..cd95463f59d --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_ethplorer_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,34 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.ethplorer.io/getTokenInfo/0x1f9840a85d5af5bf1d1762f925bdaddc4201f984?apiKey=test_key + response: + body: + string: '{"error":{"code":1,"message":"Invalid API key"}}' + headers: + Access-Control-Allow-Origin: + - '*' + Connection: + - keep-alive + Content-Length: + - '48' + Content-Type: + - text/html + Date: + - Tue, 04 Oct 2022 14:12:19 GMT + ETag: + - '"5e85ab36-30"' + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_finnhub_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_finnhub_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..b7c80c8f859 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_finnhub_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,52 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://finnhub.io/api/v1/quote?symbol=AAPL&token=test_key + response: + body: + string: '{"error":"Invalid API key"}' + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - Origin + Access-Control-Allow-Methods: + - POST, GET, OPTIONS, PUT, DELETE + Access-Control-Allow-Origin: + - '*' + Access-Control-Expose-Headers: + - Content-Length + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e82a2b8a30b3f-AMS + Connection: + - keep-alive + Content-Length: + - '27' + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:12:03 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=y28J3p3ND7mH15e9FUJyxMVLr28GKf8qkS9LJjdv4RC7F8BMYc0QlRqAck%2FgWQjgaL%2BJUH%2FSeO%2B9Mtb92XdsYkVVNZj7DUGseg8mlGlJbrkHWjgKhA0g5BegqBQ9"}],"group":"cf-nel","max_age":604800}' + Server: + - cloudflare + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_finnhub_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_finnhub_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..a9db8f2688a --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_finnhub_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,52 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://finnhub.io/api/v1/quote?symbol=AAPL&token=test_key + response: + body: + string: '{"error":"Invalid API key"}' + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - Origin + Access-Control-Allow-Methods: + - POST, GET, OPTIONS, PUT, DELETE + Access-Control-Allow-Origin: + - '*' + Access-Control-Expose-Headers: + - Content-Length + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e82a51801b35a-PRG + Connection: + - keep-alive + Content-Length: + - '27' + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:12:04 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=I7kQaN5DjT%2F%2BD6inbHovlNoesLGgz5FdGP%2BsPHPhtvxXQlwNKoOrw%2F%2FVsfjFqCy9kqqq2jfBAUcr40aAu3cNlmPK90r4HRq%2Fq3a9PxImO4QuS3x8GVTsikIXMSTd"}],"group":"cf-nel","max_age":604800}' + Server: + - cloudflare + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_finnhub_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_finnhub_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..e7823921f71 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_finnhub_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,52 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://finnhub.io/api/v1/quote?symbol=AAPL&token=test_key + response: + body: + string: '{"error":"Invalid API key"}' + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - Origin + Access-Control-Allow-Methods: + - POST, GET, OPTIONS, PUT, DELETE + Access-Control-Allow-Origin: + - '*' + Access-Control-Expose-Headers: + - Content-Length + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e82a759c8b75a-AMS + Connection: + - keep-alive + Content-Length: + - '27' + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:12:04 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=crrZHeERwnM9feC%2FeMWGd6UPyQ24C5SJhx%2FfxlMiLvbtz%2FN7jEQiOIdK3zoSUzAIYryZzGcSPdV9v7tejkLlRXBylyGNFnO6O5fgcFtbcBrbbHjSOy2KODBz3Pol"}],"group":"cf-nel","max_age":604800}' + Server: + - cloudflare + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_fmp_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_fmp_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..636844fc3cd --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_fmp_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,41 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://financialmodelingprep.com/api/v3/profile/AAPL?apikey=test_key + response: + body: + string: '{"Error Message" : "Invalid API KEY. Please retry or visit our documentation + to create one FREE https://financialmodelingprep.com/developer/docs"}' + headers: + Access-Control-Allow-Headers: + - origin, content-type, accept, Authorization, authorization + Access-Control-Allow-Methods: + - GET, OPTIONS + Access-Control-Allow-Origin: + - '*' + Access-Control-Max-Age: + - '3600' + Connection: + - keep-alive + Content-Length: + - '146' + Content-Type: + - application/json;charset=UTF-8 + Date: + - Tue, 04 Oct 2022 14:11:54 GMT + Server: + - nginx/1.14.0 (Ubuntu) + status: + code: 200 + message: '' +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_fmp_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_fmp_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..fe455e4ca1f --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_fmp_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,41 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://financialmodelingprep.com/api/v3/profile/AAPL?apikey=test_key + response: + body: + string: '{"Error Message" : "Invalid API KEY. Please retry or visit our documentation + to create one FREE https://financialmodelingprep.com/developer/docs"}' + headers: + Access-Control-Allow-Headers: + - origin, content-type, accept, Authorization, authorization + Access-Control-Allow-Methods: + - GET, OPTIONS + Access-Control-Allow-Origin: + - '*' + Access-Control-Max-Age: + - '3600' + Connection: + - keep-alive + Content-Length: + - '146' + Content-Type: + - application/json;charset=UTF-8 + Date: + - Tue, 04 Oct 2022 14:11:55 GMT + Server: + - nginx/1.14.0 (Ubuntu) + status: + code: 200 + message: '' +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_fmp_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_fmp_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..960a452db26 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_fmp_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,43 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://financialmodelingprep.com/api/v3/profile/AAPL?apikey=test_key + response: + body: + string: '{"Error Message" : "Invalid API KEY. Please retry or visit our documentation + to create one FREE https://financialmodelingprep.com/developer/docs"}' + headers: + Access-Control-Allow-Headers: + - origin, content-type, accept, Authorization, authorization + Access-Control-Allow-Methods: + - GET, OPTIONS + Access-Control-Allow-Origin: + - '*' + Access-Control-Max-Age: + - '3600' + Connection: + - keep-alive + Content-Length: + - '146' + Content-Type: + - application/json;charset=UTF-8 + Date: + - Tue, 04 Oct 2022 14:11:55 GMT + Server: + - nginx/1.14.0 (Ubuntu) + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: '' +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_fred_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_fred_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..753ee6674fc --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_fred_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,39 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.stlouisfed.org/fred/series?series_id=GNPCA&api_key=test_key + response: + body: + string: ' + + + + + + + ' + headers: + Connection: + - keep-alive + Content-Length: + - '252' + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Tue, 04 Oct 2022 14:11:59 GMT + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_fred_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_fred_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..753ee6674fc --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_fred_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,39 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.stlouisfed.org/fred/series?series_id=GNPCA&api_key=test_key + response: + body: + string: ' + + + + + + + ' + headers: + Connection: + - keep-alive + Content-Length: + - '252' + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Tue, 04 Oct 2022 14:11:59 GMT + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_fred_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_fred_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..8b5e7f7ddba --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_fred_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,39 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.stlouisfed.org/fred/series?series_id=GNPCA&api_key=test_key + response: + body: + string: ' + + + + + + + ' + headers: + Connection: + - keep-alive + Content-Length: + - '252' + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Tue, 04 Oct 2022 14:12:00 GMT + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_glassnode_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_glassnode_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..a11521bffc5 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_glassnode_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,37 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.glassnode.com/v1/metrics/market/price_usd_close?api_key=test_key&a=BTC&i=24h&s=1614556800&u=1641227783561 + response: + body: + string: "\r\n401 Authorization Required\r\n\r\n

401 + Authorization Required

\r\n
nginx
\r\n\r\n\r\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - https://studio.glassnode.com + Connection: + - keep-alive + Content-Length: + - '172' + Content-Type: + - text/html + Date: + - Tue, 04 Oct 2022 14:12:15 GMT + Strict-Transport-Security: + - max-age=15724800; includeSubDomains + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_glassnode_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_glassnode_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..a11521bffc5 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_glassnode_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,37 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.glassnode.com/v1/metrics/market/price_usd_close?api_key=test_key&a=BTC&i=24h&s=1614556800&u=1641227783561 + response: + body: + string: "\r\n401 Authorization Required\r\n\r\n

401 + Authorization Required

\r\n
nginx
\r\n\r\n\r\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - https://studio.glassnode.com + Connection: + - keep-alive + Content-Length: + - '172' + Content-Type: + - text/html + Date: + - Tue, 04 Oct 2022 14:12:15 GMT + Strict-Transport-Security: + - max-age=15724800; includeSubDomains + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_glassnode_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_glassnode_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..a11521bffc5 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_glassnode_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,37 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.glassnode.com/v1/metrics/market/price_usd_close?api_key=test_key&a=BTC&i=24h&s=1614556800&u=1641227783561 + response: + body: + string: "\r\n401 Authorization Required\r\n\r\n

401 + Authorization Required

\r\n
nginx
\r\n\r\n\r\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - https://studio.glassnode.com + Connection: + - keep-alive + Content-Length: + - '172' + Content-Type: + - text/html + Date: + - Tue, 04 Oct 2022 14:12:15 GMT + Strict-Transport-Security: + - max-age=15724800; includeSubDomains + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_iex_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_iex_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..e31755566c3 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_iex_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,43 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://cloud.iexapis.com/v1/stock/AAPL/quote?token=test_key + response: + body: + string: The API key provided is not valid. + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - Origin, X-Requested-With, Content-Type, Accept, Request-Source + Access-Control-Allow-Methods: + - GET, OPTIONS + Access-Control-Allow-Origin: + - '*' + Connection: + - keep-alive + Date: + - Tue, 04 Oct 2022 14:12:05 GMT + Server: + - nginx + Set-Cookie: + - ctoken=4374ad8b67b644cf9b9cf68f9380b9c4; Max-Age=43200; Path=/; Expires=Wed, + 05 Oct 2022 02:12:05 GMT + Strict-Transport-Security: + - max-age=15768000 + Transfer-Encoding: + - chunked + status: + code: 403 + message: The API key provided is not valid. +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_iex_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_iex_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..492ad8b407c --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_iex_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,43 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://cloud.iexapis.com/v1/stock/AAPL/quote?token=test_key + response: + body: + string: The API key provided is not valid. + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - Origin, X-Requested-With, Content-Type, Accept, Request-Source + Access-Control-Allow-Methods: + - GET, OPTIONS + Access-Control-Allow-Origin: + - '*' + Connection: + - keep-alive + Date: + - Tue, 04 Oct 2022 14:12:05 GMT + Server: + - nginx + Set-Cookie: + - ctoken=aac42812e9ab40a9895fe2f9d125b01b; Max-Age=43200; Path=/; Expires=Wed, + 05 Oct 2022 02:12:05 GMT + Strict-Transport-Security: + - max-age=15768000 + Transfer-Encoding: + - chunked + status: + code: 403 + message: The API key provided is not valid. +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_iex_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_iex_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..310d8290ec0 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_iex_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,43 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://cloud.iexapis.com/v1/stock/AAPL/quote?token=test_key + response: + body: + string: The API key provided is not valid. + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - Origin, X-Requested-With, Content-Type, Accept, Request-Source + Access-Control-Allow-Methods: + - GET, OPTIONS + Access-Control-Allow-Origin: + - '*' + Connection: + - keep-alive + Date: + - Tue, 04 Oct 2022 14:12:06 GMT + Server: + - nginx + Set-Cookie: + - ctoken=44466ca5782e48079f471b59e01d91e2; Max-Age=43200; Path=/; Expires=Wed, + 05 Oct 2022 02:12:06 GMT + Strict-Transport-Security: + - max-age=15768000 + Transfer-Encoding: + - chunked + status: + code: 403 + message: The API key provided is not valid. +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_messari_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_messari_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..bc5cece8c36 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_messari_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,37 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + x-messari-api-key: + - test_key + method: GET + uri: https://data.messari.io/api/v2/assets/bitcoin/profile?fields=profile%2Fgeneral%2Foverview%2Fofficial_links + response: + body: + string: !!binary | + H4sIAAAAAAAA/zTIsQrCMBAG4N2nKP/cyiXEUu8N3J1c5LCnBBsTclGQ0nd3cv1WWJP2NvAKXaSY + zmDq0WJSa5IKGJ68HxwNFM4usPPs3f4QpnE6Ohov6KG15nq95VnBgegPSc3koWCcXh9Z4txJid1T + v9091yQN27b7BQAA//8vl4T4gAAAAA== + headers: + content-encoding: + - gzip + content-length: + - '136' + content-type: + - application/json; charset=UTF-8 + date: + - Tue, 04 Oct 2022 14:12:21 GMT + vary: + - Accept-Encoding,Origin + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_messari_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_messari_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..0f71086163e --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_messari_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,37 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + x-messari-api-key: + - test_key + method: GET + uri: https://data.messari.io/api/v2/assets/bitcoin/profile?fields=profile%2Fgeneral%2Foverview%2Fofficial_links + response: + body: + string: !!binary | + H4sIAAAAAAAA/zTIsQrCMBAG4N2nKP/cyuWMIvcG7k4ucthTio0JuShI6bs7uX4LvGl7O2SBzVrc + Rgj1aFMyb5oKBEzMQ6CB4jlECSzM290hUIx83F/Qw2rN9XrLo0Ei0R+SuevDIDi9PjpPY6dl6p72 + 7e65Jm1Y180vAAD//1z4o6OAAAAA + headers: + content-encoding: + - gzip + content-length: + - '135' + content-type: + - application/json; charset=UTF-8 + date: + - Tue, 04 Oct 2022 14:12:22 GMT + vary: + - Accept-Encoding,Origin + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_messari_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_messari_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..94ae3690659 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_messari_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,37 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + x-messari-api-key: + - test_key + method: GET + uri: https://data.messari.io/api/v2/assets/bitcoin/profile?fields=profile%2Fgeneral%2Foverview%2Fofficial_links + response: + body: + string: !!binary | + H4sIAAAAAAAA/zTIscrCMBAH8P17ivKf24/LGYreG7g7uchhTyk2JuSiIKXv7uT6W+FN28shK2zR + 4jZBqEebk3nTVCBgYh4CDRRPIUpg4d1/GHl/GOPIZ/SwWnO9XPNkkEj0g2TuejcIjs+3LvPUaZm7 + h326W65JG7bt7xsAAP//9LV/XoAAAAA= + headers: + content-encoding: + - gzip + content-length: + - '137' + content-type: + - application/json; charset=UTF-8 + date: + - Tue, 04 Oct 2022 14:12:23 GMT + vary: + - Accept-Encoding,Origin + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_news_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_news_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..ecfa77bb3bd --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_news_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,50 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://newsapi.org/v2/everything?q=keyword&apiKey=test_key + response: + body: + string: '{"status":"error","code":"apiKeyInvalid","message":"Your API key is + invalid or incorrect. Check your key, or go to https://newsapi.org to create + a free API key."}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e828dcaf094e9-LIS + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '162' + Content-Type: + - application/json; charset=utf-8 + Date: + - Tue, 04 Oct 2022 14:12:00 GMT + Expires: + - '-1' + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Pragma: + - no-cache + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=satBmgeFc0SUZbmrJA8miZMXviDJk%2Bidvs9zGOft7xQn68GRZz8NX3QyxDv%2FTyZr5HcG2KzuUhSmSIjIIStUHW%2FvaeFkW6cyRJiIJLoX3uBjm4Y598zDdxX6emcV"}],"group":"cf-nel","max_age":604800}' + Server: + - cloudflare + X-Cached-Result: + - 'false' + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_news_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_news_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..45605ad89b1 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_news_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,50 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://newsapi.org/v2/everything?q=keyword&apiKey=test_key + response: + body: + string: '{"status":"error","code":"apiKeyInvalid","message":"Your API key is + invalid or incorrect. Check your key, or go to https://newsapi.org to create + a free API key."}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e828f7be65d3f-LIS + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '162' + Content-Type: + - application/json; charset=utf-8 + Date: + - Tue, 04 Oct 2022 14:12:00 GMT + Expires: + - '-1' + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Pragma: + - no-cache + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=JhbCZGdb4BPvUSUGU7rB4fgskaHIJdUH9HGtWpOQYp5h9gRbQCt2ZkcuvBCbTKntmDJHwAepRmqfHXi36OvFu1x3RvmARdHRrfT4vgTCOSjb8%2BUs5CDNqQJztfFv"}],"group":"cf-nel","max_age":604800}' + Server: + - cloudflare + X-Cached-Result: + - 'false' + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_news_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_news_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..876408c5af9 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_news_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,50 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://newsapi.org/v2/everything?q=keyword&apiKey=test_key + response: + body: + string: '{"status":"error","code":"apiKeyInvalid","message":"Your API key is + invalid or incorrect. Check your key, or go to https://newsapi.org to create + a free API key."}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e8290989a94e9-LIS + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '162' + Content-Type: + - application/json; charset=utf-8 + Date: + - Tue, 04 Oct 2022 14:12:00 GMT + Expires: + - '-1' + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Pragma: + - no-cache + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=Gzu7JsPRszgutgQgmKZn37C8vZutiW6ja%2BjcEtsxxafx5RTA1HMbz2z9fVq%2Btt1jwuHHkeSoKOrTEyKYAePDecCT7Ncy7BY0yGdndOlD1enL961k9XN%2BGyISvo9f"}],"group":"cf-nel","max_age":604800}' + Server: + - cloudflare + X-Cached-Result: + - 'false' + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_oanda_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_oanda_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..cd369f4271f --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_oanda_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,46 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Authorization: + - Bearer test_access_token + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api-fxpractice.oanda.com/v3/accounts/test_account/pricing?instruments=EUR_USD + response: + body: + string: '{"errorMessage":"Invalid value specified for ''accountID''"}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e82c81fa3da76-LIS + Connection: + - keep-alive + Content-Length: + - '58' + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:12:09 GMT + RequestID: + - '0' + Server: + - cloudflare + Set-Cookie: + - __cf_bm=QdbY2YyfstsQDRakhXTkWbwn3q_nuYjOHwWlfWb0KtE-1664892729-0-AfJjas3MxMCR/blCjGuFbl0fx9Q61uKwBxSCGevI2XURLNa0jregshQuziZifPqoxPKxhqqrkcsIEblbeOr0ytc=; + path=/; expires=Tue, 04-Oct-22 14:42:09 GMT; domain=.api-fxpractice.oanda.com; + HttpOnly; Secure; SameSite=None + Vary: + - Origin, Accept-Encoding + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_oanda_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_oanda_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..d84d14932b8 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_oanda_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,46 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Authorization: + - Bearer test_access_token + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api-fxpractice.oanda.com/v3/accounts/test_account/pricing?instruments=EUR_USD + response: + body: + string: '{"errorMessage":"Invalid value specified for ''accountID''"}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e82c97d41da7e-LIS + Connection: + - keep-alive + Content-Length: + - '58' + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:12:09 GMT + RequestID: + - '0' + Server: + - cloudflare + Set-Cookie: + - __cf_bm=q_TOQOf3L2HIMu26EuEwncYIQXT9PB6hu4LAqwISNRA-1664892729-0-ASRBsufjw/Y412F5/ihq02v3kw3I0IIn0B5dIiAp1fGn7zohtWsggcY1b3ZfGZnd2IHaxeFB3MslixHMB+PWci0=; + path=/; expires=Tue, 04-Oct-22 14:42:09 GMT; domain=.api-fxpractice.oanda.com; + HttpOnly; Secure; SameSite=None + Vary: + - Origin, Accept-Encoding + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_oanda_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_oanda_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..ad7c97c5fd4 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_oanda_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,46 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Authorization: + - Bearer test_access_token + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api-fxpractice.oanda.com/v3/accounts/test_account/pricing?instruments=EUR_USD + response: + body: + string: '{"errorMessage":"Invalid value specified for ''accountID''"}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e82caef8e5d2f-LIS + Connection: + - keep-alive + Content-Length: + - '58' + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:12:10 GMT + RequestID: + - '0' + Server: + - cloudflare + Set-Cookie: + - __cf_bm=bMYAAvxCIn1pk33uwICyuvC9hYFypI3yNJs4yhkuu68-1664892730-0-ARGpc/IDtvrNkxMZYVHugsnsPD2A0Q7kwQ+6jA9n9nbNFs7lTFZHjY0tdVEsYK3AxN1xPKpTgGmVsMg2L30abMs=; + path=/; expires=Tue, 04-Oct-22 14:42:10 GMT; domain=.api-fxpractice.oanda.com; + HttpOnly; Secure; SameSite=None + Vary: + - Origin, Accept-Encoding + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_polygon_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_polygon_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..176e5509f96 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_polygon_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,37 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2020-06-01/2020-06-17?apiKey=test_key + response: + body: + string: '{"status":"ERROR","request_id":"934c1435b85f13ef00ed70c0945ff651","error":"Unknown + API Key"}' + headers: + Connection: + - keep-alive + Content-Length: + - '92' + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:11:57 GMT + Server: + - nginx/1.19.2 + Strict-Transport-Security: + - max-age=15724800; includeSubDomains + X-Request-Id: + - 934c1435b85f13ef00ed70c0945ff651 + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_polygon_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_polygon_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..05aa354d260 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_polygon_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,37 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2020-06-01/2020-06-17?apiKey=test_key + response: + body: + string: '{"status":"ERROR","request_id":"0230763a38f6aa17d239ad0d13bf5a89","error":"Unknown + API Key"}' + headers: + Connection: + - keep-alive + Content-Length: + - '92' + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:11:57 GMT + Server: + - nginx/1.19.2 + Strict-Transport-Security: + - max-age=15724800; includeSubDomains + X-Request-Id: + - 0230763a38f6aa17d239ad0d13bf5a89 + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_polygon_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_polygon_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..8e74ca49768 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_polygon_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,37 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2020-06-01/2020-06-17?apiKey=test_key + response: + body: + string: '{"status":"ERROR","request_id":"80a5646d2f8c4844d37d23e42137c46f","error":"Unknown + API Key"}' + headers: + Connection: + - keep-alive + Content-Length: + - '92' + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:11:58 GMT + Server: + - nginx/1.19.2 + Strict-Transport-Security: + - max-age=15724800; includeSubDomains + X-Request-Id: + - 80a5646d2f8c4844d37d23e42137c46f + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_quandl_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_quandl_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..03cf2a7b231 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_quandl_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,76 @@ +interactions: +- request: + body: null + headers: + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + accept: + - application/json + request-source: + - python + request-source-version: + - 3.7.0 + x-api-token: + - test_key + method: GET + uri: https://data.nasdaq.com/api/v3/datasets/EIA/PET_RWTC_D/data?order=asc + response: + body: + string: !!binary | + H4sIAAAAAAAA/1WNsQ7CMAxEf8XyjCpYu3VgYCsTYqqixISoxRaOI7VU/XeCmDrd6emdbsV3cRym + gVRFsV3RSyBs8Xru5uMJD/iinF38oRuBlzIFYDFQ8hI5fQgWKQpdf4GRlhaMsg21NdBP5HKdPMmP + OwnqIZjWjC5xA3cp4B3DI1W+EwsH0j9yvn6zQSazxDE3uG1feayDMb0AAAA= + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - '*' + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Access-Control-Expose-Headers: + - X-RateLimit-Limit, X-RateLimit-Remaining + Access-Control-Max-Age: + - '1728000' + Allow: + - GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json; charset=utf-8 + Date: + - Tue, 04 Oct 2022 14:11:56 GMT + Server: + - openresty + Set-Cookie: + - visid_incap_2170999=1CofJCbpRoWyLby+w6MBqSs/PGMAAAAAQUIPAAAAAAB4QPjOO5THL62c/mw/CPzG; + expires=Wed, 04 Oct 2023 06:16:11 GMT; HttpOnly; path=/; Domain=.nasdaq.com + - nlbi_2170999=u+1bFOPMOW8J8pV/Kj7S7QAAAAD5I9gUHA/pmC6ngTuPTCAf; path=/; Domain=.nasdaq.com + - incap_ses_1170_2170999=aZY9QVdZiE8FDrrSkK08ECs/PGMAAAAAy0E8FukUuVhuc9Jh3bkxKQ==; + path=/; Domain=.nasdaq.com + Transfer-Encoding: + - chunked + X-CDN: + - Imperva + X-Iinfo: + - 2-69778184-69778213 NNYN CT(56 33 0) RT(1664892715526 129) q(0 0 1 0) r(1 + 1) U11 + X-RateLimit-Limit: + - '50' + X-RateLimit-Remaining: + - '40' + X-Request-Id: + - 5686807e-748a-4a33-a6f8-1ad5de9cc66a + X-Runtime: + - '0.008569' + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_quandl_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_quandl_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..efdfdef9d96 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_quandl_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,76 @@ +interactions: +- request: + body: null + headers: + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + accept: + - application/json + request-source: + - python + request-source-version: + - 3.7.0 + x-api-token: + - test_key + method: GET + uri: https://data.nasdaq.com/api/v3/datasets/EIA/PET_RWTC_D/data?order=asc + response: + body: + string: !!binary | + H4sIAAAAAAAA/1WNsQ7CMAxEf8XyjCpYu3VgYCsTYqqixISoxRaOI7VU/XeCmDrd6emdbsV3cRym + gVRFsV3RSyBs8Xru5uMJD/iinF38oRuBlzIFYDFQ8hI5fQgWKQpdf4GRlhaMsg21NdBP5HKdPMmP + OwnqIZjWjC5xA3cp4B3DI1W+EwsH0j9yvn6zQSazxDE3uG1feayDMb0AAAA= + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - '*' + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Access-Control-Expose-Headers: + - X-RateLimit-Limit, X-RateLimit-Remaining + Access-Control-Max-Age: + - '1728000' + Allow: + - GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json; charset=utf-8 + Date: + - Tue, 04 Oct 2022 14:11:56 GMT + Server: + - openresty + Set-Cookie: + - visid_incap_2170999=1CofJCbpRoWyLby+w6MBqSs/PGMAAAAAQUIPAAAAAAB4QPjOO5THL62c/mw/CPzG; + expires=Wed, 04 Oct 2023 06:16:13 GMT; HttpOnly; path=/; Domain=.nasdaq.com + - nlbi_2170999=npScGs0UgVIcm/ZuKj7S7QAAAAB2bM3KAgW1BDafFCheDnqn; path=/; Domain=.nasdaq.com + - incap_ses_1170_2170999=1T4rBDeDQUIFDrrSkK08ECw/PGMAAAAAwrsYYgk442gkR+t88eggpA==; + path=/; Domain=.nasdaq.com + Transfer-Encoding: + - chunked + X-CDN: + - Imperva + X-Iinfo: + - 0-34837951-34837955 NNYY CT(7 20 0) RT(1664892716021 122) q(0 0 0 0) r(0 0) + U11 + X-RateLimit-Limit: + - '50' + X-RateLimit-Remaining: + - '39' + X-Request-Id: + - 6e10972d-46cf-437e-8d22-8a0ee1442a0a + X-Runtime: + - '0.007796' + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_quandl_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_quandl_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..6755152858c --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_quandl_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,76 @@ +interactions: +- request: + body: null + headers: + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + accept: + - application/json + request-source: + - python + request-source-version: + - 3.7.0 + x-api-token: + - test_key + method: GET + uri: https://data.nasdaq.com/api/v3/datasets/EIA/PET_RWTC_D/data?order=asc + response: + body: + string: !!binary | + H4sIAAAAAAAA/1WNsQ7CMAxEf8XyjCpYu3VgYCsTYqqixISoxRaOI7VU/XeCmDrd6emdbsV3cRym + gVRFsV3RSyBs8Xru5uMJD/iinF38oRuBlzIFYDFQ8hI5fQgWKQpdf4GRlhaMsg21NdBP5HKdPMmP + OwnqIZjWjC5xA3cp4B3DI1W+EwsH0j9yvn6zQSazxDE3uG1feayDMb0AAAA= + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - '*' + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Access-Control-Expose-Headers: + - X-RateLimit-Limit, X-RateLimit-Remaining + Access-Control-Max-Age: + - '1728000' + Allow: + - GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json; charset=utf-8 + Date: + - Tue, 04 Oct 2022 14:11:57 GMT + Server: + - openresty + Set-Cookie: + - visid_incap_2170999=1CofJCbpRoWyLby+w6MBqSs/PGMAAAAAQUIPAAAAAAB4QPjOO5THL62c/mw/CPzG; + expires=Wed, 04 Oct 2023 06:16:12 GMT; HttpOnly; path=/; Domain=.nasdaq.com + - nlbi_2170999=ObekPRMQah154flOKj7S7QAAAAAFH/DiR93HvfTOxbLhn4em; path=/; Domain=.nasdaq.com + - incap_ses_1170_2170999=At2sR4tSCUQFDrrSkK08ECw/PGMAAAAAWOMTH8G3nGrwAcHcP6aauQ==; + path=/; Domain=.nasdaq.com + Transfer-Encoding: + - chunked + X-CDN: + - Imperva + X-Iinfo: + - 13-192935658-192935688 NNYY CT(7 19 0) RT(1664892716414 131) q(0 0 0 0) r(0 + 0) U11 + X-RateLimit-Limit: + - '50' + X-RateLimit-Remaining: + - '38' + X-Request-Id: + - deb8bce2-5957-43fc-beda-ada425d5732f + X-Runtime: + - '0.008970' + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_reddit_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_reddit_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..5e0951a80c5 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_reddit_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,68 @@ +interactions: +- request: + body: grant_type=password&password=test_pass&username=test_user + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Authorization: + - Basic dGVzdF9pZDp0ZXN0X3NlY3JldA== + Connection: + - close + Content-Length: + - '57' + Content-Type: + - application/x-www-form-urlencoded + User-Agent: + - test_agent PRAW/7.6.0 prawcore/2.3.0 + method: POST + uri: https://www.reddit.com/api/v1/access_token + response: + body: + string: '{"message": "Unauthorized", "error": 401}' + headers: + Accept-Ranges: + - bytes + Cache-Control: + - private, max-age=3600 + Connection: + - close + Content-Length: + - '41' + Date: + - Tue, 04 Oct 2022 14:12:06 GMT + NEL: + - '{"report_to": "w3-reporting-nel", "max_age": 14400, "include_subdomains": + false, "success_fraction": 0.2, "failure_fraction": 0.2}' + Report-To: + - '{"group": "w3-reporting-nel", "max_age": 14400, "include_subdomains": true, "endpoints": + [{ "url": "https://w3-reporting-nel.reddit.com/reports" }]}, {"group": "w3-reporting", + "max_age": 14400, "include_subdomains": true, "endpoints": [{ "url": "https://w3-reporting.reddit.com/reports" + }]}' + Server: + - snooserv + Set-Cookie: + - edgebucket=aGNHJAEO0Y3jFVDZt2; Domain=reddit.com; Max-Age=63071999; Path=/; secure + Strict-Transport-Security: + - max-age=31536000; includeSubdomains + Via: + - 1.1 varnish + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-XSS-Protection: + - 1; mode=block + content-type: + - application/json; charset=UTF-8 + www-authenticate: + - Basic realm="reddit" + x-moose: + - majestic + x-ua-compatible: + - IE=edge + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_reddit_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_reddit_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..f00289fd24d --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_reddit_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,68 @@ +interactions: +- request: + body: grant_type=password&password=test_pass&username=test_user + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Authorization: + - Basic dGVzdF9pZDp0ZXN0X3NlY3JldA== + Connection: + - close + Content-Length: + - '57' + Content-Type: + - application/x-www-form-urlencoded + User-Agent: + - test_agent PRAW/7.6.0 prawcore/2.3.0 + method: POST + uri: https://www.reddit.com/api/v1/access_token + response: + body: + string: '{"message": "Unauthorized", "error": 401}' + headers: + Accept-Ranges: + - bytes + Cache-Control: + - private, max-age=3600 + Connection: + - close + Content-Length: + - '41' + Date: + - Tue, 04 Oct 2022 14:12:07 GMT + NEL: + - '{"report_to": "w3-reporting-nel", "max_age": 14400, "include_subdomains": + false, "success_fraction": 0.2, "failure_fraction": 0.2}' + Report-To: + - '{"group": "w3-reporting-nel", "max_age": 14400, "include_subdomains": true, "endpoints": + [{ "url": "https://w3-reporting-nel.reddit.com/reports" }]}, {"group": "w3-reporting", + "max_age": 14400, "include_subdomains": true, "endpoints": [{ "url": "https://w3-reporting.reddit.com/reports" + }]}' + Server: + - snooserv + Set-Cookie: + - edgebucket=H3hyRQbqYeztzihFZt; Domain=reddit.com; Max-Age=63071999; Path=/; secure + Strict-Transport-Security: + - max-age=31536000; includeSubdomains + Via: + - 1.1 varnish + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-XSS-Protection: + - 1; mode=block + content-type: + - application/json; charset=UTF-8 + www-authenticate: + - Basic realm="reddit" + x-moose: + - majestic + x-ua-compatible: + - IE=edge + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_reddit_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_reddit_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..86431ce3aa0 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_reddit_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,68 @@ +interactions: +- request: + body: grant_type=password&password=test_pass&username=test_user + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Authorization: + - Basic dGVzdF9pZDp0ZXN0X3NlY3JldA== + Connection: + - close + Content-Length: + - '57' + Content-Type: + - application/x-www-form-urlencoded + User-Agent: + - test_agent PRAW/7.6.0 prawcore/2.3.0 + method: POST + uri: https://www.reddit.com/api/v1/access_token + response: + body: + string: '{"message": "Unauthorized", "error": 401}' + headers: + Accept-Ranges: + - bytes + Cache-Control: + - private, max-age=3600 + Connection: + - close + Content-Length: + - '41' + Date: + - Tue, 04 Oct 2022 14:12:07 GMT + NEL: + - '{"report_to": "w3-reporting-nel", "max_age": 14400, "include_subdomains": + false, "success_fraction": 0.2, "failure_fraction": 0.2}' + Report-To: + - '{"group": "w3-reporting-nel", "max_age": 14400, "include_subdomains": true, "endpoints": + [{ "url": "https://w3-reporting-nel.reddit.com/reports" }]}, {"group": "w3-reporting", + "max_age": 14400, "include_subdomains": true, "endpoints": [{ "url": "https://w3-reporting.reddit.com/reports" + }]}' + Server: + - snooserv + Set-Cookie: + - edgebucket=iALI4KfWGMoECUNJSL; Domain=reddit.com; Max-Age=63071999; Path=/; secure + Strict-Transport-Security: + - max-age=31536000; includeSubdomains + Via: + - 1.1 varnish + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-XSS-Protection: + - 1; mode=block + content-type: + - application/json; charset=UTF-8 + www-authenticate: + - Basic realm="reddit" + x-moose: + - majestic + x-ua-compatible: + - IE=edge + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_santiment_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_santiment_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..dab40de624f --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_santiment_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,60 @@ +interactions: +- request: + body: ' + + {{ getMetric(metric: "dev_activity"){{ timeseriesData( slug: "ethereum" from: + ""2020-02-10T07:00:00Z"" to: "2020-03-10T07:00:00Z" interval: "1w"){{ datetime + value }} }} }}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Authorization: + - Apikey test_key + Connection: + - keep-alive + Content-Length: + - '172' + Content-Type: + - application/graphql + User-Agent: + - python-requests/2.28.1 + method: POST + uri: https://api.santiment.net/graphql + response: + body: + string: '{"errors":{"details":"Apikey ''test_key'' is not valid"}}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e832cfd9e950c-LIS + Cache-Control: + - max-age=0, private, must-revalidate + Connection: + - keep-alive + Content-Length: + - '55' + Date: + - Tue, 04 Oct 2022 14:12:25 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=wtM3RbEm%2FCuR29Ru%2FlXHnEEnG84XHFDcm%2B8U%2BTUaFbjkq6VfWApnXDELV0QbxCj6UXt%2B9%2BlwyfXfY3POm42%2BE6GMFO%2B6RLgWRQD0VHnhTp51VopaqbSi0QOhX59hhHMiz6a6"}],"group":"cf-nel","max_age":604800}' + Server: + - cloudflare + access-control-allow-credentials: + - 'true' + access-control-allow-headers: + - DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-SharedAccess-Authorization + access-control-allow-methods: + - GET, POST, OPTIONS + set-cookie: + - INGRESSCOOKIE=1664892746.904.11247.492222; Path=/.+; Secure; HttpOnly + x-request-id: + - a7495d3f7084c8e35492c70576bf4b6d + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_santiment_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_santiment_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..db8eee72736 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_santiment_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,60 @@ +interactions: +- request: + body: ' + + {{ getMetric(metric: "dev_activity"){{ timeseriesData( slug: "ethereum" from: + ""2020-02-10T07:00:00Z"" to: "2020-03-10T07:00:00Z" interval: "1w"){{ datetime + value }} }} }}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Authorization: + - Apikey test_key + Connection: + - keep-alive + Content-Length: + - '172' + Content-Type: + - application/graphql + User-Agent: + - python-requests/2.28.1 + method: POST + uri: https://api.santiment.net/graphql + response: + body: + string: '{"errors":{"details":"Apikey ''test_key'' is not valid"}}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e832e69a05d2f-LIS + Cache-Control: + - max-age=0, private, must-revalidate + Connection: + - keep-alive + Content-Length: + - '55' + Date: + - Tue, 04 Oct 2022 14:12:26 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=73uHjVWlQQnZw5NxPCRh7%2BZsXfbjULPTSI3S9ps5tJx8w8pG8R5ltf8CtdtRTM9Y9sDAarDtYHpg6u5SH7Jz4SlRcV5t1t5HtUwzbZKEykx23Whrrt5FQFFBs%2B0%2BS8i%2FLb4W"}],"group":"cf-nel","max_age":604800}' + Server: + - cloudflare + access-control-allow-credentials: + - 'true' + access-control-allow-headers: + - DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-SharedAccess-Authorization + access-control-allow-methods: + - GET, POST, OPTIONS + set-cookie: + - INGRESSCOOKIE=1664892747.059.11247.844562; Path=/.+; Secure; HttpOnly + x-request-id: + - 525b7df0250e9951c40efbf9ac28f266 + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_santiment_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_santiment_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..f6c25742a25 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_santiment_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,60 @@ +interactions: +- request: + body: ' + + {{ getMetric(metric: "dev_activity"){{ timeseriesData( slug: "ethereum" from: + ""2020-02-10T07:00:00Z"" to: "2020-03-10T07:00:00Z" interval: "1w"){{ datetime + value }} }} }}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Authorization: + - Apikey test_key + Connection: + - keep-alive + Content-Length: + - '172' + Content-Type: + - application/graphql + User-Agent: + - python-requests/2.28.1 + method: POST + uri: https://api.santiment.net/graphql + response: + body: + string: '{"errors":{"details":"Apikey ''test_key'' is not valid"}}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e832f6c8503ba-LIS + Cache-Control: + - max-age=0, private, must-revalidate + Connection: + - keep-alive + Content-Length: + - '55' + Date: + - Tue, 04 Oct 2022 14:12:26 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=eVAoNvpy%2BtpkFc5M%2F%2BYl3ZBEw3Pc2%2Fng2SfsqeuceivAiBW4qqEcJ1rh2LVrQk5lcz8VKA6%2Fa5tHuTfhBP3UimhhGlL3%2FqFADY00i%2BDTVY26qzu3jeOqM5SyDYyPbcNn7ao7"}],"group":"cf-nel","max_age":604800}' + Server: + - cloudflare + access-control-allow-credentials: + - 'true' + access-control-allow-headers: + - DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-SharedAccess-Authorization + access-control-allow-methods: + - GET, POST, OPTIONS + set-cookie: + - INGRESSCOOKIE=1664892747.192.11247.98702; Path=/.+; Secure; HttpOnly + x-request-id: + - 9cd1b3e5b206c535b223949f8a23c0d9 + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_si_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_si_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..e6453f39868 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_si_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,28 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.sentimentinvestor.com/v1/trending?token=test_key + response: + body: + string: Service Unavailable + headers: + Content-Length: + - '19' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Tue, 04 Oct 2022 14:12:12 GMT + status: + code: 503 + message: Service Unavailable +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_si_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_si_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..e6453f39868 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_si_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,28 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.sentimentinvestor.com/v1/trending?token=test_key + response: + body: + string: Service Unavailable + headers: + Content-Length: + - '19' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Tue, 04 Oct 2022 14:12:12 GMT + status: + code: 503 + message: Service Unavailable +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_si_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_si_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..33d77414146 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_si_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,28 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.sentimentinvestor.com/v1/trending?token=test_key + response: + body: + string: Service Unavailable + headers: + Content-Length: + - '19' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Tue, 04 Oct 2022 14:12:13 GMT + status: + code: 503 + message: Service Unavailable +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_smartstake_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_smartstake_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..5feb6a5d08d --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_smartstake_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,50 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://prod.smartstakeapi.com/listData?app=TERRA&type=history&dayCount=30&key=test_key&token=test_access_token + response: + body: + string: '{"errors": "DENIED"}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e8308f91203ba-LIS + Connection: + - keep-alive + Content-Length: + - '20' + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:12:20 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=k9Asqsb5taHwbKsVvw61b9Ygs7VvhMfMLv5iJ4L%2FT787oPlH5rYaNJTndNHj7tyowQx1UaEWu%2Bn4mmBl1XU5Dnd4EVofpafbIZPSSiMYrWmJhe7D6UwQf7bB9lV9fGFbJDyxHtinn6Q%3D"}],"group":"cf-nel","max_age":604800}' + Server: + - cloudflare + access-control-allow-credentials: + - 'true' + access-control-allow-origin: + - '*' + x-amz-apigw-id: + - Ze7StGFaIAMFzsw= + x-amzn-requestid: + - 0e6f5a5c-c041-4c4c-826f-476b974a3ae9 + x-amzn-trace-id: + - Root=1-633c3f44-6874ebdd0da59a4f09bef655;Sampled=0 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_smartstake_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_smartstake_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..96fa3a82131 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_smartstake_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,50 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://prod.smartstakeapi.com/listData?app=TERRA&type=history&dayCount=30&key=test_key&token=test_access_token + response: + body: + string: '{"errors": "DENIED"}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e830bbf8703ee-LIS + Connection: + - keep-alive + Content-Length: + - '20' + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:12:20 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=YHNBnp2YblqRepvgBmvlpkZsByLf89TCng7ZIvs1iWWKcCeyCEalBqqF6RuHSe9WQo3JcOmtgMWo8Jo51Ch98GBMuiESZ8ANnKcolTr2lmLUH%2Fwx%2F%2FVheEh4yM9J12HMCA5d%2BvqlhKw%3D"}],"group":"cf-nel","max_age":604800}' + Server: + - cloudflare + access-control-allow-credentials: + - 'true' + access-control-allow-origin: + - '*' + x-amz-apigw-id: + - Ze7SuFtPoAMFYNQ= + x-amzn-requestid: + - 31689984-2b19-45d7-bd18-4d3e480797f6 + x-amzn-trace-id: + - Root=1-633c3f44-0684c3657b0178ce4d77b551;Sampled=0 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_smartstake_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_smartstake_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..b16fe9113f5 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_smartstake_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,50 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://prod.smartstakeapi.com/listData?app=TERRA&type=history&dayCount=30&key=test_key&token=test_access_token + response: + body: + string: '{"errors": "DENIED"}' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e830cefc394fa-LIS + Connection: + - keep-alive + Content-Length: + - '20' + Content-Type: + - application/json + Date: + - Tue, 04 Oct 2022 14:12:20 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=S7PX7iRFWsq2ZRQiLVbrgMRgyZZwlYHUfWWgonu5kBr5QLaSVHoO%2F8SmJCgzUrlBJ%2F40YHRNhlCcNgQ7feTE4%2BzNeJktmXsu8uqKBQ%2BSXmfdHqizvs%2BjBH2BNX2fcRGtB0amUy79t4M%3D"}],"group":"cf-nel","max_age":604800}' + Server: + - cloudflare + access-control-allow-credentials: + - 'true' + access-control-allow-origin: + - '*' + x-amz-apigw-id: + - Ze7SwH8moAMFWcw= + x-amzn-requestid: + - 37aa0e4b-43a1-48e6-bc58-f4f2051e63a8 + x-amzn-trace-id: + - Root=1-633c3f44-27f1355108b1006577b6f617;Sampled=0 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_tradier_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_tradier_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..84f5bb6104f --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_tradier_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,38 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Bearer test_key + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://sandbox.tradier.com/v1/markets/quotes?symbols=AAPL + response: + body: + string: Invalid Access Token + headers: + Access-Control-Allow-Headers: + - accept, authorization + Access-Control-Allow-Methods: + - GET, PUT, POST, DELETE + Access-Control-Allow-Origin: + - '*' + Connection: + - keep-alive + Content-Length: + - '20' + Content-Type: + - plain/text + Date: + - Tue, 04 Oct 2022 14:12:01 GMT + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_tradier_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_tradier_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..84f5bb6104f --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_tradier_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,38 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Bearer test_key + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://sandbox.tradier.com/v1/markets/quotes?symbols=AAPL + response: + body: + string: Invalid Access Token + headers: + Access-Control-Allow-Headers: + - accept, authorization + Access-Control-Allow-Methods: + - GET, PUT, POST, DELETE + Access-Control-Allow-Origin: + - '*' + Connection: + - keep-alive + Content-Length: + - '20' + Content-Type: + - plain/text + Date: + - Tue, 04 Oct 2022 14:12:01 GMT + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_tradier_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_tradier_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..e4651ffefaa --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_tradier_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,38 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - Bearer test_key + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://sandbox.tradier.com/v1/markets/quotes?symbols=AAPL + response: + body: + string: Invalid Access Token + headers: + Access-Control-Allow-Headers: + - accept, authorization + Access-Control-Allow-Methods: + - GET, PUT, POST, DELETE + Access-Control-Allow-Origin: + - '*' + Connection: + - keep-alive + Content-Length: + - '20' + Content-Type: + - plain/text + Date: + - Tue, 04 Oct 2022 14:12:02 GMT + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_twitter_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_twitter_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..3cbdae2369d --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_twitter_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,43 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + authorization: + - Bearer test_access_token + method: GET + uri: https://api.twitter.com/2/tweets/search/recent?query=%28%5C%24AAPL%29+%28lang%3Aen%29&max_results=10&tweet.fields=created_at%2Clang + response: + body: + string: "{\n \"title\": \"Unauthorized\",\n \"type\": \"about:blank\",\n \"status\": + 401,\n \"detail\": \"Unauthorized\"\n}" + headers: + cache-control: + - no-cache, no-store, max-age=0 + content-length: + - '99' + content-type: + - application/problem+json + date: + - Tue, 04 Oct 2022 14:12:08 GMT + perf: + - '7626143928' + server: + - tsa_f + x-connection-hash: + - 1a1975af5733283ca199c311b7565d85caee1d5ef43d7058791912d59789b846 + x-response-time: + - '99' + x-transaction-id: + - 117e76d2ed30aa1b + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_twitter_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_twitter_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..73c275b9118 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_twitter_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,43 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + authorization: + - Bearer test_access_token + method: GET + uri: https://api.twitter.com/2/tweets/search/recent?query=%28%5C%24AAPL%29+%28lang%3Aen%29&max_results=10&tweet.fields=created_at%2Clang + response: + body: + string: "{\n \"title\": \"Unauthorized\",\n \"type\": \"about:blank\",\n \"status\": + 401,\n \"detail\": \"Unauthorized\"\n}" + headers: + cache-control: + - no-cache, no-store, max-age=0 + content-length: + - '99' + content-type: + - application/problem+json + date: + - Tue, 04 Oct 2022 14:12:08 GMT + perf: + - '7626143928' + server: + - tsa_f + x-connection-hash: + - 27a26e3a151b37777bd51cc82c68c8634b08fd5140b74590917af8bdbe25b907 + x-response-time: + - '99' + x-transaction-id: + - eff7767f74df1e1d + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_twitter_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_twitter_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..4bdfb33e0d8 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_twitter_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,43 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + authorization: + - Bearer test_access_token + method: GET + uri: https://api.twitter.com/2/tweets/search/recent?query=%28%5C%24AAPL%29+%28lang%3Aen%29&max_results=10&tweet.fields=created_at%2Clang + response: + body: + string: "{\n \"title\": \"Unauthorized\",\n \"type\": \"about:blank\",\n \"status\": + 401,\n \"detail\": \"Unauthorized\"\n}" + headers: + cache-control: + - no-cache, no-store, max-age=0 + content-length: + - '99' + content-type: + - application/problem+json + date: + - Tue, 04 Oct 2022 14:12:09 GMT + perf: + - '7626143928' + server: + - tsa_f + x-connection-hash: + - 1e182b3237f6bb0c3a00ce53985d58aa7b50ae4f3a2ee4f67a19628eb0dce8fd + x-response-time: + - '99' + x-transaction-id: + - bfda8c6b5d23a375 + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_walert_key[args0-False-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_walert_key[args0-False-True-defined, test failed].yaml new file mode 100644 index 00000000000..eeea535f60b --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_walert_key[args0-False-True-defined, test failed].yaml @@ -0,0 +1,48 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.whale-alert.io/v1/transactions?api_key=test_key + response: + body: + string: '{"result":"error","message":"invalid api_key"} + + ' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e82e55b32734a-MRS + Connection: + - keep-alive + Content-Length: + - '47' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Tue, 04 Oct 2022 14:12:14 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=COnAbSOXJebcXGqQUhLXdh%2Bf756mX%2BOd1P6g11vO%2B2FEkBJ4gbXdbFDGNeGmIul9R2naqsCW4YcY3zM%2Bivdq2L%2B8cb0tmdqjQT0t1AiNiZvvNrJ7blZvgNs%2FY3i1epPZ7f12huw%3D"}],"group":"cf-nel","max_age":604800}' + Server: + - cloudflare + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 + x-content-type-options: + - nosniff + x-frame-options: + - deny + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_walert_key[args1-False-False-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_walert_key[args1-False-False-defined, test failed].yaml new file mode 100644 index 00000000000..086a8cea8b2 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_walert_key[args1-False-False-defined, test failed].yaml @@ -0,0 +1,48 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.whale-alert.io/v1/transactions?api_key=test_key + response: + body: + string: '{"result":"error","message":"invalid api_key"} + + ' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e82e79ed4be38-CPH + Connection: + - keep-alive + Content-Length: + - '47' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Tue, 04 Oct 2022 14:12:14 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=pNRNsg5GlM73gyEJW8cA84uyafK1C%2B%2FmdTZXKYgZHzgIV6NKfxnjDlg0PVmETjFB7HII%2BWe2P6%2BW9naOf7D2z9OVwy%2BUFsKGOXgYqbY7gLxZbb7nbuLN5Rr0B9xaIitDPvE5bT0%3D"}],"group":"cf-nel","max_age":604800}' + Server: + - cloudflare + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 + x-content-type-options: + - nosniff + x-frame-options: + - deny + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cassettes/test_keys_model/test_set_walert_key[args2-True-True-defined, test failed].yaml b/tests/openbb_terminal/cassettes/test_keys_model/test_set_walert_key[args2-True-True-defined, test failed].yaml new file mode 100644 index 00000000000..3d04518bef4 --- /dev/null +++ b/tests/openbb_terminal/cassettes/test_keys_model/test_set_walert_key[args2-True-True-defined, test failed].yaml @@ -0,0 +1,48 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: https://api.whale-alert.io/v1/transactions?api_key=test_key + response: + body: + string: '{"result":"error","message":"invalid api_key"} + + ' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 754e82e9cdd3b35d-PRG + Connection: + - keep-alive + Content-Length: + - '47' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Tue, 04 Oct 2022 14:12:15 GMT + NEL: + - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}' + Report-To: + - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=yoqOokDdG2jaDLPTpc5Y%2Bh6wOuCBTXrXYFYYE5IfE%2Bd4%2BsRR0oSReTAHF64CyFMoCw6zU5%2FEs9dNbt%2BkSkMKcklTUQ1IolK9i9tgAdPnnVypM0mUz0yyRm87%2FWSdDgzFiejx%2F3o%3D"}],"group":"cf-nel","max_age":604800}' + Server: + - cloudflare + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 + x-content-type-options: + - nosniff + x-frame-options: + - deny + status: + code: 401 + message: Unauthorized +version: 1 diff --git a/tests/openbb_terminal/cryptocurrency/due_diligence/cassettes/test_glassnode_view/test_display_btc_rainbow.yaml b/tests/openbb_terminal/cryptocurrency/due_diligence/cassettes/test_glassnode_view/test_display_btc_rainbow.yaml index ae109767fe2..03ff4eb6cfa 100644 --- a/tests/openbb_terminal/cryptocurrency/due_diligence/cassettes/test_glassnode_view/test_display_btc_rainbow.yaml +++ b/tests/openbb_terminal/cryptocurrency/due_diligence/cassettes/test_glassnode_view/test_display_btc_rainbow.yaml @@ -9,10 +9,11 @@ interactions: Connection: - keep-alive method: GET - uri: https://api.glassnode.com/v1/metrics/market/price_usd_close?a=BTC&api_key=MOCK_API_KEY&i=24h&s=1325376000&u=1641641877 + uri: https://api.glassnode.com/v1/metrics/market/price_usd_close?a=BTC&api_key=MOCK_API_KEY&i=24h&s=1325376000&u=1641600000 response: body: - string: '[{"t":1325376000,"v":5.27839909090909},{"t":1325462400,"v":5.21678},{"t":1325548800,"v":4.883427777777778},{"t":1325635200,"v":5.58749},{"t":1325721600,"v":6.982924814814817},{"t":1325808000,"v":6.696863333333334},{"t":1325894400,"v":6.811656666666668},{"t":1325980800,"v":7.13009076923077},{"t":1326067200,"v":6.3162949999999976},{"t":1326153600,"v":6.449687599999999},{"t":1326240000,"v":6.899966666666668},{"t":1326326400,"v":6.797846666666668},{"t":1326412800,"v":6.413502074303406},{"t":1326499200,"v":6.750014999999999},{"t":1326585600,"v":7.0275609090909095},{"t":1326672000,"v":6.648461904761903},{"t":1326758400,"v":5.56730760869565},{"t":1326844800,"v":5.9170500000000015},{"t":1326931200,"v":6.3543171428571465},{"t":1327017600,"v":6.37286},{"t":1327104000,"v":6.165864},{"t":1327190400,"v":6.3065940000000005},{"t":1327276800,"v":6.343111578947367},{"t":1327363200,"v":6.2675833333333335},{"t":1327449600,"v":5.795209444444442},{"t":1327536000,"v":5.335037058823528},{"t":1327622400,"v":5.288307142857144},{"t":1327708800,"v":5.630534444444443},{"t":1327795200,"v":5.38777},{"t":1327881600,"v":5.490466666666666},{"t":1327968000,"v":5.4956314285714285},{"t":1328054400,"v":6.07439125},{"t":1328140800,"v":6.100066666666666},{"t":1328227200,"v":5.95465},{"t":1328313600,"v":5.872845},{"t":1328400000,"v":5.684396666666667},{"t":1328486400,"v":5.48982},{"t":1328572800,"v":5.633037777777778},{"t":1328659200,"v":5.59998},{"t":1328745600,"v":5.839615431034474},{"t":1328832000,"v":5.9169264},{"t":1328918400,"v":5.6005},{"t":1329004800,"v":5.51468},{"t":1329091200,"v":5.2851921875},{"t":1329177600,"v":4.433381818181816},{"t":1329264000,"v":4.271745454545455},{"t":1329350400,"v":4.26945},{"t":1329436800,"v":4.39621},{"t":1329523200,"v":4.2372890909090914},{"t":1329609600,"v":4.3784025},{"t":1329696000,"v":4.3729900000000015},{"t":1329782400,"v":4.3025400000000005},{"t":1329868800,"v":4.446645833333334},{"t":1329955200,"v":5.019525199999999},{"t":1330041600,"v":5.02920125},{"t":1330128000,"v":4.7802454545454545},{"t":1330214400,"v":4.9259825},{"t":1330300800,"v":4.959988},{"t":1330387200,"v":4.862755},{"t":1330473600,"v":4.860007083333335},{"t":1330560000,"v":4.92133},{"t":1330646400,"v":4.71674142857143},{"t":1330732800,"v":4.617961428571427},{"t":1330819200,"v":4.825593333333333},{"t":1330905600,"v":4.978101428571429},{"t":1330992000,"v":4.9941958333333325},{"t":1331078400,"v":4.922407499999999},{"t":1331164800,"v":4.93016},{"t":1331251200,"v":4.862108},{"t":1331337600,"v":4.46},{"t":1331424000,"v":4.882311538461538},{"t":1331510400,"v":4.903366666666667},{"t":1331596800,"v":5.274977999999999},{"t":1331683200,"v":5.386665000000002},{"t":1331769600,"v":5.197815},{"t":1331856000,"v":5.34374},{"t":1331942400,"v":5.180602500000001},{"t":1332028800,"v":5.279683333333334},{"t":1332115200,"v":4.6945440000000005},{"t":1332201600,"v":4.8374558333333315},{"t":1332288000,"v":4.80403},{"t":1332374400,"v":4.7301400000000005},{"t":1332460800,"v":4.675243333333333},{"t":1332547200,"v":4.6669599999999996},{"t":1332633600,"v":4.5500099999999986},{"t":1332720000,"v":4.621338333333333},{"t":1332806400,"v":4.810291537920626},{"t":1332892800,"v":4.8102475},{"t":1332979200,"v":4.756541363636363},{"t":1333065600,"v":4.8591425},{"t":1333152000,"v":4.8943925},{"t":1333238400,"v":4.8207049999999985},{"t":1333324800,"v":4.980836000000001},{"t":1333411200,"v":4.952},{"t":1333497600,"v":4.920066666666667},{"t":1333584000,"v":4.919},{"t":1333670400,"v":4.9333922222222215},{"t":1333756800,"v":4.681678461538461},{"t":1333843200,"v":4.794499999999998},{"t":1333929600,"v":4.850681428571427},{"t":1334016000,"v":4.833646666666667},{"t":1334102400,"v":4.928101666666668},{"t":1334188800,"v":4.90060875},{"t":1334275200,"v":4.936494705882354},{"t":1334361600,"v":4.96381},{"t":1334448000,"v":4.968925833333332},{"t":1334534400,"v":4.94573},{"t":1334620800,"v":4.974027142857142},{"t":1334707200,"v":5.1133},{"t":1334793600,"v":5.1059575000000015},{"t":1334880000,"v":5.367622000000001},{"t":1334966400,"v":5.2347825},{"t":1335052800,"v":5.203516666666666},{"t":1335139200,"v":4.9993401395352315},{"t":1335225600,"v":5.09822},{"t":1335312000,"v":5.1318199999999985},{"t":1335398400,"v":5.0976550000000005},{"t":1335484800,"v":5.104490196078428},{"t":1335571200,"v":4.9793},{"t":1335657600,"v":4.88741},{"t":1335744000,"v":4.936656000000001},{"t":1335830400,"v":4.99750857142857},{"t":1335916800,"v":5.03139375},{"t":1336003200,"v":5.100782499999999},{"t":1336089600,"v":5.0675050000000015},{"t":1336176000,"v":5.0766175},{"t":1336262400,"v":5.04991},{"t":1336348800,"v":5.073795},{"t":1336435200,"v":5.04494},{"t":1336521600,"v":4.98185},{"t":1336608000,"v":4.863997236842108},{"t":1336694400,"v":4.953752},{"t":1336780800,"v":4.9461900000000005},{"t":1336867200,"v":4.92996},{"t":1336953600,"v":5.007936428571427},{"t":1337040000,"v":5.03501},{"t":1337126400,"v":5.052466666666667},{"t":1337212800,"v":5.0884583333333335},{"t":1337299200,"v":5.11801},{"t":1337385600,"v":5.1096499999999985},{"t":1337472000,"v":5.09002},{"t":1337558400,"v":5.089795},{"t":1337644800,"v":5.0830275},{"t":1337731200,"v":5.132372500000002},{"t":1337817600,"v":5.11904},{"t":1337904000,"v":5.135513333333333},{"t":1337990400,"v":5.103236666666667},{"t":1338076800,"v":5.1044800000000015},{"t":1338163200,"v":5.1358},{"t":1338249600,"v":5.14997},{"t":1338336000,"v":5.134995},{"t":1338422400,"v":5.191893846153846},{"t":1338508800,"v":5.257021428571427},{"t":1338595200,"v":5.24898},{"t":1338681600,"v":5.207307777777777},{"t":1338768000,"v":5.259519999999999},{"t":1338854400,"v":5.4058790494853435},{"t":1338940800,"v":5.461776666666666},{"t":1339027200,"v":5.591628},{"t":1339113600,"v":5.631736666666666},{"t":1339200000,"v":5.55997},{"t":1339286400,"v":5.46525},{"t":1339372800,"v":5.581583333333334},{"t":1339459200,"v":5.7100133333333325},{"t":1339545600,"v":5.920347499999999},{"t":1339632000,"v":5.964776315789472},{"t":1339718400,"v":6.532364516129032},{"t":1339804800,"v":6.43582},{"t":1339891200,"v":6.17805125},{"t":1339977600,"v":6.294876808510639},{"t":1340064000,"v":6.498756666666666},{"t":1340150400,"v":6.6717150000000025},{"t":1340236800,"v":6.6615142857142855},{"t":1340323200,"v":6.5253525},{"t":1340409600,"v":6.439432000000003},{"t":1340496000,"v":6.350021666666668},{"t":1340582400,"v":6.308441428571429},{"t":1340668800,"v":6.4195},{"t":1340755200,"v":6.622337272727273},{"t":1340841600,"v":6.605946666666667},{"t":1340928000,"v":6.6512055555555545},{"t":1341014400,"v":6.689967499999999},{"t":1341100800,"v":6.628989999999999},{"t":1341187200,"v":6.7600609090909085},{"t":1341273600,"v":6.449972},{"t":1341360000,"v":6.5101},{"t":1341446400,"v":6.658883333333333},{"t":1341532800,"v":6.6287400000000005},{"t":1341619200,"v":6.7784274999999985},{"t":1341705600,"v":6.79898},{"t":1341792000,"v":6.9465625},{"t":1341878400,"v":7.199859999999998},{"t":1341964800,"v":7.167266666666667},{"t":1342051200,"v":7.688739230769229},{"t":1342137600,"v":7.646275},{"t":1342224000,"v":7.544697999999999},{"t":1342310400,"v":7.621010000000001},{"t":1342396800,"v":8.478222222222222},{"t":1342483200,"v":8.747044166666667},{"t":1342569600,"v":9.087988571428571},{"t":1342656000,"v":8.858418333333333},{"t":1342742400,"v":8.538545},{"t":1342828800,"v":8.84553},{"t":1342915200,"v":8.433048},{"t":1343001600,"v":8.444405714285713},{"t":1343088000,"v":8.562244999999999},{"t":1343174400,"v":8.801195},{"t":1343260800,"v":8.890338181818182},{"t":1343347200,"v":8.9},{"t":1343433600,"v":8.853267500000001},{"t":1343520000,"v":8.709648888888887},{"t":1343606400,"v":9.085184444444444},{"t":1343692800,"v":9.321236874999997},{"t":1343779200,"v":9.504267500000001},{"t":1343865600,"v":10.573568846153846},{"t":1343952000,"v":10.8454475},{"t":1344038400,"v":10.904964000000005},{"t":1344124800,"v":10.844743333333335},{"t":1344211200,"v":10.841448},{"t":1344297600,"v":10.951328521408579},{"t":1344384000,"v":11.06151},{"t":1344470400,"v":11.127167857142858},{"t":1344556800,"v":11.362767142857145},{"t":1344643200,"v":11.51378333333333},{"t":1344729600,"v":11.62340818181818},{"t":1344816000,"v":12.02189375},{"t":1344902400,"v":12.185994},{"t":1344988800,"v":13.24609681818182},{"t":1345075200,"v":13.476283333333335},{"t":1345161600,"v":11.679850689655176},{"t":1345248000,"v":11.40391125},{"t":1345334400,"v":7.920336249999999},{"t":1345420800,"v":10.073154202864243},{"t":1345507200,"v":9.906821111111112},{"t":1345593600,"v":9.763395},{"t":1345680000,"v":10.0999925},{"t":1345766400,"v":10.613777777777775},{"t":1345852800,"v":10.555836666666666},{"t":1345939200,"v":10.556},{"t":1346025600,"v":10.928728333333332},{"t":1346112000,"v":10.868043333333333},{"t":1346198400,"v":10.866303333333335},{"t":1346284800,"v":10.772274000000001},{"t":1346371200,"v":10.12176},{"t":1346457600,"v":9.97696},{"t":1346544000,"v":10.206460000000002},{"t":1346630400,"v":10.528666666666666},{"t":1346716800,"v":10.36613},{"t":1346803200,"v":10.976521111111113},{"t":1346889600,"v":11.18497},{"t":1346976000,"v":11.003323333333334},{"t":1347062400,"v":11.038995},{"t":1347148800,"v":11.073326666666668},{"t":1347235200,"v":11.127033333333333},{"t":1347321600,"v":11.2258135},{"t":1347408000,"v":11.3389225},{"t":1347494400,"v":11.373003333333335},{"t":1347580800,"v":11.7316},{"t":1347667200,"v":11.682625},{"t":1347753600,"v":11.863090555555553},{"t":1347840000,"v":11.897081666666665},{"t":1347926400,"v":12.294733333333333},{"t":1348012800,"v":12.521989999999999},{"t":1348099200,"v":12.337124285714285},{"t":1348185600,"v":12.344472857142858},{"t":1348272000,"v":12.2159},{"t":1348358400,"v":12.0983275},{"t":1348444800,"v":12.09198},{"t":1348531200,"v":12.134418},{"t":1348617600,"v":12.33285857142857},{"t":1348704000,"v":12.317598333333335},{"t":1348790400,"v":12.28},{"t":1348876800,"v":12.363095},{"t":1348963200,"v":12.37475},{"t":1349049600,"v":12.047820654016881},{"t":1349136000,"v":12.693781666666665},{"t":1349222400,"v":12.9395},{"t":1349308800,"v":12.766666666666666},{"t":1349395200,"v":12.7},{"t":1349481600,"v":12.505},{"t":1349568000,"v":11.815475},{"t":1349654400,"v":11.754278333333332},{"t":1349740800,"v":11.883887142857144},{"t":1349827200,"v":12.094166666666665},{"t":1349913600,"v":12.03},{"t":1350000000,"v":11.923916666666674},{"t":1350086400,"v":11.865472857142858},{"t":1350172800,"v":11.728699230769232},{"t":1350259200,"v":11.801467777777773},{"t":1350345600,"v":11.81490142857143},{"t":1350432000,"v":11.923778333333333},{"t":1350518400,"v":11.916797777777774},{"t":1350604800,"v":11.765486629213502},{"t":1350691200,"v":11.70436789473684},{"t":1350777600,"v":11.660545},{"t":1350864000,"v":11.732331666666667},{"t":1350950400,"v":11.7110025},{"t":1351036800,"v":11.64999},{"t":1351123200,"v":10.754429},{"t":1351209600,"v":10.17753181818182},{"t":1351296000,"v":10.321827857142855},{"t":1351382400,"v":10.68099},{"t":1351468800,"v":10.59333},{"t":1351555200,"v":10.846225},{"t":1351641600,"v":11.038845714285717},{"t":1351728000,"v":10.588944699114066},{"t":1351814400,"v":10.415661304347829},{"t":1351900800,"v":10.6425},{"t":1351987200,"v":10.823336666666668},{"t":1352073600,"v":10.705152857142858},{"t":1352160000,"v":10.831798999999998},{"t":1352246400,"v":10.875523333333335},{"t":1352332800,"v":10.855767777777777},{"t":1352419200,"v":10.815263157894735},{"t":1352505600,"v":10.875083999999998},{"t":1352592000,"v":10.53394},{"t":1352678400,"v":10.9172},{"t":1352764800,"v":10.881670588235293},{"t":1352851200,"v":10.94934},{"t":1352937600,"v":11.120750384615386},{"t":1353024000,"v":11.744632},{"t":1353110400,"v":11.788836999999996},{"t":1353196800,"v":11.606691818181815},{"t":1353283200,"v":11.76062},{"t":1353369600,"v":11.66508},{"t":1353456000,"v":11.697982666666665},{"t":1353542400,"v":12.32543923076923},{"t":1353628800,"v":12.33623153846154},{"t":1353715200,"v":12.370765},{"t":1353801600,"v":12.50539},{"t":1353888000,"v":12.221585},{"t":1353974400,"v":12.187300000000002},{"t":1354060800,"v":12.296015833333335},{"t":1354147200,"v":12.45},{"t":1354233600,"v":12.55498},{"t":1354320000,"v":12.578930297707243},{"t":1354406400,"v":12.4360175},{"t":1354492800,"v":12.654310844398156},{"t":1354579200,"v":13.41},{"t":1354665600,"v":13.201336666666664},{"t":1354752000,"v":13.357560006819973},{"t":1354838400,"v":13.455864444444439},{"t":1354924800,"v":13.5414715},{"t":1355011200,"v":13.348245714285715},{"t":1355097600,"v":13.461103846153845},{"t":1355184000,"v":13.605317586206901},{"t":1355270400,"v":13.646908214285714},{"t":1355356800,"v":13.728511052631578},{"t":1355443200,"v":13.604542499999999},{"t":1355529600,"v":13.510539047619051},{"t":1355616000,"v":13.395528571428573},{"t":1355702400,"v":13.23335},{"t":1355788800,"v":13.25036589147287},{"t":1355875200,"v":13.530313333333332},{"t":1355961600,"v":13.555235},{"t":1356048000,"v":13.323996},{"t":1356134400,"v":13.402473333333335},{"t":1356220800,"v":13.335932000000001},{"t":1356307200,"v":13.1285},{"t":1356393600,"v":13.37277},{"t":1356480000,"v":13.456875000000002},{"t":1356566400,"v":13.342924545454547},{"t":1356652800,"v":13.420328571428572},{"t":1356739200,"v":13.34399},{"t":1356825600,"v":13.45713},{"t":1356912000,"v":13.512004999999998},{"t":1356998400,"v":13.220000000000002},{"t":1357084800,"v":13.034},{"t":1357171200,"v":13.190000000000001},{"t":1357257600,"v":13.174000000000001},{"t":1357344000,"v":13.15},{"t":1357430400,"v":13.15},{"t":1357516800,"v":13.2},{"t":1357603200,"v":13.5},{"t":1357689600,"v":13.580000000000002},{"t":1357776000,"v":14.000000000000004},{"t":1357862400,"v":14},{"t":1357948800,"v":13.89},{"t":1358035200,"v":13.64},{"t":1358121600,"v":14.046000000000001},{"t":1358208000,"v":14.214000000000002},{"t":1358294400,"v":14.530000000000001},{"t":1358380800,"v":15.34},{"t":1358467200,"v":15.566000000000003},{"t":1358553600,"v":15.38},{"t":1358640000,"v":15.5},{"t":1358726400,"v":16.588},{"t":1358812800,"v":17.35},{"t":1358899200,"v":17.5},{"t":1358985600,"v":17.29},{"t":1359072000,"v":17.49},{"t":1359158400,"v":17.411405772},{"t":1359244800,"v":17.6},{"t":1359331200,"v":18.67},{"t":1359417600,"v":19.35},{"t":1359504000,"v":19.45},{"t":1359590400,"v":20.46},{"t":1359676800,"v":20.363142521},{"t":1359763200,"v":19.821209783},{"t":1359849600,"v":20.296},{"t":1359936000,"v":20.3},{"t":1360022400,"v":20.512},{"t":1360108800,"v":20.91},{"t":1360195200,"v":21.71},{"t":1360281600,"v":22.400970678},{"t":1360368000,"v":23.133565506},{"t":1360454400,"v":23.660000000000004},{"t":1360540800,"v":23.94},{"t":1360627200,"v":25.466},{"t":1360713600,"v":25.089999999999996},{"t":1360800000,"v":27.4},{"t":1360886400,"v":27},{"t":1360972800,"v":27.5},{"t":1361059200,"v":26.98},{"t":1361145600,"v":26.920000000000005},{"t":1361232000,"v":29.389999999999997},{"t":1361318400,"v":30.031999999999993},{"t":1361404800,"v":30},{"t":1361491200,"v":30.4},{"t":1361577600,"v":29.54},{"t":1361664000,"v":29.78},{"t":1361750400,"v":30.43},{"t":1361836800,"v":31.1},{"t":1361923200,"v":31.393769999999996},{"t":1362009600,"v":33.49101492460001},{"t":1362096000,"v":34.552},{"t":1362182400,"v":34.16},{"t":1362268800,"v":34.33},{"t":1362355200,"v":36.548158722},{"t":1362441600,"v":40.949999999999996},{"t":1362528000,"v":42.4250868578},{"t":1362614400,"v":41.6804369272},{"t":1362700800,"v":43.76},{"t":1362787200,"v":46},{"t":1362873600,"v":45.29},{"t":1362960000,"v":48.25},{"t":1363046400,"v":44.84},{"t":1363132800,"v":46.99},{"t":1363219200,"v":46.95},{"t":1363305600,"v":47.056},{"t":1363392000,"v":46.735095501},{"t":1363478400,"v":47.08816512040001},{"t":1363564800,"v":50.4324924394},{"t":1363651200,"v":59.40999999999999},{"t":1363737600,"v":64.45797156040001},{"t":1363824000,"v":72.23},{"t":1363910400,"v":69.9},{"t":1363996800,"v":63.9},{"t":1364083200,"v":70.388},{"t":1364169600,"v":75.11},{"t":1364256000,"v":79.81},{"t":1364342400,"v":89.3},{"t":1364428800,"v":88.976531972},{"t":1364515200,"v":90},{"t":1364601600,"v":92.2521875764},{"t":1364688000,"v":96.1491459096},{"t":1364774400,"v":104.70599999999999},{"t":1364860800,"v":115.803181554},{"t":1364947200,"v":132.54567795},{"t":1365033600,"v":134.94032495599998},{"t":1365120000,"v":141.78941638999999},{"t":1365206400,"v":141},{"t":1365292800,"v":164.96912500000002},{"t":1365379200,"v":185.21723709000003},{"t":1365465600,"v":229.47235258199998},{"t":1365552000,"v":160.082621718},{"t":1365638400,"v":81.2033201272},{"t":1365724800,"v":108.311396838},{"t":1365811200,"v":92.8058935256},{"t":1365897600,"v":91.11},{"t":1365984000,"v":74},{"t":1366070400,"v":67.9798189258},{"t":1366156800,"v":89.88799999999999},{"t":1366243200,"v":109.05463468},{"t":1366329600,"v":117.86900352799998},{"t":1366416000,"v":126.363163676},{"t":1366502400,"v":117.612451752},{"t":1366588800,"v":123.944},{"t":1366675200,"v":137.034},{"t":1366761600,"v":149.4},{"t":1366848000,"v":141.892},{"t":1366934400,"v":137.32},{"t":1367020800,"v":128.749986266},{"t":1367107200,"v":135.288855642},{"t":1367193600,"v":143.29557655399998},{"t":1367280000,"v":139.584},{"t":1367366400,"v":116.75},{"t":1367452800,"v":106.435208518},{"t":1367539200,"v":97.959073549},{"t":1367625600,"v":112.830658892},{"t":1367712000,"v":116.829559784},{"t":1367798400,"v":112.5799},{"t":1367884800,"v":110.939616114},{"t":1367971200,"v":113.50619419},{"t":1368057600,"v":111.644},{"t":1368144000,"v":117.882657834},{"t":1368230400,"v":115.39099999999999},{"t":1368316800,"v":114.5},{"t":1368403200,"v":115.928315862},{"t":1368489600,"v":107.06204360199999},{"t":1368576000,"v":108.59263393400002},{"t":1368662400,"v":113.320324916},{"t":1368748800,"v":117.45716305199998},{"t":1368835200,"v":118.4838},{"t":1368921600,"v":116.38},{"t":1369008000,"v":117.599041804},{"t":1369094400,"v":117.348},{"t":1369180800,"v":119.07552183600001},{"t":1369267200,"v":123.83527744400001},{"t":1369353600,"v":128.66391794400002},{"t":1369440000,"v":128.88057261},{"t":1369526400,"v":130.002080756},{"t":1369612800,"v":126.247715494},{"t":1369699200,"v":125.8736908},{"t":1369785600,"v":130.25148722199998},{"t":1369872000,"v":126.96199999999999},{"t":1369958400,"v":127.88138951199998},{"t":1370044800,"v":128.737533108},{"t":1370131200,"v":122.34617757000001},{"t":1370217600,"v":123.15253922},{"t":1370304000,"v":120.321727896},{"t":1370390400,"v":121.19039534999999},{"t":1370476800,"v":118.81145690400001},{"t":1370563200,"v":110.31002074400001},{"t":1370649600,"v":109.12055701599999},{"t":1370736000,"v":99.6530898088},{"t":1370822400,"v":104.314550266},{"t":1370908800,"v":107.362},{"t":1370995200,"v":106.01216110199998},{"t":1371081600,"v":102.075927028},{"t":1371168000,"v":99.22391874860003},{"t":1371254400,"v":99.701081323},{"t":1371340800,"v":98.9963649952},{"t":1371427200,"v":100},{"t":1371513600,"v":104.21250556},{"t":1371600000,"v":105.2384867},{"t":1371686400,"v":102.995886484},{"t":1371772800,"v":101.578550412},{"t":1371859200,"v":100},{"t":1371945600,"v":100.41},{"t":1372032000,"v":99.1983071558},{"t":1372118400,"v":97.8348793632},{"t":1372204800,"v":98.5186222374},{"t":1372291200,"v":96.83983022980001},{"t":1372377600,"v":89.8270149586},{"t":1372464000,"v":88.98},{"t":1372550400,"v":89.48303703719998},{"t":1372636800,"v":83.866379937},{"t":1372723200,"v":87.92027565880001},{"t":1372809600,"v":77.8700280454},{"t":1372896000,"v":79.2388480802},{"t":1372982400,"v":67.0842065048},{"t":1373068800,"v":66.1934263416},{"t":1373155200,"v":73.7175890654},{"t":1373241600,"v":74.14869562359999},{"t":1373328000,"v":75.0001833866},{"t":1373414400,"v":86.0265657156},{"t":1373500800,"v":87.6346673952},{"t":1373587200,"v":90.17199152959999},{"t":1373673600,"v":91.6386140104},{"t":1373760000,"v":90.042},{"t":1373846400,"v":93.77187021220001},{"t":1373932800,"v":91.5859280438},{"t":1374019200,"v":91.072269566},{"t":1374105600,"v":85.16284213280001},{"t":1374192000,"v":86.4897668956},{"t":1374278400,"v":84.936084413},{"t":1374364800,"v":85.85354587460002},{"t":1374451200,"v":85.60135641320001},{"t":1374537600,"v":86.88681211480001},{"t":1374624000,"v":88.331511862},{"t":1374710400,"v":90.12030622519998},{"t":1374796800,"v":89.98675950980001},{"t":1374883200,"v":88.16},{"t":1374969600,"v":92.51399999999998},{"t":1375056000,"v":93.39},{"t":1375142400,"v":96.7757675278},{"t":1375228800,"v":98.232},{"t":1375315200,"v":96.578561074},{"t":1375401600,"v":95.83013763459999},{"t":1375488000,"v":95.55000000000001},{"t":1375574400,"v":96.38},{"t":1375660800,"v":97.80096671999999},{"t":1375747200,"v":97.688},{"t":1375833600,"v":97.06288436099999},{"t":1375920000,"v":94.2685705668},{"t":1376006400,"v":92.292406246},{"t":1376092800,"v":93.51},{"t":1376179200,"v":94.144},{"t":1376265600,"v":95.3870275228},{"t":1376352000,"v":97.82929394779998},{"t":1376438400,"v":99.1806789844},{"t":1376524800,"v":98.10729879179999},{"t":1376611200,"v":98.25},{"t":1376697600,"v":99.76486319799999},{"t":1376784000,"v":99.3},{"t":1376870400,"v":102.85},{"t":1376956800,"v":104.803518056},{"t":1377043200,"v":110.43000000000002},{"t":1377129600,"v":109.543050212},{"t":1377216000,"v":107.70232008800001},{"t":1377302400,"v":109.050068334},{"t":1377388800,"v":113.173148148},{"t":1377475200,"v":111.826038408},{"t":1377561600,"v":117.70984706999998},{"t":1377648000,"v":117.94199999999998},{"t":1377734400,"v":118.54657146},{"t":1377820800,"v":124.85496511599999},{"t":1377907200,"v":128.36893722000002},{"t":1377993600,"v":130.66799999999998},{"t":1378080000,"v":130.07072},{"t":1378166400,"v":129.179367224},{"t":1378252800,"v":122.179969596},{"t":1378339200,"v":122.619851268},{"t":1378425600,"v":117.215590382},{"t":1378512000,"v":119.922},{"t":1378598400,"v":118.34},{"t":1378684800,"v":121.243895666},{"t":1378771200,"v":122.066102166},{"t":1378857600,"v":127.30356871400002},{"t":1378944000,"v":126.657381216},{"t":1379030400,"v":127.578944306},{"t":1379116800,"v":124.48999999999998},{"t":1379203200,"v":125.341818674},{"t":1379289600,"v":126.144560294},{"t":1379376000,"v":126.89807517},{"t":1379462400,"v":127.050300348},{"t":1379548800,"v":124.15599999999999},{"t":1379635200,"v":122.981812394},{"t":1379721600,"v":123.404},{"t":1379808000,"v":123.15527895400001},{"t":1379894400,"v":122.64674409},{"t":1379980800,"v":123.772},{"t":1380067200,"v":123.29541168800002},{"t":1380153600,"v":124.84045830800001},{"t":1380240000,"v":126.858838722},{"t":1380326400,"v":126.76026403200001},{"t":1380412800,"v":127.01000000000002},{"t":1380499200,"v":126.25},{"t":1380585600,"v":127.49537500000001},{"t":1380672000,"v":103.71981338600001},{"t":1380758400,"v":117.57163172},{"t":1380844800,"v":121.94000000000001},{"t":1380931200,"v":121.25},{"t":1381017600,"v":122.48999999999998},{"t":1381104000,"v":123.58300197999999},{"t":1381190400,"v":124.35379779999998},{"t":1381276800,"v":125.9},{"t":1381363200,"v":126.8},{"t":1381449600,"v":127.4028133},{"t":1381536000,"v":127.66401765200001},{"t":1381622400,"v":132.546798864},{"t":1381708800,"v":135.36291349799998},{"t":1381795200,"v":144.037009566},{"t":1381881600,"v":137.725951932},{"t":1381968000,"v":143.925082672},{"t":1382054400,"v":152.89},{"t":1382140800,"v":166},{"t":1382227200,"v":166.577402846},{"t":1382313600,"v":180.04214545399998},{"t":1382400000,"v":189.671875},{"t":1382486400,"v":203.67647213},{"t":1382572800,"v":194.20567046800002},{"t":1382659200,"v":187.41013911199997},{"t":1382745600,"v":179.56},{"t":1382832000,"v":194.21404057},{"t":1382918400,"v":196.15785163200002},{"t":1383004800,"v":204.71721574},{"t":1383091200,"v":198.241483734},{"t":1383177600,"v":203.188263428},{"t":1383264000,"v":202.66000000000003},{"t":1383350400,"v":204.78066666799998},{"t":1383436800,"v":209.97676905199995},{"t":1383523200,"v":227.66147456},{"t":1383609600,"v":242.853461094},{"t":1383696000,"v":263.374069342},{"t":1383782400,"v":290.83761704799997},{"t":1383868800,"v":334.186408682},{"t":1383955200,"v":334.87924823},{"t":1384041600,"v":325.439078968},{"t":1384128000,"v":343.79950985600004},{"t":1384214400,"v":354.930332458},{"t":1384300800,"v":394.190255216},{"t":1384387200,"v":415.85714820000004},{"t":1384473600,"v":413.605101372},{"t":1384560000,"v":436.62648168000004},{"t":1384646400,"v":474.85068540400005},{"t":1384732800,"v":667.042706084},{"t":1384819200,"v":540.536009962},{"t":1384905600,"v":598.564391},{"t":1384992000,"v":719.821885452},{"t":1385078400,"v":796.079284704},{"t":1385164800,"v":829.5318394279999},{"t":1385251200,"v":804.06619701},{"t":1385337600,"v":813.3048949680001},{"t":1385424000,"v":916.060529778},{"t":1385510400,"v":964.312489128},{"t":1385596800,"v":1012.81292734},{"t":1385683200,"v":1133.75527568},{"t":1385769600,"v":1118.0154046600003},{"t":1385856000,"v":953.1359506659999},{"t":1385942400,"v":1041.96372376},{"t":1386028800,"v":1054.16594214},{"t":1386115200,"v":1134.39085984},{"t":1386201600,"v":1026.00829634},{"t":1386288000,"v":811.3518261880001},{"t":1386374400,"v":693.824481394},{"t":1386460800,"v":786.5764829899999},{"t":1386547200,"v":897.73743765},{"t":1386633600,"v":979.69510658},{"t":1386720000,"v":877.395064578},{"t":1386806400,"v":873.043849604},{"t":1386892800,"v":885.3134358740001},{"t":1386979200,"v":852.01974842},{"t":1387065600,"v":861.894691022},{"t":1387152000,"v":690.700953712},{"t":1387238400,"v":675.8618964919999},{"t":1387324800,"v":520.8357772840001},{"t":1387411200,"v":684.727403898},{"t":1387497600,"v":607.9770523139999},{"t":1387584000,"v":597.4978388019999},{"t":1387670400,"v":613.3973363260001},{"t":1387756800,"v":657.355982328},{"t":1387843200,"v":652.445016424},{"t":1387929600,"v":679.4395154160001},{"t":1388016000,"v":747.7618741939999},{"t":1388102400,"v":723.730979262},{"t":1388188800,"v":714.999117648},{"t":1388275200,"v":728.090297256},{"t":1388361600,"v":735.9660303120002},{"t":1388448000,"v":731.9532930060001},{"t":1388534400,"v":753.405480556},{"t":1388620800,"v":784.280603894},{"t":1388707200,"v":807.915916232},{"t":1388793600,"v":828.7459845879999},{"t":1388880000,"v":904.7600750739999},{"t":1388966400,"v":917.382725522},{"t":1389052800,"v":789.593524042},{"t":1389139200,"v":822.864923038},{"t":1389225600,"v":825.8665006040001},{"t":1389312000,"v":854.445450584},{"t":1389398400,"v":893.6831232820001},{"t":1389484800,"v":843.286613774},{"t":1389571200,"v":822.530427934},{"t":1389657600,"v":815.996819406},{"t":1389744000,"v":840.1151583520001},{"t":1389830400,"v":814.4962523859999},{"t":1389916800,"v":794.5266687980001},{"t":1390003200,"v":811.37762176},{"t":1390089600,"v":841.4564324119999},{"t":1390176000,"v":826.696425026},{"t":1390262400,"v":824.875769878},{"t":1390348800,"v":818.534270204},{"t":1390435200,"v":810.869203164},{"t":1390521600,"v":779.3849452420001},{"t":1390608000,"v":805.652675222},{"t":1390694400,"v":814.847146534},{"t":1390780800,"v":746.678657078},{"t":1390867200,"v":785.9504199859999},{"t":1390953600,"v":794.098192396},{"t":1391040000,"v":799.5229998400001},{"t":1391126400,"v":802.998525562},{"t":1391212800,"v":813.159890274},{"t":1391299200,"v":814.932732602},{"t":1391385600,"v":808.5},{"t":1391472000,"v":801.39173376},{"t":1391558400,"v":780.917515036},{"t":1391644800,"v":762.981093598},{"t":1391731200,"v":708.3660443880001},{"t":1391817600,"v":679.578138862},{"t":1391904000,"v":687.314088924},{"t":1391990400,"v":688.4182184199999},{"t":1392076800,"v":675.110840662},{"t":1392163200,"v":652.543163334},{"t":1392249600,"v":605.83889448},{"t":1392336000,"v":670.0066271759999},{"t":1392422400,"v":655.269274756},{"t":1392508800,"v":620.641121662},{"t":1392595200,"v":632.4809440480001},{"t":1392681600,"v":629.1273936299999},{"t":1392768000,"v":624.838114922},{"t":1392854400,"v":562.5895875420001},{"t":1392940800,"v":581.290525096},{"t":1393027200,"v":611.552214376},{"t":1393113600,"v":608.198850544},{"t":1393200000,"v":536.8594994299999},{"t":1393286400,"v":536.2111523420001},{"t":1393372800,"v":585.5174387139999},{"t":1393459200,"v":583.057392048},{"t":1393545600,"v":551.4270378320001},{"t":1393632000,"v":566.7533114280001},{"t":1393718400,"v":563.2946821140001},{"t":1393804800,"v":676.820067156},{"t":1393891200,"v":673.387906086},{"t":1393977600,"v":670.1076203939999},{"t":1394064000,"v":669.219942962},{"t":1394150400,"v":632.308556588},{"t":1394236800,"v":620.6247192339999},{"t":1394323200,"v":638.418612898},{"t":1394409600,"v":629.382},{"t":1394496000,"v":635.03872797},{"t":1394582400,"v":633.854888054},{"t":1394668800,"v":641.6025862160001},{"t":1394755200,"v":629.8350340720001},{"t":1394841600,"v":637.415090218},{"t":1394928000,"v":634.8101052919999},{"t":1395014400,"v":622.84479101},{"t":1395100800,"v":614.438939238},{"t":1395187200,"v":611.19495134},{"t":1395273600,"v":586.953250296},{"t":1395360000,"v":570.012095636},{"t":1395446400,"v":564.545464148},{"t":1395532800,"v":559.690294744},{"t":1395619200,"v":584.911571278},{"t":1395705600,"v":583.845073968},{"t":1395792000,"v":579.087233466},{"t":1395878400,"v":472.14433733800007},{"t":1395964800,"v":501.09610014200007},{"t":1396051200,"v":491.9478371900001},{"t":1396137600,"v":458.77462072399993},{"t":1396224000,"v":457.02355456799995},{"t":1396310400,"v":479.31229068600004},{"t":1396396800,"v":439.626726544},{"t":1396483200,"v":449.53955801},{"t":1396569600,"v":451.900550232},{"t":1396656000,"v":463.62556298400006},{"t":1396742400,"v":457.883594364},{"t":1396828800,"v":448.95518037},{"t":1396915200,"v":453.33637541999997},{"t":1397001600,"v":443.06191353799994},{"t":1397088000,"v":363.851086082},{"t":1397174400,"v":423.4131448},{"t":1397260800,"v":423.368963092},{"t":1397347200,"v":416.86460415399995},{"t":1397433600,"v":459.09800582400004},{"t":1397520000,"v":522.29491627},{"t":1397606400,"v":527.687720992},{"t":1397692800,"v":498.366678046},{"t":1397779200,"v":482.26565610000006},{"t":1397865600,"v":504.842390182},{"t":1397952000,"v":500.39539342999996},{"t":1398038400,"v":497.251879218},{"t":1398124800,"v":489.99280993799994},{"t":1398211200,"v":492.0000000000001},{"t":1398297600,"v":502.220952572},{"t":1398384000,"v":466.88685158400006},{"t":1398470400,"v":461.04532600000005},{"t":1398556800,"v":434.374768044},{"t":1398643200,"v":442.82037402},{"t":1398729600,"v":448},{"t":1398816000,"v":448.89941997000005},{"t":1398902400,"v":460.70126204400003},{"t":1398988800,"v":454.35562384599996},{"t":1399075200,"v":439.87207680600005},{"t":1399161600,"v":437.933060358},{"t":1399248000,"v":433},{"t":1399334400,"v":428.01000000000005},{"t":1399420800,"v":440.92028681400006},{"t":1399507200,"v":439.0813533279999},{"t":1399593600,"v":451.468934602},{"t":1399680000,"v":456.543988148},{"t":1399766400,"v":439.14571257999995},{"t":1399852800,"v":442.46349},{"t":1399939200,"v":439.10721898599996},{"t":1400025600,"v":445.75451883200003},{"t":1400112000,"v":446.33672478999995},{"t":1400198400,"v":447.269647738},{"t":1400284800,"v":450.0057898},{"t":1400371200,"v":446.898},{"t":1400457600,"v":448.17908049199997},{"t":1400544000,"v":489.19391193599995},{"t":1400630400,"v":493.694430672},{"t":1400716800,"v":529.49782271},{"t":1400803200,"v":523.491528154},{"t":1400889600,"v":528.214489126},{"t":1400976000,"v":573.07334608},{"t":1401062400,"v":583.558250216},{"t":1401148800,"v":573.185524618},{"t":1401235200,"v":580.266611644},{"t":1401321600,"v":570.35},{"t":1401408000,"v":621.18},{"t":1401494400,"v":627.3743539159999},{"t":1401580800,"v":629.8553311400001},{"t":1401667200,"v":662.0855888839999},{"t":1401753600,"v":669.938043516},{"t":1401840000,"v":642.357380702},{"t":1401926400,"v":661.48},{"t":1402012800,"v":649.0938278240001},{"t":1402099200,"v":657.122319458},{"t":1402185600,"v":657.9504511279999},{"t":1402272000,"v":648.3175507240001},{"t":1402358400,"v":648.549935972},{"t":1402444800,"v":622.5026906339999},{"t":1402531200,"v":571.006454714},{"t":1402617600,"v":591.983880914},{"t":1402704000,"v":568.1956108239999},{"t":1402790400,"v":590.40657709},{"t":1402876800,"v":586.980456142},{"t":1402963200,"v":606.443230048},{"t":1403049600,"v":607},{"t":1403136000,"v":593.11789317},{"t":1403222400,"v":588.950932812},{"t":1403308800,"v":589.036790108},{"t":1403395200,"v":600.0404249320001},{"t":1403481600,"v":588.193980926},{"t":1403568000,"v":573.3281355759999},{"t":1403654400,"v":560.4947890579999},{"t":1403740800,"v":579.622750878},{"t":1403827200,"v":599.929629306},{"t":1403913600,"v":590.5955207659999},{"t":1404000000,"v":599.89},{"t":1404086400,"v":638.68650652},{"t":1404172800,"v":639.157792748},{"t":1404259200,"v":650.071232986},{"t":1404345600,"v":646.6670635520001},{"t":1404432000,"v":627.258726514},{"t":1404518400,"v":630.747663504},{"t":1404604800,"v":631.4238304700001},{"t":1404691200,"v":622.774120722},{"t":1404777600,"v":624.2982841780001},{"t":1404864000,"v":621.8734082320001},{"t":1404950400,"v":616.775924134},{"t":1405036800,"v":634.129679252},{"t":1405123200,"v":636.46644725},{"t":1405209600,"v":630.5449909639999},{"t":1405296000,"v":619.701223542},{"t":1405382400,"v":623.5592835140001},{"t":1405468800,"v":615.9106732139999},{"t":1405555200,"v":623.7643585440001},{"t":1405641600,"v":631.42881345},{"t":1405728000,"v":629.726},{"t":1405814400,"v":625.846605424},{"t":1405900800,"v":621.830136434},{"t":1405987200,"v":619.567647252},{"t":1406073600,"v":619.926984708},{"t":1406160000,"v":603.820880232},{"t":1406246400,"v":602.8812411219999},{"t":1406332800,"v":595.95700884},{"t":1406419200,"v":591.9597686699999},{"t":1406505600,"v":589.3779206380001},{"t":1406592000,"v":585.1045461199999},{"t":1406678400,"v":563.3470577280001},{"t":1406764800,"v":582.037732788},{"t":1406851200,"v":598.2},{"t":1406937600,"v":589.306},{"t":1407024000,"v":586.489508506},{"t":1407110400,"v":588.479331236},{"t":1407196800,"v":580.340990122},{"t":1407283200,"v":582.416533308},{"t":1407369600,"v":584.81249954},{"t":1407456000,"v":588.78812401},{"t":1407542400,"v":589.242055856},{"t":1407628800,"v":590.785817632},{"t":1407715200,"v":573.9565111500001},{"t":1407801600,"v":567.831212848},{"t":1407888000,"v":549.790349374},{"t":1407974400,"v":507.38701780400004},{"t":1408060800,"v":501.237741262},{"t":1408147200,"v":522.748127092},{"t":1408233600,"v":498.22564087800004},{"t":1408320000,"v":473.215708716},{"t":1408406400,"v":491.00693467},{"t":1408492800,"v":518.0240521100001},{"t":1408579200,"v":520.3913133},{"t":1408665600,"v":514.794876152},{"t":1408752000,"v":496.190259712},{"t":1408838400,"v":507.644099696},{"t":1408924800,"v":503.1851232},{"t":1409011200,"v":513.621734654},{"t":1409097600,"v":511.792230472},{"t":1409184000,"v":506.53819895799995},{"t":1409270400,"v":509.04553304800004},{"t":1409356800,"v":501.001790512},{"t":1409443200,"v":478.87886742800004},{"t":1409529600,"v":475.34660947400005},{"t":1409616000,"v":473.803368534},{"t":1409702400,"v":474.54419272800004},{"t":1409788800,"v":488.60745904},{"t":1409875200,"v":477.642145722},{"t":1409961600,"v":479.74170882},{"t":1410048000,"v":476.11974577},{"t":1410134400,"v":468.030480732},{"t":1410220800,"v":473.375732486},{"t":1410307200,"v":477.60737498399993},{"t":1410393600,"v":477.41388296800005},{"t":1410480000,"v":474.19739259},{"t":1410566400,"v":477.127472342},{"t":1410652800,"v":474.606315074},{"t":1410739200,"v":469.57152418},{"t":1410825600,"v":463.2017233959999},{"t":1410912000,"v":452.3290782179999},{"t":1410998400,"v":425.668635086},{"t":1411084800,"v":395.737689734},{"t":1411171200,"v":410.71515540999997},{"t":1411257600,"v":400.465411766},{"t":1411344000,"v":399.134149668},{"t":1411430400,"v":439.4156581540001},{"t":1411516800,"v":423.56804793000003},{"t":1411603200,"v":409.347515356},{"t":1411689600,"v":404.57418751600005},{"t":1411776000,"v":400.686514188},{"t":1411862400,"v":375.303150224},{"t":1411948800,"v":373.990622608},{"t":1412035200,"v":390.18710973000003},{"t":1412121600,"v":383.94373517800005},{"t":1412208000,"v":375.4928339},{"t":1412294400,"v":357.362980336},{"t":1412380800,"v":326.642468598},{"t":1412467200,"v":323.055049424},{"t":1412553600,"v":328.049174812},{"t":1412640000,"v":334.404218494},{"t":1412726400,"v":355.992247346},{"t":1412812800,"v":364.556226584},{"t":1412899200,"v":360.938671886},{"t":1412985600,"v":362.43268194600006},{"t":1413072000,"v":379.54423350800005},{"t":1413158400,"v":392.32550615599996},{"t":1413244800,"v":402.42857203799997},{"t":1413331200,"v":394.09448195199997},{"t":1413417600,"v":383.085283296},{"t":1413504000,"v":383.06091965599995},{"t":1413590400,"v":390.75379734},{"t":1413676800,"v":388.575872572},{"t":1413763200,"v":381.35682622},{"t":1413849600,"v":385.846074676},{"t":1413936000,"v":382.43631932},{"t":1414022400,"v":356.566155236},{"t":1414108800,"v":358.1904358080001},{"t":1414195200,"v":348.157435614},{"t":1414281600,"v":355.021491172},{"t":1414368000,"v":350.983183486},{"t":1414454400,"v":355.774005564},{"t":1414540800,"v":335.093284832},{"t":1414627200,"v":346.12152948600004},{"t":1414713600,"v":337.813393346},{"t":1414800000,"v":324.573484356},{"t":1414886400,"v":324.36579329},{"t":1414972800,"v":325.965872218},{"t":1415059200,"v":330.07754074400003},{"t":1415145600,"v":338.002215156},{"t":1415232000,"v":349.912207048},{"t":1415318400,"v":342.135011436},{"t":1415404800,"v":345.74628679},{"t":1415491200,"v":365.563844488},{"t":1415577600,"v":365.87042619199997},{"t":1415664000,"v":369.81496743400004},{"t":1415750400,"v":424.36606007599994},{"t":1415836800,"v":420.47480877199996},{"t":1415923200,"v":399.50063883800004},{"t":1416009600,"v":376.62900497399994},{"t":1416096000,"v":389.797810122},{"t":1416182400,"v":388.358},{"t":1416268800,"v":375.089345896},{"t":1416355200,"v":378.896020706},{"t":1416441600,"v":356.462709068},{"t":1416528000,"v":350.462287766},{"t":1416614400,"v":353.31120368},{"t":1416700800,"v":367.699086678},{"t":1416787200,"v":375.8525662779999},{"t":1416873600,"v":376.590034426},{"t":1416960000,"v":367.557562668},{"t":1417046400,"v":369.65427477400004},{"t":1417132800,"v":376.849520466},{"t":1417219200,"v":375.88472041},{"t":1417305600,"v":376.68151586399995},{"t":1417392000,"v":376.62900668896464},{"t":1417478400,"v":379.06941206171257},{"t":1417564800,"v":375.55602754682644},{"t":1417651200,"v":369.19470388},{"t":1417737600,"v":376},{"t":1417824000,"v":375.01795153800003},{"t":1417910400,"v":377.14578302999996},{"t":1417996800,"v":361.6342622220001},{"t":1418083200,"v":351.90854790399993},{"t":1418169600,"v":346.959745012},{"t":1418256000,"v":348.921944692},{"t":1418342400,"v":352.869712602},{"t":1418428800,"v":350.961507326},{"t":1418515200,"v":357.141899984},{"t":1418601600,"v":348.08186068599997},{"t":1418688000,"v":328.90113902},{"t":1418774400,"v":321.598493206},{"t":1418860800,"v":312.28177588799997},{"t":1418947200,"v":318.544134062},{"t":1419033600,"v":331.49050168199994},{"t":1419120000,"v":320.556787554},{"t":1419206400,"v":331.997882986},{"t":1419292800,"v":336.522172414},{"t":1419379200,"v":322.522},{"t":1419465600,"v":319.693281002},{"t":1419552000,"v":329.31228121600003},{"t":1419638400,"v":316.209387338},{"t":1419724800,"v":317.59399999999994},{"t":1419811200,"v":312.45850041200003},{"t":1419897600,"v":311.43002015},{"t":1419984000,"v":320.992712128},{"t":1420070400,"v":314.025456318},{"t":1420156800,"v":315.687160984},{"t":1420243200,"v":283.00653515},{"t":1420329600,"v":263.80788251599995},{"t":1420416000,"v":276.8},{"t":1420502400,"v":276.8},{"t":1420588800,"v":276.8},{"t":1420675200,"v":284.2775},{"t":1420761600,"v":293.956460672},{"t":1420848000,"v":275.178914552},{"t":1420934400,"v":265.104599912},{"t":1421020800,"v":267.0091753},{"t":1421107200,"v":226.23151002694604},{"t":1421193600,"v":172.2093361644184},{"t":1421280000,"v":210.22205401982146},{"t":1421366400,"v":207.400753385583},{"t":1421452800,"v":199.71335481},{"t":1421539200,"v":211.933325656},{"t":1421625600,"v":216.21354573944032},{"t":1421712000,"v":211.21436810323002},{"t":1421798400,"v":227.3673392702163},{"t":1421884800,"v":233.0832877620321},{"t":1421971200,"v":233.64693715257727},{"t":1422057600,"v":249.34753805699575},{"t":1422144000,"v":254.56624312740095},{"t":1422230400,"v":274.3673394383924},{"t":1422316800,"v":263.8566599952122},{"t":1422403200,"v":235.52673814242775},{"t":1422489600,"v":235.37804606435822},{"t":1422576000,"v":228.47145635184606},{"t":1422662400,"v":218.1833214083741},{"t":1422748800,"v":227.6223232278307},{"t":1422835200,"v":237.9709054988361},{"t":1422921600,"v":227.6791825345782},{"t":1423008000,"v":227.08019879655745},{"t":1423094400,"v":216.85577466626742},{"t":1423180800,"v":222.78397787291473},{"t":1423267200,"v":229.00185702084914},{"t":1423353600,"v":223.96367191496202},{"t":1423440000,"v":221.00423895534863},{"t":1423526400,"v":220.600396870975},{"t":1423612800,"v":219.72851613123763},{"t":1423699200,"v":222.82890337317286},{"t":1423785600,"v":236.80501885043395},{"t":1423872000,"v":257.0310272347365},{"t":1423958400,"v":235.04578132021575},{"t":1424044800,"v":234.52568993572527},{"t":1424131200,"v":244.70220039160876},{"t":1424217600,"v":237.4602610895538},{"t":1424304000,"v":241.46005745043004},{"t":1424390400,"v":245.34212468697484},{"t":1424476800,"v":245.57855416287262},{"t":1424563200,"v":236.45729496468238},{"t":1424649600,"v":239.22513276094452},{"t":1424736000,"v":239.84104232259955},{"t":1424822400,"v":238.1139375509444},{"t":1424908800,"v":237.0798280600164},{"t":1424995200,"v":253.82688189441114},{"t":1425081600,"v":253.69150938477878},{"t":1425168000,"v":258.7270505768632},{"t":1425254400,"v":276.09280051627326},{"t":1425340800,"v":282.47608809215455},{"t":1425427200,"v":272.0490118612828},{"t":1425513600,"v":275.79883665960716},{"t":1425600000,"v":273.04917469043914},{"t":1425686400,"v":276.87809766906935},{"t":1425772800,"v":275.2790516535126},{"t":1425859200,"v":288.21420611712483},{"t":1425945600,"v":292.4491012592292},{"t":1426032000,"v":296.5324948519402},{"t":1426118400,"v":295.8481806574898},{"t":1426204800,"v":285.6382567507711},{"t":1426291200,"v":283.2459863615356},{"t":1426377600,"v":287.2991907259144},{"t":1426464000,"v":291.34814111759096},{"t":1426550400,"v":286.2368092015699},{"t":1426636800,"v":258.19452903790227},{"t":1426723200,"v":262.2621084126871},{"t":1426809600,"v":263.0544217347894},{"t":1426896000,"v":261.3618035693705},{"t":1426982400,"v":268.2085121177197},{"t":1427068800,"v":266.23292063440385},{"t":1427155200,"v":245.67390713063523},{"t":1427241600,"v":246.89425507312757},{"t":1427328000,"v":249.57019468149684},{"t":1427414400,"v":247.87280676889836},{"t":1427500800,"v":253.40005072568178},{"t":1427587200,"v":243.3137110161505},{"t":1427673600,"v":248.42738942036203},{"t":1427760000,"v":244.57664205222832},{"t":1427846400,"v":247.63303657656542},{"t":1427932800,"v":253.95538646766772},{"t":1428019200,"v":254.88683613841857},{"t":1428105600,"v":253.99292625441475},{"t":1428192000,"v":261.2126187518514},{"t":1428278400,"v":256.42207301291876},{"t":1428364800,"v":253.9894885279104},{"t":1428451200,"v":245.8480735401531},{"t":1428537600,"v":244.61592088577717},{"t":1428624000,"v":236.51085470525223},{"t":1428710400,"v":236.77240091579887},{"t":1428796800,"v":236.47709775061168},{"t":1428883200,"v":224.97651532966492},{"t":1428969600,"v":219.38748621905415},{"t":1429056000,"v":223.8348000035629},{"t":1429142400,"v":227.870378726502},{"t":1429228800,"v":223.0841719013738},{"t":1429315200,"v":223.5865237125548},{"t":1429401600,"v":223.56744726495444},{"t":1429488000,"v":225.2184300872037},{"t":1429574400,"v":235.52102469647576},{"t":1429660800,"v":233.7009634608557},{"t":1429747200,"v":236.16353681713173},{"t":1429833600,"v":231.02053372487694},{"t":1429920000,"v":226.58547994375857},{"t":1430006400,"v":221.05379960481326},{"t":1430092800,"v":227.44977115968467},{"t":1430179200,"v":225.3984377539342},{"t":1430265600,"v":225.6405442418366},{"t":1430352000,"v":236.70311574991769},{"t":1430438400,"v":232.7740205181823},{"t":1430524800,"v":234.4547062686378},{"t":1430611200,"v":239.8453986375642},{"t":1430697600,"v":239.2673350149646},{"t":1430784000,"v":236.2114911026119},{"t":1430870400,"v":229.65578168538187},{"t":1430956800,"v":237.41283096784377},{"t":1431043200,"v":244.33760132386223},{"t":1431129600,"v":242.61964510761345},{"t":1431216000,"v":240.84372690869867},{"t":1431302400,"v":241.6363056849018},{"t":1431388800,"v":241.3522020526193},{"t":1431475200,"v":236.34631682189985},{"t":1431561600,"v":237.2065240952482},{"t":1431648000,"v":237.88739720451107},{"t":1431734400,"v":236.39271552739993},{"t":1431820800,"v":236.67925526699733},{"t":1431907200,"v":233.59070718131207},{"t":1431993600,"v":231.94833933961522},{"t":1432080000,"v":234.39819597114405},{"t":1432166400,"v":235.60389444679782},{"t":1432252800,"v":239.8753072751549},{"t":1432339200,"v":238.7335530263541},{"t":1432425600,"v":240.2080085180499},{"t":1432512000,"v":236.59160604779555},{"t":1432598400,"v":236.25099422574218},{"t":1432684800,"v":237.03972228175166},{"t":1432771200,"v":237.16309622469356},{"t":1432857600,"v":236.45937825027846},{"t":1432944000,"v":233.42921780934725},{"t":1433030400,"v":229.87046265828167},{"t":1433116800,"v":223.56821041088014},{"t":1433203200,"v":225.49709536567593},{"t":1433289600,"v":225.56818189200266},{"t":1433376000,"v":223.93542023042738},{"t":1433462400,"v":224.59609382064255},{"t":1433548800,"v":225.06047468964124},{"t":1433635200,"v":223.50816929894273},{"t":1433721600,"v":228.7738683609431},{"t":1433808000,"v":229.00326077961145},{"t":1433894400,"v":228.5646397876235},{"t":1433980800,"v":229.32148022612697},{"t":1434067200,"v":229.3949082185111},{"t":1434153600,"v":232.99016074834827},{"t":1434240000,"v":232.2732607782773},{"t":1434326400,"v":236.5940075448309},{"t":1434412800,"v":250.88443111466125},{"t":1434499200,"v":248.91023822223178},{"t":1434585600,"v":248.9536229545178},{"t":1434672000,"v":244.4347548506766},{"t":1434758400,"v":246.03594777095446},{"t":1434844800,"v":244.2264603457139},{"t":1434931200,"v":246.9779718291997},{"t":1435017600,"v":244.36086832501388},{"t":1435104000,"v":240.1896323677801},{"t":1435190400,"v":242.4657489591529},{"t":1435276800,"v":242.94756980246657},{"t":1435363200,"v":251.49174712609874},{"t":1435449600,"v":248.8923275300042},{"t":1435536000,"v":256.91585700923576},{"t":1435622400,"v":263.2627227196955},{"t":1435708800,"v":258.33938010023616},{"t":1435795200,"v":254.7397570388532},{"t":1435881600,"v":256.2885206258173},{"t":1435968000,"v":260.35848089066934},{"t":1436054400,"v":271.63960764862867},{"t":1436140800,"v":269.0768488345606},{"t":1436227200,"v":265.8951663337417},{"t":1436313600,"v":270.6944467211694},{"t":1436400000,"v":269.4970385701621},{"t":1436486400,"v":285.98871451527094},{"t":1436572800,"v":292.3726314342531},{"t":1436659200,"v":312.0321590438759},{"t":1436745600,"v":292.8213347492119},{"t":1436832000,"v":287.35782996192245},{"t":1436918400,"v":285.53537250271336},{"t":1437004800,"v":278.4261692588851},{"t":1437091200,"v":279.9105836013045},{"t":1437177600,"v":276.9949239987578},{"t":1437264000,"v":275.3879562178301},{"t":1437350400,"v":279.74386880723625},{"t":1437436800,"v":276.97419614546396},{"t":1437523200,"v":277.86794799515405},{"t":1437609600,"v":277.25297528994145},{"t":1437696000,"v":289.1761070018832},{"t":1437782400,"v":289.16803970564604},{"t":1437868800,"v":293.1260382264218},{"t":1437955200,"v":294.2216879969626},{"t":1438041600,"v":295.18419440658045},{"t":1438128000,"v":290.17602216358387},{"t":1438214400,"v":288.1899783743672},{"t":1438300800,"v":284.8233479578995},{"t":1438387200,"v":281.53847313579416},{"t":1438473600,"v":282.28631492499073},{"t":1438560000,"v":280.8324962243669},{"t":1438646400,"v":285.17892466424576},{"t":1438732800,"v":281.77046029724886},{"t":1438819200,"v":278.3535861876579},{"t":1438905600,"v":279.4942602464934},{"t":1438992000,"v":262.05419732600524},{"t":1439078400,"v":267.51328940994455},{"t":1439164800,"v":264.79175529822226},{"t":1439251200,"v":271.7186639460532},{"t":1439337600,"v":267.34646970647646},{"t":1439424000,"v":264.50015113146185},{"t":1439510400,"v":265.984485481529},{"t":1439596800,"v":262.3268821607181},{"t":1439683200,"v":258.48440125819116},{"t":1439769600,"v":256.64789609100364},{"t":1439856000,"v":222.30928824760167},{"t":1439942400,"v":227.40809004507705},{"t":1440028800,"v":235.53136721991592},{"t":1440115200,"v":233.03390533616795},{"t":1440201600,"v":231.08649547071286},{"t":1440288000,"v":228.8419084678968},{"t":1440374400,"v":211.04029812016228},{"t":1440460800,"v":223.11452108192162},{"t":1440547200,"v":226.1075134092342},{"t":1440633600,"v":225.56237052087312},{"t":1440720000,"v":231.52008387831285},{"t":1440806400,"v":230.1742717846294},{"t":1440892800,"v":228.8670732204802},{"t":1440979200,"v":230.59809103226553},{"t":1441065600,"v":228.0608584854554},{"t":1441152000,"v":229.3621245778932},{"t":1441238400,"v":227.23996193137782},{"t":1441324800,"v":231.25430337632557},{"t":1441411200,"v":236.0671291026174},{"t":1441497600,"v":240.68976830398393},{"t":1441584000,"v":241.02145890795947},{"t":1441670400,"v":244.23028202966935},{"t":1441756800,"v":238.64699669387738},{"t":1441843200,"v":238.65631371778696},{"t":1441929600,"v":240.72803507045546},{"t":1442016000,"v":235.38640084032153},{"t":1442102400,"v":230.2314716349509},{"t":1442188800,"v":230.66681987336318},{"t":1442275200,"v":230.18311924399845},{"t":1442361600,"v":229.2495574632945},{"t":1442448000,"v":232.7716151933546},{"t":1442534400,"v":233.45600185429976},{"t":1442620800,"v":231.72953491596854},{"t":1442707200,"v":230.68535720681675},{"t":1442793600,"v":226.6662632336626},{"t":1442880000,"v":230.61068690263542},{"t":1442966400,"v":229.82978513470525},{"t":1443052800,"v":234.4753888262895},{"t":1443139200,"v":235.2908548005521},{"t":1443225600,"v":234.5934120623101},{"t":1443312000,"v":233.18068434946878},{"t":1443398400,"v":239.47488643573993},{"t":1443484800,"v":237.09198320316509},{"t":1443571200,"v":236.85368796707021},{"t":1443657600,"v":237.82075625088078},{"t":1443744000,"v":238.17530073042212},{"t":1443830400,"v":239.56040132076637},{"t":1443916800,"v":239.33481153938868},{"t":1444003200,"v":240.78453591961664},{"t":1444089600,"v":246.77201716769088},{"t":1444176000,"v":243.30663642926592},{"t":1444262400,"v":242.9524075126918},{"t":1444348800,"v":244.4255139081272},{"t":1444435200,"v":245.9098072068554},{"t":1444521600,"v":248.94019306744676},{"t":1444608000,"v":246.20617221314052},{"t":1444694400,"v":250.0391563717686},{"t":1444780800,"v":253.12203079360424},{"t":1444867200,"v":254.63318166842015},{"t":1444953600,"v":262.78453429548875},{"t":1445040000,"v":272.5708393360872},{"t":1445126400,"v":264.1076345503976},{"t":1445212800,"v":264.3202634396505},{"t":1445299200,"v":270.7099906978552},{"t":1445385600,"v":268.24522907122025},{"t":1445472000,"v":275.55908332825675},{"t":1445558400,"v":278.69805077486205},{"t":1445644800,"v":283.6091613210242},{"t":1445731200,"v":284.26263600676805},{"t":1445817600,"v":286.86547456086225},{"t":1445904000,"v":295.20093312413206},{"t":1445990400,"v":304.80745035505936},{"t":1446076800,"v":315.21087607896385},{"t":1446163200,"v":328.9191848346569},{"t":1446249600,"v":312.10899213735587},{"t":1446336000,"v":328.4881524558023},{"t":1446422400,"v":362.95298972072004},{"t":1446508800,"v":403.60760015527967},{"t":1446595200,"v":408.40316317328046},{"t":1446681600,"v":385.71264935145183},{"t":1446768000,"v":374.44139240597144},{"t":1446854400,"v":385.76265790586126},{"t":1446940800,"v":372.86695374186934},{"t":1447027200,"v":378.95059536527606},{"t":1447113600,"v":335.79636717053035},{"t":1447200000,"v":310.2309524422893},{"t":1447286400,"v":338.6393034805578},{"t":1447372800,"v":337.0562129246183},{"t":1447459200,"v":333.439122539814},{"t":1447545600,"v":320.3207315551851},{"t":1447632000,"v":331.7085679802535},{"t":1447718400,"v":336.27064502172516},{"t":1447804800,"v":334.72243230786967},{"t":1447891200,"v":326.57191468523297},{"t":1447977600,"v":321.82747201497375},{"t":1448064000,"v":326.3387576784565},{"t":1448150400,"v":323.80777196175893},{"t":1448236800,"v":323.11211587743236},{"t":1448323200,"v":320.2786544058803},{"t":1448409600,"v":328.95709929189985},{"t":1448496000,"v":352.9815835414223},{"t":1448582400,"v":357.7679405226297},{"t":1448668800,"v":356.5316287061623},{"t":1448755200,"v":371.56062339708836},{"t":1448841600,"v":376.9796965739912},{"t":1448928000,"v":362.9135153696589},{"t":1449014400,"v":359.36565308034005},{"t":1449100800,"v":361.4880907867144},{"t":1449187200,"v":363.6694300330024},{"t":1449273600,"v":387.8975263902973},{"t":1449360000,"v":387.6737772689671},{"t":1449446400,"v":394.81581788008197},{"t":1449532800,"v":416.94368780430784},{"t":1449619200,"v":417.5696303375327},{"t":1449705600,"v":415.39939616850705},{"t":1449792000,"v":453.1305854150825},{"t":1449878400,"v":436.75298646387876},{"t":1449964800,"v":433.3545154611923},{"t":1450051200,"v":443.8590702689776},{"t":1450137600,"v":463.9822589592027},{"t":1450224000,"v":454.06528884560765},{"t":1450310400,"v":455.8338169637597},{"t":1450396800,"v":463.12910763070374},{"t":1450483200,"v":461.44159724790654},{"t":1450569600,"v":442.29881918198953},{"t":1450656000,"v":437.2047325783519},{"t":1450742400,"v":434.6732117942569},{"t":1450828800,"v":442.41482089884613},{"t":1450915200,"v":455.74013016062173},{"t":1451001600,"v":455.85591512491953},{"t":1451088000,"v":418.47369385302943},{"t":1451174400,"v":422.2507205514291},{"t":1451260800,"v":421.6523204183636},{"t":1451347200,"v":432.94242916990527},{"t":1451433600,"v":426.97325638352305},{"t":1451520000,"v":430.21143265315385},{"t":1451606400,"v":434.8839824640039},{"t":1451692800,"v":434.92242033909116},{"t":1451779200,"v":430.9997978270536},{"t":1451865600,"v":433.90199131687206},{"t":1451952000,"v":433.16659869576245},{"t":1452038400,"v":429.9253492492494},{"t":1452124800,"v":458.7099236879629},{"t":1452211200,"v":454.05328330860004},{"t":1452297600,"v":449.69718279879146},{"t":1452384000,"v":448.95363526897563},{"t":1452470400,"v":448.69524978182716},{"t":1452556800,"v":435.48555090765376},{"t":1452643200,"v":432.6577823362845},{"t":1452729600,"v":430.0250259843386},{"t":1452816000,"v":362.4305504507852},{"t":1452902400,"v":388.1881730585918},{"t":1452988800,"v":379.148748639874},{"t":1453075200,"v":384.928918248786},{"t":1453161600,"v":376.7663108392438},{"t":1453248000,"v":419.22525017175093},{"t":1453334400,"v":409.26809902414743},{"t":1453420800,"v":383.29492881453876},{"t":1453507200,"v":386.9158595464536},{"t":1453593600,"v":402.8010750231029},{"t":1453680000,"v":391.1212623042642},{"t":1453766400,"v":391.6668140869515},{"t":1453852800,"v":394.4466804448489},{"t":1453939200,"v":379.75057770315664},{"t":1454025600,"v":378.6405195412309},{"t":1454112000,"v":377.3488875787101},{"t":1454198400,"v":367.9508595508954},{"t":1454284800,"v":371.37052319412066},{"t":1454371200,"v":372.96226926144027},{"t":1454457600,"v":368.53490319794935},{"t":1454544000,"v":388.09502866803325},{"t":1454630400,"v":383.9341258581022},{"t":1454716800,"v":375.22738704758757},{"t":1454803200,"v":376.42862922366214},{"t":1454889600,"v":371.21694243336185},{"t":1454976000,"v":372.7623707800957},{"t":1455062400,"v":378.95173421310903},{"t":1455148800,"v":378.14838162107424},{"t":1455235200,"v":382.39209701651856},{"t":1455321600,"v":390.65036662988143},{"t":1455408000,"v":406.5740594276338},{"t":1455494400,"v":398.8081586422428},{"t":1455580800,"v":407.238241647739},{"t":1455667200,"v":414.8979246844353},{"t":1455753600,"v":421.16569563372616},{"t":1455840000,"v":420.44353590336175},{"t":1455926400,"v":434.6179274199626},{"t":1456012800,"v":438.47243072984276},{"t":1456099200,"v":437.4889589178774},{"t":1456185600,"v":419.61022318481594},{"t":1456272000,"v":423.851263269437},{"t":1456358400,"v":423.5093989250703},{"t":1456444800,"v":430.6719637219394},{"t":1456531200,"v":432.1432341275273},{"t":1456617600,"v":431.5065287388273},{"t":1456704000,"v":436.4222492894298},{"t":1456790400,"v":433.2277035606563},{"t":1456876800,"v":420.12615262177826},{"t":1456963200,"v":419.31158198959054},{"t":1457049600,"v":407.2361243772178},{"t":1457136000,"v":398.50243239160943},{"t":1457222400,"v":404.6277893211019},{"t":1457308800,"v":412.8005827105356},{"t":1457395200,"v":411.4093473295935},{"t":1457481600,"v":412.59964953173085},{"t":1457568000,"v":415.96573582904114},{"t":1457654400,"v":419.64531649745595},{"t":1457740800,"v":410.139940852359},{"t":1457827200,"v":412.61530446772593},{"t":1457913600,"v":415.05435298344673},{"t":1458000000,"v":415.4742785335744},{"t":1458086400,"v":416.2381856412929},{"t":1458172800,"v":418.5086720041087},{"t":1458259200,"v":409.2494736684257},{"t":1458345600,"v":409.6114015305549},{"t":1458432000,"v":411.66829833103867},{"t":1458518400,"v":411.7585748667672},{"t":1458604800,"v":416.54761875463345},{"t":1458691200,"v":417.53883195340177},{"t":1458777600,"v":412.68391467188684},{"t":1458864000,"v":416.3595573150922},{"t":1458950400,"v":416.92298328256874},{"t":1459036800,"v":425.01140597187987},{"t":1459123200,"v":422.6782895074445},{"t":1459209600,"v":416.1195712728422},{"t":1459296000,"v":413.08440509498695},{"t":1459382400,"v":415.55633232669516},{"t":1459468800,"v":417.1655761916554},{"t":1459555200,"v":419.7207145718917},{"t":1459641600,"v":419.82532399189205},{"t":1459728000,"v":419.362325459036},{"t":1459814400,"v":422.2472808455297},{"t":1459900800,"v":421.31238406636857},{"t":1459987200,"v":421.15249323824656},{"t":1460073600,"v":418.70082480212614},{"t":1460160000,"v":419.1189017501917},{"t":1460246400,"v":422.06377504107894},{"t":1460332800,"v":423.44435415721694},{"t":1460419200,"v":426.77208468908714},{"t":1460505600,"v":424.9491271718547},{"t":1460592000,"v":425.73829926128775},{"t":1460678400,"v":430.41062868258484},{"t":1460764800,"v":433.2765036183376},{"t":1460851200,"v":428.91892249032605},{"t":1460937600,"v":429.62552571146455},{"t":1461024000,"v":436.6868552636164},{"t":1461110400,"v":442.45631725659206},{"t":1461196800,"v":451.6680756279053},{"t":1461283200,"v":448.09023328498296},{"t":1461369600,"v":455.48689847015464},{"t":1461456000,"v":462.25317862898964},{"t":1461542400,"v":464.57983400980066},{"t":1461628800,"v":469.6017137637834},{"t":1461715200,"v":444.59813801158623},{"t":1461801600,"v":451.7265497426921},{"t":1461888000,"v":457.444408673028},{"t":1461974400,"v":453.35807263852155},{"t":1462060800,"v":454.3377402582147},{"t":1462147200,"v":445.729278648282},{"t":1462233600,"v":451.501854947788},{"t":1462320000,"v":448.00193740466904},{"t":1462406400,"v":449.2282265593353},{"t":1462492800,"v":460.9599712723831},{"t":1462579200,"v":461.138059959326},{"t":1462665600,"v":461.5625344457377},{"t":1462752000,"v":463.8478179625745},{"t":1462838400,"v":452.38923924080063},{"t":1462924800,"v":454.46139296844393},{"t":1463011200,"v":455.53856203692703},{"t":1463097600,"v":457.60834697826897},{"t":1463184000,"v":458.44491586756294},{"t":1463270400,"v":460.9721197500823},{"t":1463356800,"v":454.6210663380606},{"t":1463443200,"v":453.84373845479075},{"t":1463529600,"v":454.9559643049547},{"t":1463616000,"v":438.5470537052079},{"t":1463702400,"v":445.21445461964197},{"t":1463788800,"v":445.7950017281727},{"t":1463875200,"v":441.11737178700224},{"t":1463961600,"v":445.09554932369775},{"t":1464048000,"v":445.74600732461613},{"t":1464134400,"v":451.3402890773279},{"t":1464220800,"v":454.08349108848006},{"t":1464307200,"v":470.6678659296852},{"t":1464393600,"v":523.4010670292037},{"t":1464480000,"v":522.4012688892889},{"t":1464566400,"v":531.7697241514386},{"t":1464652800,"v":531.5451114534147},{"t":1464739200,"v":534.929231166291},{"t":1464825600,"v":538.0219157804956},{"t":1464912000,"v":570.0249109843392},{"t":1464998400,"v":574.1044870799856},{"t":1465084800,"v":574.6507220672327},{"t":1465171200,"v":585.2448605161708},{"t":1465257600,"v":578.1194883937324},{"t":1465344000,"v":583.0049348368627},{"t":1465430400,"v":577.0760450769253},{"t":1465516800,"v":579.8212995235086},{"t":1465603200,"v":607.17430380675},{"t":1465689600,"v":671.0887766935982},{"t":1465776000,"v":705.2537025153345},{"t":1465862400,"v":685.1158454197318},{"t":1465948800,"v":697.4923346649625},{"t":1466035200,"v":768.6542678135833},{"t":1466121600,"v":752.9334092068809},{"t":1466208000,"v":757.3416662071204},{"t":1466294400,"v":767.4518264835016},{"t":1466380800,"v":715.3350485677917},{"t":1466467200,"v":667.217531653078},{"t":1466553600,"v":597.5623930748819},{"t":1466640000,"v":627.9657566291881},{"t":1466726400,"v":667.5468611638372},{"t":1466812800,"v":665.7125861193371},{"t":1466899200,"v":633.8908753967772},{"t":1466985600,"v":657.042473154401},{"t":1467072000,"v":647.9137512329382},{"t":1467158400,"v":637.0942855303231},{"t":1467244800,"v":672.6324199351302},{"t":1467331200,"v":677.7523138559045},{"t":1467417600,"v":703.0031427888437},{"t":1467504000,"v":661.439850366025},{"t":1467590400,"v":681.3720236261811},{"t":1467676800,"v":669.5220391628915},{"t":1467763200,"v":677.0219670928782},{"t":1467849600,"v":640.7836172202872},{"t":1467936000,"v":665.8419667000638},{"t":1468022400,"v":657.3184540890006},{"t":1468108800,"v":651.3047799816928},{"t":1468195200,"v":651.1524242489038},{"t":1468281600,"v":665.2699931763912},{"t":1468368000,"v":655.2105758522562},{"t":1468454400,"v":660.2911244612783},{"t":1468540800,"v":666.4306437343722},{"t":1468627200,"v":663.3188356448769},{"t":1468713600,"v":679.8341644292315},{"t":1468800000,"v":675.0654188097517},{"t":1468886400,"v":674.0658044287677},{"t":1468972800,"v":667.3264934261225},{"t":1469059200,"v":667.2942051820498},{"t":1469145600,"v":653.2611166392969},{"t":1469232000,"v":657.7541150361819},{"t":1469318400,"v":660.8986520111177},{"t":1469404800,"v":656.727918956488},{"t":1469491200,"v":654.174462619276},{"t":1469577600,"v":656.6374550331486},{"t":1469664000,"v":654.8738329724555},{"t":1469750400,"v":657.202841742762},{"t":1469836800,"v":655.0710646480535},{"t":1469923200,"v":626.6782449704231},{"t":1470009600,"v":603.0714699772217},{"t":1470096000,"v":541.1173090967804},{"t":1470182400,"v":570.498084933119},{"t":1470268800,"v":584.2871190374406},{"t":1470355200,"v":578.7203581679671},{"t":1470441600,"v":590.6386563792255},{"t":1470528000,"v":594.2242426379976},{"t":1470614400,"v":591.594596271462},{"t":1470700800,"v":585.9862966427914},{"t":1470787200,"v":593.309228099764},{"t":1470873600,"v":586.8243344160251},{"t":1470960000,"v":587.6670928265272},{"t":1471046400,"v":585.6063890254981},{"t":1471132800,"v":572.7941323513933},{"t":1471219200,"v":567.4857481002539},{"t":1471305600,"v":578.4633278459701},{"t":1471392000,"v":573.999199368756},{"t":1471478400,"v":573.6346051922998},{"t":1471564800,"v":573.6856113314623},{"t":1471651200,"v":580.6772171224967},{"t":1471737600,"v":580.2640710660802},{"t":1471824000,"v":584.5310006792232},{"t":1471910400,"v":582.1403915731989},{"t":1471996800,"v":578.8355713317429},{"t":1472083200,"v":575.7225958239035},{"t":1472169600,"v":578.7497338081189},{"t":1472256000,"v":569.4518502062841},{"t":1472342400,"v":575.0956449603555},{"t":1472428800,"v":572.9005311004324},{"t":1472515200,"v":575.264045416163},{"t":1472601600,"v":571.1965360376626},{"t":1472688000,"v":572.5561672481705},{"t":1472774400,"v":575.0009111070633},{"t":1472860800,"v":598.6908473034971},{"t":1472947200,"v":611.4227799559515},{"t":1473033600,"v":606.1033693815909},{"t":1473120000,"v":610.3828471588885},{"t":1473206400,"v":615.0585387829371},{"t":1473292800,"v":627.3697008597358},{"t":1473379200,"v":622.2820047345849},{"t":1473465600,"v":623.2641908171909},{"t":1473552000,"v":606.3234045793001},{"t":1473638400,"v":607.3223156688099},{"t":1473724800,"v":608.2890249240006},{"t":1473811200,"v":608.7350306744854},{"t":1473897600,"v":605.2743670751692},{"t":1473984000,"v":607.7392757581945},{"t":1474070400,"v":606.886534070155},{"t":1474156800,"v":610.9444636865104},{"t":1474243200,"v":608.5191535319566},{"t":1474329600,"v":606.7807663856313},{"t":1474416000,"v":596.5872229886088},{"t":1474502400,"v":595.3638256212346},{"t":1474588800,"v":601.5785021720683},{"t":1474675200,"v":601.0346316912924},{"t":1474761600,"v":600.5018579499821},{"t":1474848000,"v":606.2001855573536},{"t":1474934400,"v":604.6179169458967},{"t":1475020800,"v":604.9065178321194},{"t":1475107200,"v":605.8710149342171},{"t":1475193600,"v":608.9129588326075},{"t":1475280000,"v":615.4437866654439},{"t":1475366400,"v":611.1847244226493},{"t":1475452800,"v":612.7803428472209},{"t":1475539200,"v":608.7535531170712},{"t":1475625600,"v":611.7243118951259},{"t":1475712000,"v":611.3559903041948},{"t":1475798400,"v":617.7007337644986},{"t":1475884800,"v":619.0011133410942},{"t":1475971200,"v":615.6507746403641},{"t":1476057600,"v":617.885270112388},{"t":1476144000,"v":642.0432135326828},{"t":1476230400,"v":635.7951243678986},{"t":1476316800,"v":635.3288217408204},{"t":1476403200,"v":638.0457908025508},{"t":1476489600,"v":636.7173591554766},{"t":1476576000,"v":640.4330294524818},{"t":1476662400,"v":638.2363785568257},{"t":1476748800,"v":635.2516741913081},{"t":1476835200,"v":628.6662997535108},{"t":1476921600,"v":628.7118242328036},{"t":1477008000,"v":630.4802818461595},{"t":1477094400,"v":652.4767975854163},{"t":1477180800,"v":650.3057909224307},{"t":1477267200,"v":648.7729777619805},{"t":1477353600,"v":652.6148720913783},{"t":1477440000,"v":674.1736532731238},{"t":1477526400,"v":687.4780503021145},{"t":1477612800,"v":688.4962938599248},{"t":1477699200,"v":714.0132049999412},{"t":1477785600,"v":697.5440979156243},{"t":1477872000,"v":697.0695553784091},{"t":1477958400,"v":729.7826819595628},{"t":1478044800,"v":742.1366006752444},{"t":1478131200,"v":687.9545124061295},{"t":1478217600,"v":704.0639814357988},{"t":1478304000,"v":705.4952687890394},{"t":1478390400,"v":716.3226858760313},{"t":1478476800,"v":703.0813011748169},{"t":1478563200,"v":710.8930104497259},{"t":1478649600,"v":721.2385791964598},{"t":1478736000,"v":713.3071442331326},{"t":1478822400,"v":716.6398744331848},{"t":1478908800,"v":704.1206813292735},{"t":1478995200,"v":702.3881415369592},{"t":1479081600,"v":704.8674758914456},{"t":1479168000,"v":712.2453422595772},{"t":1479254400,"v":737.3415145062261},{"t":1479340800,"v":730.3281411168742},{"t":1479427200,"v":748.4639181660784},{"t":1479513600,"v":750.7693031371174},{"t":1479600000,"v":729.8329977409578},{"t":1479686400,"v":736.549441363089},{"t":1479772800,"v":748.0008385885615},{"t":1479859200,"v":741.6163279205991},{"t":1479945600,"v":737.6106062205533},{"t":1480032000,"v":739.7574413834575},{"t":1480118400,"v":732.8834415193076},{"t":1480204800,"v":728.8590062573011},{"t":1480291200,"v":729.9131589550252},{"t":1480377600,"v":732.0910705749118},{"t":1480464000,"v":742.370297121118},{"t":1480550400,"v":753.1630525910048},{"t":1480636800,"v":769.78817671816},{"t":1480723200,"v":766.6808823682435},{"t":1480809600,"v":765.0191934692918},{"t":1480896000,"v":751.8443230070479},{"t":1480982400,"v":759.5092488244851},{"t":1481068800,"v":765.0274254944902},{"t":1481155200,"v":767.1251344839858},{"t":1481241600,"v":772.45075208349},{"t":1481328000,"v":775.4348079091958},{"t":1481414400,"v":769.3897794425235},{"t":1481500800,"v":778.2982728836786},{"t":1481587200,"v":777.1148524611921},{"t":1481673600,"v":777.5387069475062},{"t":1481760000,"v":776.1219368298958},{"t":1481846400,"v":780.9259172614201},{"t":1481932800,"v":788.9255361334598},{"t":1482019200,"v":790.4343388020021},{"t":1482105600,"v":790.9863472149785},{"t":1482192000,"v":799.2034682736746},{"t":1482278400,"v":833.3000276324859},{"t":1482364800,"v":857.6320329591081},{"t":1482451200,"v":916.2689181350572},{"t":1482537600,"v":892.4642177832177},{"t":1482624000,"v":894.8863982560963},{"t":1482710400,"v":901.3421392502881},{"t":1482796800,"v":927.8784235549241},{"t":1482883200,"v":978.6706323804319},{"t":1482969600,"v":970.5916246961866},{"t":1483056000,"v":960.9125488129987},{"t":1483142400,"v":967.7422560147834},{"t":1483228800,"v":995.9339491996291},{"t":1483315200,"v":1014.3551444208006},{"t":1483401600,"v":1024.4356274214406},{"t":1483488000,"v":1120.5665806362429},{"t":1483574400,"v":1002.9225429218841},{"t":1483660800,"v":893.5322212419582},{"t":1483747200,"v":906.0237000544815},{"t":1483833600,"v":920.0144439293053},{"t":1483920000,"v":901.6846047662914},{"t":1484006400,"v":905.3372890525112},{"t":1484092800,"v":788.6627243239802},{"t":1484179200,"v":810.6206346707453},{"t":1484265600,"v":826.8820727986597},{"t":1484352000,"v":824.4725280214013},{"t":1484438400,"v":828.2438456915527},{"t":1484524800,"v":832.2975703857504},{"t":1484611200,"v":905.9891266982038},{"t":1484697600,"v":887.4321969838854},{"t":1484784000,"v":902.51327038944},{"t":1484870400,"v":895.0778348690013},{"t":1484956800,"v":923.9705284416652},{"t":1485043200,"v":926.2267163651608},{"t":1485129600,"v":918.1218197310366},{"t":1485216000,"v":886.5455413735126},{"t":1485302400,"v":897.3617133683149},{"t":1485388800,"v":916.8285986586582},{"t":1485475200,"v":921.5422094299513},{"t":1485561600,"v":924.7673237596504},{"t":1485648000,"v":915.1648754787748},{"t":1485734400,"v":922.0738109942619},{"t":1485820800,"v":968.8802576054234},{"t":1485907200,"v":987.7523632206257},{"t":1485993600,"v":1008.04242305061},{"t":1486080000,"v":1017.4797248413867},{"t":1486166400,"v":1034.9539111460294},{"t":1486252800,"v":1015.6507467246023},{"t":1486339200,"v":1023.1524015508714},{"t":1486425600,"v":1053.850386120103},{"t":1486512000,"v":1053.705061673372},{"t":1486598400,"v":988.412932065044},{"t":1486684800,"v":999.5649259922793},{"t":1486771200,"v":1017.4108314000738},{"t":1486857600,"v":1007.6745400361308},{"t":1486944000,"v":1002.2742943586869},{"t":1487030400,"v":1013.0606096747724},{"t":1487116800,"v":1013.7192202029706},{"t":1487203200,"v":1035.5864430165802},{"t":1487289600,"v":1054.5323358232317},{"t":1487376000,"v":1061.9505209874096},{"t":1487462400,"v":1057.2512244091406},{"t":1487548800,"v":1086.269644280841},{"t":1487635200,"v":1126.8589354029832},{"t":1487721600,"v":1129.850403173692},{"t":1487808000,"v":1176.852176320272},{"t":1487894400,"v":1185.0389520725385},{"t":1487980800,"v":1155.3930852455971},{"t":1488067200,"v":1183.806290863436},{"t":1488153600,"v":1194.828374751376},{"t":1488240000,"v":1195.8369020168036},{"t":1488326400,"v":1228.561442118559},{"t":1488412800,"v":1265.8578469159381},{"t":1488499200,"v":1291.5770036360645},{"t":1488585600,"v":1267.3528520011428},{"t":1488672000,"v":1277.5105061242275},{"t":1488758400,"v":1283.6842084600808},{"t":1488844800,"v":1236.2938477594744},{"t":1488931200,"v":1150.0236036838078},{"t":1489017600,"v":1195.1541699691657},{"t":1489104000,"v":1112.0866738418888},{"t":1489190400,"v":1185.3058442200527},{"t":1489276800,"v":1235.7711375341892},{"t":1489363200,"v":1244.5663616591323},{"t":1489449600,"v":1247.7630042828844},{"t":1489536000,"v":1262.42062405524},{"t":1489622400,"v":1176.9608841733427},{"t":1489708800,"v":1075.7232574298555},{"t":1489795200,"v":968.1089976755732},{"t":1489881600,"v":1018.30455866016},{"t":1489968000,"v":1043.6578375929496},{"t":1490054400,"v":1113.668596508832},{"t":1490140800,"v":1037.2465846063203},{"t":1490227200,"v":1027.283029473309},{"t":1490313600,"v":933.169753947826},{"t":1490400000,"v":961.3879462046255},{"t":1490486400,"v":969.017312400438},{"t":1490572800,"v":1041.3102894200542},{"t":1490659200,"v":1045.4750146764602},{"t":1490745600,"v":1040.4428183683583},{"t":1490832000,"v":1037.7534053277454},{"t":1490918400,"v":1082.7250423311148},{"t":1491004800,"v":1090.4005316487487},{"t":1491091200,"v":1099.0261334054558},{"t":1491177600,"v":1151.1597494764221},{"t":1491264000,"v":1143.029203242978},{"t":1491350400,"v":1133.0626233945623},{"t":1491436800,"v":1193.153771532398},{"t":1491523200,"v":1193.3132640711735},{"t":1491609600,"v":1183.8935053048067},{"t":1491696000,"v":1209.336901236837},{"t":1491782400,"v":1209.8499838383714},{"t":1491868800,"v":1221.5398742759503},{"t":1491955200,"v":1214.4567978728028},{"t":1492041600,"v":1174.836850815525},{"t":1492128000,"v":1172.6691908069777},{"t":1492214400,"v":1177.7152670936362},{"t":1492300800,"v":1164.9733826018726},{"t":1492387200,"v":1189.5375772549985},{"t":1492473600,"v":1201.7158482752238},{"t":1492560000,"v":1210.4839232125657},{"t":1492646400,"v":1235.6649373071261},{"t":1492732800,"v":1249.0561225723527},{"t":1492819200,"v":1241.8951760429159},{"t":1492905600,"v":1250.3472418374583},{"t":1492992000,"v":1256.5417001686506},{"t":1493078400,"v":1278.6417664638177},{"t":1493164800,"v":1294.6780496550286},{"t":1493251200,"v":1346.6851056143641},{"t":1493337600,"v":1350.4576499293476},{"t":1493424000,"v":1354.4069470017698},{"t":1493510400,"v":1383.0539029623956},{"t":1493596800,"v":1425.2481458294692},{"t":1493683200,"v":1465.5810426561522},{"t":1493769600,"v":1526.4207056110508},{"t":1493856000,"v":1554.006848920395},{"t":1493942400,"v":1526.2278035910022},{"t":1494028800,"v":1584.9514134546134},{"t":1494115200,"v":1597.2058531775517},{"t":1494201600,"v":1701.8770462876066},{"t":1494288000,"v":1719.596103326025},{"t":1494374400,"v":1791.2692326528577},{"t":1494460800,"v":1834.8367578988764},{"t":1494547200,"v":1694.4671103687208},{"t":1494633600,"v":1787.7256658652173},{"t":1494720000,"v":1796.7730922386913},{"t":1494806400,"v":1724.769487350055},{"t":1494892800,"v":1738.6013027843976},{"t":1494979200,"v":1803.9774846922924},{"t":1495065600,"v":1891.2189190792064},{"t":1495152000,"v":1966.1600061196114},{"t":1495238400,"v":2052.975727529383},{"t":1495324800,"v":2052.5502115695963},{"t":1495411200,"v":2114.3483953568734},{"t":1495497600,"v":2268.056017841441},{"t":1495584000,"v":2431.179175212533},{"t":1495670400,"v":2331.3462280804974},{"t":1495756800,"v":2272.1649053409087},{"t":1495843200,"v":2078.632375146129},{"t":1495929600,"v":2225.4645712728297},{"t":1496016000,"v":2286.2068610012675},{"t":1496102400,"v":2185.1005053471913},{"t":1496188800,"v":2298.2209745872156},{"t":1496275200,"v":2417.941273911206},{"t":1496361600,"v":2479.5616565385294},{"t":1496448000,"v":2543.8723274892395},{"t":1496534400,"v":2521.845867583053},{"t":1496620800,"v":2695.0334189788464},{"t":1496707200,"v":2873.7969374932436},{"t":1496793600,"v":2701.4140898844944},{"t":1496880000,"v":2803.297016793037},{"t":1496966400,"v":2810.2941602110886},{"t":1497052800,"v":2919.9279707867463},{"t":1497139200,"v":2991.4426584000157},{"t":1497225600,"v":2656.1781794939084},{"t":1497312000,"v":2707.2075876857843},{"t":1497398400,"v":2443.774072635811},{"t":1497484800,"v":2415.092620939786},{"t":1497571200,"v":2485.221578415977},{"t":1497657600,"v":2644.3694299811514},{"t":1497744000,"v":2512.428822086344},{"t":1497830400,"v":2595.047554549299},{"t":1497916800,"v":2734.934233111323},{"t":1498003200,"v":2653.536153083557},{"t":1498089600,"v":2693.67774038443},{"t":1498176000,"v":2687.6564249824446},{"t":1498262400,"v":2568.5925241151367},{"t":1498348800,"v":2501.1788695912824},{"t":1498435200,"v":2419.8281336489827},{"t":1498521600,"v":2565.9955752033557},{"t":1498608000,"v":2554.2217718277343},{"t":1498694400,"v":2537.407710301787},{"t":1498780800,"v":2460.92328207561},{"t":1498867200,"v":2420.539465015463},{"t":1498953600,"v":2508.7110635949434},{"t":1499040000,"v":2543.52055702578},{"t":1499126400,"v":2603.975513520515},{"t":1499212800,"v":2611.9076336687876},{"t":1499299200,"v":2601.1915674691945},{"t":1499385600,"v":2500.606800254712},{"t":1499472000,"v":2559.2909885063527},{"t":1499558400,"v":2505.719367383316},{"t":1499644800,"v":2337.692689997486},{"t":1499731200,"v":2308.5349031275077},{"t":1499817600,"v":2386.6789346825703},{"t":1499904000,"v":2338.834599532397},{"t":1499990400,"v":2218.068399573709},{"t":1500076800,"v":1970.0224148275825},{"t":1500163200,"v":1914.3158613562398},{"t":1500249600,"v":2226.8543703791893},{"t":1500336000,"v":2304.677177796126},{"t":1500422400,"v":2262.4342019699784},{"t":1500508800,"v":2836.4441013378264},{"t":1500595200,"v":2667.799092515772},{"t":1500681600,"v":2828.288843932448},{"t":1500768000,"v":2756.3507669668084},{"t":1500854400,"v":2761.003292649645},{"t":1500940800,"v":2562.1887893065186},{"t":1501027200,"v":2524.004210431266},{"t":1501113600,"v":2662.327736099671},{"t":1501200000,"v":2784.9319075270673},{"t":1501286400,"v":2699.3367794540422},{"t":1501372800,"v":2733.69805187003},{"t":1501459200,"v":2861.355117283544},{"t":1501545600,"v":2731.1154904956556},{"t":1501632000,"v":2700.952019059181},{"t":1501718400,"v":2787.864126953994},{"t":1501804800,"v":2855.544813686132},{"t":1501891200,"v":3246.889857691748},{"t":1501977600,"v":3219.1355141814147},{"t":1502064000,"v":3394.12505196622},{"t":1502150400,"v":3418.0657164880467},{"t":1502236800,"v":3341.931735918988},{"t":1502323200,"v":3432.180554601751},{"t":1502409600,"v":3651.952159554108},{"t":1502496000,"v":3873.840277659997},{"t":1502582400,"v":4055.4301082172656},{"t":1502668800,"v":4321.740878001602},{"t":1502755200,"v":4158.369049307629},{"t":1502841600,"v":4371.898571692489},{"t":1502928000,"v":4278.874565142088},{"t":1503014400,"v":4103.308186665855},{"t":1503100800,"v":4136.02849752025},{"t":1503187200,"v":4047.5907074206807},{"t":1503273600,"v":3993.496766113566},{"t":1503360000,"v":4089.192688098602},{"t":1503446400,"v":4128.20943627659},{"t":1503532800,"v":4309.743233598728},{"t":1503619200,"v":4357.504580234239},{"t":1503705600,"v":4339.185326260464},{"t":1503792000,"v":4343.614657649543},{"t":1503878400,"v":4384.648048638078},{"t":1503964800,"v":4591.973064787884},{"t":1504051200,"v":4578.258041005562},{"t":1504137600,"v":4739.821909609959},{"t":1504224000,"v":4930.913963429657},{"t":1504310400,"v":4635.549367004165},{"t":1504396800,"v":4624.004128836177},{"t":1504483200,"v":4340.747305561161},{"t":1504569600,"v":4426.660414562876},{"t":1504656000,"v":4610.80660274099},{"t":1504742400,"v":4621.992816471082},{"t":1504828800,"v":4341.4884613413},{"t":1504915200,"v":4330.583758430806},{"t":1505001600,"v":4250.088037251141},{"t":1505088000,"v":4207.513611707119},{"t":1505174400,"v":4157.663177008433},{"t":1505260800,"v":3867.7915092908415},{"t":1505347200,"v":3240.896288121997},{"t":1505433600,"v":3710.985860887212},{"t":1505520000,"v":3711.866164171358},{"t":1505606400,"v":3703.312456189187},{"t":1505692800,"v":4094.554920867202},{"t":1505779200,"v":3911.100032919042},{"t":1505865600,"v":3869.9896605976755},{"t":1505952000,"v":3617.6710605707135},{"t":1506038400,"v":3615.9131536078676},{"t":1506124800,"v":3782.0205495431524},{"t":1506211200,"v":3668.2651341463556},{"t":1506297600,"v":3918.890667419078},{"t":1506384000,"v":3886.1024756670427},{"t":1506470400,"v":4199.9683304292685},{"t":1506556800,"v":4187.576245896319},{"t":1506643200,"v":4156.659983678401},{"t":1506729600,"v":4335.467009689982},{"t":1506816000,"v":4382.812284253591},{"t":1506902400,"v":4391.750560395145},{"t":1506988800,"v":4311.3560516755},{"t":1507075200,"v":4215.182333536646},{"t":1507161600,"v":4317.528621996602},{"t":1507248000,"v":4362.980772637618},{"t":1507334400,"v":4427.349482966946},{"t":1507420800,"v":4599.584772520529},{"t":1507507200,"v":4770.758812461939},{"t":1507593600,"v":4742.204586062306},{"t":1507680000,"v":4817.076001241959},{"t":1507766400,"v":5421.25647434388},{"t":1507852800,"v":5622.401537310861},{"t":1507939200,"v":5806.274837910411},{"t":1508025600,"v":5690.443312043671},{"t":1508112000,"v":5751.401295318684},{"t":1508198400,"v":5593.760390967677},{"t":1508284800,"v":5574.307180341964},{"t":1508371200,"v":5700.819182972686},{"t":1508457600,"v":5997.446764076106},{"t":1508544000,"v":6015.723555007538},{"t":1508630400,"v":5998.832263653103},{"t":1508716800,"v":5889.672058049323},{"t":1508803200,"v":5518.766212981871},{"t":1508889600,"v":5744.7936868947845},{"t":1508976000,"v":5890.7143073772},{"t":1509062400,"v":5778.700983300991},{"t":1509148800,"v":5752.944303324972},{"t":1509235200,"v":6150.617275448098},{"t":1509321600,"v":6122.688025941843},{"t":1509408000,"v":6441.3050298221515},{"t":1509494400,"v":6764.760700771038},{"t":1509580800,"v":7032.252143929542},{"t":1509667200,"v":7188.6736621927175},{"t":1509753600,"v":7391.499520881289},{"t":1509840000,"v":7390.662345444837},{"t":1509926400,"v":6960.162148204395},{"t":1510012800,"v":7123.997698968637},{"t":1510099200,"v":7469.009869665808},{"t":1510185600,"v":7135.421301008343},{"t":1510272000,"v":6591.128675365988},{"t":1510358400,"v":6361.587331249312},{"t":1510444800,"v":5909.6447898411725},{"t":1510531200,"v":6525.636966247708},{"t":1510617600,"v":6595.548438738197},{"t":1510704000,"v":7282.068738937433},{"t":1510790400,"v":7845.321979964913},{"t":1510876800,"v":7691.5208803062105},{"t":1510963200,"v":7780.4865522991895},{"t":1511049600,"v":8033.553355586507},{"t":1511136000,"v":8255.867353185347},{"t":1511222400,"v":8096.860431860465},{"t":1511308800,"v":8244.969536672328},{"t":1511395200,"v":8035.893848871559},{"t":1511481600,"v":8215.457903088754},{"t":1511568000,"v":8771.863206570288},{"t":1511654400,"v":9349.11993048534},{"t":1511740800,"v":9754.449718834221},{"t":1511827200,"v":9926.71193188782},{"t":1511913600,"v":9863.795713366324},{"t":1512000000,"v":9953.823255504512},{"t":1512086400,"v":10862.869692666738},{"t":1512172800,"v":10923.741230126276},{"t":1512259200,"v":11285.973817230233},{"t":1512345600,"v":11625.190674511652},{"t":1512432000,"v":11703.703117553547},{"t":1512518400,"v":13919.978430502113},{"t":1512604800,"v":17144.110561770518},{"t":1512691200,"v":16241.254172496809},{"t":1512777600,"v":15065.911139302367},{"t":1512864000,"v":15049.90218056812},{"t":1512950400,"v":16779.839139930325},{"t":1513036800,"v":17220.05994923002},{"t":1513123200,"v":16525.094735035294},{"t":1513209600,"v":16607.882713268962},{"t":1513296000,"v":17644.19185482736},{"t":1513382400,"v":19587.6137328711},{"t":1513468800,"v":19179.66898447647},{"t":1513555200,"v":19007.00933176908},{"t":1513641600,"v":17737.660318944538},{"t":1513728000,"v":16456.22842405836},{"t":1513814400,"v":15651.946610393392},{"t":1513900800,"v":14140.99019347346},{"t":1513987200,"v":14800.695957569356},{"t":1514073600,"v":14170.877791779882},{"t":1514160000,"v":14073.40367072084},{"t":1514246400,"v":15761.316969772965},{"t":1514332800,"v":15382.496060505311},{"t":1514419200,"v":14456.968874713091},{"t":1514505600,"v":14487.223318256161},{"t":1514592000,"v":12743.816886264398},{"t":1514678400,"v":13896.633097402057},{"t":1514764800,"v":13436.40113496533},{"t":1514851200,"v":14732.453355796319},{"t":1514937600,"v":15068.48685294771},{"t":1515024000,"v":15150.044393442426},{"t":1515110400,"v":16929.993584218795},{"t":1515196800,"v":17094.07580827809},{"t":1515283200,"v":16162.813277912608},{"t":1515369600,"v":14998.250127031477},{"t":1515456000,"v":14415.466029217563},{"t":1515542400,"v":14850.283684647908},{"t":1515628800,"v":13310.776623875214},{"t":1515715200,"v":13797.82227939588},{"t":1515801600,"v":14218.51800899828},{"t":1515888000,"v":13655.242181049141},{"t":1515974400,"v":13574.797735438284},{"t":1516060800,"v":11467.380978284651},{"t":1516147200,"v":11136.808735058174},{"t":1516233600,"v":11289.210911409156},{"t":1516320000,"v":11511.09835473365},{"t":1516406400,"v":12763.779462390647},{"t":1516492800,"v":11455.526396495743},{"t":1516579200,"v":10781.268881360418},{"t":1516665600,"v":10801.083131750655},{"t":1516752000,"v":11354.22909940514},{"t":1516838400,"v":11137.878602459845},{"t":1516924800,"v":11091.21651042783},{"t":1517011200,"v":11333.397874991158},{"t":1517097600,"v":11597.080164861141},{"t":1517184000,"v":11149.431210526249},{"t":1517270400,"v":9937.726381160634},{"t":1517356800,"v":10087.724198669412},{"t":1517443200,"v":9014.026207241357},{"t":1517529600,"v":8799.121910617683},{"t":1517616000,"v":9208.45991916458},{"t":1517702400,"v":8176.460615758353},{"t":1517788800,"v":6891.934414416884},{"t":1517875200,"v":7714.392057232828},{"t":1517961600,"v":7575.611196702045},{"t":1518048000,"v":8222.753649455703},{"t":1518134400,"v":8677.910527452475},{"t":1518220800,"v":8537.393208068006},{"t":1518307200,"v":8073.293649217709},{"t":1518393600,"v":8883.2563239916},{"t":1518480000,"v":8519.186103813143},{"t":1518566400,"v":9483.45790621643},{"t":1518652800,"v":10063.90199802283},{"t":1518739200,"v":10236.5},{"t":1518825600,"v":11101.7},{"t":1518912000,"v":10593.2},{"t":1518998400,"v":11230},{"t":1519084800,"v":11403.7},{"t":1519171200,"v":10690.4},{"t":1519257600,"v":10005},{"t":1519344000,"v":10301.1},{"t":1519430400,"v":9813.07},{"t":1519516800,"v":9664.73},{"t":1519603200,"v":10366.7},{"t":1519689600,"v":10725.6},{"t":1519776000,"v":10397.9},{"t":1519862400,"v":10951},{"t":1519948800,"v":11086.4},{"t":1520035200,"v":11489.7},{"t":1520121600,"v":11512.6},{"t":1520208000,"v":11573.3},{"t":1520294400,"v":10779.9},{"t":1520380800,"v":9965.57},{"t":1520467200,"v":9395.01},{"t":1520553600,"v":9337.55},{"t":1520640000,"v":8866},{"t":1520726400,"v":9578.63},{"t":1520812800,"v":9205.12},{"t":1520899200,"v":9194.85},{"t":1520985600,"v":8269.81},{"t":1521072000,"v":8300.86},{"t":1521158400,"v":8338.35},{"t":1521244800,"v":7916.88},{"t":1521331200,"v":8223.68},{"t":1521417600,"v":8630.65},{"t":1521504000,"v":8913.47},{"t":1521590400,"v":8929.28},{"t":1521676800,"v":8721.57},{"t":1521763200,"v":8820.54},{"t":1521849600,"v":8682.62},{"t":1521936000,"v":8494.44},{"t":1522022400,"v":8210.22},{"t":1522108800,"v":7840.16},{"t":1522195200,"v":7980.12},{"t":1522281600,"v":7162.96},{"t":1522368000,"v":6895.3},{"t":1522454400,"v":6978.18},{"t":1522540800,"v":6844.23},{"t":1522627200,"v":7075.72},{"t":1522713600,"v":7458.04},{"t":1522800000,"v":6852.8},{"t":1522886400,"v":6811.29},{"t":1522972800,"v":6629.87},{"t":1523059200,"v":6903.16},{"t":1523145600,"v":7023.38},{"t":1523232000,"v":6763.45},{"t":1523318400,"v":6839.1},{"t":1523404800,"v":6939.18},{"t":1523491200,"v":7926.600582959641},{"t":1523577600,"v":7858.320396825395},{"t":1523664000,"v":7994.162746478875},{"t":1523750400,"v":8355.635478723412},{"t":1523836800,"v":8052.68},{"t":1523923200,"v":7906.81},{"t":1524009600,"v":8162.99},{"t":1524096000,"v":8282.55},{"t":1524182400,"v":8836.46},{"t":1524268800,"v":8883.36},{"t":1524355200,"v":8802.53},{"t":1524441600,"v":8930.91},{"t":1524528000,"v":9732.61},{"t":1524614400,"v":8826.28},{"t":1524700800,"v":9280.92},{"t":1524787200,"v":9011.78},{"t":1524873600,"v":9343.42},{"t":1524960000,"v":9415.09},{"t":1525046400,"v":9247.19},{"t":1525132800,"v":9105.53},{"t":1525219200,"v":9233.72},{"t":1525305600,"v":9755.31},{"t":1525392000,"v":9715.82},{"t":1525478400,"v":9843.13},{"t":1525564800,"v":9646.74},{"t":1525651200,"v":9369.84},{"t":1525737600,"v":9249.75},{"t":1525824000,"v":9324.28},{"t":1525910400,"v":9040.52},{"t":1525996800,"v":8462.5},{"t":1526083200,"v":8499.34},{"t":1526169600,"v":8723.64},{"t":1526256000,"v":8719.89},{"t":1526342400,"v":8515.22},{"t":1526428800,"v":8358.62},{"t":1526515200,"v":8085.7},{"t":1526601600,"v":8251.45},{"t":1526688000,"v":8241.68},{"t":1526774400,"v":8515.58},{"t":1526860800,"v":8409.37},{"t":1526947200,"v":8049.56},{"t":1527033600,"v":7566.26},{"t":1527120000,"v":7593.13},{"t":1527206400,"v":7453.44},{"t":1527292800,"v":7358.47},{"t":1527379200,"v":7364.09},{"t":1527465600,"v":7134.68},{"t":1527552000,"v":7467.58},{"t":1527638400,"v":7406.19},{"t":1527724800,"v":7491.64},{"t":1527811200,"v":7539.14},{"t":1527897600,"v":7646.74},{"t":1527984000,"v":7720.25},{"t":1528070400,"v":7499.48},{"t":1528156800,"v":7625.55},{"t":1528243200,"v":7656.09},{"t":1528329600,"v":7676.55},{"t":1528416000,"v":7631.9},{"t":1528502400,"v":7565},{"t":1528588800,"v":6784.03},{"t":1528675200,"v":6901.13},{"t":1528761600,"v":6566.2},{"t":1528848000,"v":6342.43},{"t":1528934400,"v":6681.42},{"t":1529020800,"v":6460.85},{"t":1529107200,"v":6538.65},{"t":1529193600,"v":6503.94},{"t":1529280000,"v":6733.38},{"t":1529366400,"v":6759.1},{"t":1529452800,"v":6776.84},{"t":1529539200,"v":6737.58},{"t":1529625600,"v":6083.68},{"t":1529712000,"v":6166.8},{"t":1529798400,"v":6168.79},{"t":1529884800,"v":6260.63},{"t":1529971200,"v":6096.19},{"t":1530057600,"v":6154.48},{"t":1530144000,"v":5903.44},{"t":1530230400,"v":6220.76},{"t":1530316800,"v":6396.98},{"t":1530403200,"v":6388.12},{"t":1530489600,"v":6614.92},{"t":1530576000,"v":6533.56},{"t":1530662400,"v":6609.7},{"t":1530748800,"v":6643.34},{"t":1530835200,"v":6674.68},{"t":1530921600,"v":6859.53},{"t":1531008000,"v":6762.01},{"t":1531094400,"v":6746.22},{"t":1531180800,"v":6328.33},{"t":1531267200,"v":6393.59},{"t":1531353600,"v":6228.81},{"t":1531440000,"v":6236.49},{"t":1531526400,"v":6275.18},{"t":1531612800,"v":6359.64},{"t":1531699200,"v":6742.49},{"t":1531785600,"v":7318.74},{"t":1531872000,"v":7370.78},{"t":1531958400,"v":7466.86},{"t":1532044800,"v":7354.94},{"t":1532131200,"v":7418.71},{"t":1532217600,"v":7418.49},{"t":1532304000,"v":7713.31},{"t":1532390400,"v":8424.27},{"t":1532476800,"v":8181.39},{"t":1532563200,"v":7951.58},{"t":1532649600,"v":8167.81},{"t":1532736000,"v":8188.85},{"t":1532822400,"v":8221.44},{"t":1532908800,"v":8183.56562256},{"t":1532995200,"v":7774.87303565},{"t":1533081600,"v":7624.90741594},{"t":1533168000,"v":7567.15160233},{"t":1533254400,"v":7436.26183554},{"t":1533340800,"v":7032.21316739},{"t":1533427200,"v":7064.02626634},{"t":1533513600,"v":6951.2803658},{"t":1533600000,"v":6753.71764839},{"t":1533686400,"v":6305.80304475},{"t":1533772800,"v":6568.02168724},{"t":1533859200,"v":6184.71178367},{"t":1533945600,"v":6289.74605164},{"t":1534032000,"v":6335.06058091},{"t":1534118400,"v":6297.96664043},{"t":1534204800,"v":6199.71276805},{"t":1534291200,"v":6293.27724365},{"t":1534377600,"v":6324.7423257},{"t":1534464000,"v":6580.62933687},{"t":1534550400,"v":6423.68691813},{"t":1534636800,"v":6506.06881185},{"t":1534723200,"v":6305.19259562},{"t":1534809600,"v":6496.258447},{"t":1534896000,"v":6376.83461362},{"t":1534982400,"v":6534.87662447},{"t":1535068800,"v":6717.68298629},{"t":1535155200,"v":6769.94985511},{"t":1535241600,"v":6715.64805358},{"t":1535328000,"v":6881.56612007},{"t":1535414400,"v":7096.27708292},{"t":1535500800,"v":7046.07682983},{"t":1535587200,"v":6981.57685708},{"t":1535673600,"v":7036.75531489},{"t":1535760000,"v":7193.41650052},{"t":1535846400,"v":7269.10081969},{"t":1535932800,"v":7264.79922436},{"t":1536019200,"v":7362.7119946},{"t":1536105600,"v":6818.83022958},{"t":1536192000,"v":6538.48023324},{"t":1536278400,"v":6463.22559639},{"t":1536364800,"v":6223.43011665},{"t":1536451200,"v":6303.80648503},{"t":1536537600,"v":6329.69690852},{"t":1536624000,"v":6324.59015192},{"t":1536710400,"v":6360.69694706},{"t":1536796800,"v":6521.23827161},{"t":1536883200,"v":6512.70548453},{"t":1536969600,"v":6544.13620369},{"t":1537056000,"v":6514.52997091},{"t":1537142400,"v":6281.19609296},{"t":1537228800,"v":6369.18712761},{"t":1537315200,"v":6394.89073566},{"t":1537401600,"v":6523.44829872},{"t":1537488000,"v":6734.95239431},{"t":1537574400,"v":6722.22113413},{"t":1537660800,"v":6707.26095584},{"t":1537747200,"v":6595.41332528},{"t":1537833600,"v":6444.41067269},{"t":1537920000,"v":6498.32602721},{"t":1538006400,"v":6680.71461176},{"t":1538092800,"v":6642.0772968},{"t":1538179200,"v":6601.9553879},{"t":1538265600,"v":6627.99449465},{"t":1538352000,"v":6587.61149413},{"t":1538438400,"v":6556.09866089},{"t":1538524800,"v":6502.59044747},{"t":1538611200,"v":6576.20339269},{"t":1538697600,"v":6622.48483682},{"t":1538784000,"v":6589.05284411},{"t":1538870400,"v":6602.94525849},{"t":1538956800,"v":6652.22623715},{"t":1539043200,"v":6640.64745929},{"t":1539129600,"v":6585.17755768},{"t":1539216000,"v":6249.09003203},{"t":1539302400,"v":6273.19669603},{"t":1539388800,"v":6289.0009018},{"t":1539475200,"v":6292.23246896},{"t":1539561600,"v":6605.26103468},{"t":1539648000,"v":6600.67720695},{"t":1539734400,"v":6546.16332001},{"t":1539820800,"v":6474.64724903},{"t":1539907200,"v":6466.010535},{"t":1539993600,"v":6489.46975308},{"t":1540080000,"v":6482.34812955},{"t":1540166400,"v":6491.98212347},{"t":1540252800,"v":6475.72971532},{"t":1540339200,"v":6495.42836241},{"t":1540425600,"v":6481.17082835},{"t":1540512000,"v":6477.84565348},{"t":1540598400,"v":6480.28670898},{"t":1540684800,"v":6486.38627137},{"t":1540771200,"v":6332.78870464},{"t":1540857600,"v":6334.7409058},{"t":1540944000,"v":6317.75009974},{"t":1541030400,"v":6375.52621667},{"t":1541116800,"v":6390.638615},{"t":1541203200,"v":6361.25774213},{"t":1541289600,"v":6376.12939278},{"t":1541376000,"v":6427.46426537},{"t":1541462400,"v":6455.27908945},{"t":1541548800,"v":6520.93366356},{"t":1541635200,"v":6457.20299168},{"t":1541721600,"v":6387.24987785},{"t":1541808000,"v":6407.74044747},{"t":1541894400,"v":6408.83301083},{"t":1541980800,"v":6373.10496784},{"t":1542067200,"v":6357.23195512},{"t":1542153600,"v":5722.33950975},{"t":1542240000,"v":5645.59292107},{"t":1542326400,"v":5574.75499615},{"t":1542412800,"v":5554.80989136},{"t":1542499200,"v":5622.02160278},{"t":1542585600,"v":4875.14239003},{"t":1542672000,"v":4415.07400339},{"t":1542758400,"v":4602.16771504},{"t":1542844800,"v":4368.73234691},{"t":1542931200,"v":4346.01843265},{"t":1543017600,"v":3883.35938868},{"t":1543104000,"v":4015.13130391},{"t":1543190400,"v":3775.08662841},{"t":1543276800,"v":3813.57141959},{"t":1543363200,"v":4260.82825547},{"t":1543449600,"v":4274.74204089},{"t":1543536000,"v":4016.44911794},{"t":1543622400,"v":4215.68477834},{"t":1543708800,"v":4138.38283552},{"t":1543795200,"v":3892.75933911},{"t":1543881600,"v":3996.74820738},{"t":1543968000,"v":3753.99482663},{"t":1544054400,"v":3521.10172384},{"t":1544140800,"v":3419.93720035},{"t":1544227200,"v":3476.11471452},{"t":1544313600,"v":3616.21025798},{"t":1544400000,"v":3505.47968254},{"t":1544486400,"v":3423.51948812},{"t":1544572800,"v":3481.23667359},{"t":1544659200,"v":3312.00352486},{"t":1544745600,"v":3242.19413359},{"t":1544832000,"v":3237.05708474},{"t":1544918400,"v":3255.22013802},{"t":1545004800,"v":3545.35139009},{"t":1545091200,"v":3695.4306338},{"t":1545177600,"v":3747.42985778},{"t":1545264000,"v":4132.2252904},{"t":1545350400,"v":3894.39321098},{"t":1545436800,"v":4012.16458122},{"t":1545523200,"v":3998.52858546},{"t":1545609600,"v":4080.47896096},{"t":1545696000,"v":3815.49060966},{"t":1545782400,"v":3855.93115879},{"t":1545868800,"v":3659.30990152},{"t":1545955200,"v":3926.3291364},{"t":1546041600,"v":3827.77729964},{"t":1546128000,"v":3867.27236149},{"t":1546214400,"v":3741.29679518},{"t":1546300800,"v":3840.95924899},{"t":1546387200,"v":3943.28984335},{"t":1546473600,"v":3836.55804793},{"t":1546560000,"v":3858.23828002},{"t":1546646400,"v":3841.06117029},{"t":1546732800,"v":4076.20331956},{"t":1546819200,"v":4024.46206645},{"t":1546905600,"v":4033.55475363},{"t":1546992000,"v":4035.71294082},{"t":1547078400,"v":3679.79347408},{"t":1547164800,"v":3686.21992857},{"t":1547251200,"v":3660.89928219},{"t":1547337600,"v":3552.00916983},{"t":1547424000,"v":3706.05222041},{"t":1547510400,"v":3629.3994895},{"t":1547596800,"v":3656.46477524},{"t":1547683200,"v":3679.8126213},{"t":1547769600,"v":3653.6664613},{"t":1547856000,"v":3729.0822985},{"t":1547942400,"v":3602.94669388},{"t":1548028800,"v":3577.02585978},{"t":1548115200,"v":3605.04565371},{"t":1548201600,"v":3585.12306636},{"t":1548288000,"v":3605.01000288},{"t":1548374400,"v":3602.06803677},{"t":1548460800,"v":3601.75215591},{"t":1548547200,"v":3586.69221638},{"t":1548633600,"v":3472.33980503},{"t":1548720000,"v":3447.03376969},{"t":1548806400,"v":3485.3190571},{"t":1548892800,"v":3457.19185903},{"t":1548979200,"v":3488.65467674},{"t":1549065600,"v":3526.76852089},{"t":1549152000,"v":3461.49672071},{"t":1549238400,"v":3456.78537352},{"t":1549324800,"v":3460.72479577},{"t":1549411200,"v":3412.83264537},{"t":1549497600,"v":3400.6012536},{"t":1549584000,"v":3661.6593387},{"t":1549670400,"v":3671.81055872},{"t":1549756800,"v":3684.24956988},{"t":1549843200,"v":3648.09335231},{"t":1549929600,"v":3653.99110555},{"t":1550016000,"v":3631.34329385},{"t":1550102400,"v":3616.36968624},{"t":1550188800,"v":3623.22451873},{"t":1550275200,"v":3631.0060736},{"t":1550361600,"v":3677.11835448},{"t":1550448000,"v":3915.15393},{"t":1550534400,"v":3946.15354458},{"t":1550620800,"v":3996.90234514},{"t":1550707200,"v":3952.2103642},{"t":1550793600,"v":4002.2913313},{"t":1550880000,"v":4145.9880905},{"t":1550966400,"v":3814.93757504},{"t":1551052800,"v":3884.93555836},{"t":1551139200,"v":3857.56107734},{"t":1551225600,"v":3851.0235527},{"t":1551312000,"v":3855.67378101},{"t":1551398400,"v":3861.87069318},{"t":1551484800,"v":3867.57418178},{"t":1551571200,"v":3845.59431118},{"t":1551657600,"v":3761.00685915},{"t":1551744000,"v":3894.06747372},{"t":1551830400,"v":3905.40722269},{"t":1551916800,"v":3911.06208338},{"t":1552003200,"v":3898.25616475},{"t":1552089600,"v":3960.96525724},{"t":1552176000,"v":3953.83492806},{"t":1552262400,"v":3906.12986299},{"t":1552348800,"v":3911.29620526},{"t":1552435200,"v":3906.54189115},{"t":1552521600,"v":3913.51736755},{"t":1552608000,"v":3958.66898443},{"t":1552694400,"v":4048.90849948},{"t":1552780800,"v":4028.84888287},{"t":1552867200,"v":4034.67408291},{"t":1552953600,"v":4070.48878613},{"t":1553040000,"v":4086.37824344},{"t":1553126400,"v":4031.48944687},{"t":1553212800,"v":4023.91043451},{"t":1553299200,"v":4036.5766927},{"t":1553385600,"v":4018.86969869},{"t":1553472000,"v":3963.78397879},{"t":1553558400,"v":3985.08080287},{"t":1553644800,"v":4086.67786266},{"t":1553731200,"v":4069.10714977},{"t":1553817600,"v":4098.37454059},{"t":1553904000,"v":4096.91963725},{"t":1553990400,"v":4104.234233128829},{"t":1554076800,"v":4157.46569937},{"t":1554163200,"v":4886.74969679},{"t":1554249600,"v":4971.30774104},{"t":1554336000,"v":4922.79878778},{"t":1554422400,"v":5036.79302365},{"t":1554508800,"v":5062.79376134},{"t":1554595200,"v":5198.89699014},{"t":1554681600,"v":5289.91798137},{"t":1554768000,"v":5204.95837847},{"t":1554854400,"v":5325.08155529},{"t":1554940800,"v":5064.48767243},{"t":1555027200,"v":5088.84997329},{"t":1555113600,"v":5096.58656276},{"t":1555200000,"v":5167.32198286},{"t":1555286400,"v":5066.18715458},{"t":1555372800,"v":5237.59520905},{"t":1555459200,"v":5251.66380021},{"t":1555545600,"v":5299.16459453},{"t":1555632000,"v":5305.45513705},{"t":1555718400,"v":5337.37851834},{"t":1555804800,"v":5314.5314532},{"t":1555891200,"v":5399.71139699},{"t":1555977600,"v":5571.97722679},{"t":1556064000,"v":5464.86664182},{"t":1556150400,"v":5210.59362141},{"t":1556236800,"v":5280.61484521},{"t":1556323200,"v":5266.45814395},{"t":1556409600,"v":5285.13900822},{"t":1556496000,"v":5248.20427091},{"t":1556582400,"v":5350.03250117},{"t":1556668800,"v":5401.02963619},{"t":1556755200,"v":5505.28367176},{"t":1556841600,"v":5768.28940693},{"t":1556928000,"v":5829.93903031},{"t":1557014400,"v":5790.99875859},{"t":1557100800,"v":5750.26065528},{"t":1557187200,"v":5843.49506628},{"t":1557273600,"v":5983.76061268},{"t":1557360000,"v":6174.13234808},{"t":1557446400,"v":6379.29211794},{"t":1557532800,"v":7212.29317912},{"t":1557619200,"v":6972.37152291},{"t":1557705600,"v":7807.13438133},{"t":1557792000,"v":7994.41615632},{"t":1557878400,"v":8205.16749484},{"t":1557964800,"v":7883.39290525},{"t":1558051200,"v":7332.33362812},{"t":1558137600,"v":7272.8703646},{"t":1558224000,"v":8197.08154991},{"t":1558310400,"v":7977.28172834},{"t":1558396800,"v":7964.08716828},{"t":1558483200,"v":7684.84214611},{"t":1558569600,"v":7881.84672105},{"t":1558656000,"v":7987.37156583},{"t":1558742400,"v":8052.54385907},{"t":1558828800,"v":8674.07240318},{"t":1558915200,"v":8802.75819975},{"t":1559001600,"v":8719.9617362},{"t":1559088000,"v":8658.62021569},{"t":1559174400,"v":8313.21305379},{"t":1559260800,"v":8584.03749936},{"t":1559347200,"v":8567.49579932},{"t":1559433600,"v":8744.99858488},{"t":1559520000,"v":8214.54501611},{"t":1559606400,"v":7694.79046347},{"t":1559692800,"v":7820.49742937},{"t":1559779200,"v":7823.96826187},{"t":1559865600,"v":8042.62455272},{"t":1559952000,"v":7941.75919036},{"t":1560038400,"v":7686.70517038},{"t":1560124800,"v":7994.91667422},{"t":1560211200,"v":7923.19557195},{"t":1560297600,"v":8139.61233897},{"t":1560384000,"v":8226.39499438},{"t":1560470400,"v":8690.3978563},{"t":1560556800,"v":8839.69426128},{"t":1560643200,"v":8993.51985508},{"t":1560729600,"v":9323.18877291},{"t":1560816000,"v":9070.351716},{"t":1560902400,"v":9276.77182364},{"t":1560988800,"v":9527.85336616},{"t":1561075200,"v":10118.5985274},{"t":1561161600,"v":10694.29348},{"t":1561248000,"v":10842.5148341},{"t":1561334400,"v":11006.9875879},{"t":1561420800,"v":11784.6041669},{"t":1561507200,"v":13003.3251831},{"t":1561593600,"v":11151.3707985},{"t":1561680000,"v":12392.3293102},{"t":1561766400,"v":11958.9651413},{"t":1561852800,"v":10817.5692473},{"t":1561939200,"v":10590.7580719},{"t":1562025600,"v":10810.4966905},{"t":1562112000,"v":11953.3879742},{"t":1562198400,"v":11212.6101976},{"t":1562284800,"v":10984.1057812},{"t":1562371200,"v":11209.2110757},{"t":1562457600,"v":11451.3503881},{"t":1562544000,"v":12285.7323738},{"t":1562630400,"v":12560.6272457},{"t":1562716800,"v":12152.5890505},{"t":1562803200,"v":11345.7367321},{"t":1562889600,"v":11816.4282932},{"t":1562976000,"v":11373.0446962},{"t":1563062400,"v":10258.343575},{"t":1563148800,"v":10902.4940933},{"t":1563235200,"v":9493.31755974},{"t":1563321600,"v":9694.45068639},{"t":1563408000,"v":10663.3319664},{"t":1563494400,"v":10533.9668428},{"t":1563580800,"v":10770.4048064},{"t":1563667200,"v":10598.6005555},{"t":1563753600,"v":10339.5348432},{"t":1563840000,"v":9900.10969969},{"t":1563926400,"v":9821.99302633},{"t":1564012800,"v":9912.80914244},{"t":1564099200,"v":9872.51472048},{"t":1564185600,"v":9457.60326361},{"t":1564272000,"v":9555.36758424},{"t":1564358400,"v":9521.49191299},{"t":1564444800,"v":9604.74200395},{"t":1564531200,"v":10085.6277491},{"t":1564617600,"v":10399.6694229},{"t":1564704000,"v":10518.1746772},{"t":1564790400,"v":10821.7265103},{"t":1564876800,"v":10970.1842157},{"t":1564963200,"v":11805.6537253},{"t":1565049600,"v":11478.1693461},{"t":1565136000,"v":11941.9683406},{"t":1565222400,"v":11966.407405},{"t":1565308800,"v":11862.93676},{"t":1565395200,"v":11354.0242177},{"t":1565481600,"v":11523.5793784},{"t":1565568000,"v":11382.6159562},{"t":1565654400,"v":10895.8304358},{"t":1565740800,"v":10038.4217089},{"t":1565827200,"v":10311.545429},{"t":1565913600,"v":10374.3393471},{"t":1566000000,"v":10231.7438454},{"t":1566086400,"v":10345.8103795},{"t":1566172800,"v":10916.0538702},{"t":1566259200,"v":10763.2326304},{"t":1566345600,"v":10138.049355},{"t":1566432000,"v":10131.0561021},{"t":1566518400,"v":10407.965329},{"t":1566604800,"v":10159.9605385},{"t":1566691200,"v":10138.517665},{"t":1566777600,"v":10372.8263035},{"t":1566864000,"v":10185.4998997},{"t":1566950400,"v":9756.78570735},{"t":1567036800,"v":9510.20054413},{"t":1567123200,"v":9598.17364826},{"t":1567209600,"v":9630.59319616},{"t":1567296000,"v":9757.97031807},{"t":1567382400,"v":10346.7607927},{"t":1567468800,"v":10623.5401172},{"t":1567555200,"v":10594.4933536},{"t":1567641600,"v":10575.533284},{"t":1567728000,"v":10353.3025592},{"t":1567814400,"v":10517.254784},{"t":1567900800,"v":10441.275979},{"t":1567987200,"v":10334.9741628},{"t":1568073600,"v":10115.9757913},{"t":1568160000,"v":10178.3718893},{"t":1568246400,"v":10410.1268031},{"t":1568332800,"v":10360.5472773},{"t":1568419200,"v":10358.0491621},{"t":1568505600,"v":10347.7129074},{"t":1568592000,"v":10276.7935649},{"t":1568678400,"v":10241.2721545},{"t":1568764800,"v":10198.2484072},{"t":1568851200,"v":10266.4149694},{"t":1568937600,"v":10181.6413094},{"t":1569024000,"v":10019.7169101},{"t":1569110400,"v":10070.3921064},{"t":1569196800,"v":9729.32376435},{"t":1569283200,"v":8620.56642733},{"t":1569369600,"v":8486.99297206},{"t":1569456000,"v":8118.96756783},{"t":1569542400,"v":8251.84555744},{"t":1569628800,"v":8245.91515478},{"t":1569715200,"v":8104.18567564},{"t":1569801600,"v":8293.86774062},{"t":1569888000,"v":8343.2766814},{"t":1569974400,"v":8393.04164486},{"t":1570060800,"v":8259.99197863},{"t":1570147200,"v":8205.93924121},{"t":1570233600,"v":8151.50052921},{"t":1570320000,"v":7988.15595888},{"t":1570406400,"v":8245.622933},{"t":1570492800,"v":8228.7831528},{"t":1570579200,"v":8595.73981722},{"t":1570665600,"v":8583.1788414},{"t":1570752000,"v":8321.11873109},{"t":1570838400,"v":8342.69554698},{"t":1570924800,"v":8323.08261224},{"t":1571011200,"v":8371.9891356},{"t":1571097600,"v":8208.03348086},{"t":1571184000,"v":8057.29564754},{"t":1571270400,"v":8102.95289694},{"t":1571356800,"v":7977.41883564},{"t":1571443200,"v":7990.31255402},{"t":1571529600,"v":8218.07286805},{"t":1571616000,"v":8236.27737182},{"t":1571702400,"v":8080.61566695},{"t":1571788800,"v":7506.16004227},{"t":1571875200,"v":7497.31006854},{"t":1571961600,"v":8656.17219802},{"t":1572048000,"v":9248.60509745},{"t":1572134400,"v":9559.52904735},{"t":1572220800,"v":9266.54148344},{"t":1572307200,"v":9429.56422378},{"t":1572393600,"v":9209.14008588},{"t":1572480000,"v":9190.15935841},{"t":1572566400,"v":9260.4172551},{"t":1572652800,"v":9324.92966758},{"t":1572739200,"v":9235.20529549},{"t":1572825600,"v":9414.27063268},{"t":1572912000,"v":9348.12927384},{"t":1572998400,"v":9357.01438149},{"t":1573084800,"v":9267.47944726},{"t":1573171200,"v":8816.95087372},{"t":1573257600,"v":8814.88268835},{"t":1573344000,"v":9058.22603921},{"t":1573430400,"v":8756.31731395},{"t":1573516800,"v":8812.71866317},{"t":1573603200,"v":8817.26151868},{"t":1573689600,"v":8710.28507816},{"t":1573776000,"v":8491.55733354},{"t":1573862400,"v":8546.7319707},{"t":1573948800,"v":8572.18503827},{"t":1574035200,"v":8311.81088865},{"t":1574121600,"v":8203.93739828},{"t":1574208000,"v":8027.77939437},{"t":1574294400,"v":7640.63676782},{"t":1574380800,"v":7304.96236288},{"t":1574467200,"v":7384.69785526},{"t":1574553600,"v":7046.14174647},{"t":1574640000,"v":7150.12871408},{"t":1574726400,"v":7223.03582563},{"t":1574812800,"v":7539.34651048},{"t":1574899200,"v":7465.22589107},{"t":1574985600,"v":7762.17959453},{"t":1575072000,"v":7567.97497695},{"t":1575158400,"v":7425.85766438},{"t":1575244800,"v":7325.33487256},{"t":1575331200,"v":7323.81210021},{"t":1575417600,"v":7260.10003443},{"t":1575504000,"v":7447.6673282},{"t":1575590400,"v":7544.37903416},{"t":1575676800,"v":7552.29963464},{"t":1575763200,"v":7566.18173083},{"t":1575849600,"v":7401.01158117},{"t":1575936000,"v":7274.46261839},{"t":1576022400,"v":7218.25648469},{"t":1576108800,"v":7244.48940003},{"t":1576195200,"v":7267.35915452},{"t":1576281600,"v":7130.35799572},{"t":1576368000,"v":7157.82998088},{"t":1576454400,"v":6930.50585768},{"t":1576540800,"v":6611.51046846},{"t":1576627200,"v":7270.46966975},{"t":1576713600,"v":7204.0210376},{"t":1576800000,"v":7217.26972298},{"t":1576886400,"v":7189.90636821},{"t":1576972800,"v":7512.80063541},{"t":1577059200,"v":7355.16830714},{"t":1577145600,"v":7309.21393158},{"t":1577232000,"v":7280.45240018},{"t":1577318400,"v":7240.0270056},{"t":1577404800,"v":7295.60723294},{"t":1577491200,"v":7319.89084853},{"t":1577577600,"v":7419.17941527},{"t":1577664000,"v":7300.67426507},{"t":1577750400,"v":7197.52710917},{"t":1577836800,"v":7199.66110087},{"t":1577923200,"v":6985.65902257},{"t":1578009600,"v":7347.59737791},{"t":1578096000,"v":7415.20244546},{"t":1578182400,"v":7410.81254092},{"t":1578268800,"v":7770.52843473},{"t":1578355200,"v":8166.96310003},{"t":1578441600,"v":8082.95054727},{"t":1578528000,"v":7880.28824913},{"t":1578614400,"v":8164.65571526},{"t":1578700800,"v":8029.64210795},{"t":1578787200,"v":8185.64036985},{"t":1578873600,"v":8148.31886082},{"t":1578960000,"v":8827.76442606},{"t":1579046400,"v":8807.01027532},{"t":1579132800,"v":8723.78576573},{"t":1579219200,"v":8929.0376776},{"t":1579305600,"v":8942.80890321},{"t":1579392000,"v":8706.24512993},{"t":1579478400,"v":8657.64293942},{"t":1579564800,"v":8745.89478833},{"t":1579651200,"v":8680.87604222},{"t":1579737600,"v":8406.5160678},{"t":1579824000,"v":8445.43428152},{"t":1579910400,"v":8367.84777344},{"t":1579996800,"v":8596.82983316},{"t":1580083200,"v":8909.81917753},{"t":1580169600,"v":9358.59031703},{"t":1580256000,"v":9316.62950445},{"t":1580342400,"v":9508.9935947},{"t":1580428800,"v":9350.52936518},{"t":1580515200,"v":9392.87536841},{"t":1580601600,"v":9344.36529292},{"t":1580688000,"v":9293.52108908},{"t":1580774400,"v":9180.9629665},{"t":1580860800,"v":9613.42428895},{"t":1580947200,"v":9729.80223149},{"t":1581033600,"v":9790.33384641},{"t":1581120000,"v":9866.50724373},{"t":1581206400,"v":10119.1248203},{"t":1581292800,"v":9865.59260896},{"t":1581379200,"v":10205.1323621},{"t":1581465600,"v":10322.7164894},{"t":1581552000,"v":10205.6192109},{"t":1581638400,"v":10300.0506266},{"t":1581724800,"v":9891.83650918},{"t":1581811200,"v":9943.25998095},{"t":1581897600,"v":9686.04920977},{"t":1581984000,"v":10147.0726363},{"t":1582070400,"v":9635.05008713},{"t":1582156800,"v":9618.25906453},{"t":1582243200,"v":9690.95528682},{"t":1582329600,"v":9660.91488832},{"t":1582416000,"v":9920.86796684},{"t":1582502400,"v":9645.39833042},{"t":1582588800,"v":9346.53346695},{"t":1582675200,"v":8824.33122732},{"t":1582761600,"v":8786.87893969},{"t":1582848000,"v":8689.11524591},{"t":1582934400,"v":8615.22772355},{"t":1583020800,"v":8563.41168611},{"t":1583107200,"v":8865.83955705},{"t":1583193600,"v":8792.35171065},{"t":1583280000,"v":8742.61166128},{"t":1583366400,"v":9077.87946386},{"t":1583452800,"v":9120.74845437},{"t":1583539200,"v":8909.75828069},{"t":1583625600,"v":8110.25607808},{"t":1583712000,"v":7916.62214092},{"t":1583798400,"v":7915.61754792},{"t":1583884800,"v":7912.81530473},{"t":1583971200,"v":4860.35383012},{"t":1584057600,"v":5547.0651614},{"t":1584144000,"v":5195.85517452},{"t":1584230400,"v":5391.06024919},{"t":1584316800,"v":5014.86830377},{"t":1584403200,"v":5237.76209482},{"t":1584489600,"v":5237.91386092},{"t":1584576000,"v":6193.29577035},{"t":1584662400,"v":6186.21871982},{"t":1584748800,"v":6172.9672775},{"t":1584835200,"v":5833.51061024},{"t":1584921600,"v":6431.81003808},{"t":1585008000,"v":6732.65221467},{"t":1585094400,"v":6677.07432527},{"t":1585180800,"v":6718.96731486},{"t":1585267200,"v":6470.89335934},{"t":1585353600,"v":6241.56512496},{"t":1585440000,"v":5929.677884},{"t":1585526400,"v":6447.72579951},{"t":1585612800,"v":6443.31405026},{"t":1585699200,"v":6589.24919192},{"t":1585785600,"v":6795.04299179},{"t":1585872000,"v":6736.36381431},{"t":1585958400,"v":6858.69700969},{"t":1586044800,"v":6794.47452422},{"t":1586131200,"v":7248.72410192},{"t":1586217600,"v":7172.87828873},{"t":1586304000,"v":7335.36979909},{"t":1586390400,"v":7301.01277516},{"t":1586476800,"v":6862.78799691},{"t":1586563200,"v":6852.50192071},{"t":1586649600,"v":6998.39400574},{"t":1586736000,"v":6845.09526906},{"t":1586822400,"v":6841.27304616},{"t":1586908800,"v":6643.97961617},{"t":1586995200,"v":7106.09484684},{"t":1587081600,"v":7098.68627482},{"t":1587168000,"v":7259.90292944},{"t":1587254400,"v":7191.11311495},{"t":1587340800,"v":6882.34018581},{"t":1587427200,"v":6878.03773926},{"t":1587513600,"v":7118.68335661},{"t":1587600000,"v":7430.16504043},{"t":1587686400,"v":7549.13338764},{"t":1587772800,"v":7569.23791751},{"t":1587859200,"v":7680.48287014},{"t":1587945600,"v":7794.71391216},{"t":1588032000,"v":7807.29683833},{"t":1588118400,"v":8801.03776688},{"t":1588204800,"v":8657.1939924},{"t":1588291200,"v":8855.32022959},{"t":1588377600,"v":8985.17081572},{"t":1588464000,"v":8898.12241256},{"t":1588550400,"v":8915.36266471},{"t":1588636800,"v":8987.61019034},{"t":1588723200,"v":9253.07620782},{"t":1588809600,"v":9982.3230001},{"t":1588896000,"v":9854.15920563},{"t":1588982400,"v":9590.06333149},{"t":1589068800,"v":8761.29974684},{"t":1589155200,"v":8599.78194656},{"t":1589241600,"v":8800.72972155},{"t":1589328000,"v":9274.85620315},{"t":1589414400,"v":9742.73285277},{"t":1589500800,"v":9324.74955892},{"t":1589587200,"v":9378.12485501},{"t":1589673600,"v":9670.02672308},{"t":1589760000,"v":9729.46527585},{"t":1589846400,"v":9723.31137903},{"t":1589932800,"v":9522.46761378},{"t":1590019200,"v":9083.12738671},{"t":1590105600,"v":9182.63979906},{"t":1590192000,"v":9212.38362171},{"t":1590278400,"v":8792.95744169},{"t":1590364800,"v":8910.14065013},{"t":1590451200,"v":8830.00836771},{"t":1590537600,"v":9178.8408253},{"t":1590624000,"v":9521.7710264},{"t":1590710400,"v":9440.88143521},{"t":1590796800,"v":9696.80790406},{"t":1590883200,"v":9452.45408509},{"t":1590969600,"v":10170.4099128},{"t":1591056000,"v":9532.18934947},{"t":1591142400,"v":9646.2557319},{"t":1591228800,"v":9803.70548499},{"t":1591315200,"v":9667.02313814},{"t":1591401600,"v":9650.37975164},{"t":1591488000,"v":9759.69521099},{"t":1591574400,"v":9770.65850938},{"t":1591660800,"v":9795.64961547},{"t":1591747200,"v":9870.78990303},{"t":1591833600,"v":9324.47584156},{"t":1591920000,"v":9481.74838924},{"t":1592006400,"v":9474.74192302},{"t":1592092800,"v":9386.78789214},{"t":1592179200,"v":9454.15015829},{"t":1592265600,"v":9540.67651404},{"t":1592352000,"v":9483.15268772},{"t":1592438400,"v":9412.43597382},{"t":1592524800,"v":9277.04516149},{"t":1592611200,"v":9335.17939289},{"t":1592697600,"v":9301.37004446},{"t":1592784000,"v":9649.2555242},{"t":1592870400,"v":9628.69403752},{"t":1592956800,"v":9308.97002161},{"t":1593043200,"v":9265.12255402},{"t":1593129600,"v":9165.46400925},{"t":1593216000,"v":9050.08021288},{"t":1593302400,"v":9155.73195906},{"t":1593388800,"v":9200.43803941},{"t":1593475200,"v":9138.25078146},{"t":1593561600,"v":9228.16289438},{"t":1593648000,"v":9123.41015432},{"t":1593734400,"v":9087.30391103},{"t":1593820800,"v":9116.09384322},{"t":1593907200,"v":9075.62293143},{"t":1593993600,"v":9294.80678854},{"t":1594080000,"v":9254.80043974},{"t":1594166400,"v":9425.36948916},{"t":1594252800,"v":9294.76603547},{"t":1594339200,"v":9278.8078672},{"t":1594425600,"v":9240.34632654},{"t":1594512000,"v":9276.49985018},{"t":1594598400,"v":9243.61385509},{"t":1594684800,"v":9243.21341642},{"t":1594771200,"v":9192.83736784},{"t":1594857600,"v":9137.21825621},{"t":1594944000,"v":9149.9429538},{"t":1595030400,"v":9158.56462749},{"t":1595116800,"v":9185.45240342},{"t":1595203200,"v":9177.86448262},{"t":1595289600,"v":9374.78345925},{"t":1595376000,"v":9525.36344997},{"t":1595462400,"v":9579.97977007},{"t":1595548800,"v":9537.79707625},{"t":1595635200,"v":9677.11349729},{"t":1595721600,"v":9906.34519401},{"t":1595808000,"v":11023.434646},{"t":1595894400,"v":10909.9046958},{"t":1595980800,"v":11098.4100908},{"t":1596067200,"v":11121.1587554},{"t":1596153600,"v":11332.4012834},{"t":1596240000,"v":11766.9595624},{"t":1596326400,"v":11059.3145305},{"t":1596412800,"v":11245.5240356},{"t":1596499200,"v":11207.6483786},{"t":1596585600,"v":11751.6655847},{"t":1596672000,"v":11785.14051},{"t":1596758400,"v":11595.3530615},{"t":1596844800,"v":11745.8403294},{"t":1596931200,"v":11672.4786076},{"t":1597017600,"v":11872.1227256},{"t":1597104000,"v":11412.1825511},{"t":1597190400,"v":11576.8771692},{"t":1597276800,"v":11796.3961941},{"t":1597363200,"v":11772.9732991},{"t":1597449600,"v":11864.5063121},{"t":1597536000,"v":11895.1527133},{"t":1597622400,"v":12250.136396},{"t":1597708800,"v":11988.7456259},{"t":1597795200,"v":11758.8645702},{"t":1597881600,"v":11881.7212215},{"t":1597968000,"v":11581.8887181},{"t":1598054400,"v":11689.4073895},{"t":1598140800,"v":11667.8605615},{"t":1598227200,"v":11778.4188516},{"t":1598313600,"v":11375.0539617},{"t":1598400000,"v":11487.5574841},{"t":1598486400,"v":11322.8535935},{"t":1598572800,"v":11539.83493},{"t":1598659200,"v":11512.5428548},{"t":1598745600,"v":11711.5398306},{"t":1598832000,"v":11685.3448054},{"t":1598918400,"v":11968.9674207},{"t":1599004800,"v":11418.0179849},{"t":1599091200,"v":10238.457762},{"t":1599177600,"v":10511.8138807},{"t":1599264000,"v":10169.567221},{"t":1599350400,"v":10280.3517032},{"t":1599436800,"v":10369.5637386},{"t":1599523200,"v":10131.5166457},{"t":1599609600,"v":10242.3477803},{"t":1599696000,"v":10363.1390401},{"t":1599782400,"v":10400.9146854},{"t":1599868800,"v":10442.1706031},{"t":1599955200,"v":10323.7557975},{"t":1600041600,"v":10680.8374328},{"t":1600128000,"v":10796.9509861},{"t":1600214400,"v":10974.9048915},{"t":1600300800,"v":10948.9899152},{"t":1600387200,"v":10944.5858045},{"t":1600473600,"v":11094.3462761},{"t":1600560000,"v":10938.2712894},{"t":1600646400,"v":10462.2596185},{"t":1600732800,"v":10538.4603213},{"t":1600819200,"v":10225.8639271},{"t":1600905600,"v":10745.5486217},{"t":1600992000,"v":10702.290491},{"t":1601078400,"v":10754.4375117},{"t":1601164800,"v":10774.4267558},{"t":1601251200,"v":10721.3270409},{"t":1601337600,"v":10848.8304873},{"t":1601424000,"v":10787.6178668},{"t":1601510400,"v":10623.3301247},{"t":1601596800,"v":10575.972665210369},{"t":1601683200,"v":10549.328899609458},{"t":1601769600,"v":10668.427291917362},{"t":1601856000,"v":10793.339427509689},{"t":1601942400,"v":10604.372976655219},{"t":1602028800,"v":10669.002892309303},{"t":1602115200,"v":10915.611170349574},{"t":1602201600,"v":11064.457592443927},{"t":1602288000,"v":11296.361428209482},{"t":1602374400,"v":11384.210120673994},{"t":1602460800,"v":11555.352382617039},{"t":1602547200,"v":11425.899400698005},{"t":1602633600,"v":11429.530525949574},{"t":1602720000,"v":11495.136250345737},{"t":1602806400,"v":11322.122100253333},{"t":1602892800,"v":11357.507699419104},{"t":1602979200,"v":11483.347447046355},{"t":1603065600,"v":11742.056464068413},{"t":1603152000,"v":11916.334474515823},{"t":1603238400,"v":12823.721613011157},{"t":1603324800,"v":12965.938910967061},{"t":1603411200,"v":12928.422292893309},{"t":1603497600,"v":13112.518308892806},{"t":1603584000,"v":13025.152726171285},{"t":1603670400,"v":13072.25343050888},{"t":1603756800,"v":13638.61347118853},{"t":1603843200,"v":13274.101551486901},{"t":1603929600,"v":13449.310773172034},{"t":1604016000,"v":13567.751090472695},{"t":1604102400,"v":13779.026945510965},{"t":1604188800,"v":13712.179226753678},{"t":1604275200,"v":13558.759567504292},{"t":1604361600,"v":13914.806921199463},{"t":1604448000,"v":14127.434501432557},{"t":1604534400,"v":15556.660674219534},{"t":1604620800,"v":15552.789426236757},{"t":1604707200,"v":14849.092332069495},{"t":1604793600,"v":15486.128766242586},{"t":1604880000,"v":15336.738597655203},{"t":1604966400,"v":15289.794466324061},{"t":1605052800,"v":15693.906873452925},{"t":1605139200,"v":16281.414511965559},{"t":1605225600,"v":16311.513322639245},{"t":1605312000,"v":16075.452733873577},{"t":1605398400,"v":15962.09895156044},{"t":1605484800,"v":16709.612283879444},{"t":1605571200,"v":17667.381593434377},{"t":1605657600,"v":17812.23323674995},{"t":1605744000,"v":17797.55269185706},{"t":1605830400,"v":18624.912737033366},{"t":1605916800,"v":18681.88473987622},{"t":1606003200,"v":18406.836393857495},{"t":1606089600,"v":18340.95092402201},{"t":1606176000,"v":19081.11380920774},{"t":1606262400,"v":18764.47654404935},{"t":1606348800,"v":17106.29070146959},{"t":1606435200,"v":17096.724533063225},{"t":1606521600,"v":17714.060585997013},{"t":1606608000,"v":18147.63645981038},{"t":1606694400,"v":19689.81054499716},{"t":1606780800,"v":18863.78086086128},{"t":1606867200,"v":19196.437039164783},{"t":1606953600,"v":19437.08165850093},{"t":1607040000,"v":18756.340876715585},{"t":1607126400,"v":19137.370640297184},{"t":1607212800,"v":19331.057919958297},{"t":1607299200,"v":19198.32218907732},{"t":1607385600,"v":18327.694817576405},{"t":1607472000,"v":18564.904366246454},{"t":1607558400,"v":18272.716243561048},{"t":1607644800,"v":18079.312133207175},{"t":1607731200,"v":18799.9244382663},{"t":1607817600,"v":19148.693456271252},{"t":1607904000,"v":19246.47838730268},{"t":1607990400,"v":19423.81741657513},{"t":1608076800,"v":21344.961281247066},{"t":1608163200,"v":22790.806538276374},{"t":1608249600,"v":23078.763955584098},{"t":1608336000,"v":23851.242514075984},{"t":1608422400,"v":23549.781123366854},{"t":1608508800,"v":22875.455699730974},{"t":1608595200,"v":23758.933628169103},{"t":1608681600,"v":23279.54929310205},{"t":1608768000,"v":23764.75340487314},{"t":1608854400,"v":24688.21152033385},{"t":1608940800,"v":26440.24870020325},{"t":1609027200,"v":26388.149455672108},{"t":1609113600,"v":27098.952753928424},{"t":1609200000,"v":27324.988106434248},{"t":1609286400,"v":28827.007973579824},{"t":1609372800,"v":28988.642493531017},{"t":1609459200,"v":29354.310492680135},{"t":1609545600,"v":32031.61971248076},{"t":1609632000,"v":32939.057471683795},{"t":1609718400,"v":31930.83940605436},{"t":1609804800,"v":34070.20033180983},{"t":1609891200,"v":36850.14715350343},{"t":1609977600,"v":39241.93637401782},{"t":1610064000,"v":40771.75946402795},{"t":1610150400,"v":40388.87363752308},{"t":1610236800,"v":38474.29606929845},{"t":1610323200,"v":35603.36377377936},{"t":1610409600,"v":33879.45142976907},{"t":1610496000,"v":37320.808100849805},{"t":1610582400,"v":39192.56322801528},{"t":1610668800,"v":36732.76292548016},{"t":1610755200,"v":36206.743416714606},{"t":1610841600,"v":35774.02336857131},{"t":1610928000,"v":36642.53189467641},{"t":1611014400,"v":36072.63455672601},{"t":1611100800,"v":35553.550809646295},{"t":1611187200,"v":30818.59900858709},{"t":1611273600,"v":33004.723330040426},{"t":1611360000,"v":32057.57127381432},{"t":1611446400,"v":32293.27014680785},{"t":1611532800,"v":32368.11499830086},{"t":1611619200,"v":32571.321685764407},{"t":1611705600,"v":30438.367004209395},{"t":1611792000,"v":33459.35125206922},{"t":1611878400,"v":34318.52819983214},{"t":1611964800,"v":34258.12290596416},{"t":1612051200,"v":33108.29665129587},{"t":1612137600,"v":33543.85974350085},{"t":1612224000,"v":35524.119952273206},{"t":1612310400,"v":37451.367472916325},{"t":1612396800,"v":36924.74200585988},{"t":1612483200,"v":38123.15354014715},{"t":1612569600,"v":39271.99676818323},{"t":1612656000,"v":38904.21414938871},{"t":1612742400,"v":45981.864589684476},{"t":1612828800,"v":46506.134809077426},{"t":1612915200,"v":44886.381099679624},{"t":1613001600,"v":47812.53533389692},{"t":1613088000,"v":47482.86135240913},{"t":1613174400,"v":47067.939135262444},{"t":1613260800,"v":48747.45244155483},{"t":1613347200,"v":47984.954753679056},{"t":1613433600,"v":49175.90051592181},{"t":1613520000,"v":52138.04498768492},{"t":1613606400,"v":51649.57543629381},{"t":1613692800,"v":55776.18881251338},{"t":1613779200,"v":56134.54415202914},{"t":1613865600,"v":57487.03807408455},{"t":1613952000,"v":54092.68879988714},{"t":1614038400,"v":48548.9572135791},{"t":1614124800,"v":49652.01003172871},{"t":1614211200,"v":47209.544068730516},{"t":1614297600,"v":46243.95205410501},{"t":1614384000,"v":46319.696393610844},{"t":1614470400,"v":45119.12569768188},{"t":1614556800,"v":49768.16035012147},{"t":1614643200,"v":48401.732978524866},{"t":1614729600,"v":50698.56833524798},{"t":1614816000,"v":48515.770213777236},{"t":1614902400,"v":48915.789594568705},{"t":1614988800,"v":48905.87987030982},{"t":1615075200,"v":51282.11369865597},{"t":1615161600,"v":52307.860713183174},{"t":1615248000,"v":54696.82182220556},{"t":1615334400,"v":56128.767227455},{"t":1615420800,"v":57800.36671419076},{"t":1615507200,"v":57372.32951283427},{"t":1615593600,"v":61217.050879895614},{"t":1615680000,"v":59728.59392893374},{"t":1615766400,"v":55813.8936028549},{"t":1615852800,"v":56488.62247040071},{"t":1615939200,"v":58748.92354285633},{"t":1616025600,"v":57887.8812431903},{"t":1616112000,"v":58374.206863912295},{"t":1616198400,"v":58443.52143446477},{"t":1616284800,"v":57521.45671319987},{"t":1616371200,"v":54608.25914921329},{"t":1616457600,"v":54888.85537030697},{"t":1616544000,"v":52774.26369049241},{"t":1616630400,"v":51704.16192519879},{"t":1616716800,"v":55137.31372577932},{"t":1616803200,"v":56067.945548474745},{"t":1616889600,"v":55991.20119647779},{"t":1616976000,"v":57769.14012066299},{"t":1617062400,"v":58937.638886814275},{"t":1617148800,"v":58954.497008149716},{"t":1617235200,"v":59118.97407768802},{"t":1617321600,"v":59392.14948112517},{"t":1617408000,"v":57642.97095819078},{"t":1617494400,"v":58752.80659415484},{"t":1617580800,"v":58898.76589833386},{"t":1617667200,"v":58243.4539402529},{"t":1617753600,"v":56219.39629880624},{"t":1617840000,"v":58321.10713544663},{"t":1617926400,"v":58245.00300108353},{"t":1618012800,"v":59793.23541009381},{"t":1618099200,"v":60226.42360963432},{"t":1618185600,"v":59915.46446523154},{"t":1618272000,"v":63603.70817233695},{"t":1618358400,"v":62922.213180229075},{"t":1618444800,"v":63285.56727067338},{"t":1618531200,"v":61611.99680584272},{"t":1618617600,"v":60803.84653163625},{"t":1618704000,"v":56163.105403277135},{"t":1618790400,"v":55657.83923174755},{"t":1618876800,"v":56379.21247716248},{"t":1618963200,"v":53861.436959475745},{"t":1619049600,"v":51826.89354372698},{"t":1619136000,"v":51027.733327861744},{"t":1619222400,"v":50020.15342145914},{"t":1619308800,"v":49039.862341498076},{"t":1619395200,"v":54006.25201262605},{"t":1619481600,"v":54981.4799948714},{"t":1619568000,"v":54793.39452980505},{"t":1619654400,"v":53558.66206906318},{"t":1619740800,"v":57775.27815155285},{"t":1619827200,"v":57811.517527593925},{"t":1619913600,"v":56613.20264847865},{"t":1620000000,"v":57200.29122289164},{"t":1620086400,"v":53333.53775274298},{"t":1620172800,"v":57424.005948133796},{"t":1620259200,"v":56485.701296946165},{"t":1620345600,"v":57369.55799873567},{"t":1620432000,"v":58766.58487466966},{"t":1620518400,"v":58218.56607679752},{"t":1620604800,"v":55824.86166666395},{"t":1620691200,"v":56714.088910232254},{"t":1620777600,"v":49916.49449913513},{"t":1620864000,"v":49729.30250032533},{"t":1620950400,"v":49873.68639240858},{"t":1621036800,"v":46803.830522483644},{"t":1621123200,"v":46406.33154419618},{"t":1621209600,"v":43382.14785916692},{"t":1621296000,"v":42985.843096399796},{"t":1621382400,"v":37151.95393552557},{"t":1621468800,"v":40512.11108015661},{"t":1621555200,"v":37273.44235496146},{"t":1621641600,"v":37645.72214685647},{"t":1621728000,"v":34888.67831280685},{"t":1621814400,"v":38669.0184494052},{"t":1621900800,"v":38211.78552190482},{"t":1621987200,"v":39266.35535111086},{"t":1622073600,"v":38530.1395731867},{"t":1622160000,"v":35690.74355653414},{"t":1622246400,"v":34613.06385325806},{"t":1622332800,"v":35639.981454563684},{"t":1622419200,"v":37317.276797389924},{"t":1622505600,"v":36642.32959185035},{"t":1622592000,"v":37659.80709526973},{"t":1622678400,"v":39173.79329215054},{"t":1622764800,"v":36975.00656850563},{"t":1622851200,"v":35533.74658759773},{"t":1622937600,"v":35797.42238993168},{"t":1623024000,"v":33577.694225233514},{"t":1623110400,"v":33452.00225490226},{"t":1623196800,"v":37290.99177617837},{"t":1623283200,"v":36744.73930845569},{"t":1623369600,"v":37242.88691336585},{"t":1623456000,"v":35512.90011452891},{"t":1623542400,"v":39019.88742092465},{"t":1623628800,"v":40536.096186703144},{"t":1623715200,"v":40239.188062720765},{"t":1623801600,"v":38287.525924097135},{"t":1623888000,"v":38109.19708064974},{"t":1623974400,"v":35713.84377788781},{"t":1624060800,"v":35668.695876869904},{"t":1624147200,"v":35704.62085788758},{"t":1624233600,"v":31586.754526998815},{"t":1624320000,"v":32477.421130990322},{"t":1624406400,"v":33652.92415463683},{"t":1624492800,"v":34629.99104463987},{"t":1624579200,"v":31670.672544371268},{"t":1624665600,"v":31982.57003176423},{"t":1624752000,"v":34607.288973134804},{"t":1624838400,"v":34408.64609236688},{"t":1624924800,"v":35900.15433447891},{"t":1625011200,"v":35024.606828788485},{"t":1625097600,"v":33568.58643061468},{"t":1625184000,"v":33933.60148407786},{"t":1625270400,"v":34674.53246619413},{"t":1625356800,"v":35285.09656628057},{"t":1625443200,"v":33821.80911722237},{"t":1625529600,"v":34158.92122381347},{"t":1625616000,"v":33850.91409077919},{"t":1625702400,"v":32847.39678991275},{"t":1625788800,"v":33878.23686193274},{"t":1625875200,"v":33517.87334009401},{"t":1625961600,"v":34242.67250669811},{"t":1626048000,"v":33186.37684498091},{"t":1626134400,"v":32616.020911028223},{"t":1626220800,"v":32808.31518654271},{"t":1626307200,"v":31671.443053709256},{"t":1626393600,"v":31426.89947869541},{"t":1626480000,"v":31548.922957613315},{"t":1626566400,"v":31814.34827840592},{"t":1626652800,"v":30834.368390233183},{"t":1626739200,"v":29783.01141710609},{"t":1626825600,"v":32131.635486882926},{"t":1626912000,"v":32328.209838049966},{"t":1626998400,"v":33498.822498185575},{"t":1627084800,"v":34265.55624474202},{"t":1627171200,"v":35242.6443568511},{"t":1627257600,"v":37401.18874998933},{"t":1627344000,"v":39315.132254921446},{"t":1627430400,"v":40021.27288558416},{"t":1627516800,"v":40037.52162230717},{"t":1627603200,"v":42080.75491077187},{"t":1627689600,"v":41692.75732333602},{"t":1627776000,"v":40135.33200074718},{"t":1627862400,"v":39183.67244883457},{"t":1627948800,"v":38160.716653116004},{"t":1628035200,"v":39799.303765271405},{"t":1628121600,"v":40854.599720736376},{"t":1628208000,"v":42826.8312632613},{"t":1628294400,"v":44689.86095932558},{"t":1628380800,"v":43785.48181939978},{"t":1628467200,"v":46284.97398221619},{"t":1628553600,"v":45594.07627236636},{"t":1628640000,"v":45593.63593070519},{"t":1628726400,"v":44428.288466806436},{"t":1628812800,"v":47831.97604291269},{"t":1628899200,"v":47096.94566198037},{"t":1628985600,"v":47064.63037062539},{"t":1629072000,"v":46004.484078602196},{"t":1629158400,"v":44695.35761921304},{"t":1629244800,"v":44801.18871714413},{"t":1629331200,"v":46717.578745203784},{"t":1629417600,"v":49339.17603687802},{"t":1629504000,"v":48905.49058554897},{"t":1629590400,"v":49321.65404941213},{"t":1629676800,"v":49546.147707289056},{"t":1629763200,"v":47756.00188106575},{"t":1629849600,"v":48961.76778660005},{"t":1629936000,"v":46940.70765177846},{"t":1630022400,"v":49024.03094495386},{"t":1630108800,"v":48883.29014045116},{"t":1630195200,"v":48947.258970319264},{"t":1630281600,"v":47093.88091858282},{"t":1630368000,"v":47238.2268323822},{"t":1630454400,"v":48763.85643533685},{"t":1630540800,"v":49341.853804627746},{"t":1630627200,"v":50011.34681209545},{"t":1630713600,"v":49951.92415055585},{"t":1630800000,"v":51741.55077722714},{"t":1630886400,"v":52610.5411520828},{"t":1630972800,"v":46795.20910754369},{"t":1631059200,"v":46039.08212736113},{"t":1631145600,"v":46377.168738477005},{"t":1631232000,"v":44888.12370523385},{"t":1631318400,"v":45147.44035889953},{"t":1631404800,"v":46082.23150321188},{"t":1631491200,"v":45004.701974221185},{"t":1631577600,"v":47031.16732364414},{"t":1631664000,"v":48143.03744946416},{"t":1631750400,"v":47799.18503883096},{"t":1631836800,"v":47204.66266010661},{"t":1631923200,"v":48234.21547366776},{"t":1632009600,"v":47257.2870422188},{"t":1632096000,"v":42907.065767455875},{"t":1632182400,"v":40633.9343353387},{"t":1632268800,"v":43569.17620056878},{"t":1632355200,"v":44890.04746964758},{"t":1632441600,"v":42796.24321532524},{"t":1632528000,"v":42746.97922403371},{"t":1632614400,"v":43247.456876465236},{"t":1632700800,"v":42248.01771773999},{"t":1632787200,"v":41032.26192917951},{"t":1632873600,"v":41538.282988017854},{"t":1632960000,"v":43750.871798624525},{"t":1633046400,"v":48118.17770595206},{"t":1633132800,"v":47756.25428303739},{"t":1633219200,"v":48220.65303746762},{"t":1633305600,"v":49080.66909231698},{"t":1633392000,"v":51559.362044222966},{"t":1633478400,"v":55431.02700201357},{"t":1633564800,"v":53776.5428709291},{"t":1633651200,"v":53884.290533191845},{"t":1633737600,"v":55068.64354562132},{"t":1633824000,"v":54675.093215311404},{"t":1633910400,"v":57434.24099023865},{"t":1633996800,"v":56064.76997697855},{"t":1634083200,"v":57377.79917693812},{"t":1634169600,"v":57354.32086331414},{"t":1634256000,"v":61571.094905218495},{"t":1634342400,"v":60890.14283083667},{"t":1634428800,"v":61640.37510539247},{"t":1634515200,"v":61975.54697314697},{"t":1634601600,"v":64238.27110780218},{"t":1634688000,"v":65996.5661678894},{"t":1634774400,"v":62385.16707125176},{"t":1634860800,"v":60703.42954102141},{"t":1634947200,"v":61342.90825481901},{"t":1635033600,"v":60881.947564871894},{"t":1635120000,"v":62967.41302302343},{"t":1635206400,"v":60449.35530260795},{"t":1635292800,"v":58639.68046139201},{"t":1635379200,"v":60572.27124397584},{"t":1635465600,"v":62234.031011430285},{"t":1635552000,"v":61735.370669844706},{"t":1635638400,"v":61366.99988156578},{"t":1635724800,"v":61058.22626537975},{"t":1635811200,"v":63176.571785319764},{"t":1635897600,"v":62999.122403911184},{"t":1635984000,"v":61434.63281689667},{"t":1636070400,"v":61121.31052072735},{"t":1636156800,"v":61493.6638971142},{"t":1636243200,"v":63252.42476178271},{"t":1636329600,"v":67589.00657928495},{"t":1636416000,"v":66945.69883396852},{"t":1636502400,"v":64818.21602921305},{"t":1636588800,"v":64816.13453056888},{"t":1636675200,"v":64282.438060508306},{"t":1636761600,"v":64468.22210883111},{"t":1636848000,"v":65342.41990215841},{"t":1636934400,"v":63743.399959489085},{"t":1637020800,"v":60312.902355847786},{"t":1637107200,"v":60357.17150473297},{"t":1637193600,"v":56875.86578270761},{"t":1637280000,"v":58130.998447175196},{"t":1637366400,"v":59767.49239601791},{"t":1637452800,"v":58653.93706354738},{"t":1637539200,"v":56345.421342238486},{"t":1637625600,"v":57599.536234919666},{"t":1637712000,"v":57185.986384863936},{"t":1637798400,"v":58927.890687830026},{"t":1637884800,"v":53761.70172458773},{"t":1637971200,"v":54542.06360428747},{"t":1638057600,"v":57201.70801545579},{"t":1638144000,"v":57816.06529203574},{"t":1638230400,"v":56915.51221084483},{"t":1638316800,"v":57182.67601379536},{"t":1638403200,"v":56448.44868071566},{"t":1638489600,"v":53765.79648309126},{"t":1638576000,"v":48962.920993272506},{"t":1638662400,"v":49174.902908060714},{"t":1638748800,"v":50492.43559639025},{"t":1638835200,"v":50592.088497950775},{"t":1638921600,"v":50521.23639994827},{"t":1639008000,"v":47911.076404276886},{"t":1639094400,"v":47262.23744299545},{"t":1639180800,"v":49354.08716867792},{"t":1639267200,"v":50118.920959284056},{"t":1639353600,"v":46762.482528056156},{"t":1639440000,"v":48413.70564738807},{"t":1639526400,"v":48819.849347231386},{"t":1639612800,"v":47695.28039490217},{"t":1639699200,"v":46326.91959569937},{"t":1639785600,"v":46962.91334059254},{"t":1639872000,"v":46791.896055954865},{"t":1639958400,"v":46853.71063454527},{"t":1640044800,"v":48957.19391098451},{"t":1640131200,"v":48646.43337566828},{"t":1640217600,"v":50770.61418965044},{"t":1640304000,"v":50864.328952351185},{"t":1640390400,"v":50649.92614866225},{"t":1640476800,"v":50806.442175331875},{"t":1640563200,"v":50610.956802940294},{"t":1640649600,"v":47669.740372077125},{"t":1640736000,"v":46407.595489642925},{"t":1640822400,"v":47188.3205500879},{"t":1640908800,"v":46328.94313808985},{"t":1640995200,"v":47620.42381093365},{"t":1641081600,"v":47344.843409743444},{"t":1641168000,"v":46467.61579525452},{"t":1641254400,"v":45926.76178657015},{"t":1641340800,"v":43589.355683071975},{"t":1641427200,"v":43154.45522485052},{"t":1641513600,"v":41564.23901043853}]' + string: "\r\n401 Authorization Required\r\n\r\n

401 + Authorization Required

\r\n
nginx
\r\n\r\n\r\n" headers: Access-Control-Allow-Credentials: - 'true' @@ -20,21 +21,15 @@ interactions: - https://studio.glassnode.com Connection: - keep-alive + Content-Length: + - '172' Content-Type: - - text/plain; charset=utf-8 + - text/html Date: - - Mon, 20 Jun 2022 09:50:59 GMT + - Wed, 28 Sep 2022 09:14:26 GMT Strict-Transport-Security: - max-age=15724800; includeSubDomains - Transfer-Encoding: - - chunked - X-Rate-Limit-Limit: - - '30' - X-Rate-Limit-Remaining: - - '28' - X-Rate-Limit-Reset: - - '60' status: - code: 200 - message: OK + code: 401 + message: Unauthorized version: 1 diff --git a/tests/openbb_terminal/cryptocurrency/due_diligence/test_glassnode_view.py b/tests/openbb_terminal/cryptocurrency/due_diligence/test_glassnode_view.py index 3d046792efe..032848e067b 100644 --- a/tests/openbb_terminal/cryptocurrency/due_diligence/test_glassnode_view.py +++ b/tests/openbb_terminal/cryptocurrency/due_diligence/test_glassnode_view.py @@ -18,4 +18,4 @@ def vcr_config(): def test_display_btc_rainbow(mocker): # MOCK VISUALIZE_OUTPUT mocker.patch(target="openbb_terminal.helper_classes.TerminalStyle.visualize_output") - glassnode_view.display_btc_rainbow(start_date=1_325_376_000, end_date=1_641_641_877) + glassnode_view.display_btc_rainbow(start_date="2012-01-01", end_date="2022-01-08") diff --git a/tests/openbb_terminal/cryptocurrency/due_diligence/txt/test_glassnode_view/test_display_btc_rainbow.txt b/tests/openbb_terminal/cryptocurrency/due_diligence/txt/test_glassnode_view/test_display_btc_rainbow.txt index e69de29bb2d..ea7b1de3bfe 100644 --- a/tests/openbb_terminal/cryptocurrency/due_diligence/txt/test_glassnode_view/test_display_btc_rainbow.txt +++ b/tests/openbb_terminal/cryptocurrency/due_diligence/txt/test_glassnode_view/test_display_btc_rainbow.txt @@ -0,0 +1,2 @@ +[red]Invalid API Key[/red] + diff --git a/tests/openbb_terminal/stocks/options/test_options_controller.py b/tests/openbb_terminal/stocks/options/test_options_controller.py index a7614f1d100..0a202f9922e 100644 --- a/tests/openbb_terminal/stocks/options/test_options_controller.py +++ b/tests/openbb_terminal/stocks/options/test_options_controller.py @@ -874,10 +874,10 @@ def test_call_func( ): path_controller = "openbb_terminal.stocks.options.options_controller" - # MOCK TRADIER_TOKEN + # MOCK API_TRADIER_TOKEN mocker.patch.object( target=options_controller, - attribute="TRADIER_TOKEN", + attribute="API_TRADIER_TOKEN", new="MOCK_TRADIER_TOKEN", ) diff --git a/tests/openbb_terminal/test_keys_controller.py b/tests/openbb_terminal/test_keys_controller.py index ee37c8836b7..9de27f58827 100644 --- a/tests/openbb_terminal/test_keys_controller.py +++ b/tests/openbb_terminal/test_keys_controller.py @@ -9,7 +9,7 @@ controller = KeysController(menu_usage=False) @pytest.fixture(autouse=True) def no_change_env(mocker): - mocker.patch("openbb_terminal.keys_controller.dotenv.set_key") + mocker.patch("openbb_terminal.keys_model.dotenv.set_key") class MockCFG: @@ -21,7 +21,7 @@ class MockCFG: self.API_POLYGON_KEY = kwargs.get("POLYGON", None) self.API_FRED_KEY = kwargs.get("FRED", None) self.API_NEWS_TOKEN = kwargs.get("NEWS", None) - self.TRADIER_TOKEN = kwargs.get("TRADIER", None) + self.API_TRADIER_TOKEN = kwargs.get("TRADIER", None) self.API_CMC_KEY = kwargs.get("CMC", None) self.API_FINNHUB_KEY = kwargs.get("FINNHUB", None) self.API_IEX_TOKEN = kwargs.get("IEX", None) @@ -58,220 +58,18 @@ class MockCFG: self.API_MESSARI_KEY = kwargs.get("MESSARI", None) -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_github_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(GITHUB=key)) - controller.check_github_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_av_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(AV=key)) - controller.check_av_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_fmp_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(FMP=key)) - controller.check_fmp_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_quandl_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(QUANDL=key)) - controller.check_quandl_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_polygon_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(POLYGON=key)) - controller.check_polygon_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_fred_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(FRED=key)) - controller.check_fred_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_news_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(NEWS=key)) - controller.check_news_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_tradier_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(TRADIER=key)) - controller.check_tradier_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_cmc_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(CMC=key)) - controller.check_cmc_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_finnhub_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(FINNHUB=key)) - controller.check_finnhub_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_iex_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(IEX=key)) - controller.check_iex_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_reddit_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(REDDIT_CLIENT=key)) - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(REDDIT_SECRET=key)) - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(REDDIT_USERNAME=key)) - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(REDDIT_PASSWORD=key)) - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(REDDIT_USER=key)) - controller.check_cmc_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_twitter_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(TWITTER=key)) - controller.check_twitter_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_rh_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(RH=key)) - controller.check_rh_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_degiro_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(DEGIRO=key)) - controller.check_degiro_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_oanda_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(OANDA=key)) - controller.check_oanda_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_binance_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(BINANCE=key)) - controller.check_binance_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_bitquery_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(BITQUERY=key)) - controller.check_bitquery_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_si_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(SI=key)) - controller.check_si_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_coinbase_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(COINBASE=key)) - controller.check_coinbase_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_walert_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(WALERT=key)) - controller.check_walert_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_glassnode_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(GLASSNODE=key)) - controller.check_glassnode_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_coinglass_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(COINGLASS=key)) - controller.check_coinglass_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_cpanic_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(CPANIC=key)) - controller.check_cpanic_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_ethplorer_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(ETHPLOR=key)) - controller.check_ethplorer_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_smartstake_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(SMARTSTAKE=key)) - controller.check_smartstake_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_santiment_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(SANTIMENT=key)) - controller.check_santiment_key(output) - - -@pytest.mark.vcr -@pytest.mark.parametrize("key, output", [("REPLACE_ME", True), ("VALIDKEY", False)]) -def test_check_messari_key(key, output, mocker): - mocker.patch("openbb_terminal.keys_controller.cfg", MockCFG(MESSARI=key)) - controller.check_messari_key(output) +# TODO: add mykeys test to assert df +# TODO: add refresh test @pytest.mark.skip def test_print_help(mocker): - mocker.patch("openbb_terminal.keys_controller.KeysController.check_coinbase_key") + mocker.patch("openbb_terminal.keys_controller.KeysController.check_keys_status") controller.print_help() @pytest.mark.vcr @pytest.mark.parametrize("other", [[], ["-k", "1234"], ["1234"]]) -def test_call_github(other): - controller.call_github(other) - - -@pytest.mark.skip -@pytest.mark.parametrize("other", [[], ["-k", "1234"], ["1234"]]) def test_call_av(other): controller.call_av(other) @@ -424,11 +222,17 @@ def test_call_smartstake(other): @pytest.mark.vcr @pytest.mark.parametrize("other", [[], ["-k", "1234"], ["1234"]]) -def test_call_santiment(other): - controller.call_santiment(other) +def test_call_github(other): + controller.call_github(other) @pytest.mark.vcr @pytest.mark.parametrize("other", [[], ["-k", "1234", "-t", "456"]]) def test_call_messari(other): controller.call_messari(other) + + +@pytest.mark.vcr +@pytest.mark.parametrize("other", [[], ["-k", "1234"], ["1234"]]) +def test_call_santiment(other): + controller.call_santiment(other) diff --git a/tests/openbb_terminal/test_keys_model.py b/tests/openbb_terminal/test_keys_model.py new file mode 100644 index 00000000000..1b822b888fb --- /dev/null +++ b/tests/openbb_terminal/test_keys_model.py @@ -0,0 +1,1592 @@ +import os +from typing import List +from unittest.mock import patch +from pathlib import Path +import pandas as pd +import pytest + +from openbb_terminal import keys_model + +# pylint: disable=R0902,R0903,W1404,C0302 + + +# Test persist +@patch.dict(os.environ, {}, clear=True) +@pytest.mark.parametrize( + "env_var_name, env_var_value, persist", + [("OPENBB_API_TEST", "TEST_KEY", True), ("OPENBB_API_TEST", "TEST_KEY", False)], +) +def test_set_key(env_var_name: str, env_var_value: str, persist: bool): + + # Route .env file location + keys_model.USER_ENV_FILE = Path(os.path.dirname(__file__), ".tmp") + + # Test + keys_model.set_key(env_var_name, env_var_value, persist) + + # Get key from temp .env + dotenv_key = keys_model.dotenv.get_key( + str(keys_model.USER_ENV_FILE), key_to_get=env_var_name + ) + + # Remove temp .env + if keys_model.USER_ENV_FILE.is_file(): + os.remove(keys_model.USER_ENV_FILE) + + # Get key from patched os.environ + os_key = os.getenv(env_var_name) + + # Get key from config_terminal.py + if env_var_name.startswith("OPENBB_"): + env_var_name = env_var_name[7:] + cfg_key = getattr(keys_model.cfg, env_var_name) + + if persist is True: + assert dotenv_key == os_key == cfg_key == env_var_value + else: + assert (dotenv_key is None) and (os_key is None) and (cfg_key == env_var_value) + + +def test_get_keys(): + df = keys_model.get_keys() + assert isinstance(df, pd.DataFrame) + + +def set_naive_environment(env_var_name_list: List[str]) -> None: + + tmp_env = Path(os.path.dirname(__file__), ".tmp") + + # Remove keys from patched os.environ + for env_var_name in env_var_name_list: + if env_var_name in os.environ: + os.environ.pop(env_var_name) + + # Remove .tmp content + if tmp_env.is_file(): + with open(tmp_env, "w") as f: + f.close() + + # Set new temporary .env + keys_model.USER_ENV_FILE = tmp_env + + +def assert_keys_and_status( + args: List[str], + persist: bool, + expected: str, + env_var_name_list: List[str], + status: str, +) -> None: + + for i, env_var_name in enumerate(env_var_name_list): + + dotenv_var = keys_model.dotenv.get_key( + str(keys_model.USER_ENV_FILE), key_to_get=env_var_name + ) + + os_var = os.getenv(env_var_name) + + if env_var_name.startswith("OPENBB_"): + env_var_name = env_var_name[7:] + cfg_var = getattr(keys_model.cfg, env_var_name) + + if persist is True: + assert dotenv_var == os_var == cfg_var == args[i] + else: + assert (dotenv_var is None) and (os_var is None) and (cfg_var == args[i]) + + assert status == expected + + +# Alphavantage api is working with any key you pass, so expected is 1 with dummy keys +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_PASSED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_PASSED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_PASSED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_av_key(args: List[str], persist: bool, show_output: bool, expected: str): + + env_var_name_list = [ + "OPENBB_API_KEY_ALPHAVANTAGE", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_av_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_fmp_key(args: List[str], persist: bool, show_output: bool, expected: str): + + env_var_name_list = [ + "OPENBB_API_KEY_FINANCIALMODELINGPREP", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_fmp_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_quandl_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_KEY_QUANDL", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_quandl_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_polygon_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_POLYGON_KEY", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_polygon_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_fred_key(args: List[str], persist: bool, show_output: bool, expected: str): + + env_var_name_list = [ + "OPENBB_API_FRED_KEY", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_fred_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_news_key(args: List[str], persist: bool, show_output: bool, expected: str): + + env_var_name_list = [ + "OPENBB_API_NEWS_TOKEN", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_news_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_tradier_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_TRADIER_TOKEN", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_tradier_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_cmc_key(args: List[str], persist: bool, show_output: bool, expected: str): + + env_var_name_list = [ + "OPENBB_API_CMC_KEY", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_cmc_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_finnhub_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_FINNHUB_KEY", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_finnhub_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_iex_key(args: List[str], persist: bool, show_output: bool, expected: str): + + env_var_name_list = [ + "OPENBB_API_IEX_TOKEN", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_iex_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_id", "test_secret", "test_pass", "test_user", "test_agent"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_id", "test_secret", "test_pass", "test_user", "test_agent"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_id", "test_secret", "test_pass", "test_user", "test_agent"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME", "REPLACE_ME", "REPLACE_ME", "REPLACE_ME", "REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_reddit_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_REDDIT_CLIENT_ID", + "OPENBB_API_REDDIT_CLIENT_SECRET", + "OPENBB_API_REDDIT_PASSWORD", + "OPENBB_API_REDDIT_USERNAME", + "OPENBB_API_REDDIT_USER_AGENT", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_reddit_key( + client_id=args[0], + client_secret=args[1], + password=args[2], + username=args[3], + useragent=args[4], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_bitquery_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_BITQUERY_KEY", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_bitquery_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key", "test_secret", "test_access_token"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key", "test_secret", "test_access_token"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key", "test_secret", "test_access_token"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME", "REPLACE_ME", "REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_twitter_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_TWITTER_KEY", + "OPENBB_API_TWITTER_SECRET_KEY", + "OPENBB_API_TWITTER_BEARER_TOKEN", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_twitter_key( + key=args[0], + secret=args[1], + access_token=args[2], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_username", "test_password"], + False, + True, + keys_model.KeyStatus.DEFINED_NOT_TESTED, + ), + ( + ["test_username", "test_password"], + False, + False, + keys_model.KeyStatus.DEFINED_NOT_TESTED, + ), + ( + ["test_username", "test_password"], + True, + True, + keys_model.KeyStatus.DEFINED_NOT_TESTED, + ), + ( + ["REPLACE_ME", "REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_rh_key(args: List[str], persist: bool, show_output: bool, expected: str): + + env_var_name_list = [ + "OPENBB_RH_USERNAME", + "OPENBB_RH_PASSWORD", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_rh_key( + username=args[0], + password=args[1], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_username", "test_password", "test_secret"], + False, + True, + keys_model.KeyStatus.DEFINED_NOT_TESTED, + ), + ( + ["test_username", "test_password", "test_secret"], + False, + False, + keys_model.KeyStatus.DEFINED_NOT_TESTED, + ), + ( + ["test_username", "test_password", "test_secret"], + True, + True, + keys_model.KeyStatus.DEFINED_NOT_TESTED, + ), + ( + ["REPLACE_ME", "REPLACE_ME", "REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_degiro_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_DG_USERNAME", + "OPENBB_DG_PASSWORD", + "OPENBB_DG_TOTP_SECRET", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_degiro_key( + username=args[0], + password=args[1], + secret=args[2], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_account", "test_access_token", "account_type"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_account", "test_access_token", "account_type"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_account", "test_access_token", "account_type"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME", "REPLACE_ME", "REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_oanda_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_OANDA_ACCOUNT", + "OPENBB_OANDA_TOKEN", + "OPENBB_OANDA_ACCOUNT_TYPE", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_oanda_key( + account=args[0], + access_token=args[1], + account_type=args[2], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key", "test_secret"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key", "test_secret"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key", "test_secret"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME", "REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_binance_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_BINANCE_KEY", + "OPENBB_API_BINANCE_SECRET", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_binance_key( + key=args[0], + secret=args[1], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_si_key(args: List[str], persist: bool, show_output: bool, expected: str): + + env_var_name_list = [ + "OPENBB_API_SENTIMENTINVESTOR_TOKEN", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_si_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key", "test_secret", "test_passphrase"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key", "test_secret", "test_passphrase"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key", "test_secret", "test_passphrase"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME", "REPLACE_ME", "REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_coinbase_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_COINBASE_KEY", + "OPENBB_API_COINBASE_SECRET", + "OPENBB_API_COINBASE_PASS_PHRASE", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_coinbase_key( + key=args[0], + secret=args[1], + passphrase=args[2], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_walert_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_WHALE_ALERT_KEY", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_walert_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_glassnode_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_GLASSNODE_KEY", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_glassnode_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_coinglass_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_COINGLASS_KEY", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_coinglass_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_cpanic_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_CRYPTO_PANIC_KEY", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_cpanic_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_ethplorer_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_ETHPLORER_KEY", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_ethplorer_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key", "test_access_token"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key", "test_access_token"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key", "test_access_token"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME", "REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_smartstake_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_SMARTSTAKE_KEY", + "OPENBB_API_SMARTSTAKE_TOKEN", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_smartstake_key( + key=args[0], + access_token=args[1], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_NOT_TESTED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_NOT_TESTED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_NOT_TESTED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_github_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_GITHUB_KEY", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_github_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_messari_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_MESSARI_KEY", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_messari_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_eodhd_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_EODHD_KEY", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_eodhd_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) + + +@patch.dict(os.environ, {}) +@pytest.mark.vcr +@pytest.mark.record_stdout +@pytest.mark.parametrize( + "args, persist, show_output, expected", + [ + ( + ["test_key"], + False, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + False, + False, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["test_key"], + True, + True, + keys_model.KeyStatus.DEFINED_TEST_FAILED, + ), + ( + ["REPLACE_ME"], + False, + True, + keys_model.KeyStatus.NOT_DEFINED, + ), + ], +) +def test_set_santiment_key( + args: List[str], persist: bool, show_output: bool, expected: str +): + + env_var_name_list = [ + "OPENBB_API_SANTIMENT_KEY", + ] + + set_naive_environment(env_var_name_list) + + status = keys_model.set_santiment_key( + key=args[0], + persist=persist, + show_output=show_output, + ) + + assert_keys_and_status(args, persist, expected, env_var_name_list, status) diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_av_key[args0-False-True-defined, test passed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_av_key[args0-False-True-defined, test passed].txt new file mode 100644 index 00000000000..e8618784af7 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_av_key[args0-False-True-defined, test passed].txt @@ -0,0 +1,2 @@ +[green]defined, test passed[/green] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_av_key[args1-False-False-defined, test passed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_av_key[args1-False-False-defined, test passed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_av_key[args2-True-True-defined, test passed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_av_key[args2-True-True-defined, test passed].txt new file mode 100644 index 00000000000..e8618784af7 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_av_key[args2-True-True-defined, test passed].txt @@ -0,0 +1,2 @@ +[green]defined, test passed[/green] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_av_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_av_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_av_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_binance_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_binance_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_binance_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_binance_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_binance_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_binance_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_binance_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_binance_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_binance_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_binance_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_binance_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_bitquery_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_bitquery_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_bitquery_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_bitquery_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_bitquery_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_bitquery_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_bitquery_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_bitquery_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_bitquery_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_bitquery_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_bitquery_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_cmc_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_cmc_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_cmc_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_cmc_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_cmc_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_cmc_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_cmc_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_cmc_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_cmc_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_cmc_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_cmc_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_coinbase_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_coinbase_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_coinbase_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_coinbase_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_coinbase_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_coinbase_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_coinbase_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_coinbase_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_coinbase_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_coinbase_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_coinbase_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_coinglass_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_coinglass_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_coinglass_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_coinglass_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_coinglass_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_coinglass_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_coinglass_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_coinglass_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_coinglass_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_coinglass_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_coinglass_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_cpanic_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_cpanic_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_cpanic_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_cpanic_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_cpanic_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_cpanic_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_cpanic_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_cpanic_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_cpanic_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_cpanic_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_cpanic_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_degiro_key[args0-False-True-defined, not tested].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_degiro_key[args0-False-True-defined, not tested].txt new file mode 100644 index 00000000000..d262038ba82 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_degiro_key[args0-False-True-defined, not tested].txt @@ -0,0 +1,2 @@ +[yellow]defined, not tested[/yellow] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_degiro_key[args1-False-False-defined, not tested].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_degiro_key[args1-False-False-defined, not tested].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_degiro_key[args2-True-True-defined, not tested].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_degiro_key[args2-True-True-defined, not tested].txt new file mode 100644 index 00000000000..d262038ba82 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_degiro_key[args2-True-True-defined, not tested].txt @@ -0,0 +1,2 @@ +[yellow]defined, not tested[/yellow] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_degiro_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_degiro_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_degiro_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_eodhd_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_eodhd_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_eodhd_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_eodhd_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_eodhd_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_eodhd_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_eodhd_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_eodhd_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_eodhd_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_eodhd_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_eodhd_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_ethplorer_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_ethplorer_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_ethplorer_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_ethplorer_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_ethplorer_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_ethplorer_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_ethplorer_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_ethplorer_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_ethplorer_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_ethplorer_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_ethplorer_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_finnhub_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_finnhub_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_finnhub_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_finnhub_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_finnhub_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_finnhub_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_finnhub_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_finnhub_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_finnhub_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_finnhub_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_finnhub_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_fmp_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_fmp_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_fmp_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_fmp_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_fmp_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_fmp_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_fmp_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_fmp_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_fmp_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_fmp_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_fmp_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_fred_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_fred_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_fred_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_fred_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_fred_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_fred_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_fred_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_fred_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_fred_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_fred_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_fred_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_github_key[args0-False-True-defined, not tested].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_github_key[args0-False-True-defined, not tested].txt new file mode 100644 index 00000000000..d262038ba82 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_github_key[args0-False-True-defined, not tested].txt @@ -0,0 +1,2 @@ +[yellow]defined, not tested[/yellow] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_github_key[args1-False-False-defined, not tested].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_github_key[args1-False-False-defined, not tested].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_github_key[args2-True-True-defined, not tested].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_github_key[args2-True-True-defined, not tested].txt new file mode 100644 index 00000000000..d262038ba82 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_github_key[args2-True-True-defined, not tested].txt @@ -0,0 +1,2 @@ +[yellow]defined, not tested[/yellow] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_github_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_github_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_github_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_glassnode_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_glassnode_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_glassnode_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_glassnode_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_glassnode_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_glassnode_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_glassnode_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_glassnode_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_glassnode_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_glassnode_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_glassnode_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_iex_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_iex_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_iex_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_iex_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_iex_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_iex_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_iex_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_iex_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_iex_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_iex_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_iex_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_messari_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_messari_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_messari_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_messari_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_messari_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_messari_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_messari_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_messari_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_messari_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_messari_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_messari_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_news_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_news_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_news_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_news_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_news_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_news_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_news_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_news_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_news_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_news_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_news_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_oanda_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_oanda_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_oanda_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_oanda_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_oanda_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_oanda_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_oanda_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_oanda_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_oanda_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_oanda_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_oanda_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_polygon_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_polygon_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_polygon_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_polygon_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_polygon_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_polygon_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_polygon_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_polygon_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_polygon_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_polygon_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_polygon_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_quandl_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_quandl_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_quandl_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_quandl_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_quandl_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_quandl_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_quandl_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_quandl_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_quandl_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_quandl_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_quandl_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_reddit_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_reddit_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_reddit_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_reddit_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_reddit_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_reddit_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_reddit_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_reddit_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_reddit_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_reddit_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_reddit_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_rh_key[args0-False-True-defined, not tested].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_rh_key[args0-False-True-defined, not tested].txt new file mode 100644 index 00000000000..d262038ba82 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_rh_key[args0-False-True-defined, not tested].txt @@ -0,0 +1,2 @@ +[yellow]defined, not tested[/yellow] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_rh_key[args1-False-False-defined, not tested].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_rh_key[args1-False-False-defined, not tested].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_rh_key[args2-True-True-defined, not tested].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_rh_key[args2-True-True-defined, not tested].txt new file mode 100644 index 00000000000..d262038ba82 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_rh_key[args2-True-True-defined, not tested].txt @@ -0,0 +1,2 @@ +[yellow]defined, not tested[/yellow] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_rh_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_rh_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_rh_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_santiment_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_santiment_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_santiment_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_santiment_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_santiment_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_santiment_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_santiment_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_santiment_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_santiment_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_santiment_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_santiment_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_si_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_si_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_si_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_si_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_si_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_si_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_si_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_si_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_si_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_si_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_si_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_smartstake_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_smartstake_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_smartstake_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_smartstake_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_smartstake_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_smartstake_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_smartstake_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_smartstake_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_smartstake_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_smartstake_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_smartstake_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_tradier_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_tradier_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_tradier_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_tradier_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_tradier_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_tradier_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_tradier_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_tradier_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_tradier_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_tradier_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_tradier_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_twitter_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_twitter_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_twitter_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_twitter_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_twitter_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_twitter_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_twitter_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_twitter_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_twitter_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_twitter_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_twitter_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_walert_key[args0-False-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_walert_key[args0-False-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_walert_key[args0-False-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_walert_key[args1-False-False-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_walert_key[args1-False-False-defined, test failed].txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_walert_key[args2-True-True-defined, test failed].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_walert_key[args2-True-True-defined, test failed].txt new file mode 100644 index 00000000000..aff58ff3b92 --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_walert_key[args2-True-True-defined, test failed].txt @@ -0,0 +1,2 @@ +[red]defined, test failed[/red] + diff --git a/tests/openbb_terminal/txt/test_keys_model/test_set_walert_key[args3-False-True-not defined].txt b/tests/openbb_terminal/txt/test_keys_model/test_set_walert_key[args3-False-True-not defined].txt new file mode 100644 index 00000000000..4c535d16d4e --- /dev/null +++ b/tests/openbb_terminal/txt/test_keys_model/test_set_walert_key[args3-False-True-not defined].txt @@ -0,0 +1,2 @@ +[grey30]not defined[/grey30] +