aboutsummaryrefslogtreecommitdiffstats
path: root/python/custodian_wire.py
blob: 7c24669646e8c4f0a8baf6578d93ed9bd8dfca93 (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
from bowdst import get_dir, download_messages
from csv import DictReader
from citco_ops.bowdst import BowdstWire, IsoselWire
from citco_ops.cash import IsoselCashReport, dt_from_fname as nt_key
import datetime


def dt_from_fname(f):
    return datetime.datetime.strptime(
        f.name.split("_")[1].split(".")[0], "%Y%m%d%H%M%S"
    )


def load_bowdst_wire_report(workdate: datetime.date):
    p = max(
        [f for f in get_dir(workdate).iterdir() if "BowdstWires" in f.name],
        key=dt_from_fname,
        default=None,
    )
    if not p:  # No files available
        return
    with open(p) as fh:
        reader = DictReader(fh)
        for line in reader:
            BowdstWire.from_nexen_line(line).stage()
        BowdstWire.commit()


def load_isosel_wire_report(workdate: datetime.date):
    p = max(
        [f for f in get_dir(workdate).iterdir() if "custodian_wires" in f.name],
        key=nt_key,
        default=None,
    )
    if not p:  # No files available
        return
    with open(p) as fh:
        reader = DictReader(fh)
        for line in reader:
            if "sponsor" in line["narrative"].lower():
                IsoselWire.from_passport_line(line).stage()
        IsoselWire.commit()


if __name__ == "__main__":
    import argparse
    from serenitas.utils.exchange import ExchangeMessage

    parser = argparse.ArgumentParser()
    parser.add_argument(
        "workdate",
        nargs="?",
        type=datetime.date.fromisoformat,
        default=datetime.date.today(),
        help="working date",
    )
    args = parser.parse_args()
    em = ExchangeMessage()
    download_messages(em)
    IsoselCashReport.download_reports(args.workdate)
    load_bowdst_wire_report(args.workdate)
    load_isosel_wire_report(args.workdate)