Files

37 lines
1.2 KiB
Python

from dataclasses import dataclass
from datetime import timedelta
from .duration import DurationError, looks_like_duration, parse_duration
class ArgumentError(ValueError):
pass
@dataclass(frozen=True)
class QuietArgs:
host: str | None
service: str | None
duration: timedelta
comment: str
def parse_quiet_args(args: tuple[str, ...], maximum: timedelta, service_required: bool) -> QuietArgs:
try:
return _parse(args, maximum, service_required)
except DurationError as exc:
raise ArgumentError(str(exc)) from None
def _parse(args: tuple[str, ...], maximum: timedelta, service_required: bool) -> QuietArgs:
if not args:
raise ArgumentError("Angaben fehlen.")
if looks_like_duration(args[0]):
return QuietArgs(None, None, parse_duration(args[0], maximum), " ".join(args[1:]))
host = args[0]
if len(args) > 1 and looks_like_duration(args[1]) and not service_required:
return QuietArgs(host, None, parse_duration(args[1], maximum), " ".join(args[2:]))
if len(args) > 2 and looks_like_duration(args[2]):
return QuietArgs(host, args[1], parse_duration(args[2], maximum), " ".join(args[3:]))
raise ArgumentError("Dauer fehlt oder steht an der falschen Stelle.")