from io import BytesIO from serenitas.utils.env import DAILY_DIR import datetime from csv_headers.citco import GIL, GTL from serenitas.utils.remote import SftpClient from serenitas.analytics.dates import prev_business_day def concat_csv(file_type, date): match file_type: case "trade": file_tag = "innocap_serenitas_trades" case "instrument": file_tag = "i.innocap_serenitas" fname = f"Innocap_ISOSEL_{file_type}_{date:%Y-%m-%d}.csv" buf = BytesIO() buf.write((",".join(GTL if file_type == "trade" else GIL) + "\n").encode()) for f in (DAILY_DIR / str(date)).iterdir(): if f.is_file() and f.name.startswith(file_tag): with f.open("rb") as fh: next(fh) # Don't concat headers buf.write(fh.read()) return buf.getvalue(), fname def main(date, upload): for file_type in ("trade", "instrument"): buf, fname = concat_csv(file_type, date) dest = DAILY_DIR / str(date) / fname dest.write_bytes(buf) if upload: innocap_sftp = SftpClient.from_creds("innocap", folder="Innocap") innocap_sftp.put(buf, fname) if __name__ == "__main__": import argparse parser = argparse.ArgumentParser() parser.add_argument( "cob", nargs="?", type=datetime.date.fromisoformat, default=prev_business_day(datetime.date.today()), help="file transfer date", ) parser.add_argument( "--no-upload", "-n", action="store_true", default=False, help="uploads to citco and innocap", ) args = parser.parse_args() main(args.cob, not args.no_upload)