from config.celery import app from .services import CARD_BUILDERS, build_dashboard_payload_with_cache @app.task(bind=True) def generate_dashboard_data_task(self, sensor_id: str) -> dict: total_cards = len(CARD_BUILDERS) self.update_state( state="PROGRESS", meta={ "current": 0, "total": total_cards, "card": None, "message": "loading sensor context", }, ) payload = {} dashboard_payload = build_dashboard_payload_with_cache(sensor_id) for index, card_name in enumerate(CARD_BUILDERS.keys(), start=1): self.update_state( state="PROGRESS", meta={ "current": index, "total": total_cards, "card": card_name, "message": f"processing {card_name}", }, ) payload[card_name] = dashboard_payload.get(card_name, {}) return { "sensor_id": sensor_id, "all_cards": payload, }