Source code for rcmpy.watch.params

"""
An interface for implementing file-system watching parameters.
"""

# built-in
from argparse import ArgumentParser as _ArgumentParser
from argparse import Namespace as _Namespace
from pathlib import Path
from typing import List, NamedTuple

DEFAULT_POLL_RATE = 0.1


[docs] class WatchParams(NamedTuple): """Watch task parameters.""" base: Path directory: Path cmd: List[str] check_contents: bool shell: bool = False single_pass: bool = False poll_rate: float = DEFAULT_POLL_RATE
[docs] @staticmethod def from_args(args: _Namespace) -> "WatchParams": """Create watch parameters from parsed arugments.""" return WatchParams( args.dir, args.directory, args.cmd, not args.no_change, args.shell, args.single_pass, args.poll_rate, )
[docs] @staticmethod def add_args(parser: _ArgumentParser) -> None: """Add command-line argument options.""" parser.add_argument( "-p", "--poll-rate", type=float, default=DEFAULT_POLL_RATE, help="poll period in seconds (default: %(default)ss)", ) parser.add_argument( "-s", "--shell", action="store_true", help="set to run a shell command", ) parser.add_argument( "-i", "--single-pass", action="store_true", help="only run a single iteration", ) parser.add_argument( "-n", "--no-change", action="store_true", help=( "don't act on changed files, only the overall " "set of files changing (added or removed)" ), ) parser.add_argument( "directory", type=Path, help="directory to watch for file changes" ) parser.add_argument("cmd", nargs="+", help="command to run")