from serenitas.utils.env import DAILY_DIR from csv import DictReader, DictWriter import datetime import re import argparse from csv_headers.citco import GIL, GTL from io import StringIO from serenitas.utils.remote import SftpClient from serenitas.analytics.dates import prev_business_day def extract_data_from_directory(date, file_type): match file_type: case "trade": file_tag = "innocap_serenitas_trades" case "instrument": file_tag = "i.innocap_serenitas" file_directory = DAILY_DIR / str(date) pat = re.compile(f"^{file_tag}") l = [] for f in [f for f in file_directory.iterdir() if f.is_file()]: if match := pat.match(f.name): with open(f) as fh: reader = DictReader(fh) for csv_dict in reader: l.append(csv_dict) return l def gen_csv(l, file_type, date, upload): buf = StringIO() todays_directory = DAILY_DIR / str(datetime.date.today()) writer = DictWriter(buf, GTL if file_type == "trade" else GIL) writer.writeheader() writer.writerows(l) buf = buf.getvalue().encode() fname = f"Innocap_ISOSEL_{file_type}_{date:%Y-%m-%d}.csv" dest = todays_directory / fname dest.write_bytes(buf) if upload: innocap_sftp = SftpClient.from_creds("innocap", folder="Innocap") innocap_sftp.put(buf, fname) def main(date, upload): for file_type in ("trade", "instrument"): l = extract_data_from_directory(date, file_type) gen_csv(l, file_type, date, upload) 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)