contracts.py 984 B

1234567891011121314151617181920212223242526272829303132333435363738
  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. dry_run: bool = False
  14. @dataclass(frozen=True)
  15. class StepResult:
  16. success: bool
  17. payload: dict[str, Any]
  18. error_code: str | None = None
  19. error_message: str | None = None
  20. exit_code: int | None = None
  21. log_uri: str | None = None
  22. timed_out: bool = False
  23. def to_dict(self) -> dict[str, Any]:
  24. return {
  25. "success": self.success,
  26. "payload": self.payload,
  27. "error_code": self.error_code,
  28. "error_message": self.error_message,
  29. "exit_code": self.exit_code,
  30. "log_uri": self.log_uri,
  31. "timed_out": self.timed_out,
  32. }