from io import StringIO import csv from serenitas.utils.env import DAILY_DIR from serenitas.utils.remote import SftpClient import datetime from trade_dataclasses import CDSDeal, SwaptionDeal, TerminationDeal from headers import MTM_HEADERS deal_registry = { "cds": CDSDeal, "swaption": SwaptionDeal, "termination": TerminationDeal, } def mtm_process_upload(tradeids, product_type): objs = [ deal_registry[product_type].from_tradeid(tradeid).to_markit() for tradeid in tradeids ] buf = StringIO() csvwriter = csv.writer(buf) csvwriter.writerow(MTM_HEADERS[product_type]) csvwriter.writerows( [obj.get(h, None) for h in MTM_HEADERS[product_type]] for obj in objs ) buf = buf.getvalue().encode() fname = ( f"MTM.{datetime.datetime.now():%Y%m%d.%H%M%S}.{product_type.capitalize()}.csv" ) sftp = SftpClient.from_creds("mtm") sftp.put(buf, fname) dest = DAILY_DIR / str(datetime.date.today()) / fname dest.write_bytes(buf)