from serenitas.utils.remote import SftpClient import datetime import csv from trade_dataclasses import CDSDeal, BondDeal, BbgDeal, _funds, _cdx_cp, _fcms from decimal import Decimal from stat import S_ISREG _deal = {"BOND": BondDeal, "CDX": CDSDeal} def trade_booking_process(file_handle, index, asset_class): deal = _deal[asset_class] for row in csv.DictReader(file_handle): line = {"bbg_ticket_id": index, **row} trade = deal.from_bbg_line(line) trade.stage() deal.commit() def get_bbg_id(name): return name.split("_", 1)[1] if __name__ == "__main__": import time sftp = SftpClient.from_creds("bbg") while True: for f in sftp.client.listdir_iter("/"): if S_ISREG(f.st_mode): if (bbg_id := get_bbg_id(f.filename)) not in BbgDeal._cache: with sftp.client.open(f.filename) as fh: trade_booking_process(fh, bbg_id, f.filename.split("-", 1)[0]) BbgDeal._cache[bbg_id] = None time.sleep(60)