aboutsummaryrefslogtreecommitdiffstats
path: root/python/ack_checker.py
blob: 3c2269ce819ce275cb809d96ddf87c9909b603b9 (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
import codecs
import datetime
from csv import reader
from io import BytesIO
from remote import FtpClient
from 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)
                serenitas_id = int(serenitas_id[5:])
                if dealtype == "CreditDefaultSwapDeal":
                    with conn.cursor() as c:
                        c.execute(
                            "SELECT orig_attach FROM cds WHERE id=%s", (serenitas_id,)
                        )
                        (attach,) = c.fetchone()
                        if attach is None:
                            continue

                    with conn.cursor() as c:
                        c.execute(
                            "INSERT INTO id_mapping VALUES(%s, %s, %s, %s)",
                            (date, "CDS", serenitas_id, globeop_id),
                        )
                if dealtype == "SwaptionDeal":
                    with conn.cursor() as c:
                        c.execute(
                            "UPDATE swaptions SET globeop_id=%s WHERE dealid=%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)