aboutsummaryrefslogtreecommitdiffstats
path: root/python/report_ops/remote.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/report_ops/remote.py')
-rw-r--r--python/report_ops/remote.py101
1 files changed, 0 insertions, 101 deletions
diff --git a/python/report_ops/remote.py b/python/report_ops/remote.py
deleted file mode 100644
index 944019e1..00000000
--- a/python/report_ops/remote.py
+++ /dev/null
@@ -1,101 +0,0 @@
-from serenitas.utils.remote import SftpClient
-from typing import Callable, List
-import pandas as pd
-from serenitas.utils.db import dawn_engine, dbconn
-import datetime
-import re
-from serenitas.analytics.dates import prev_business_day, next_business_day
-from .misc import dt_from_citco
-from functools import partial
-from typing import ClassVar
-
-
-def load_citco_report(fh, kd, date_cols):
- df = pd.read_csv(fh, parse_dates=date_cols, infer_datetime_format=True)
- df["row"] = df.index
- df.columns = df.columns.str.lower()
- df.columns = df.columns.str.replace(" ", "_")
- df["period_end_date"] = kd.date()
- df["knowledge_date"] = next_business_day(kd)
- return df
-
-
-class Report:
- table: str
- _sftp = SftpClient.from_creds("citco", folder="outgoing")
- _conn: dbconn = dbconn("dawndb")
- date_cols: List[str] = []
- dtkey_fun: ClassVar
-
- def __init_subclass__(cls, table, fname, date_cols, dtkey):
- cls.table = table
- cls.fname = fname
- cls.date_cols = date_cols
- cls.dtkey_fun = partial(dt_from_citco, file_tag=cls.fname, dt_format=dtkey)
-
- def __init__(self, date):
- self.date = date
-
- @classmethod
- def get_newest_report(cls, date):
- p = max(
- [
- f
- for f in cls._sftp.client.listdir()
- if (cls.fname in f) and (cls.dtkey_fun(f).date() == date)
- ],
- key=cls.dtkey_fun,
- default=None,
- )
- if not p:
- raise ValueError(f"No reports for {cls.fund} on {date}")
- return p
-
- @classmethod
- def to_df(cls, fname):
- kd = cls.dtkey_fun(fname)
- with cls._sftp.client.open(fname) as fh:
- return load_citco_report(fh, kd, cls.date_cols)
-
- @classmethod
- def to_db(cls, date):
- p = cls.get_newest_report(date)
- df = cls.to_df(p)
- with cls._conn.cursor() as c:
- c.execute(
- f"DELETE FROM {cls.table} WHERE period_end_date= %s",
- (date,),
- )
- cls._conn.commit()
- if "strategy" in df.columns:
- df["strategy"] = df["strategy"].str.replace("/M_|/SER_", "/", regex=True)
- df.to_sql(cls.table, dawn_engine, if_exists="append", index=False)
-
-
-class AccruedReport(
- Report,
- table="isosel_accrued",
- fname="100502500_INNOCAP_ISOSEL_",
- date_cols=[
- "Init Date",
- "Init Settle Date",
- "Liqd Date",
- "Liqd Settle Date",
- "Bond Maturity",
- "Orig Date",
- "Start Date",
- "End Date",
- ],
- dtkey="%Y%m%d%H%M%S",
-):
- pass
-
-
-class AllReport(
- Report,
- table="citco_reports",
- fname="SPOS4X_INNOCAP_ISOSEL_D_IM.",
- date_cols=["Maturity Date"],
- dtkey="%Y%m%d.%H%M%S",
-):
- pass