diff options
Diffstat (limited to 'python/report_ops/admin.py')
| -rw-r--r-- | python/report_ops/admin.py | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/python/report_ops/admin.py b/python/report_ops/admin.py index 1f82afdb..cb2655cd 100644 --- a/python/report_ops/admin.py +++ b/python/report_ops/admin.py @@ -21,14 +21,15 @@ class CitcoReport: fund: Fund = None _conn: dbconn = dbconn("dawndb") date_cols: ClassVar = [] + file_prefix: ClassVar dtkey_fun: ClassVar _registry = {} - def __init_subclass__(cls, table, fname, date_cols, dtkey): + def __init_subclass__(cls, table, file_prefix, date_cols, dtkey): cls.table = table - cls.fname = fname + cls.file_prefix = file_prefix cls.date_cols = date_cols - cls.dtkey_fun = partial(dt_from_citco, file_tag=cls.fname, dt_format=dtkey) + cls.dtkey_fun = partial(dt_from_citco, file_tag=file_prefix, dt_format=dtkey) cls._registry[table] = cls def __class_getitem__(cls, table): @@ -38,31 +39,31 @@ class CitcoReport: match self.fund: case "ISOSEL": self._sftp = SftpClient.from_creds("citco", folder="outgoing") - self.report_name = self.get_latest_report() + if not self.report_file_name: + raise ValueError(f"No reports for {self.table} on {self.date}") self.knowledge_date = datetime.datetime.combine( - self.date, self.dtkey_fun(self.report_name).time() + self.date, self.dtkey_fun(self.report_file_name).time() ) @property - def report_date(self): + def sftp_report_date(self): return self.date - def get_latest_report(self): - p = max( + @property + def report_file_name(self): + return max( [ f for f in self._sftp.client.listdir() - if (self.fname in f) and (self.dtkey_fun(f).date() == self.report_date) + if (self.file_prefix in f) + and (self.dtkey_fun(f).date() == self.sftp_report_date) ], key=self.dtkey_fun, default=None, ) - if not p: - raise ValueError(f"No reports for {self.table} on {self.date}") - return p def to_df(self): - with self._sftp.client.open(self.report_name) as fh: + with self._sftp.client.open(self.report_file_name) as fh: df = pd.read_csv(fh, parse_dates=self.date_cols, infer_datetime_format=True) df["row"] = df.index df.columns = df.columns.str.lower() @@ -87,7 +88,7 @@ class CitcoReport: class AccruedReport( CitcoReport, table="isosel_accrued", - fname="100502500_INNOCAP_ISOSEL_", + file_prefix="100502500_INNOCAP_ISOSEL_", date_cols=[ "Init Date", "Init Settle Date", @@ -101,14 +102,14 @@ class AccruedReport( dtkey="%Y%m%d%H%M%S", ): @property - def report_date(self): + def sftp_report_date(self): return next_business_day(self.date) class AllReport( CitcoReport, table="citco_reports", - fname="SPOS4X_INNOCAP_ISOSEL_D_IM.", + file_prefix="SPOS4X_INNOCAP_ISOSEL_D_IM.", date_cols=["Maturity Date"], dtkey="%Y%m%d.%H%M%S", ): |
