diff options
Diffstat (limited to 'python/report_ops/sma.py')
| -rw-r--r-- | python/report_ops/sma.py | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/python/report_ops/sma.py b/python/report_ops/sma.py index 8b95496c..bb58fe07 100644 --- a/python/report_ops/sma.py +++ b/python/report_ops/sma.py @@ -10,6 +10,9 @@ import pandas as pd from io import StringIO from typing import ClassVar from .headers import POSITION_HEADERS +from io import StringIO +import csv +from serenitas.utils.env import DAILY_DIR @dataclass @@ -95,6 +98,19 @@ _fund_client = {"BOWDST": "Hedgemark", "ISOSEL": "Innocap"} _fund_fcm = {"BOWDST": "GS_FCM", "ISOSEL": "BOA_FC"} +def get_path(cob, fund): + match fund: + case "ISOSEL": + filepath_pattern = "Innocap_{fund}_positions_{cob:%Y%m%d}.csv" + case _: + filepath_pattern = "{fund}_positions_{cob:%Y%m%d}.csv" + return ( + DAILY_DIR + / str(datetime.date.today()) + / filepath_pattern.format(fund=fund, cob=cob) + ) + + @dataclass class PositionReport(Deal, deal_type=None, table_name=None): client_name: str = field(metadata={"position": "Client Name"}) @@ -134,6 +150,7 @@ class PositionReport(Deal, deal_type=None, table_name=None): account: str = field(default=None, metadata={"position": "AccountNumber"}) primebroker: str = field(default=None, metadata={"position": "Prime Broker"}) price: float = field(default=None, metadata={"position": "MarketPrice"}) + staging_queue: ClassVar = [] asset_class: ClassVar[str] = field(metadata={"position": "Product Type"}) _query: ClassVar[str] @@ -148,8 +165,21 @@ class PositionReport(Deal, deal_type=None, table_name=None): c.execute(cls._query, params) for row in c: position = cls.from_query(row._asdict(), cob, fund) - print(position) - position.serialize("position") + cls.staging_queue.append(position.serialize("position")) + + @classmethod + def build_buffer(cls, cob, fund, upload=False): + buf = StringIO() + csvwriter = csv.writer(buf) + csvwriter.writerow(POSITION_HEADERS) + csvwriter.writerows( + [[obj.get(h) for h in POSITION_HEADERS] for obj in cls.staging_queue] + ) + buf = buf.getvalue().encode() + dest = get_path(cob, fund) + dest.parent.mkdir(exist_ok=True) + dest.write_bytes(buf) + return buf, dest def from_query(d, cob, fund): d["client_name"] = _fund_client[fund] |
