import pandas as pd from .base import DataFetcher from app.clients.ifind_int_client import IFindIntClient class VnFetcher(DataFetcher): """ Vietnam Market Fetcher using iFinD International Client. """ def __init__(self, api_key: str): super().__init__(api_key) self.data_source = 'iFinD' self.client = IFindIntClient(api_key, 'VN') def _get_ifind_code(self, symbol: str) -> str: # Vietnam symbols are usually just uppercase tickers like 'VIC' # iFinD might need a suffix like .VN or .HO depending on exchange # Legacy VnFetcher didn't append suffix, assumes user provides full or iFinD smart match # But wait, let's checking legacy code might be safer. # Assuming simple uppercase for now as per previous knowledge. return symbol.upper() def _fetch_basic_info(self, symbol: str): code = self._get_ifind_code(symbol) return self.client._fetch_basic_info(symbol, code) def get_income_statement(self, symbol: str) -> pd.DataFrame: code = self._get_ifind_code(symbol) return self.client.get_income_statement(symbol, code) def get_balance_sheet(self, symbol: str) -> pd.DataFrame: code = self._get_ifind_code(symbol) return self.client.get_balance_sheet(symbol, code) def get_cash_flow(self, symbol: str) -> pd.DataFrame: code = self._get_ifind_code(symbol) return self.client.get_cash_flow(symbol, code) def get_market_metrics(self, symbol: str) -> dict: code = self._get_ifind_code(symbol) return self.client.get_market_metrics(symbol, code) def get_dividends(self, symbol: str) -> pd.DataFrame: code = self._get_ifind_code(symbol) return self.client.get_dividends(symbol, code) def get_repurchases(self, symbol: str) -> pd.DataFrame: code = self._get_ifind_code(symbol) return self.client.get_repurchases(symbol, code) def get_employee_count(self, symbol: str) -> pd.DataFrame: code = self._get_ifind_code(symbol) return self.client.get_employee_count(symbol, code) def get_financial_ratios(self, symbol: str) -> pd.DataFrame: code = self._get_ifind_code(symbol) return self.client.get_financial_ratios(symbol, code)