aboutsummaryrefslogtreecommitdiffstats
path: root/python/ops/trade_dataclasses.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/ops/trade_dataclasses.py')
-rw-r--r--python/ops/trade_dataclasses.py58
1 files changed, 7 insertions, 51 deletions
diff --git a/python/ops/trade_dataclasses.py b/python/ops/trade_dataclasses.py
index 07ac69be..a391b41b 100644
--- a/python/ops/trade_dataclasses.py
+++ b/python/ops/trade_dataclasses.py
@@ -1,8 +1,7 @@
from dataclasses import dataclass, field, fields, Field
from enum import Enum
from io import StringIO
-from .headers import DealType, MTM_HEADERS, HEADERS
-from csv_headers.citco import GIL, GTL
+from .headers import DealType
from typing import ClassVar, Tuple, Union
from decimal import Decimal
from typing import Literal
@@ -338,6 +337,10 @@ class Deal:
f.metadata.get(tag, f.name): getattr(self, f.name) for f in fields(self)
}
+ @classmethod
+ def from_dict(cls, **kwargs):
+ return cls(**{k: v for k, v in kwargs.items() if k in cls._sql_fields})
+
class BbgDeal:
_bbg_insert_queue: ClassVar[list] = []
@@ -396,49 +399,6 @@ class BbgDeal:
return cp_code
-class MTMDeal:
- _mtm_queue: ClassVar[list] = []
- _mtm_headers = None
- _mtm_sftp = SftpClient.from_creds("mtm")
- product_type: str
-
- def __init_subclass__(cls, deal_type, **kwargs):
- super().__init_subclass__(deal_type, **kwargs)
- cls._mtm_headers = MTM_HEADERS[deal_type]
- if deal_type == DealType.Swaption:
- cls.product_type = "CDISW"
- elif deal_type == DealType.CDS:
- cls.product_type = "TRN"
- elif deal_type == DealType.Termination:
- cls.product_type = "TERM"
- elif deal_type == DealType.TRS:
- cls.product_type = "CDI"
-
- @classmethod
- def mtm_upload(cls):
- if not cls._mtm_queue: # early exit
- return
- buf = StringIO()
- csvwriter = csv.writer(buf)
- csvwriter.writerow(cls._mtm_headers)
- csvwriter.writerows(
- [row.get(h, None) for h in cls._mtm_headers] for row in cls._mtm_queue
- )
- buf = buf.getvalue().encode()
- fname = f"MTM.{datetime.datetime.now():%Y%m%d.%H%M%S}.{cls.product_type.capitalize()}.csv"
- cls._mtm_sftp.put(buf, fname)
- dest = DAILY_DIR / str(datetime.date.today()) / fname
- dest.write_bytes(buf)
- cls._mtm_queue.clear()
-
- def mtm_stage(self):
- self._mtm_queue.append(self.to_markit())
-
- @classmethod
- def from_dict(cls, **kwargs):
- return cls(**{k: v for k, v in kwargs.items() if k in cls._sql_fields})
-
-
class Citco:
pass
@@ -452,7 +412,7 @@ class CitcoProduct(Citco):
def get_productid(self):
filter_clause = " AND ".join([f"{k}=%s" for k in self.product_key])
sql_str = (
- f"SELECT id, deal id, status FROM {self._table_name} WHERE {filter_clause}"
+ f"SELECT id, dealid, status FROM {self._table_name} WHERE {filter_clause}"
)
with self._conn.cursor() as c:
c.execute(
@@ -509,7 +469,6 @@ class CitcoTrade(Citco):
class CDSDeal(
CitcoTrade,
BbgDeal,
- MTMDeal,
Deal,
deal_type=DealType.CDS,
table_name="cds",
@@ -797,7 +756,6 @@ class BondDeal(
@dataclass
class SwaptionDeal(
CitcoTrade,
- MTMDeal,
Deal,
deal_type=DealType.Swaption,
table_name="swaptions",
@@ -860,7 +818,7 @@ class SwaptionDeal(
round(obj["price"] * obj["1st Leg Notional"] * 0.01, 2) * self.factor
)
obj["Trade ID"] = obj["Swap ID"]
- obj["Product Type"] = self.product_type
+ obj["Product Type"] = "CDISW"
obj["Transaction Type"] = "NEW"
if obj["buysell"]:
obj["Transaction Code"] = "Pay"
@@ -909,7 +867,6 @@ class SwaptionDeal(
@dataclass
class TerminationDeal(
- MTMDeal,
Deal,
deal_type=DealType.Termination,
table_name="terminations",
@@ -1246,7 +1203,6 @@ class FxSwapDeal(
@dataclass
class TRSDeal(
CitcoTrade,
- MTMDeal,
Deal,
deal_type=DealType.TRS,
table_name="trs",