Source code for portfolio_toolkit.watchlist.watchlist_from_dict

from portfolio_toolkit.asset import MarketAsset
from portfolio_toolkit.data_provider.data_provider import DataProvider
from portfolio_toolkit.watchlist.watchlist import Watchlist


[docs] def create_watchlist(data: dict, data_provider: DataProvider) -> Watchlist: """ Loads and validates a JSON file containing watchlist information. Args: json_filepath (str): Path to the JSON file to load data from. data_provider (DataProvider): Data provider instance for fetching ticker information. Returns: Watchlist: An instance of the Watchlist class with loaded assets. """ # Validate watchlist structure if "name" not in data or "assets" not in data: raise ValueError("The JSON does not have the expected watchlist format.") currency = None if "currency" in data: currency = data["currency"] name = data["name"] assets = [] for asset_data in data["assets"]: if "ticker" not in asset_data: raise ValueError("Each asset must have a 'ticker' field.") ticker = asset_data.get("ticker") info = data_provider.get_ticker_info(ticker) if currency is None: prices = data_provider.get_price_series(ticker) else: prices = data_provider.get_price_series_converted(ticker, currency) asset = MarketAsset(ticker, prices, info, currency) assets.append(asset) return Watchlist( name=name, currency=currency, assets=assets, data_provider=data_provider )