diff options
Diffstat (limited to 'python/trade_dataclasses.py')
| -rw-r--r-- | python/trade_dataclasses.py | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/python/trade_dataclasses.py b/python/trade_dataclasses.py index 6dcf21df..a1e4b504 100644 --- a/python/trade_dataclasses.py +++ b/python/trade_dataclasses.py @@ -154,9 +154,6 @@ class Deal: _sql_insert: ClassVar[str] _sql_select: ClassVar[str] _insert_queue: ClassVar[list] = [] - _bbg_insert_queue: ClassVar[list] = [] - _cache: ClassVar[LRU] = LRU(128) - _bbg_sql_insert: ClassVar[str] def __init_subclass__(cls, table_name: str, insert_ignore=()): super().__init_subclass__() @@ -182,7 +179,6 @@ class Deal: def commit(cls): with cls._conn.cursor() as c: c.executemany(cls._sql_insert, cls._insert_queue) - c.executemany(cls._bbg_sql_insert, cls._bbg_insert_queue) cls._conn.commit() cls._insert_queue.clear() @@ -194,8 +190,40 @@ class Deal: return cls(*r) +class BbgDeal(Deal): + _bbg_insert_queue: ClassVar[list] = [] + _cache: ClassVar[LRU] = LRU(128) + _bbg_sql_insert: ClassVar[str] + + def __init_subclass__(cls, table_name: str, insert_ignore=()): + super().__init_subclass__(table_name, insert_ignore) + # cls._table_name = table_name + # insert_columns = [c for c in cls.__annotations__ if c not in insert_ignore] + # place_holders = ",".join(["%s"] * len(insert_columns) + # cls._sql_insert = f"INSERT INTO {cls._table_name}({','.join(insert_columns)}) VALUES({place_holders})" + # cls._sql_select = ( + # f"SELECT {','.join(cls.__annotations__)} FROM {cls._table_name} WHERE id=%s" + + def stage(self): + self._insert_queue.append( + [ + getattr(self, f.name) + for f in fields(self) + if f.metadata.get("insert", True) + ] + ) + + @classmethod + def commit(cls): + with cls._conn.cursor() as c: + c.executemany(cls._sql_insert, cls._insert_queue) + c.executemany(cls._bbg_sql_insert, cls._bbg_insert_queue) + cls._conn.commit() + cls._insert_queue.clear() + + @dataclass -class CDSDeal(Deal, table_name="cds", insert_ignore=("id", "dealid")): +class CDSDeal(BbgDeal, table_name="cds", insert_ignore=("id", "dealid")): fund: Fund account_code: str cp_code: str @@ -278,7 +306,7 @@ class CDSDeal(Deal, table_name="cds", insert_ignore=("id", "dealid")): @dataclass -class BondDeal(Deal, table_name="bonds"): +class BondDeal(BbgDeal, table_name="bonds", insert_ignore=()): buysell: bool description: str faceamount: float @@ -304,7 +332,6 @@ class BondDeal(Deal, table_name="bonds"): @classmethod def from_bbg_line(cls, line: dict): values = list(line.values()) - breakpoint() cls._bbg_insert_queue.append(values) return cls( faceamount=Decimal(line["Quantity"]), |
