aboutsummaryrefslogtreecommitdiffstats
path: root/python/ack_checker.py
blob: a2c3dbffd13cc2fbf3e3ebfcc416ef389f8f09d8 (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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import codecs
import datetime
import re
from csv import reader
from io import BytesIO
from serenitas.utils.remote import FtpClient
from serenitas.utils.db import dbconn


def ack_check(date: datetime.date, conn):
    ftp = FtpClient.from_creds("globeop")
    ftp.client.cwd("outgoing")
    files = [
        f for f in ftp.client.nlst() if f.startswith(f"Serenitas.ALL.{date:%Y%m%d}")
    ]
    for f in files:
        buf = BytesIO()
        ftp.client.retrbinary("RETR " + f, buf.write)
        buf.seek(0)
        csv = reader(codecs.iterdecode(buf, "utf-8"))
        for serenitas_id, action, dealtype, result, globeop_id, _, _ in csv:
            if action == "NEW" and result == "Loaded":
                globeop_id = int(globeop_id)
                if m := re.match("[^0-9]*([0-9]*)", serenitas_id):
                    serenitas_id = int(m.groups()[0])
                if dealtype == "CreditDefaultSwapDeal":
                    with conn.cursor() as c:
                        c.execute(
                            "SELECT trade_date, orig_attach FROM cds WHERE id=%s",
                            (serenitas_id,),
                        )
                        (trade_date, attach) = c.fetchone()
                        if attach is None:
                            continue

                    with conn.cursor() as c:
                        c.execute(
                            "INSERT INTO id_mapping VALUES(%s, %s, %s, %s) "
                            "ON CONFLICT DO NOTHING",
                            (trade_date, "CDS", serenitas_id, globeop_id),
                        )
                if dealtype == "SwaptionDeal":
                    with conn.cursor() as c:
                        c.execute(
                            "UPDATE swaptions SET globeop_id=%s WHERE id=%s",
                            (globeop_id, serenitas_id),
                        )
            conn.commit()


if __name__ == "__main__":
    import argparse

    parser = argparse.ArgumentParser()
    parser.add_argument(
        "workdate",
        nargs="?",
        type=datetime.date.fromisoformat,
        default=datetime.date.today(),
        help="working date",
    )
    args = parser.parse_args()
    dawndb = dbconn("dawndb")
    ack_check(args.workdate, dawndb)