diff options
Diffstat (limited to 'hostinfo/printer.py')
-rw-r--r-- | hostinfo/printer.py | 89 |
1 files changed, 37 insertions, 52 deletions
diff --git a/hostinfo/printer.py b/hostinfo/printer.py index ea612a5..4054df2 100644 --- a/hostinfo/printer.py +++ b/hostinfo/printer.py @@ -1,27 +1,33 @@ # -*- coding: utf-8 -*- -from __future__ import absolute_import + from hostinfo import prefix from hostinfo import utils +from typing import Iterable, Optional, Any, Union + + def _get_full_key(prev_key, key): if prev_key == '': return key return "%s.%s" % (prev_key, key) -def _sort_with_list(iterable, sort): - def helper(value): + +def _sort_with_list(iterable: Iterable, sort: list[str]): + def helper(value) -> str: if sort is None: return value (key, _) = value if key in sort: - return sort.index(key) + return str(sort.index(key)) return "%d %s" % (len(sort), key) return sorted(iterable, key=helper) -def _space(filter_key, full_key, printer, force=False): + +def _space(filter_key: Optional[str], full_key: str, + printer: prefix.Printer, force=False): if filter_key is None and full_key == '': printer.space(force) @@ -46,49 +52,21 @@ class Printer: self.flags = flags prefix.Printer.flags = flags - def cb_print_addresses(self, value, full_key, filter_key): - def _print_ip(address): - return '%s/%s' % (address['address'], address['netmask']) - - display_check = self._is_group_displayed(full_key, filter_key) - return utils.group_by(value, 'interface', None, display_check, _print_ip) - - def cb_print_ports(self, value, full_key, filter_key): - def _print_port(port): - if port['proto'] in ['tcp6', 'udp6']: - return '(%s) [%s]:%s' % (port['proto'].replace('6', ''), - port['ip'], port['port']) - return '(%s) %s:%s' % (port['proto'], port['ip'], port['port']) - - display_check = self._is_group_displayed(full_key, filter_key) - return (utils.group_by(value, 'process', 'UNKNOWN', display_check, _print_port), - ['sshd', 'nrpe', 'munin-node']) - - def cb_print_vserver(self, value, full_key, filter_key): - if value == 'guest' and 'vserver_host' in self.data and \ - self.data['vserver_host'] is not None: - return 'guest running on %s' % self.data['vserver_host'] - else: - return value - - def _should_display(self, full_key, filter_key=None): + def _should_display(self, full_key, + filter_key: Optional[str] = None): if full_key not in self.ignore: return True if filter_key is not None and filter_key.startswith(full_key): return True return False - def _is_group_displayed(self, prev_key, filter_key): - return (lambda key: self._should_display(_get_full_key(prev_key, key), - filter_key)) - - def _print(self, value, printer, filter_key=None, sort=None, force=False): - try: - value = value.strip().splitlines() - except AttributeError: - pass - - if isinstance(value, dict): + def _print(self, value: Union[str, dict[str, Any], list[str]], + printer: prefix.Printer, + filter_key: Optional[str] = None, + sort=None, force=False): + if isinstance(value, str): + self._print_list(value.strip().splitlines(), printer, filter_key) + elif isinstance(value, dict): self._print_dict(value, printer, filter_key, sort, force) elif isinstance(value, list): self._print_list(value, printer, filter_key) @@ -98,7 +76,8 @@ class Printer: else: self._print_value(value, printer, filter_key) - def _print_key(self, key, value, printer, filter_key): + def _print_key(self, key: str, value: str, + printer: prefix.Printer, filter_key): sort = None try: method = getattr(self, 'cb_print_%s' % key.replace('.', '_')) @@ -113,29 +92,33 @@ class Printer: self._print(value, printer, filter_key, sort) - def _print_value(self, value, printer, filter_key): + def _print_value(self, value: str, printer: prefix.Printer, + filter_key: Optional[str]): full_key = _get_full_key(printer.full_key, value) if self._should_display(full_key, filter_key) and \ filter_key is None or full_key == filter_key: printer.pprint(value) - def _print_list(self, values, printer, filter_key): + def _print_list(self, values: list[str], + printer: prefix.Printer, + filter_key: Optional[str]): for value in values: - if isinstance(value, basestring): + if isinstance(value, str): self._print_value(value, printer, filter_key) else: self._print(value, printer, filter_key) - def _print_dict(self, value, printer, filter_key, sort, force): + def _print_dict(self, value: dict[str, str], printer: prefix.Printer, + filter_key: Optional[str], sort: list, force: bool): keys = _sort_with_list( - [(key, full_key) for key in value.keys() + [(key, full_key) for key in list(value.keys()) for full_key in [_get_full_key(printer.full_key, key)] if self._should_display(full_key, filter_key)], sort) if len(keys) == 0: return - maxlength = max([len(self._get_label(key, full_key)) \ + maxlength = max([len(self._get_label(key, full_key)) for (key, full_key) in keys]) _space(filter_key, printer.full_key, printer, True) @@ -152,7 +135,8 @@ class Printer: found = True new_printer = prefix.Printer(full_key, printer) if filter_key is None: - new_printer.set_label(self._get_label(key, full_key), maxlength) + new_printer.set_label(self._get_label(key, full_key), + maxlength) self._print_key(full_key, value[key], new_printer, new_filter_key) _space(filter_key, printer.full_key, new_printer) @@ -160,12 +144,13 @@ class Printer: if force and not found: printer.pprint('') - def _get_label(self, key, full_key): + def _get_label(self, key: str, full_key: str): if full_key in self.labels: return self.labels[full_key] return key - def info(self, key, label=None, maxlength=0, force=False): + def info(self, key: Optional[str], label: Optional[str] = None, + maxlength=0, force=False): printer = prefix.Printer() if label is not None: printer.set_label(label, maxlength) |