summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDiogo Sousa <montezdesousa@gmail.com>2024-06-07 16:17:58 +0100
committerDiogo Sousa <montezdesousa@gmail.com>2024-06-07 16:17:58 +0100
commit957624363467c48d4e246f54af2d714447b44031 (patch)
treeb608ef6916c7086b0297359691bda412d1cff214
parentaa7bccc4eccc67764ecd3a62f1e7c5f8323cbac0 (diff)
feat: store defaults in hub account
-rw-r--r--openbb_platform/core/openbb_core/app/model/defaults.py5
-rw-r--r--openbb_platform/core/openbb_core/app/model/hub/hub_user_settings.py6
-rw-r--r--openbb_platform/core/openbb_core/app/service/hub_service.py24
-rw-r--r--openbb_platform/core/openbb_core/app/static/account.py2
4 files changed, 27 insertions, 10 deletions
diff --git a/openbb_platform/core/openbb_core/app/model/defaults.py b/openbb_platform/core/openbb_core/app/model/defaults.py
index 1f4a176674f..a6eb632ac8e 100644
--- a/openbb_platform/core/openbb_core/app/model/defaults.py
+++ b/openbb_platform/core/openbb_core/app/model/defaults.py
@@ -44,3 +44,8 @@ class Defaults(BaseModel):
v["provider"] = [provider]
new_values["commands"][clean_k] = v
return new_values
+
+ def update(self, incoming: "Defaults"):
+ """Update current defaults."""
+ incoming_commands = incoming.model_dump(exclude_none=True).get("commands", {})
+ self.__dict__["commands"].update(incoming_commands)
diff --git a/openbb_platform/core/openbb_core/app/model/hub/hub_user_settings.py b/openbb_platform/core/openbb_core/app/model/hub/hub_user_settings.py
index 16ea348319e..edf52f3111e 100644
--- a/openbb_platform/core/openbb_core/app/model/hub/hub_user_settings.py
+++ b/openbb_platform/core/openbb_core/app/model/hub/hub_user_settings.py
@@ -1,6 +1,6 @@
"""Hub user settings model."""
-from typing import Dict, Optional
+from typing import Any, Dict, Optional
from pydantic import BaseModel, ConfigDict, Field
@@ -8,9 +8,9 @@ from pydantic import BaseModel, ConfigDict, Field
class HubUserSettings(BaseModel):
"""Hub user settings model."""
- # features_settings: Dict[str, str]
+ features_settings: Dict[str, Any] = Field(default_factory=dict)
features_keys: Dict[str, Optional[str]] = Field(default_factory=dict)
- # features_sources: Dict[str, List[str]]
+ # features_sources: Dict[str, Any]
# features_terminal_style: Dict[str, Union[str, Dict[str, str]]]
model_config = ConfigDict(validate_assignment=True)
diff --git a/openbb_platform/core/openbb_core/app/service/hub_service.py b/openbb_platform/core/openbb_core/app/service/hub_service.py
index 3448eb8d52c..e1d75b262f3 100644
--- a/openbb_platform/core/openbb_core/app/service/hub_service.py
+++ b/openbb_platform/core/openbb_core/app/service/hub_service.py
@@ -1,12 +1,13 @@
"""Hub manager class."""
-from typing import Optional
+from typing import Optional, Tuple
from warnings import warn
from fastapi import HTTPException
from jwt import ExpiredSignatureError, PyJWTError, decode, get_unverified_header
from openbb_core.app.model.abstract.error import OpenBBError
from openbb_core.app.model.credentials import Credentials
+from openbb_core.app.model.defaults import Defaults
from openbb_core.app.model.hub.hub_session import HubSession
from openbb_core.app.model.hub.hub_user_settings import HubUserSettings
from openbb_core.app.model.profile import Profile
@@ -81,7 +82,9 @@ class HubService:
"""Push user settings to Hub."""
if self._session:
if user_settings.credentials:
- hub_user_settings = self.platform2hub(user_settings.credentials)
+ hub_user_settings = self.platform2hub(
+ user_settings.credentials, user_settings.defaults
+ )
return self._put_user_settings(self._session, hub_user_settings)
return False
raise OpenBBError(
@@ -93,8 +96,10 @@ class HubService:
if self._session:
self._hub_user_settings = self._get_user_settings(self._session)
profile = Profile(hub_session=self._session)
- credentials = self.hub2platform(self._hub_user_settings)
- return UserSettings(profile=profile, credentials=credentials)
+ credentials, defaults = self.hub2platform(self._hub_user_settings)
+ return UserSettings(
+ profile=profile, credentials=credentials, defaults=defaults
+ )
raise OpenBBError(
"No session found. Login or provide a 'HubSession' on initialization."
)
@@ -223,7 +228,7 @@ class HubService:
detail = response.json().get("detail", None)
raise HTTPException(status_code, detail)
- def hub2platform(self, settings: HubUserSettings) -> Credentials:
+ def hub2platform(self, settings: HubUserSettings) -> Tuple[Credentials, Defaults]:
"""Convert Hub user settings to Platform models."""
if any(k in settings.features_keys for k in self.V3TOV4):
deprecated = {
@@ -242,9 +247,12 @@ class HubService:
self.V3TOV4.get(k, k): settings.features_keys.get(self.V3TOV4.get(k, k), v)
for k, v in settings.features_keys.items()
}
- return Credentials(**hub_credentials)
+ commands = settings.features_settings.get("defaults", {})
+ return Credentials(**hub_credentials), Defaults(**commands)
- def platform2hub(self, credentials: Credentials) -> HubUserSettings:
+ def platform2hub(
+ self, credentials: Credentials, defaults: Defaults
+ ) -> HubUserSettings:
"""Convert Platform models to Hub user settings."""
# Dump mode json ensures SecretStr values are serialized as strings
credentials = credentials.model_dump(mode="json", exclude_none=True)
@@ -254,6 +262,8 @@ class HubService:
# If v3 key was in the hub already, we keep it
k = v3_k if v3_k in settings.features_keys else v4_k
settings.features_keys[k] = v
+ defaults = defaults.model_dump(mode="json", exclude_none=True)
+ settings.features_settings.update(defaults)
return settings
@staticmethod
diff --git a/openbb_platform/core/openbb_core/app/static/account.py b/openbb_platform/core/openbb_core/app/static/account.py
index 6195c85b781..8176c901052 100644
--- a/openbb_platform/core/openbb_core/app/static/account.py
+++ b/openbb_platform/core/openbb_core/app/static/account.py
@@ -125,6 +125,7 @@ class Account: # noqa: D205, D400
incoming = self._hub_service.pull()
self._base_app.user.profile = incoming.profile
self._base_app.user.credentials.update(incoming.credentials)
+ self._base_app.user.defaults.update(incoming.defaults)
if remember_me:
Path(self._openbb_directory).mkdir(parents=False, exist_ok=True)
session_file = Path(self._openbb_directory, self.SESSION_FILE)
@@ -187,6 +188,7 @@ class Account: # noqa: D205, D400
incoming = self._hub_service.pull()
self._base_app.user.profile = incoming.profile
self._base_app.user.credentials.update(incoming.credentials)
+ self._base_app.user.defaults.update(incoming.defaults)
if return_settings:
return self._base_app._command_runner.user_settings
return None