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)
|