diff options
Diffstat (limited to 'python/ops/trade_dataclasses.py')
| -rw-r--r-- | python/ops/trade_dataclasses.py | 58 |
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", |
