aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/trade_dataclasses.py35
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"