aboutsummaryrefslogtreecommitdiffstats
path: root/python/ops/funds.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/ops/funds.py')
-rw-r--r--python/ops/funds.py166
1 files changed, 0 insertions, 166 deletions
diff --git a/python/ops/funds.py b/python/ops/funds.py
deleted file mode 100644
index 1b06ec35..00000000
--- a/python/ops/funds.py
+++ /dev/null
@@ -1,166 +0,0 @@
-import csv
-import datetime
-import pathlib
-from csv_headers.citco import GTL, GIL
-from serenitas.utils.remote import FtpClient, SftpClient
-from serenitas.utils.exchange import ExchangeMessage, FileAttachment
-from io import StringIO
-from pickle import dumps
-from typing import Tuple, Union
-from serenitas.utils.env import DAILY_DIR
-from .file_gen import build_line
-from .trade_dataclasses import DealKind
-from .headers import get_headers, MTM_HEADERS
-
-
-class Fund:
- staging_queue = []
- _registry = {}
- filepath_pattern = None
-
- def __class_getitem__(cls, fund_name: str):
- return cls._registry[fund_name]
-
- def __init_subclass__(cls, fund_name: str):
- cls.name = fund_name
- cls._registry[fund_name] = cls
-
- @classmethod
- def build_buffer(cls, trade_type):
- buf = StringIO()
- csvwriter = csv.writer(buf)
- cls.set_headers(trade_type)
- csvwriter.writerow(cls.headers)
- csvwriter.writerows(
- [[obj.get(h) for h in cls.headers] for obj in cls.staging_queue]
- )
- buf = buf.getvalue().encode()
- dest = cls.get_filepath(DAILY_DIR, trade_type)
- dest.parent.mkdir(exist_ok=True)
- dest.write_bytes(buf)
- return buf, dest
-
- @classmethod
- def set_headers(cls, trade_type):
- cls.headers = get_headers(trade_type, cls.name)
-
- @classmethod
- def stage(cls, trade, *, trade_type, **kwargs):
- cls.staging_queue.append(build_line(trade, trade_type, cls.name))
-
- @classmethod
- def get_filepath(
- cls,
- base_dir: pathlib.Path,
- trade_type: Union[str, Tuple[str, str]],
- ) -> pathlib.Path:
- d = {
- "bond": "Mortgages",
- "cds": "CreditDefaultSwapDeal",
- "swaption": "SwaptionDeal",
- "future": "Future",
- "wire": "CashFlowDeal",
- "spot": "SpotDeal",
- "fx_swap": "FxSwapDeal",
- "capfloor": "CapFloor",
- "repo": "RepoDeal",
- "iam": "IamDeal",
- "trs": "TRSDeal",
- "irs": "IRSDeal",
- }
- if cls is MTM:
- trade_tag = "TRN" if trade_type == "cds" else "CDISW"
- else:
- if isinstance(trade_type, tuple):
- trade_tag = d[trade_type[0]] + trade_type[1]
- else:
- trade_tag = d[trade_type]
-
- timestamp = datetime.datetime.now()
- return (
- base_dir
- / str(timestamp.date())
- / cls.filepath_pattern.format(timestamp=timestamp, trade_tag=trade_tag)
- )
-
-
-class Serenitas(Fund, fund_name="SERCGMAST"):
- filepath_pattern = "Serenitas.ALL.{timestamp:%Y%m%d.%H%M%S}.{trade_tag}.csv"
-
- @staticmethod
- def upload(buf, dest):
- ftp = FtpClient.from_creds("globeop", folder="incoming")
- ftp.put(buf, dest)
-
-
-class Brinker(Fund, fund_name="BRINKER"):
- filepath_pattern = "LMCG_BBH_SWAP_TRADES_P.{timestamp:%Y%m%d%H%M%S}.csv"
-
- @staticmethod
- def upload(buf, dest):
- sftp = SftpClient.from_creds("bbh")
- sftp.put(buf, dest)
-
-
-class Bowdst(Fund, fund_name="BOWDST"):
- filepath_pattern = "Bowdst.ALL.{timestamp:%Y%m%d.%H%M%S}.{trade_tag}.csv"
-
- @staticmethod
- def upload(buf, dest):
- sftp = SftpClient.from_creds("hm_globeop", folder="incoming")
- sftp.put(buf, dest)
- em = ExchangeMessage()
- recipients = ("hm-operations@bnymellon.com",)
- em.send_email(
- "Trade file",
- "",
- to_recipients=recipients,
- cc_recipients=("bowdoin-ops@lmcg.com",),
- attach=(FileAttachment(name=dest, content=buf),),
- )
-
-
-class Selene(Fund, fund_name="ISOSEL"):
- filepath_pattern = "innocap_serenitas_trades_{timestamp:%Y%m%d%H%M%S}.csv"
- headers = GTL
-
- @classmethod
- def set_headers(cls, trade_type):
- if trade_type == "product":
- cls.headers = GIL
- cls.filepath_pattern = "i.innocap_serenitas.{timestamp:%Y%m%d%H%M%S}.csv"
-
- @staticmethod
- def upload(buf, dest):
- sftp = SftpClient.from_creds("citco", folder="incoming")
- sftp.put(buf, dest)
-
- @classmethod
- def stage(cls, trade, *, trade_type, redis_pipeline, **kwargs):
- obj = DealKind[trade_type].from_dict(**trade)
- if (
- (trade_type not in ("cds", "irs", "swaption", "trs"))
- or (trade_type == "cds" and obj.attach is None)
- or obj.product.status == "Acknowledged"
- ):
- cls.staging_queue.append(obj.to_citco(trade["action"]))
- else:
- redis_pipeline.rpush("product_queue", dumps((trade_type, trade)))
-
-
-class MTM(Fund, fund_name="MTM"):
- filepath_pattern = "MTM.{timestamp:%Y%m%d.%H%M%S}.{trade_tag}.csv"
-
- @classmethod
- def set_headers(cls, trade_type):
- cls.headers = MTM_HEADERS[trade_type]
-
- @classmethod
- def stage(cls, trade, *, trade_type, **kwargs):
- obj = DealKind[trade_type].from_dict(**trade)
- cls.staging_queue.append(obj.to_markit())
-
- @staticmethod
- def upload(buf, dest):
- sftp = SftpClient.from_creds("mtm")
- sftp.put(buf, dest)