import json from py_jftech import component, parse_date, get_config from api import DatumType, Datum, PortfoliosRisk from basic.dao import robo_base_datum as rbd @component class DefaultDatum(Datum): def __init__(self): self._config = get_config(__name__) @property def excludes(self): return self._config['excludes'] if 'excludes' in self._config else [] def get_fund_datums(self, crncy=None, risk=None, fund_ids=None): result = rbd.get_base_datums(type=DatumType.FUND, crncy=crncy, risk=risk, datum_ids=fund_ids) result = [{**json.loads(x['datas']), 'id': x['id']} for x in result] return [{**x, 'inceptDate': parse_date(x['inceptDate'])} for x in result if x['bloombergTicker'] not in self.excludes] def get_index_datums(self, ticker=None, index_ids=None): result = rbd.get_base_datums(type=DatumType.INDEX, ticker=ticker, datum_ids=index_ids) return [{**json.loads(x['datas']), 'id': x['id']} for x in result] def get_high_risk_datums(self, risk: PortfoliosRisk): risk3 = self.get_fund_datums(risk=3) if risk is PortfoliosRisk.FT3: return risk3 risk3 = [x for x in risk3 if x['assetType'] in ['STOCK', 'BALANCED', 'COMMODITY']] if risk is PortfoliosRisk.FT6: return risk3 + self.get_fund_datums(risk=4) if risk is PortfoliosRisk.FT9: return risk3 + self.get_fund_datums(risk=(4, 5)) return None