summaryrefslogtreecommitdiffstats
path: root/hostinfo/printer.py
blob: 97ed4cafbd3179c22a332b0cfb0d82a6228df39b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# -*- coding: utf-8 -*-

class Printer:
    labels = {
        'hostname': 'Hostname',
        'arch': 'Architecture',
        'os': 'Operating System',
        'addresses': 'IPs',
        'ports': 'Ports',
        'vserver': 'VServer'
    }

    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])