summaryrefslogtreecommitdiffstats
path: root/hostinfo/printer.py
diff options
context:
space:
mode:
Diffstat (limited to 'hostinfo/printer.py')
-rw-r--r--hostinfo/printer.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/hostinfo/printer.py b/hostinfo/printer.py
new file mode 100644
index 0000000..7d440d0
--- /dev/null
+++ b/hostinfo/printer.py
@@ -0,0 +1,74 @@
+# -*- coding: utf-8 -*-
+
+class Printer:
+ labels = {
+ 'hostname': 'Hostname',
+ 'arch': 'Architecture',
+ 'os': 'Operating System',
+ 'addresses': 'IPs'
+ }
+
+ sort = ['hostname', 'arch', 'os', 'addresses']
+ ignore = ['vserver-host']
+
+ def __init__(self, data):
+ self.data = data
+
+ def print_addresses(self, label, value):
+ for ip in value:
+ print('%s%s/%s (%s)' %
+ (label, ip['address'], ip['netmask'], ip['interface']))
+ label = self.empty
+
+ def print_vserver(self, label, value):
+ if value == 'guest':
+ print('%sguest running on %s' %
+ (label, self.data['vserver-host']))
+ else:
+ print('%s %s' % (self.label, value))
+
+ def print_default(self, key, value):
+ label = ''
+ if self.length > 0:
+ label = '%s: ' % self.get_label(key)
+ label = label.rjust(self.length)
+
+ try:
+ method = getattr(self, 'print_%s' % key)
+ method(label, value)
+ except AttributeError:
+ if isinstance(value, list):
+ for v in value:
+ print('%s%s' % (label, v))
+ label = self.empty
+ else:
+ print('%s%s' % (label, value))
+
+ def get_label(self, key):
+ if key in self.labels:
+ return self.labels[key]
+ return key
+
+ def info(self, key):
+ # find max lenght for labels
+ labels = map(self.get_label, self.data.keys())
+ self.length = max(map(len, labels)) + 3
+ self.empty = ' ' * self.length
+
+ if key is not None:
+ self.length = 0
+ self.empty = ''
+ if key in self.data:
+ self.print_default(key, self.data[key])
+ else:
+ # first the sorted keys
+ for key in self.sort:
+ if key in self.data:
+ self.print_default(key, self.data[key])
+
+ # other keys, that are not ignored
+ for key in [k for k in self.data.keys()
+ if k not in self.sort
+ and k not in self.ignore]:
+ self.print_default(key, self.data[key])
+