From 8b4a50697678c5232a5c3366ab53d5f1b7fee2b2 Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Mon, 3 Jul 2023 13:33:36 +0100 Subject: [PATCH] fix package builder issues --- openbb_sdk/openbb/__init__.py | 6 +-- .../app/static/package_builder.py | 2 +- .../openbb_sdk_core/app/utils.py | 40 +++++++++++++++++++ 3 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 openbb_sdk/openbb_sdk_core/openbb_sdk_core/app/utils.py diff --git a/openbb_sdk/openbb/__init__.py b/openbb_sdk/openbb/__init__.py index b53202aa0d4..2c4d7d901bc 100644 --- a/openbb_sdk/openbb/__init__.py +++ b/openbb_sdk/openbb/__init__.py @@ -1,4 +1,4 @@ # flake8: noqa -from openbb_sdk.openbb_sdk_core.openbb_sdk_core.app.static.command_runner_wrapper import app - -account = app.account +from openbb_sdk.openbb_sdk_core.openbb_sdk_core.app.static.command_runner_wrapper import ( + app, +) diff --git a/openbb_sdk/openbb_sdk_core/openbb_sdk_core/app/static/package_builder.py b/openbb_sdk/openbb_sdk_core/openbb_sdk_core/app/static/package_builder.py index c29a3baa754..d824cf01383 100644 --- a/openbb_sdk/openbb_sdk_core/openbb_sdk_core/app/static/package_builder.py +++ b/openbb_sdk/openbb_sdk_core/openbb_sdk_core/app/static/package_builder.py @@ -148,7 +148,7 @@ class ImportDefinition: code += "\nimport pydantic" code += "\nfrom typing import List, Dict, Union, Optional, Literal" code += "\nimport warnings" - code += "\nfrom builtin_extensions.common.utils import from_dataframe" + code += "\nfrom openbb_sdk_core.app.utils import to_dataframe" code += "\nfrom openbb_sdk_core.app.model.abstract.warning import OpenBBWarning" module_list = [hint_type.__module__ for hint_type in hint_type_list] diff --git a/openbb_sdk/openbb_sdk_core/openbb_sdk_core/app/utils.py b/openbb_sdk/openbb_sdk_core/openbb_sdk_core/app/utils.py new file mode 100644 index 00000000000..a2ab3a9ec23 --- /dev/null +++ b/openbb_sdk/openbb_sdk_core/openbb_sdk_core/app/utils.py @@ -0,0 +1,40 @@ +from typing import List, Optional, Union + +import pandas as pd +from pydantic import BaseModel + + +def to_dataframe(data: List[BaseModel], index: Optional[str] = None) -> pd.DataFrame: + """Convert to a Pandas DataFrame.""" + df = pd.DataFrame([d.dict() for d in data]) + if index and index in df.columns: + df = df.set_index(index) + return df + + +def from_dataframe( + df: Union[pd.DataFrame, pd.Series], index: bool = False +) -> List[BaseModel]: + """Convert from a Pandas DataFrame.""" + if index: + df = df.reset_index() + if isinstance(df, pd.Series): + df = df.to_frame() + return [BaseModel(**d) for d in df.to_dict(orient="records")] + + +def get_target_column(df: pd.DataFrame, target: str) -> pd.Series: + """Get target column from time series data.""" + if target not in df.columns: + choices = ", ".join(df.columns) + raise ValueError( + f"Target column '{target}' not found in data. Choose from {choices}" + ) + return df[target] + + +def get_target_columns(df: pd.DataFrame, target_columns: List[str]) -> pd.DataFrame: + df_result = pd.DataFrame() + for target in target_columns: + df_result[target] = get_target_column(df, target).to_frame() + return df_result