diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/innocap_file_transfer.py | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/python/innocap_file_transfer.py b/python/innocap_file_transfer.py new file mode 100644 index 00000000..6cd86f30 --- /dev/null +++ b/python/innocap_file_transfer.py @@ -0,0 +1,76 @@ +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 + + +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): + if not l: + # Do not generate empty files + return + 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}_{args.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( + "date", + nargs="?", + type=datetime.date.fromisoformat, + default=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.date, not args.no_upload) |
