import datetime import argparse from itertools import groupby from serenitas.ops.trade_dataclasses import SpotDeal from report_ops.services import get_service def upload_cls_file(conn, fund, trade_date, upload): with conn.cursor() as c: c.execute( "SELECT ft.*, accounts2.cp_code as account_counterparty FROM forward_trades ft LEFT JOIN accounts2 USING (cash_account) WHERE ft.fund=%s AND ft.trade_date=%s AND accounts2.account_type='Cash';", (fund, trade_date), ) trades = [t._asdict() for t in c] for account_counterparty, trades in groupby( trades, lambda x: x["account_counterparty"] ): if account_counterparty not in ("BONY",): # Working on CLS continue service = get_service(account_counterparty) for t in trades: t["dealid"] = ( f"{t['dealid']}.{t['fx_type'][0]}" if t["fx_type"] != "SPOT" else t["dealid"] ) trade = SpotDeal.from_dict(**t) service.push_trade(trade, "NEW") buf, dest = service.build_buffer("spot") if upload: service.upload( buf, dest.name, fund, ) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument( "trade_date", type=datetime.date.fromisoformat, default=datetime.date.today(), nargs="?", ) parser.add_argument( "-n", "--no-upload", action="store_true", help="do not upload to CTM" ) args = parser.parse_args() conn = SpotDeal._conn for fund in ("BOWDST",): upload_cls_file(conn, fund, args.trade_date, not args.no_upload)