From ce14ee612f4cb43f4f4e869689d5a34734044d00 Mon Sep 17 00:00:00 2001 From: Pratyush Shukla Date: Wed, 29 Nov 2023 19:46:31 +0530 Subject: [PATCH] Fix nasdaq top retail working without a key resulting in an error (#5811) * raise error if no api key found * check for empty strings * black * fix test * less verbose --------- Co-authored-by: Diogo Sousa Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> --- .../core/openbb_core/provider/query_executor.py | 11 ++++++----- .../core/tests/provider/test_query_executor.py | 13 +++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/openbb_platform/core/openbb_core/provider/query_executor.py b/openbb_platform/core/openbb_core/provider/query_executor.py index 1d49e1d218d..ddb52d51da7 100644 --- a/openbb_platform/core/openbb_core/provider/query_executor.py +++ b/openbb_platform/core/openbb_core/provider/query_executor.py @@ -48,14 +48,15 @@ class QueryExecutor: credentials = {} for c in provider.credentials: - credential_value = credentials.get(c) - if c not in credentials or credential_value is None: + v = credentials.get(c) + secret = v.get_secret_value() if v else None + if c not in credentials or not secret: if require_credentials: website = provider.website or "" - extra_msg = f"Check {website} to get it." if website else "" - raise OpenBBError(f"Missing credential '{c}'. {extra_msg}") + extra_msg = f" Check {website} to get it." if website else "" + raise OpenBBError(f"Missing credential '{c}'.{extra_msg}") else: - filtered_credentials[c] = credential_value.get_secret_value() + filtered_credentials[c] = secret return filtered_credentials diff --git a/openbb_platform/core/tests/provider/test_query_executor.py b/openbb_platform/core/tests/provider/test_query_executor.py index 2326b4eb98a..f7444a2bf8a 100644 --- a/openbb_platform/core/tests/provider/test_query_executor.py +++ b/openbb_platform/core/tests/provider/test_query_executor.py @@ -78,6 +78,19 @@ def test_filter_credentials_missing_require(mock_query_executor): mock_query_executor.filter_credentials(credentials, provider, True) +def test_filter_credentials_empty_require(mock_query_executor): + """Test if the proper error is raised when a credential is missing.""" + provider = mock_query_executor.get_provider("test_provider") + provider.credentials = ["test_provider_api_key"] + credentials = { + "test_provider_api_key": SecretStr(""), + "other_api_key": SecretStr("12345"), + } + + with pytest.raises(OpenBBError, match="Missing credential"): + mock_query_executor.filter_credentials(credentials, provider, True) + + def test_filter_credentials_missing_dont_require(mock_query_executor): """Test if the proper error is raised when a credential is missing.""" provider = mock_query_executor.get_provider("test_provider")