37 lines
1.2 KiB
Python
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.")
|