from importlib import import_module import logging logger = logging.getLogger("platform-dispatcher") def _safe_import(module_path, fn_name): try: module = import_module(module_path) return getattr(module, fn_name) except Exception as e: logger.warning(f"[Dispatcher] Missing {module_path}: {str(e)}") return None # lazy-loaded publishers (prevents boot crash) def dispatch_publish(video_path=None, payload=None, variants=None): payload = payload or {} results = {} youtube = _safe_import("publisher.platforms.youtube", "publish_youtube") tiktok = _safe_import("publisher.platforms.tiktok", "publish_tiktok") reels = _safe_import("publisher.platforms.reels", "publish_reels") shorts = _safe_import("publisher.platforms.shorts", "publish_shorts") facebook = _safe_import("publisher.platforms.facebook", "publish_facebook") async def run(): if youtube: results["youtube"] = await youtube({"video_path": video_path, **payload}) if tiktok: results["tiktok"] = await tiktok({"video_path": video_path, **payload}) if reels: results["reels"] = await reels({"video_path": video_path, **payload}) if shorts: results["shorts"] = await shorts({"video_path": video_path, **payload}) if facebook: results["facebook"] = await facebook({"video_path": video_path, **payload}) return results return run()