from serenitas.utils.remote import SftpClient from trade_dataclasses import Deal, DealType, BbgDeal from stat import S_ISREG import re import time def run(): sftp = SftpClient.from_creds("bbg") while True: try: for f in sftp.client.listdir_iter("/"): if S_ISREG(f.st_mode): if m := re.match("(CDX|BOND)-[^_]*_([^$]*)", f.filename): deal_type, bbg_id = m.groups() if bbg_id not in BbgDeal._cache: with sftp.client.open(f.filename) as fh: Deal[DealType(deal_type)].process(fh, bbg_id) BbgDeal._cache[bbg_id] = None except OSError: sftp.client.close() sftp = SftpClient.from_creds("bbg") time.sleep(60) if __name__ == "__main__": run()