def update_asset(managed_portfolio: portfolio.Portfolio, managed_asset: asset.Asset, asset_name: Optional[Text] = None, asset_price: Optional[float] = None, asset_currency: Optional[Text] = None) -> asset.Asset: """Updates an asset information. Args: managed_asset: Asset to update. asset_name: New name of the asset. asset_price: Price of the asset. asset_currency: Currency of the asset price. Returns: Asset updated. """ if asset_name and asset_name != managed_asset.name: managed_asset.name = asset_name if asset_price and asset_price != managed_asset.current_price: managed_asset.current_price = asset_price if asset_currency and asset_currency != managed_asset.currency: managed_asset.currency = asset_currency portfolio_manager.store_portfolio(managed_portfolio) return managed_asset
def update_asset_stats(managed_asset: asset.Asset) -> stats.AssetStats: """Updates stats of given assets. Args: managed_asset: Asset for which to update stats. Returns: Stats of the given asset. """ tracker = managed_asset.get_tracker() price = managed_asset.current_price if not tracker: return stats.StockStats(managed_asset=managed_asset, price=price) try: fetched_price = _parse_and_format_value( stock_info.get_live_price(tracker)) except AssertionError: fetched_price = None if not fetched_price: return stats.StockStats(managed_asset=managed_asset, price=price) price = fetched_price managed_asset.current_price = price stock_data = stock_info.get_stats(tracker) if stock_data.empty: return stats.StockStats(managed_asset=managed_asset, price=price) try: # TODO: handle all types of assets instead of only stocks. stock_stats = stats.StockStats( managed_asset=managed_asset, price=price, debt_to_equity=_get_stock_stat_value( stock_data, StockAttribute.DEBT_TO_EQUITY), dividend_yield=_get_stock_stat_value( stock_data, StockAttribute.DIVIDEND_YIELD), eps=_get_stock_stat_value(stock_data, StockAttribute.EPS), pe=_get_stock_stat_value(stock_data, StockAttribute.PE), profit_margin=_get_stock_stat_value(stock_data, StockAttribute.PROFIT_MARGIN), return_on_equity=_get_stock_stat_value( stock_data, StockAttribute.RETURN_ON_EQUITY), revenue_growth=_get_stock_stat_value( stock_data, StockAttribute.REVENUE_GROWTH), value_over_ebitda=_get_stock_stat_value( stock_data, StockAttribute.VALUE_OVER_EBITDA), ) managed_asset.stats = stock_stats return stock_stats except Exception: return stats.StockStats(managed_asset=managed_asset, price=price)