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.py31
1 files changed, 17 insertions, 14 deletions
diff --git a/python/trade_dataclasses.py b/python/trade_dataclasses.py
index 37d0ead6..6dcf21df 100644
--- a/python/trade_dataclasses.py
+++ b/python/trade_dataclasses.py
@@ -158,21 +158,25 @@ class Deal:
_cache: ClassVar[LRU] = LRU(128)
_bbg_sql_insert: ClassVar[str]
- def __init_subclass__(cls, table_name: str):
+ def __init_subclass__(cls, table_name: str, insert_ignore=()):
super().__init_subclass__()
cls._table_name = table_name
- cls._sql_fields = list(cls.__annotations__)
- _sql_insert_fields = list(
- c for c in cls.__annotations__ if c not in ("id", "dealid")
+ 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"
)
- insert_place_holders = ",".join(["%s"] * len(_sql_insert_fields))
- insert_columns = ",".join(c for c in _sql_insert_fields)
- select_columns = ",".join(c for c in cls._sql_fields)
- cls._sql_insert = f"INSERT INTO {cls._table_name}({insert_columns}) VALUES({insert_place_holders})"
- cls._sql_select = f"SELECT {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])
+ self._insert_queue.append(
+ [
+ getattr(self, f.name)
+ for f in fields(self)
+ if f.metadata.get("insert", True)
+ ]
+ )
@classmethod
def commit(cls):
@@ -191,10 +195,7 @@ class Deal:
@dataclass
-class CDSDeal(Deal, table_name="cds"):
- id: field(default=None)
- dealid: field(default=None)
- initial_margin_percentage: field(default=None)
+class CDSDeal(Deal, table_name="cds", insert_ignore=("id", "dealid")):
fund: Fund
account_code: str
cp_code: str
@@ -220,6 +221,8 @@ class CDSDeal(Deal, table_name="cds"):
swap_type: SwapType = "CD_INDEX"
clearing_facility: ClearingFacility = "ICE-CREDIT"
isda_definition: IsdaDoc = "ISDA2014"
+ id: int = field(default=None, metadata={"insert": False})
+ dealid: str = field(default=None, metadata={"insert": False})
def __post_init__(self):
self.effective_date = previous_twentieth(self.trade_date)