contracts.py 958 B

12345678910111213141516171819202122232425262728293031323334353637
  1. from __future__ import annotations
  2. from dataclasses import dataclass, field
  3. from typing import Any
  4. @dataclass(frozen=True)
  5. class StepContext:
  6. run_id: str
  7. step_run_id: str
  8. step_key: str
  9. biz_dt: str
  10. date_snapshot: dict[str, Any]
  11. config_snapshot: dict[str, Any]
  12. input_snapshot: dict[str, Any] = field(default_factory=dict)
  13. @dataclass(frozen=True)
  14. class StepResult:
  15. success: bool
  16. payload: dict[str, Any]
  17. error_code: str | None = None
  18. error_message: str | None = None
  19. exit_code: int | None = None
  20. log_uri: str | None = None
  21. timed_out: bool = False
  22. def to_dict(self) -> dict[str, Any]:
  23. return {
  24. "success": self.success,
  25. "payload": self.payload,
  26. "error_code": self.error_code,
  27. "error_message": self.error_message,
  28. "exit_code": self.exit_code,
  29. "log_uri": self.log_uri,
  30. "timed_out": self.timed_out,
  31. }