aboutsummaryrefslogtreecommitdiffstats
path: root/python/trade_dataclasses.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/trade_dataclasses.py')
-rw-r--r--python/trade_dataclasses.py41
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"]),