"""Cron expression parser utility for the scheduler system.""" import croniter from typing import Optional from datetime import datetime, timedelta class CronParser: """Parse and validate cron expressions, calculate next execution times.""" def __init__(self, cron_expression: str): """Initialize with a cron expression. Args: cron_expression: Standard cron expression string """ try: self.cron = croniter.croniter(cron_expression, datetime.now()) # Force validation by checking next run time self.next_execution() except ValueError as e: raise ValueError(f"Invalid cron expression: {cron_expression}") from e def validate(self) -> bool: """Validate the cron expression. Returns: bool: True if valid, False otherwise """ try: self.next_execution() return True except ValueError: return False def next_execution(self, from_time: Optional[datetime] = None) -> datetime: """Calculate next execution time from given time. Args: from_time: Reference time (defaults to now) Returns: datetime: Next execution time """ from_time = from_time or datetime.now() return self.cron.get_next(datetime, from_time)