import pandas as pd from .base import DataFetcher from app.clients.ifind_hk_client import IFindHKClient class HkFetcher(DataFetcher): """ Hong Kong Market Fetcher using iFinD. """ def __init__(self, api_key: str): super().__init__(api_key) self.data_source = 'iFinD' self.client = IFindHKClient(api_key) def _get_ifind_code(self, symbol: str) -> str: # HK stock codes are 4-5 digits, often 0 padded to 5 or 4 in other systems # iFinD usually expects 4 digits like '0700.HK', '0005.HK' if symbol.isdigit(): padded = symbol.zfill(4) return f"{padded}.HK" return symbol 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)