aboutsummaryrefslogtreecommitdiffstats
path: root/python/innocap_file_transfer.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/innocap_file_transfer.py')
-rw-r--r--python/innocap_file_transfer.py76
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)