aboutsummaryrefslogtreecommitdiffstats
path: root/python/mtm_upload.py
blob: fa2f526efa5fb5f1a41dd96b2ce560f25803e91c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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,
    "swaptions": SwaptionDeal,
    "termination": TerminationDeal,
}


def process_upload(tradeid, asset_type):
    obj = deal_registry["asset_type"].from_tradeid(tradeid).to_markit()
    buf = StringIO()
    csvwriter = csv.writer(buf)
    csvwriter.writerow(MTM_HEADERS[asset_type])
    csvwriter.writerows([obj.get(h, None) for h in MTM_HEADERS[asset_type]])
    buf = buf.getvalue().encode()
    fname = f"MTM.{datetime.datetime.now():%Y%m%d.%H%M%S}.{asset_type.capitalize()}.csv"
    sftp = SftpClient.from_creds("mtm")
    sftp.put(buf, fname)
    dest = DAILY_DIR / str(datetime.date.today()) / fname
    dest.write_bytes(buf)


def upload_mtm_trades(trade_type, tradeid, conn=None):
    match trade_type:
        case "swaption":
            process_upload(
                SwaptionDeal.from_tradeid(tradeid).to_markit(), trade_type, True
            )
        case "cds":
            process_upload(CDSDeal.from_tradeid(tradeid).to_markit(), trade_type, True)
        case "termination":
            process_upload(terminations(tradeid, conn), trade_type, True)


if __name__ == "__main__":
    conn = dbconn("dawndb")
    upload_trades(conn)