diff options
Diffstat (limited to 'python/citco_ops/utils.py')
| -rw-r--r-- | python/citco_ops/utils.py | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/python/citco_ops/utils.py b/python/citco_ops/utils.py index b926f700..450b2204 100644 --- a/python/citco_ops/utils.py +++ b/python/citco_ops/utils.py @@ -5,9 +5,11 @@ import datetime import csv from serenitas.ops.trade_dataclasses import Deal from serenitas.utils.exchange import ExchangeMessage +from serenitas.utils.remote import SftpClient from psycopg.errors import UniqueViolation from exchangelib import HTMLBody from tabulate import tabulate +from functools import lru_cache logger = logging.getLogger(__name__) @@ -64,6 +66,10 @@ class CitcoSubmission(Deal, deal_type=None, table_name="citco_submission"): serenitas_id: str submit_date: datetime.datetime = field(default=datetime.datetime.now()) processed: bool = field(default=False) + _sftp: ClassVar = field( + default=SftpClient.from_creds("citco", folder="/outgoing/notifications"), + init=False, + ) @classmethod def from_citco_line(cls, line, fname): @@ -82,11 +88,14 @@ class CitcoSubmission(Deal, deal_type=None, table_name="citco_submission"): ) @classmethod - def process(cls, fh, fname): - next(fh) # skip header - for row in csv.reader(fh): - trade = cls.from_citco_line(row, fname) - trade.stage() + @lru_cache(1280) + def process(cls, fname): + with cls._sftp.client.open(fname) as fh: + next(fh) # skip header + for row in csv.reader(fh): + trade = cls.from_citco_line(row, fname) + trade.stage() + return @classmethod def update_citco_tables(cls): @@ -158,6 +167,18 @@ class CitcoSubmission(Deal, deal_type=None, table_name="citco_submission"): ) return html + @classmethod + def init_sftp(cls): + return SftpClient.from_creds("citco", folder="/outgoing/notifications") + + @classmethod + def check_cache(cls): + if cls.process.cache_info().currsize == cls.process.cache_info().maxsize: + if (cls.process.cache_info().misses / cls.process.cache_info().hits) > 0.5: + raise ValueError( + "Too many files in the SFTP compared to cache max size" + ) + _recipients = { "ISOSEL": ( |
