diff options
Diffstat (limited to 'kvmd/application.py')
-rw-r--r-- | kvmd/application.py | 188 |
1 files changed, 0 insertions, 188 deletions
diff --git a/kvmd/application.py b/kvmd/application.py deleted file mode 100644 index 4b8af949..00000000 --- a/kvmd/application.py +++ /dev/null @@ -1,188 +0,0 @@ -import sys -import os -import argparse -import logging -import logging.config - -from typing import Tuple -from typing import List -from typing import Dict -from typing import Sequence -from typing import Union - -import pygments -import pygments.lexers.data -import pygments.formatters - -from .yamlconf import make_config -from .yamlconf import Section -from .yamlconf import Option -from .yamlconf import build_raw_from_options -from .yamlconf.dumper import make_config_dump -from .yamlconf.loader import load_yaml_file - - -# ===== -def init(prog: str=sys.argv[0], add_help: bool=True) -> Tuple[argparse.ArgumentParser, List[str], Section]: - args_parser = argparse.ArgumentParser(prog=prog, add_help=add_help) - args_parser.add_argument("-c", "--config", dest="config_path", default="/etc/kvmd/kvmd.yaml", metavar="<file>") - args_parser.add_argument("-o", "--set-options", dest="set_options", default=[], nargs="+") - args_parser.add_argument("-m", "--dump-config", dest="dump_config", action="store_true") - (options, remaining) = args_parser.parse_known_args(sys.argv) - - options.config_path = os.path.expanduser(options.config_path) - if os.path.exists(options.config_path): - raw_config = load_yaml_file(options.config_path) - else: - raw_config = {} - _merge_dicts(raw_config, build_raw_from_options(options.set_options)) - scheme = _get_config_scheme() - config = make_config(raw_config, scheme) - - if options.dump_config: - dump = make_config_dump(config) - if sys.stdout.isatty(): - dump = pygments.highlight( - dump, - pygments.lexers.data.YamlLexer(), - pygments.formatters.TerminalFormatter(bg="dark"), # pylint: disable=no-member - ) - print(dump) - sys.exit(0) - - logging.captureWarnings(True) - logging.config.dictConfig(config.logging) - return (args_parser, remaining, config) - - -# ===== -def _merge_dicts(dest: Dict, src: Dict) -> None: - for key in src: - if key in dest: - if isinstance(dest[key], dict) and isinstance(src[key], dict): - _merge_dicts(dest[key], src[key]) - continue - dest[key] = src[key] - - -def _as_pin(pin: int) -> int: - if not isinstance(pin, int) or pin <= 0: - raise ValueError("Invalid pin number") - return pin - - -def _as_optional_pin(pin: int) -> int: - if not isinstance(pin, int) or pin == 0: - raise ValueError("Invalid optional pin number") - return pin - - -def _as_path(path: str) -> str: - if not isinstance(path, str): - raise ValueError("Invalid path") - path = str(path).strip() - if not path: - raise ValueError("Invalid path") - return path - - -def _as_optional_path(path: str) -> str: - if not isinstance(path, str): - raise ValueError("Invalid path") - return str(path).strip() - - -def _as_string_list(values: Union[str, Sequence]) -> List[str]: - if isinstance(values, str): - values = [values] - return list(map(str, values)) - - -def _get_config_scheme() -> Dict: - return { - "kvmd": { - "server": { - "host": Option(default="localhost"), - "port": Option(default=0), - "unix": Option(default="", type=_as_optional_path), - "unix_rm": Option(default=False), - "unix_mode": Option(default=0), - "heartbeat": Option(default=3.0), - "access_log_format": Option(default="[%P / %{X-Real-IP}i] '%r' => %s; size=%b ---" - " referer='%{Referer}i'; user_agent='%{User-Agent}i'"), - }, - - "auth": { - "htpasswd": Option(default="/etc/kvmd/htpasswd", type=_as_path), - }, - - "info": { - "meta": Option(default="/etc/kvmd/meta.yaml", type=_as_path), - "extras": Option(default="/usr/share/kvmd/extras", type=_as_path), - }, - - "hid": { - "pinout": { - "reset": Option(default=0, type=_as_pin), - }, - "reset_delay": Option(default=0.1), - "device": Option(default="", type=_as_path), - "speed": Option(default=115200), - "read_timeout": Option(default=2.0), - "read_retries": Option(default=10), - "common_retries": Option(default=100), - "retries_delay": Option(default=0.1), - "noop": Option(default=False), - "state_poll": Option(default=0.1), - }, - - "atx": { - "pinout": { - "power_led": Option(default=0, type=_as_pin), - "hdd_led": Option(default=0, type=_as_pin), - "power_switch": Option(default=0, type=_as_pin), - "reset_switch": Option(default=0, type=_as_pin), - }, - "click_delay": Option(default=0.1), - "long_click_delay": Option(default=5.5), - "state_poll": Option(default=0.1), - }, - - "msd": { - "pinout": { - "target": Option(default=0, type=_as_pin), - "reset": Option(default=0, type=_as_pin), - }, - "device": Option(default="", type=_as_path), - "init_delay": Option(default=2.0), - "reset_delay": Option(default=1.0), - "write_meta": Option(default=True), - "chunk_size": Option(default=65536), - }, - - "streamer": { - "pinout": { - "cap": Option(default=-1, type=_as_optional_pin), - "conv": Option(default=-1, type=_as_optional_pin), - }, - - "sync_delay": Option(default=1.0), - "init_delay": Option(default=1.0), - "init_restart_after": Option(default=0.0), - "shutdown_delay": Option(default=10.0), - "state_poll": Option(default=1.0), - - "quality": Option(default=80), - "desired_fps": Option(default=0), - - "host": Option(default="localhost"), - "port": Option(default=0), - "unix": Option(default="", type=_as_optional_path), - "timeout": Option(default=2.0), - - "cmd": Option(default=["/bin/true"], type=_as_string_list), - }, - }, - - "logging": Option(default={}), - } |