Files
OpenBB/openbb_terminal/core/models/sources_model.py
montezdesousa 2b52337da9 Keep hub sources updated and allow only available sources in the terminal (#4711)
* loop and update sources

* clean update sources dict

* use only allowed sources and update hub sources on login

* silently update hub

* ruff

* update only allowed sources now

* clean up some funcs

* fix dict on tests

* mypy

* remove unused method

* change class arg name sources_dict

* change attribute name in sources model

* remove allowed from SourcesModel

* change from user_choices to choices

* change default msg
2023-04-09 22:10:37 +00:00

56 lines
1.2 KiB
Python

import json
from typing import Dict, List
from pydantic.dataclasses import Field, dataclass
from openbb_terminal.core.config.paths import DATA_SOURCES_DEFAULT_FILE
from openbb_terminal.core.models.base_model import BaseModel
from openbb_terminal.core.sources.utils import flatten
# pylint: disable=useless-parent-delegation
def read_default_sources() -> Dict:
"""Read default sources from file.
Returns
-------
Dict
Dictionary with sources
"""
try:
with open(DATA_SOURCES_DEFAULT_FILE) as file:
return flatten(json.load(file))
except Exception as e:
print(
f"\nFailed to read data sources file: "
f"{DATA_SOURCES_DEFAULT_FILE}\n{e}\n"
)
return {}
__allowed = read_default_sources()
def get_allowed_sources() -> Dict:
"""Get allowed sources.
Returns
-------
Dict
Dictionary with sources
"""
return __allowed
@dataclass(config=dict(validate_assignment=True))
class SourcesModel(BaseModel):
"""Model for sources."""
choices: Dict[str, List[str]] = Field(
default_factory=lambda: get_allowed_sources(),
)
def __repr__(self):
return super().__repr__()