registry.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. from __future__ import annotations
  2. from collections.abc import Callable
  3. from typing import Any
  4. from supply_infra.pipeline.contracts import StepContext
  5. StepHandler = Callable[[StepContext], dict[str, Any]]
  6. def _global_tree(context: StepContext) -> dict[str, Any]:
  7. from supply_infra.scheduler.jobs.sync_global_tree_odps_to_mysql import (
  8. sync_global_tree_odps_to_mysql,
  9. )
  10. return sync_global_tree_odps_to_mysql(
  11. partition_date=str(context.date_snapshot["global_tree_partition"])
  12. )
  13. def _demand_source(context: StepContext) -> dict[str, Any]:
  14. from supply_infra.scheduler.jobs.demand_pool.sync import _sync_pool_rows
  15. return _sync_pool_rows(str(context.date_snapshot["demand_pool_partition"]))
  16. def _demand_classify(context: StepContext) -> dict[str, Any]:
  17. from supply_infra.scheduler.jobs.demand_pool.sync import _classify_words
  18. return _classify_words(context.biz_dt)
  19. def _demand_rel(_context: StepContext) -> dict[str, Any]:
  20. from supply_infra.scheduler.jobs.demand_pool.belong_rel import (
  21. sync_demand_belong_pool_rel,
  22. )
  23. return sync_demand_belong_pool_rel()
  24. def _real_metrics(context: StepContext) -> dict[str, Any]:
  25. from supply_infra.scheduler.jobs.demand_pool.sync import enrich_real_rov_vov_7d
  26. return enrich_real_rov_vov_7d(context.biz_dt)
  27. def _popularity(context: StepContext) -> dict[str, Any]:
  28. from supply_infra.scheduler.jobs.demand_pool.sync import compute_popularity_stats
  29. return compute_popularity_stats(context.biz_dt)
  30. def _tree_weight(context: StepContext) -> dict[str, Any]:
  31. from supply_infra.scheduler.jobs.demand_pool.tree_weight import (
  32. compute_category_tree_weight,
  33. )
  34. return compute_category_tree_weight(context.biz_dt)
  35. def _source_videos(context: StepContext) -> dict[str, Any]:
  36. from supply_infra.scheduler.jobs.demand_pool.videos import sync_multi_demand_videos
  37. return sync_multi_demand_videos(
  38. limit=None,
  39. decode_dt=str(context.date_snapshot["video_decode_partition"]),
  40. )
  41. def _grade(context: StepContext) -> dict[str, Any]:
  42. from supply_infra.scheduler.jobs.grade_demand_pool import grade_demand_pool
  43. return grade_demand_pool(context.biz_dt)
  44. def _expand(context: StepContext) -> dict[str, Any]:
  45. from supply_infra.scheduler.jobs.expand_demand_from_video_points import (
  46. expand_demand_from_video_points,
  47. )
  48. return expand_demand_from_video_points(
  49. context.biz_dt,
  50. workers=5,
  51. )
  52. def _discover(context: StepContext) -> dict[str, Any]:
  53. from supply_infra.scheduler.constants import PIPELINE_FIND_AGENT_WORKERS
  54. from supply_infra.scheduler.jobs.discover_videos_from_demands import (
  55. discover_videos_from_demands,
  56. )
  57. return discover_videos_from_demands(
  58. context.biz_dt,
  59. workers=PIPELINE_FIND_AGENT_WORKERS,
  60. )
  61. STEP_REGISTRY: dict[str, StepHandler] = {
  62. "global_tree_sync": _global_tree,
  63. "demand_pool_source_sync": _demand_source,
  64. "demand_classify": _demand_classify,
  65. "demand_belong_rel_sync": _demand_rel,
  66. "real_metrics_sync": _real_metrics,
  67. "popularity_stats": _popularity,
  68. "category_tree_weight": _tree_weight,
  69. "source_video_sync": _source_videos,
  70. "demand_grade": _grade,
  71. "demand_expand": _expand,
  72. "video_discovery": _discover,
  73. }
  74. def execute_registered_step(context: StepContext) -> dict[str, Any]:
  75. handler = STEP_REGISTRY.get(context.step_key)
  76. if handler is None:
  77. raise KeyError(f"Unknown pipeline step: {context.step_key}")
  78. payload = handler(context)
  79. if not isinstance(payload, dict):
  80. return {"success": True, "result": payload}
  81. return payload