Validate a cron expression. Returns error message or None.
(cron_expr: str)
| 453 | |
| 454 | |
| 455 | def validate_cron(cron_expr: str) -> str | None: |
| 456 | """Validate a cron expression. Returns error message or None.""" |
| 457 | fields = cron_expr.strip().split() |
| 458 | if len(fields) != 5: |
| 459 | return f"Expected 5 fields, got {len(fields)}" |
| 460 | bounds = [(0, 59), (0, 23), (1, 31), (1, 12), (0, 6)] |
| 461 | names = ["minute", "hour", "day-of-month", "month", "day-of-week"] |
| 462 | for i, (field, (lo, hi), name) in enumerate(zip(fields, bounds, names)): |
| 463 | err = _validate_cron_field(field, lo, hi) |
| 464 | if err: |
| 465 | return f"{name}: {err}" |
| 466 | return None |
| 467 | |
| 468 | |
| 469 | def save_durable_jobs(): |
no test coverage detected