From 921abf20cda56e85749368905dd8fac094609541 Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Fri, 22 Mar 2024 12:49:37 +0000 Subject: [PATCH 01/18] fix: ensure var_kw args come last in signatures --- .../core/openbb_core/api/router/commands.py | 25 +++++++++++++------ .../openbb_core/app/static/package_builder.py | 2 +- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/openbb_platform/core/openbb_core/api/router/commands.py b/openbb_platform/core/openbb_core/api/router/commands.py index 96334f549fa..d788f0ea5b1 100644 --- a/openbb_platform/core/openbb_core/api/router/commands.py +++ b/openbb_platform/core/openbb_core/api/router/commands.py @@ -51,11 +51,14 @@ def build_new_signature(path: str, func: Callable) -> Signature: parameter_list = sig.parameters.values() return_annotation = sig.return_annotation new_parameter_list = [] - - for parameter in parameter_list: + var_kw_start = len(parameter_list) + for pos, parameter in enumerate(parameter_list): if parameter.name == "cc" and parameter.annotation == CommandContext: continue + if parameter.kind == Parameter.VAR_KEYWORD: + var_kw_start = pos + new_parameter_list.append( Parameter( parameter.name, @@ -66,18 +69,21 @@ def build_new_signature(path: str, func: Callable) -> Signature: ) if CHARTING_INSTALLED and path.replace("/", "_")[1:] in Charting.functions(): - new_parameter_list.append( + new_parameter_list.insert( + var_kw_start, Parameter( "chart", kind=Parameter.POSITIONAL_OR_KEYWORD, default=False, annotation=bool, - ) + ), ) + var_kw_start += 1 if custom_headers := SystemService().system_settings.api_settings.custom_headers: for name, default in custom_headers.items(): - new_parameter_list.append( + new_parameter_list.insert( + var_kw_start, Parameter( name.replace("-", "_"), kind=Parameter.POSITIONAL_OR_KEYWORD, @@ -85,11 +91,13 @@ def build_new_signature(path: str, func: Callable) -> Signature: annotation=Annotated[ Optional[str], Header(include_in_schema=False) ], - ) + ), ) + var_kw_start += 1 if Env().API_AUTH: - new_parameter_list.append( + new_parameter_list.insert( + var_kw_start, Parameter( "__authenticated_user_settings", kind=Parameter.POSITIONAL_OR_KEYWORD, @@ -97,8 +105,9 @@ def build_new_signature(path: str, func: Callable) -> Signature: annotation=Annotated[ UserSettings, Depends(AuthService().user_settings_hook) ], - ) + ), ) + var_kw_start += 1 return Signature( parameters=new_parameter_list, diff --git a/openbb_platform/core/openbb_core/app/static/package_builder.py b/openbb_platform/core/openbb_core/app/static/package_builder.py index 793f82731c6..0047822b2ac 100644 --- a/openbb_platform/core/openbb_core/app/static/package_builder.py +++ b/openbb_platform/core/openbb_core/app/static/package_builder.py @@ -531,7 +531,7 @@ def get_deprecation_message(path: str) -> str: def reorder_params(params: Dict[str, Parameter]) -> "OrderedDict[str, Parameter]": """Reorder the params.""" formatted_keys = list(params.keys()) - for k in ["provider", "extra_params"]: + for k in ["provider", "extra_params", "kwargs"]: if k in formatted_keys: formatted_keys.remove(k) formatted_keys.append(k) From 6657a9e70f1be274744bc55f90add1894d925f47 Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Fri, 22 Mar 2024 12:54:43 +0000 Subject: [PATCH 02/18] remove package builder change --- openbb_platform/core/openbb_core/app/static/package_builder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openbb_platform/core/openbb_core/app/static/package_builder.py b/openbb_platform/core/openbb_core/app/static/package_builder.py index 0047822b2ac..e9fffa956a8 100644 --- a/openbb_platform/core/openbb_core/app/static/package_builder.py +++ b/openbb_platform/core/openbb_core/app/static/package_builder.py @@ -531,7 +531,7 @@ def get_deprecation_message(path: str) -> str: def reorder_params(params: Dict[str, Parameter]) -> "OrderedDict[str, Parameter]": """Reorder the params.""" formatted_keys = list(params.keys()) - for k in ["provider", "extra_params", "kwargs"]: + for k in ["provider", "extra_params", "**kwargs"]: if k in formatted_keys: formatted_keys.remove(k) formatted_keys.append(k) From 41befa78e5fc7c5be49eccf10149a8501ffb1d2b Mon Sep 17 00:00:00 2001 From: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Date: Fri, 22 Mar 2024 12:56:00 +0000 Subject: [PATCH 03/18] Update package_builder.py --- openbb_platform/core/openbb_core/app/static/package_builder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openbb_platform/core/openbb_core/app/static/package_builder.py b/openbb_platform/core/openbb_core/app/static/package_builder.py index e9fffa956a8..793f82731c6 100644 --- a/openbb_platform/core/openbb_core/app/static/package_builder.py +++ b/openbb_platform/core/openbb_core/app/static/package_builder.py @@ -531,7 +531,7 @@ def get_deprecation_message(path: str) -> str: def reorder_params(params: Dict[str, Parameter]) -> "OrderedDict[str, Parameter]": """Reorder the params.""" formatted_keys = list(params.keys()) - for k in ["provider", "extra_params", "**kwargs"]: + for k in ["provider", "extra_params"]: if k in formatted_keys: formatted_keys.remove(k) formatted_keys.append(k) From c932a1b2aa80e4a17451cc7c6f3cb1158d2d531f Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Fri, 22 Mar 2024 17:14:17 +0000 Subject: [PATCH 04/18] fix: warn only when ExtraParams --- openbb_platform/core/openbb_core/app/command_runner.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/openbb_platform/core/openbb_core/app/command_runner.py b/openbb_platform/core/openbb_core/app/command_runner.py index c8d7f43e377..e27f2142b40 100644 --- a/openbb_platform/core/openbb_core/app/command_runner.py +++ b/openbb_platform/core/openbb_core/app/command_runner.py @@ -20,7 +20,7 @@ from openbb_core.app.model.obbject import OBBject from openbb_core.app.model.system_settings import SystemSettings from openbb_core.app.model.user_settings import UserSettings -from openbb_core.app.provider_interface import ProviderInterface +from openbb_core.app.provider_interface import ExtraParams, ProviderInterface from openbb_core.app.router import CommandMap from openbb_core.app.service.system_service import SystemService from openbb_core.app.service.user_service import UserService @@ -189,9 +189,11 @@ def _warn_kwargs( annotation = getattr( model.model_fields.get("extra_params", None), "annotation", None ) - if annotation: + if is_dataclass(annotation) and any( + t is ExtraParams for t in getattr(annotation, "__bases__", []) + ): # When there is no annotation there is nothing to warn - valid = asdict(annotation()) if is_dataclass(annotation) else {} # type: ignore + valid = asdict(annotation()) # type: ignore provider = provider_choices.get("provider", None) for p in extra_params: if field := valid.get(p): From 8c1a67fc3229626cd6c3f5f70de7443669f0e81e Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Fri, 22 Mar 2024 18:43:25 +0000 Subject: [PATCH 05/18] track VAR_KEYWORD --- .../openbb_core/app/static/package_builder.py | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/openbb_platform/core/openbb_core/app/static/package_builder.py b/openbb_platform/core/openbb_core/app/static/package_builder.py index 793f82731c6..d3b9bc9af68 100644 --- a/openbb_platform/core/openbb_core/app/static/package_builder.py +++ b/openbb_platform/core/openbb_core/app/static/package_builder.py @@ -528,10 +528,12 @@ def get_deprecation_message(path: str) -> str: return getattr(PathHandler.build_route_map()[path], "summary", "") @staticmethod - def reorder_params(params: Dict[str, Parameter]) -> "OrderedDict[str, Parameter]": - """Reorder the params.""" + def reorder_params( + params: Dict[str, Parameter], var_kw: List[str] + ) -> "OrderedDict[str, Parameter]": + """Reorder the params and make sure VAR_KEYWORD come after 'provider.""" formatted_keys = list(params.keys()) - for k in ["provider", "extra_params"]: + for k in ["provider"] + var_kw: if k in formatted_keys: formatted_keys.remove(k) formatted_keys.append(k) @@ -563,14 +565,11 @@ def format_params( ) formatted: Dict[str, Parameter] = {} - + var_kw = [] for name, param in parameter_map.items(): - if name == "extra_params": + if name in ["extra_params"]: formatted[name] = Parameter(name="kwargs", kind=Parameter.VAR_KEYWORD) - elif name == "kwargs": - formatted["**" + name] = Parameter( - name="kwargs", kind=Parameter.VAR_KEYWORD, annotation=Any - ) + var_kw.append(name) elif name == "provider_choices": fields = param.annotation.__args__[0].__dataclass_fields__ field = fields["provider"] @@ -624,12 +623,14 @@ def format_params( formatted[name] = Parameter( name=name, - kind=Parameter.POSITIONAL_OR_KEYWORD, + kind=param.kind, annotation=updated_type, default=param.default, ) + if param.kind == Parameter.VAR_KEYWORD: + var_kw.append(name) - return MethodDefinition.reorder_params(params=formatted) + return MethodDefinition.reorder_params(params=formatted, var_kw=var_kw) @staticmethod def add_field_custom_annotations( From 1e0b4e895b353e034161fba23099c4317ac991d6 Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Fri, 22 Mar 2024 18:44:24 +0000 Subject: [PATCH 06/18] minor fix --- openbb_platform/core/openbb_core/app/static/package_builder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openbb_platform/core/openbb_core/app/static/package_builder.py b/openbb_platform/core/openbb_core/app/static/package_builder.py index d3b9bc9af68..6918abe5bb3 100644 --- a/openbb_platform/core/openbb_core/app/static/package_builder.py +++ b/openbb_platform/core/openbb_core/app/static/package_builder.py @@ -567,7 +567,7 @@ def format_params( formatted: Dict[str, Parameter] = {} var_kw = [] for name, param in parameter_map.items(): - if name in ["extra_params"]: + if name == "extra_params": formatted[name] = Parameter(name="kwargs", kind=Parameter.VAR_KEYWORD) var_kw.append(name) elif name == "provider_choices": From 248b1b377cf66d1fea6352d771f4a23977d2588c Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Fri, 22 Mar 2024 19:00:16 +0000 Subject: [PATCH 07/18] type Any if no type provided --- openbb_platform/core/openbb_core/app/command_runner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openbb_platform/core/openbb_core/app/command_runner.py b/openbb_platform/core/openbb_core/app/command_runner.py index e27f2142b40..ab111485649 100644 --- a/openbb_platform/core/openbb_core/app/command_runner.py +++ b/openbb_platform/core/openbb_core/app/command_runner.py @@ -229,7 +229,7 @@ def validate_kwargs( sig = signature(func) fields = { n: ( - p.annotation, + p.annotation if p.annotation is not Parameter.empty else Any, ... if p.default is Parameter.empty else p.default, ) for n, p in sig.parameters.items() From d8f5e5e116b0cf561eddf5a15897d256b775c2e7 Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Fri, 22 Mar 2024 19:01:47 +0000 Subject: [PATCH 08/18] minor fix --- openbb_platform/core/openbb_core/app/command_runner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openbb_platform/core/openbb_core/app/command_runner.py b/openbb_platform/core/openbb_core/app/command_runner.py index ab111485649..83056ecf7e1 100644 --- a/openbb_platform/core/openbb_core/app/command_runner.py +++ b/openbb_platform/core/openbb_core/app/command_runner.py @@ -229,7 +229,7 @@ def validate_kwargs( sig = signature(func) fields = { n: ( - p.annotation if p.annotation is not Parameter.empty else Any, + Any if p.annotation is Parameter.empty else p.annotation, ... if p.default is Parameter.empty else p.default, ) for n, p in sig.parameters.items() From 182698fe154e0d02507caeb9fdd7332b0dc36b26 Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Fri, 22 Mar 2024 20:01:20 +0000 Subject: [PATCH 09/18] fix test --- .../core/tests/app/test_command_runner.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/openbb_platform/core/tests/app/test_command_runner.py b/openbb_platform/core/tests/app/test_command_runner.py index 3447d66407b..b8a80bb7a80 100644 --- a/openbb_platform/core/tests/app/test_command_runner.py +++ b/openbb_platform/core/tests/app/test_command_runner.py @@ -3,6 +3,7 @@ from typing import Dict, List from unittest.mock import Mock, patch +from openbb_core.app.provider_interface import ExtraParams import pytest from fastapi import Query from fastapi.params import Query as QueryParam @@ -228,45 +229,57 @@ def test_parameters_builder_validate_kwargs(mock_func): @pytest.mark.parametrize( - "provider_choices, extra_params, expect", + "provider_choices, extra_params, base, expect", [ ( {"provider": "provider1"}, {"exists_in_2": ...}, + ExtraParams, OpenBBWarning, ), ( {"provider": "inexistent_provider"}, {"exists_in_both": ...}, + ExtraParams, OpenBBWarning, ), ( {}, {"inexistent_field": ...}, + ExtraParams, OpenBBWarning, ), + ( + {}, + {"inexistent_field": ...}, + object, + None, + ), ( {"provider": "provider2"}, {"exists_in_2": ...}, + ExtraParams, None, ), ( {"provider": "provider2"}, {"exists_in_both": ...}, + ExtraParams, None, ), ( {}, {"exists_in_both": ...}, + ExtraParams, None, ), ], ) -def test_parameters_builder__warn_kwargs(provider_choices, extra_params, expect): +def test_parameters_builder__warn_kwargs(provider_choices, extra_params, base, expect): """Test _warn_kwargs.""" @dataclass - class SomeModel: + class SomeModel(base): """SomeModel""" exists_in_2: QueryParam = Query(..., title="provider2") From 7ff02dd536304a1d7d3f70d20c61c8b725c20a5f Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Fri, 22 Mar 2024 20:30:51 +0000 Subject: [PATCH 10/18] fix: _as_dict --- openbb_platform/core/openbb_core/app/command_runner.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/openbb_platform/core/openbb_core/app/command_runner.py b/openbb_platform/core/openbb_core/app/command_runner.py index cbd356a0b55..f870c32c62f 100644 --- a/openbb_platform/core/openbb_core/app/command_runner.py +++ b/openbb_platform/core/openbb_core/app/command_runner.py @@ -218,7 +218,12 @@ def _warn_kwargs( @staticmethod def _as_dict(obj: Any) -> Dict[str, Any]: """Safely convert an object to a dict.""" - return asdict(obj) if is_dataclass(obj) else dict(obj) + try: + if isinstance(obj, dict): + return obj + return asdict(obj) if is_dataclass(obj) else dict(obj) + except Exception: + return {} @staticmethod def validate_kwargs( From fc6274027e8797a9a49fde405fe33cbfe0b3b8b4 Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Fri, 22 Mar 2024 20:33:58 +0000 Subject: [PATCH 11/18] ruff --- openbb_platform/core/tests/app/test_command_runner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openbb_platform/core/tests/app/test_command_runner.py b/openbb_platform/core/tests/app/test_command_runner.py index b8a80bb7a80..cd751e9c592 100644 --- a/openbb_platform/core/tests/app/test_command_runner.py +++ b/openbb_platform/core/tests/app/test_command_runner.py @@ -3,7 +3,6 @@ from typing import Dict, List from unittest.mock import Mock, patch -from openbb_core.app.provider_interface import ExtraParams import pytest from fastapi import Query from fastapi.params import Query as QueryParam @@ -17,6 +16,7 @@ from openbb_core.app.model.command_context import CommandContext from openbb_core.app.model.system_settings import SystemSettings from openbb_core.app.model.user_settings import UserSettings +from openbb_core.app.provider_interface import ExtraParams from openbb_core.app.router import CommandMap from pydantic import BaseModel, ConfigDict From da37bca37acde9d718582ab7684d18d5e476f8c8 Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Mon, 25 Mar 2024 10:49:15 +0000 Subject: [PATCH 12/18] update reorder_params unit test --- .../tests/app/static/test_package_builder.py | 50 +++++++++++++++---- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/openbb_platform/core/tests/app/static/test_package_builder.py b/openbb_platform/core/tests/app/static/test_package_builder.py index aa7c0029475..eb598dd30b9 100644 --- a/openbb_platform/core/tests/app/static/test_package_builder.py +++ b/openbb_platform/core/tests/app/static/test_package_builder.py @@ -206,17 +206,47 @@ class TestAnnotatedDataClass: assert result -def test_reorder_params(method_definition): - """Test reorder params.""" - params = { - "provider": Parameter.empty, - "extra_params": Parameter.empty, - "param1": Parameter.empty, - "param2": Parameter.empty, - } - result = method_definition.reorder_params(params=params) +@pytest.mark.parametrize( + "params, var_kw, expected", + [ + ( + { + "provider": Parameter.empty, + "extra_params": Parameter.empty, + "param1": Parameter.empty, + "param2": Parameter.empty, + }, + ["extra_params"], + ["param1", "param2", "provider", "extra_params"], + ), + ( + { + "any_kwargs": Parameter.empty, + "provider": Parameter.empty, + "param1": Parameter.empty, + "param2": Parameter.empty, + }, + ["any_kwargs"], + ["param1", "param2", "provider", "any_kwargs"], + ), + ( + { + "any_kwargs": Parameter.empty, + "extra_params": Parameter.empty, + "provider": Parameter.empty, + "param1": Parameter.empty, + "param2": Parameter.empty, + }, + ["any_kwargs", "extra_params"], + ["param1", "param2", "provider", "any_kwargs", "extra_params"], + ), + ], +) +def test_reorder_params(method_definition, params, var_kw, expected): + """Test reorder params, ensure var_kw are last.""" + result = method_definition.reorder_params(params, var_kw) assert result - assert list(result.keys()) == ["param1", "param2", "provider", "extra_params"] + assert list(result.keys()) == expected def test_build_func_params(method_definition): From 5d4268373c4aac0d2c7d777a19f4f6de4962d597 Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Mon, 25 Mar 2024 10:56:25 +0000 Subject: [PATCH 13/18] update func default and tests --- .../openbb_core/app/static/package_builder.py | 4 ++-- .../tests/app/static/test_package_builder.py | 16 +++++++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/openbb_platform/core/openbb_core/app/static/package_builder.py b/openbb_platform/core/openbb_core/app/static/package_builder.py index 6918abe5bb3..9d3e9cfa905 100644 --- a/openbb_platform/core/openbb_core/app/static/package_builder.py +++ b/openbb_platform/core/openbb_core/app/static/package_builder.py @@ -529,11 +529,11 @@ def get_deprecation_message(path: str) -> str: @staticmethod def reorder_params( - params: Dict[str, Parameter], var_kw: List[str] + params: Dict[str, Parameter], var_kw: List[str] = None ) -> "OrderedDict[str, Parameter]": """Reorder the params and make sure VAR_KEYWORD come after 'provider.""" formatted_keys = list(params.keys()) - for k in ["provider"] + var_kw: + for k in ["provider"] + (var_kw or []): if k in formatted_keys: formatted_keys.remove(k) formatted_keys.append(k) diff --git a/openbb_platform/core/tests/app/static/test_package_builder.py b/openbb_platform/core/tests/app/static/test_package_builder.py index eb598dd30b9..029c200fa45 100644 --- a/openbb_platform/core/tests/app/static/test_package_builder.py +++ b/openbb_platform/core/tests/app/static/test_package_builder.py @@ -216,18 +216,28 @@ class TestAnnotatedDataClass: "param1": Parameter.empty, "param2": Parameter.empty, }, + None, + ["extra_params", "param1", "param2", "provider"], + ), + ( + { + "param1": Parameter.empty, + "provider": Parameter.empty, + "extra_params": Parameter.empty, + "param2": Parameter.empty, + }, ["extra_params"], ["param1", "param2", "provider", "extra_params"], ), ( { + "param2": Parameter.empty, "any_kwargs": Parameter.empty, "provider": Parameter.empty, "param1": Parameter.empty, - "param2": Parameter.empty, }, ["any_kwargs"], - ["param1", "param2", "provider", "any_kwargs"], + ["param2", "param1", "provider", "any_kwargs"], ), ( { @@ -243,7 +253,7 @@ class TestAnnotatedDataClass: ], ) def test_reorder_params(method_definition, params, var_kw, expected): - """Test reorder params, ensure var_kw are last.""" + """Test reorder params, ensure var_kw are last after 'provider'.""" result = method_definition.reorder_params(params, var_kw) assert result assert list(result.keys()) == expected From 5c553cfe6b9c66aae7105090d412c35ae9befa88 Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Mon, 25 Mar 2024 10:57:54 +0000 Subject: [PATCH 14/18] typing --- openbb_platform/core/openbb_core/app/static/package_builder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openbb_platform/core/openbb_core/app/static/package_builder.py b/openbb_platform/core/openbb_core/app/static/package_builder.py index 9d3e9cfa905..0faab062605 100644 --- a/openbb_platform/core/openbb_core/app/static/package_builder.py +++ b/openbb_platform/core/openbb_core/app/static/package_builder.py @@ -529,7 +529,7 @@ def get_deprecation_message(path: str) -> str: @staticmethod def reorder_params( - params: Dict[str, Parameter], var_kw: List[str] = None + params: Dict[str, Parameter], var_kw: Optional[List[str]] = None ) -> "OrderedDict[str, Parameter]": """Reorder the params and make sure VAR_KEYWORD come after 'provider.""" formatted_keys = list(params.keys()) From e800fb878244852db6b3d4e962b43e5db48c3fd3 Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Mon, 25 Mar 2024 11:03:27 +0000 Subject: [PATCH 15/18] update comment --- openbb_platform/core/openbb_core/app/command_runner.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openbb_platform/core/openbb_core/app/command_runner.py b/openbb_platform/core/openbb_core/app/command_runner.py index f870c32c62f..18160d96f09 100644 --- a/openbb_platform/core/openbb_core/app/command_runner.py +++ b/openbb_platform/core/openbb_core/app/command_runner.py @@ -185,14 +185,15 @@ def _warn_kwargs( ) -> None: """Warn if kwargs received and ignored by the validation model.""" # We only check the extra_params annotation because ignored fields - # will always be kwargs + # will always be there annotation = getattr( model.model_fields.get("extra_params", None), "annotation", None ) if is_dataclass(annotation) and any( t is ExtraParams for t in getattr(annotation, "__bases__", []) ): - # When there is no annotation there is nothing to warn + # When we only warn when endpoint is bound to a model, so we need + # to check if the annotation is a dataclass and child of ExtraParams valid = asdict(annotation()) # type: ignore provider = provider_choices.get("provider", None) for p in extra_params: From 7dfb22b775b51bb6fa2d482a009af8c1a6e7d5d9 Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Mon, 25 Mar 2024 11:07:31 +0000 Subject: [PATCH 16/18] update comment --- openbb_platform/core/openbb_core/api/router/commands.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openbb_platform/core/openbb_core/api/router/commands.py b/openbb_platform/core/openbb_core/api/router/commands.py index 0052ab65e2c..0c98f650c69 100644 --- a/openbb_platform/core/openbb_core/api/router/commands.py +++ b/openbb_platform/core/openbb_core/api/router/commands.py @@ -57,6 +57,8 @@ def build_new_signature(path: str, func: Callable) -> Signature: continue if parameter.kind == Parameter.VAR_KEYWORD: + # We track VAR_KEYWORD parameter to insert the any additional + # parameters we need to add before it and avoid a SyntaxError var_kw_start = pos new_parameter_list.append( From 01d532688cd43911b80d6e3ab84f8fa587ab5236 Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Mon, 25 Mar 2024 11:12:21 +0000 Subject: [PATCH 17/18] rename var --- .../core/openbb_core/api/router/commands.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/openbb_platform/core/openbb_core/api/router/commands.py b/openbb_platform/core/openbb_core/api/router/commands.py index 0c98f650c69..d524156ddbd 100644 --- a/openbb_platform/core/openbb_core/api/router/commands.py +++ b/openbb_platform/core/openbb_core/api/router/commands.py @@ -51,7 +51,7 @@ def build_new_signature(path: str, func: Callable) -> Signature: parameter_list = sig.parameters.values() return_annotation = sig.return_annotation new_parameter_list = [] - var_kw_start = len(parameter_list) + var_kw_pos = len(parameter_list) for pos, parameter in enumerate(parameter_list): if parameter.name == "cc" and parameter.annotation == CommandContext: continue @@ -59,7 +59,7 @@ def build_new_signature(path: str, func: Callable) -> Signature: if parameter.kind == Parameter.VAR_KEYWORD: # We track VAR_KEYWORD parameter to insert the any additional # parameters we need to add before it and avoid a SyntaxError - var_kw_start = pos + var_kw_pos = pos new_parameter_list.append( Parameter( @@ -72,7 +72,7 @@ def build_new_signature(path: str, func: Callable) -> Signature: if CHARTING_INSTALLED and path.replace("/", "_")[1:] in Charting.functions(): new_parameter_list.insert( - var_kw_start, + var_kw_pos, Parameter( "chart", kind=Parameter.POSITIONAL_OR_KEYWORD, @@ -80,12 +80,12 @@ def build_new_signature(path: str, func: Callable) -> Signature: annotation=bool, ), ) - var_kw_start += 1 + var_kw_pos += 1 if custom_headers := SystemService().system_settings.api_settings.custom_headers: for name, default in custom_headers.items(): new_parameter_list.insert( - var_kw_start, + var_kw_pos, Parameter( name.replace("-", "_"), kind=Parameter.POSITIONAL_OR_KEYWORD, @@ -95,11 +95,11 @@ def build_new_signature(path: str, func: Callable) -> Signature: ], ), ) - var_kw_start += 1 + var_kw_pos += 1 if Env().API_AUTH: new_parameter_list.insert( - var_kw_start, + var_kw_pos, Parameter( "__authenticated_user_settings", kind=Parameter.POSITIONAL_OR_KEYWORD, @@ -109,7 +109,7 @@ def build_new_signature(path: str, func: Callable) -> Signature: ], ), ) - var_kw_start += 1 + var_kw_pos += 1 return Signature( parameters=new_parameter_list, From 6d49ae662cfa0e8345a752395dfd7fa2f103ae85 Mon Sep 17 00:00:00 2001 From: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Date: Mon, 25 Mar 2024 11:15:16 +0000 Subject: [PATCH 18/18] Update command_runner.py --- openbb_platform/core/openbb_core/app/command_runner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openbb_platform/core/openbb_core/app/command_runner.py b/openbb_platform/core/openbb_core/app/command_runner.py index 18160d96f09..9f8b52c8714 100644 --- a/openbb_platform/core/openbb_core/app/command_runner.py +++ b/openbb_platform/core/openbb_core/app/command_runner.py @@ -192,7 +192,7 @@ def _warn_kwargs( if is_dataclass(annotation) and any( t is ExtraParams for t in getattr(annotation, "__bases__", []) ): - # When we only warn when endpoint is bound to a model, so we need + # We only warn when endpoint defines ExtraParams, so we need # to check if the annotation is a dataclass and child of ExtraParams valid = asdict(annotation()) # type: ignore provider = provider_choices.get("provider", None)