diff options
| -rw-r--r-- | python/trade_dataclasses.py | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/python/trade_dataclasses.py b/python/trade_dataclasses.py index b6fbb93d..f66ca804 100644 --- a/python/trade_dataclasses.py +++ b/python/trade_dataclasses.py @@ -114,11 +114,23 @@ register_adapter(Frequency, lambda f: AsIs(f.value)) class Deal: _conn: ClassVar = dbconn("dawndb", application_name="autobooker") - _sql_fields: ClassVar[list[str]] = [] - _sql_insert: ClassVar[str] = "" - _sql_select: ClassVar[str] = "" + _table_name: None + _sql_fields: ClassVar[list[str]] + _sql_insert: ClassVar[str] + _sql_select: ClassVar[str] _insert_queue: ClassVar[list] = [] + def __init_subclass__(cls, table_name: str): + super().__init_subclass__() + cls._table_name = table_name + cls._sql_fields = list(cls.__annotations__) + place_holders = ",".join(["%s"] * len(cls.__annotations__)) + columns = ",".join(c for c in cls._sql_fields) + cls._sql_insert = ( + f"INSERT INTO {cls._table_name}({columns}) VALUES({place_holders})" + ) + cls._sql_select = f"SELECT {columns} FROM {cls._table_name} WHERE id=%s" + def stage(self): self._insert_queue.append([getattr(self, f) for f in self._sql_fields]) @@ -138,7 +150,7 @@ class Deal: @dataclass -class CDSDeal(Deal): +class CDSDeal(Deal, table_name="cds"): fund: Fund account_code: str cp_code: str @@ -179,9 +191,11 @@ class CDSDeal(Deal): @dataclass -class BondDeal(Deal): +class BondDeal(Deal, table_name="bonds"): + buysell: bool + description: str faceamount: float - price: float() + price: float cp_code: str cusip: str = None isin: str = None @@ -190,15 +204,6 @@ class BondDeal(Deal): settle_date: datetime.date = field( default_factory=lambda: next_business_day(datetime.date.today()) ) - buysell: bool - description: str folder: BondStrat = field(default=None) portfolio: Portfolio = field(default=None) asset_class: AssetClass = field(default=None) - - -CDSDeal._sql_fields = [f.name for f in fields(CDSDeal)] -place_holders = ",".join(["%s"] * len(fields(CDSDeal))) -columns = ",".join(c for c in CDSDeal._sql_fields) -CDSDeal._sql_insert = f"INSERT INTO cds({columns}) VALUES({place_holders})" -CDSDeal._sql_select = f"SELECT {columns} FROM cds WHERE id=%s" |
