from serenitas.utils.db import dbconn from serenitas.ops.funds import Bowdst from serenitas.ops.trade_dataclasses import WireDeal import datetime from serenitas.analytics.dates import prev_business_day from collateral.common import CASH_STRATEGY_MAPPING, STRATEGY_CASH_MAPPING from serenitas.utils.misc import rename_keys def generate_csv(date, conn, fund="BOWDST"): wire_deals = [] with conn.cursor() as c: c.execute( "SELECT count(*) FROM wires WHERE trade_date=%s AND fund=%s AND author='auto';", ( date, fund, ), ) (count,) = c.fetchone() if count > 0: return c.execute( "SELECT * FROM list_orphaned_cash(%s, %s) ", ( date, fund, ), ) for row in c: if row.strat not in CASH_STRATEGY_MAPPING: obj = WireDeal(**row._asdict(), action="NEW") offset = obj.offset(STRATEGY_CASH_MAPPING[obj.folder]) obj.stage() offset.stage() wire_deals.extend([obj, offset]) if wire_deals: WireDeal.commit() for wire in wire_deals: wire.set_id() Bowdst.staging_queue.append(wire.to_globeop("NEW")) buf, dest = Bowdst.build_buffer("wire") Bowdst.upload(buf, dest.name) Bowdst().clear() if __name__ == "__main__": import argparse parser = argparse.ArgumentParser() parser.add_argument( "workdate", nargs="?", type=datetime.date.fromisoformat, default=prev_business_day(datetime.date.today()), help="working date", ) args = parser.parse_args() conn = dbconn("dawndb") generate_csv(args.workdate, conn)