Skip to content

Commit

Permalink
Pass security name to security info provider APIs
Browse files Browse the repository at this point in the history
Pass the security name to the security info provider APIs to improve
logging messages.
  • Loading branch information
tacgomes committed Feb 27, 2025
1 parent 466bb68 commit 2cb3c1e
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 12 deletions.
4 changes: 2 additions & 2 deletions src/investir/findata/dataprovider.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ class DataProviderError(Exception):

class SecurityInfoProvider(Protocol):
def get_info(
self, isin: ISIN, refresh_date: datetime | None = None
self, isin: ISIN, name: str = "", refresh_date: datetime | None = None
) -> SecurityInfo:
pass

def get_price(self, isin: ISIN) -> Money:
def get_price(self, isin: ISIN, name: str = "") -> Money:
pass


Expand Down
10 changes: 5 additions & 5 deletions src/investir/findata/financialdata.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,20 @@ def __init__(
self._live_rates_provider = live_rates_provider

def get_security_info(
self, isin: ISIN, refresh_date: datetime | None = None
self, isin: ISIN, name: str = "", refresh_date: datetime | None = None
) -> SecurityInfo:
if self._security_info_provider is not None:
try:
return self._security_info_provider.get_info(isin, refresh_date)
return self._security_info_provider.get_info(isin, name, refresh_date)
except DataProviderError as ex:
logger.warning(str(ex))

return SecurityInfo()
return SecurityInfo(name, [])

def get_security_price(self, isin) -> Money | None:
def get_security_price(self, isin, name: str = "") -> Money | None:
if self._security_info_provider is not None:
try:
return self._security_info_provider.get_price(isin)
return self._security_info_provider.get_price(isin, name)
except DataProviderError as ex:
logger.warning(str(ex))

Expand Down
8 changes: 5 additions & 3 deletions src/investir/findata/yahoofinanceprovider.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@ def __init__(self, cache_file: Path | None = None) -> None:
self._prices: dict[ISIN, Money] = {}

def get_info(
self, isin: ISIN, refresh_date: datetime | None = None
self, isin: ISIN, name: str = "", refresh_date: datetime | None = None
) -> SecurityInfo:
self._load_cache()

if info := self._infos.get(isin):
if refresh_date is None or info.last_updated >= refresh_date:
return info

logger.info("Fetching information for %s", isin)
logger.info("Fetching information for %s - %s", isin, name)

try:
yf_data = yfinance.Ticker(isin)
Expand All @@ -51,10 +51,12 @@ def get_info(

return self._infos[isin]

def get_price(self, isin: ISIN) -> Money:
def get_price(self, isin: ISIN, name: str = "") -> Money:
if cached_price := self._prices.get(isin):
return cached_price

logger.info("Fetching last price for %s - %s", isin, name)

try:
yf_data = yfinance.Ticker(isin)
price = Decimal(yf_data.info["currentPrice"])
Expand Down
5 changes: 3 additions & 2 deletions src/investir/taxcalculator.py
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ def _validate_orders(self) -> None:
def _normalise_orders(self, orders: Sequence[Order]) -> Sequence[Order]:
return [
o.adjust_quantity(
self._findata.get_security_info(o.isin, o.timestamp).splits
self._findata.get_security_info(o.isin, o.name, o.timestamp).splits
)
for o in orders
]
Expand Down Expand Up @@ -502,7 +502,8 @@ def _process_section104_disposals(self, isin: ISIN) -> None:
def _get_holding_value(
self, isin: ISIN, holding: Section104Holding
) -> Decimal | None:
if (price := self._findata.get_security_price(isin)) and (
security_name = self._tr_hist.get_security_name(isin) or ""
if (price := self._findata.get_security_price(isin, security_name)) and (
price_base_currency := self._findata.convert_money(price, BASE_CURRENCY)
):
return holding.quantity * price_base_currency.amount
Expand Down

0 comments on commit 2cb3c1e

Please sign in to comment.