aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/isosel_reports.py7
-rw-r--r--python/report_ops/misc.py6
-rw-r--r--python/report_ops/remote.py68
3 files changed, 40 insertions, 41 deletions
diff --git a/python/isosel_reports.py b/python/isosel_reports.py
index e1a9a9b7..40d2f12d 100644
--- a/python/isosel_reports.py
+++ b/python/isosel_reports.py
@@ -21,7 +21,6 @@ if __name__ == "__main__":
AllReport,
):
report = report_cls(args.date)
- try:
- report.to_db()
- except ValueError as e:
- logger.info(e)
+ report.to_db()
+ # except ValueError as e:
+ # logger.info(e)
diff --git a/python/report_ops/misc.py b/python/report_ops/misc.py
index 73f08f90..72bf0399 100644
--- a/python/report_ops/misc.py
+++ b/python/report_ops/misc.py
@@ -20,3 +20,9 @@ def dt_from_fname(f, dt_format="%Y%m%d%H%M"):
return datetime.datetime.strptime(
f.name.removesuffix(".csv").removesuffix(".xlsx").rsplit("_")[-1], dt_format
)
+
+
+def dt_from_citco(filename, file_tag, dt_format):
+ return datetime.datetime.strptime(
+ filename.removesuffix(".csv").removeprefix(file_tag), dt_format
+ )
diff --git a/python/report_ops/remote.py b/python/report_ops/remote.py
index 2dac0db2..5d66fd7f 100644
--- a/python/report_ops/remote.py
+++ b/python/report_ops/remote.py
@@ -5,18 +5,9 @@ from serenitas.utils.db import dawn_engine, dbconn
import datetime
import re
from serenitas.analytics.dates import prev_business_day, next_business_day
-
-
-def citco_accrued(s):
- if m := re.search("100502500_INNOCAP_ISOSEL.([\d]+)\.", s):
- dt = datetime.datetime.strptime(m.group(1), "%Y%m%d%H%M%S")
- return prev_business_day(dt)
-
-
-def citco_all(s):
- if m := re.search("SPOS4X_INNOCAP_ISOSEL_D_IM.([\d.]+)\.", s):
- dt = datetime.datetime.strptime(m.group(1), "%Y%m%d.%H%M%S")
- return dt
+from .misc import dt_from_citco
+from functools import partial
+from typing import ClassVar
def load_citco_report(fh, kd, date_cols):
@@ -31,41 +22,44 @@ def load_citco_report(fh, kd, date_cols):
class Report:
table: str
- ped_func: Callable[[str], datetime.datetime]
_sftp = SftpClient.from_creds("citco", folder="outgoing")
_conn: dbconn = dbconn("dawndb")
date_cols: List[str] = []
+ dtkey_fun: ClassVar
- def __init_subclass__(cls, table, f, fname, date_cols):
+ def __init_subclass__(cls, table, fname, date_cols, dtkey):
cls.table = table
- cls.ped_func = f
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
- @property
- def most_recent_report(self):
- report_files = [
- filename
- for filename in self._sftp.client.listdir()
- if self.fname in filename
- if type(self).ped_func(filename).date() == self.date
- ]
- try:
- return max(report_files, key=type(self).ped_func)
- except ValueError:
- raise ValueError(f"Missing data for {self.table}: {self.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
- def to_df(self):
- with self._sftp.client.open(self.most_recent_report) as fh:
- return load_citco_report(
- fh, type(self).ped_func(self.most_recent_report), self.date_cols
- )
+ @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)
def to_db(self):
- df = self.to_df()
+ p = self.get_newest_report(self.date)
+ df = self.to_df(p)
with self._conn.cursor() as c:
c.execute(
f"DELETE FROM {self.table} WHERE period_end_date= %s",
@@ -80,8 +74,7 @@ class Report:
class AccruedReport(
Report,
table="isosel_accrued",
- f=citco_accrued,
- fname="100502500_INNOCAP_ISOSEL",
+ fname="100502500_INNOCAP_ISOSEL_",
date_cols=[
"Init Date",
"Init Settle Date",
@@ -92,6 +85,7 @@ class AccruedReport(
"Start Date",
"End Date",
],
+ dtkey="%Y%m%d%H%M%S",
):
pass
@@ -99,8 +93,8 @@ class AccruedReport(
class AllReport(
Report,
table="citco_reports",
- f=citco_all,
- fname="SPOS4X_INNOCAP_ISOSEL_D_IM",
+ fname="SPOS4X_INNOCAP_ISOSEL_D_IM.",
date_cols=["Maturity Date"],
+ dtkey="%Y%m%d.%H%M%S",
):
pass