from dataclasses import dataclass, field import datetime from serenitas.ops.trade_dataclasses import Fund, Deal, Ccy from psycopg.errors import UniqueViolation @dataclass class WireBase(Deal, table_name="custodian_wires", deal_type="custodian_wires"): date: datetime.date fund: Fund entry_date: datetime.date value_date: datetime.date pay_date: datetime.date currency: Ccy amount: float wire_details: str unique_ref: str def __init_subclass__(cls, fund, **kwargs): cls.fund = fund @classmethod def commit(cls): cls._sql_insert += " ON CONFLICT (unique_ref) DO NOTHING" with cls._conn.cursor() as c: c.executemany(cls._sql_insert, cls._insert_queue) cls._conn.commit() cls._insert_queue.clear() class BowdstWire(WireBase, fund="BOWDST"): @classmethod def from_nexen_line(cls, line: dict): return cls( date=line["Report Run Date"], entry_date=line["Cash Entry Date"], value_date=line["Cash Value Date"], pay_date=line["Settle / Pay Date"], currency=line["Reporting Currency Code"], amount=line["Local Amount"] .replace(",", "") .replace(")", "") .replace("(", "-"), wire_details=line["Transaction Description 1"] if line["Transaction Type Code"] == "CW" else line["Transaction Description 2"], unique_ref=line["Reference Number"], fund="BOWDST", )