import os import asyncio import fnmatch from app.services.types.queue import Enqueue from app.services.common.service_base_async import ServiceBaseAsync from app.services.types.task import Job from app.services.types.mail import ProcessMailObject PRODUCE_BURST = int(os.getenv("PRODUCE_BURST", "10")) PRODUCE_ONCE = os.getenv("PRODUCE_ONCE", "true").lower() == "true" EVENT_TYPE = os.getenv("EVENT_TYPE", "db-mongo") PROCESS_SEC = 10 async def produce(svc: ServiceBaseAsync): await asyncio.sleep(PROCESS_SEC) async def handle_mail_publish(svc: ServiceBaseAsync, job: dict): # Check for bank mail is from which Bank and to which bulding job_model = Job(**job) process_mail_object = ProcessMailObject(**job_model.payload) mail_id = process_mail_object.data.id task_id = f"IsBankServiceMailParser_{mail_id}" enqueue = Enqueue(task_id=task_id, payload=process_mail_object.model_dump(), action="parser.excel.publish") await svc.enqueue(enqueue) print(f"Parser Mail Consumer parsed handle_mail_publish : {enqueue.task_id}") await svc.ack_current() await asyncio.sleep(PROCESS_SEC) async def handle_mongo_publish(svc: ServiceBaseAsync, job: dict): print('job', job) job_model = Job(**job) await svc.ack_current() print("Parser Mail Consumer default handle_mongo_publish :", job_model.task_id) await asyncio.sleep(PROCESS_SEC) async def consume_default(svc: ServiceBaseAsync, job: dict): job_model = Job(**job) await asyncio.sleep(PROCESS_SEC) print("Parser Mail Consumer default consume_default :", job_model.task_id) return if __name__ == "__main__": svc = ServiceBaseAsync(produce_fn=produce, consume_fn=consume_default, handlers={"mail.service.publish": handle_mail_publish}) asyncio.run(svc.run())