Files
OpenBB/openbb_terminal/core/session/utils.py
Colin Delahunty 141dd68e68 Removed prints (#5367)
* Removed prints

* FIxed typing

* FIxed typing

* Fixed typing

* Fixed typing

* Fixed typing

* Fixed typing

* Fixed typing

* Fix

* Reverted stuff
2023-08-23 18:40:31 +00:00

61 lines
1.7 KiB
Python

from threading import Thread
from typing import Any, Callable, Dict, Type, TypeVar
from pydantic import ValidationError
from openbb_terminal.core.models import BaseModel
T = TypeVar("T", bound=BaseModel)
def load_dict_to_model(dictionary: dict, model: Type[T]) -> T:
"""Load variables to model.
Parameters
----------
dictionary : dict
Variables dictionary.
model : Type[T]
Model to load.
Returns
-------
T
Model with validated data.
"""
model_name = model.__name__.strip("Model").lower()
try:
return model(**dictionary) # type: ignore
except ValidationError as error:
print(f"Error loading {model_name}:") # noqa: T201
for err in error.errors():
loc = err.get("loc", None)
var_name = str(loc[0]) if loc else ""
msg = err.get("msg", "")
var = dictionary.pop(var_name, None)
fields: dict[str, Any] = model.get_fields()
if var and var_name in fields:
default = fields[var_name].default
print( # noqa: T201
f" {var_name}: {msg}, using default -> {default}"
)
return model(**dictionary) # type: ignore
except Exception:
print(f"Error loading {model_name}, using defaults.") # noqa: T201
return model() # type: ignore
def run_thread(target: Callable, kwargs: Dict[str, Any]):
"""Run a daemon thread, with the given target and keyword arguments.
Parameters
----------
target : Callable
The target function.
kwargs : Dict[str, Any]
The keyword arguments.
"""
thread = Thread(target=target, kwargs=kwargs, daemon=True)
thread.start()