58 lines
2.3 KiB
Python
58 lines
2.3 KiB
Python
|
|
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)
|