summaryrefslogtreecommitdiffstats
path: root/hostinfo/printer.py
diff options
context:
space:
mode:
Diffstat (limited to 'hostinfo/printer.py')
-rw-r--r--hostinfo/printer.py89
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)