root / kamaki / utils.py @ 486f00d3
History | View | Annotate | Download (4.1 kB)
1 | eb3ca8ca | Giorgos Verigakis | # Copyright 2011 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | eb3ca8ca | Giorgos Verigakis | #
|
3 | eb3ca8ca | Giorgos Verigakis | # Redistribution and use in source and binary forms, with or
|
4 | eb3ca8ca | Giorgos Verigakis | # without modification, are permitted provided that the following
|
5 | eb3ca8ca | Giorgos Verigakis | # conditions are met:
|
6 | eb3ca8ca | Giorgos Verigakis | #
|
7 | eb3ca8ca | Giorgos Verigakis | # 1. Redistributions of source code must retain the above
|
8 | eb3ca8ca | Giorgos Verigakis | # copyright notice, this list of conditions and the following
|
9 | eb3ca8ca | Giorgos Verigakis | # disclaimer.
|
10 | eb3ca8ca | Giorgos Verigakis | #
|
11 | eb3ca8ca | Giorgos Verigakis | # 2. Redistributions in binary form must reproduce the above
|
12 | eb3ca8ca | Giorgos Verigakis | # copyright notice, this list of conditions and the following
|
13 | eb3ca8ca | Giorgos Verigakis | # disclaimer in the documentation and/or other materials
|
14 | eb3ca8ca | Giorgos Verigakis | # provided with the distribution.
|
15 | eb3ca8ca | Giorgos Verigakis | #
|
16 | eb3ca8ca | Giorgos Verigakis | # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | eb3ca8ca | Giorgos Verigakis | # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | eb3ca8ca | Giorgos Verigakis | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | eb3ca8ca | Giorgos Verigakis | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 | eb3ca8ca | Giorgos Verigakis | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | eb3ca8ca | Giorgos Verigakis | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | eb3ca8ca | Giorgos Verigakis | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | eb3ca8ca | Giorgos Verigakis | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | eb3ca8ca | Giorgos Verigakis | # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | eb3ca8ca | Giorgos Verigakis | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | eb3ca8ca | Giorgos Verigakis | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | eb3ca8ca | Giorgos Verigakis | # POSSIBILITY OF SUCH DAMAGE.
|
28 | eb3ca8ca | Giorgos Verigakis | #
|
29 | eb3ca8ca | Giorgos Verigakis | # The views and conclusions contained in the software and
|
30 | eb3ca8ca | Giorgos Verigakis | # documentation are those of the authors and should not be
|
31 | eb3ca8ca | Giorgos Verigakis | # interpreted as representing official policies, either expressed
|
32 | eb3ca8ca | Giorgos Verigakis | # or implied, of GRNET S.A.
|
33 | eb3ca8ca | Giorgos Verigakis | |
34 | 486f00d3 | Giorgos Verigakis | try:
|
35 | 486f00d3 | Giorgos Verigakis | from collections import OrderDict |
36 | 486f00d3 | Giorgos Verigakis | except ImportError: |
37 | 486f00d3 | Giorgos Verigakis | class OrderedDict(dict): |
38 | 486f00d3 | Giorgos Verigakis | """An ordered dict implementation for Python versions prior to 2.7"""
|
39 | eb3ca8ca | Giorgos Verigakis | |
40 | 486f00d3 | Giorgos Verigakis | def __init__(self): |
41 | 486f00d3 | Giorgos Verigakis | dict.__init__(self) |
42 | 486f00d3 | Giorgos Verigakis | self._keys = []
|
43 | eb3ca8ca | Giorgos Verigakis | |
44 | 486f00d3 | Giorgos Verigakis | def __delitem__(self, key): |
45 | 486f00d3 | Giorgos Verigakis | dict.__delitem__(self, key) |
46 | 486f00d3 | Giorgos Verigakis | self._keys.remove(key)
|
47 | eb3ca8ca | Giorgos Verigakis | |
48 | 486f00d3 | Giorgos Verigakis | def __iter__(self): |
49 | 486f00d3 | Giorgos Verigakis | return iter(self._keys) |
50 | eb3ca8ca | Giorgos Verigakis | |
51 | 486f00d3 | Giorgos Verigakis | def __repr__(self): |
52 | 486f00d3 | Giorgos Verigakis | return repr(self.items()) |
53 | eb3ca8ca | Giorgos Verigakis | |
54 | 486f00d3 | Giorgos Verigakis | def __setitem__(self, key, value): |
55 | 486f00d3 | Giorgos Verigakis | if key not in self: |
56 | 486f00d3 | Giorgos Verigakis | self._keys.append(key)
|
57 | 486f00d3 | Giorgos Verigakis | dict.__setitem__(self, key, value) |
58 | eb3ca8ca | Giorgos Verigakis | |
59 | 486f00d3 | Giorgos Verigakis | def keys(self): |
60 | 486f00d3 | Giorgos Verigakis | return self._keys |
61 | eb3ca8ca | Giorgos Verigakis | |
62 | 486f00d3 | Giorgos Verigakis | def iteritems(self): |
63 | 486f00d3 | Giorgos Verigakis | for key in self._keys: |
64 | 486f00d3 | Giorgos Verigakis | yield key, self[key] |
65 | eb3ca8ca | Giorgos Verigakis | |
66 | 486f00d3 | Giorgos Verigakis | def items(self): |
67 | 486f00d3 | Giorgos Verigakis | return list(self.iteritems()) |
68 | eb3ca8ca | Giorgos Verigakis | |
69 | eb3ca8ca | Giorgos Verigakis | |
70 | eb3ca8ca | Giorgos Verigakis | def print_addresses(addresses, margin): |
71 | eb3ca8ca | Giorgos Verigakis | for address in addresses: |
72 | eb3ca8ca | Giorgos Verigakis | if address['id'] == 'public': |
73 | eb3ca8ca | Giorgos Verigakis | net = 'public'
|
74 | eb3ca8ca | Giorgos Verigakis | else:
|
75 | eb3ca8ca | Giorgos Verigakis | net = '%s/%s' % (address['id'], address['name']) |
76 | eb3ca8ca | Giorgos Verigakis | print '%s:' % net.rjust(margin + 4) |
77 | eb3ca8ca | Giorgos Verigakis | |
78 | eb3ca8ca | Giorgos Verigakis | ether = address.get('mac', None) |
79 | eb3ca8ca | Giorgos Verigakis | if ether:
|
80 | eb3ca8ca | Giorgos Verigakis | print '%s: %s' % ('ether'.rjust(margin + 8), ether) |
81 | eb3ca8ca | Giorgos Verigakis | |
82 | eb3ca8ca | Giorgos Verigakis | firewall = address.get('firewallProfile', None) |
83 | eb3ca8ca | Giorgos Verigakis | if firewall:
|
84 | eb3ca8ca | Giorgos Verigakis | print '%s: %s' % ('firewall'.rjust(margin + 8), firewall) |
85 | eb3ca8ca | Giorgos Verigakis | |
86 | eb3ca8ca | Giorgos Verigakis | for ip in address.get('values', []): |
87 | eb3ca8ca | Giorgos Verigakis | key = 'inet' if ip['version'] == 4 else 'inet6' |
88 | eb3ca8ca | Giorgos Verigakis | print '%s: %s' % (key.rjust(margin + 8), ip['addr']) |
89 | eb3ca8ca | Giorgos Verigakis | |
90 | eb3ca8ca | Giorgos Verigakis | |
91 | eb3ca8ca | Giorgos Verigakis | def print_dict(d, exclude=()): |
92 | eb3ca8ca | Giorgos Verigakis | if not d: |
93 | eb3ca8ca | Giorgos Verigakis | return
|
94 | eb3ca8ca | Giorgos Verigakis | margin = max(len(key) for key in d) + 1 |
95 | a6757cbc | Giorgos Verigakis | |
96 | eb3ca8ca | Giorgos Verigakis | for key, val in sorted(d.items()): |
97 | eb3ca8ca | Giorgos Verigakis | if key in exclude: |
98 | eb3ca8ca | Giorgos Verigakis | continue
|
99 | a6757cbc | Giorgos Verigakis | |
100 | eb3ca8ca | Giorgos Verigakis | if key == 'addresses': |
101 | eb3ca8ca | Giorgos Verigakis | print '%s:' % 'addresses'.rjust(margin) |
102 | eb3ca8ca | Giorgos Verigakis | print_addresses(val.get('values', []), margin)
|
103 | eb3ca8ca | Giorgos Verigakis | continue
|
104 | eb3ca8ca | Giorgos Verigakis | elif key == 'servers': |
105 | eb3ca8ca | Giorgos Verigakis | val = ', '.join(str(x) for x in val['values']) |
106 | a6757cbc | Giorgos Verigakis | elif isinstance(val, dict): |
107 | a6757cbc | Giorgos Verigakis | if val.keys() == ['values']: |
108 | a6757cbc | Giorgos Verigakis | val = val['values']
|
109 | a6757cbc | Giorgos Verigakis | print '%s:' % key.rjust(margin) |
110 | a6757cbc | Giorgos Verigakis | for key, val in val.items(): |
111 | a6757cbc | Giorgos Verigakis | print '%s: %s' % (key.rjust(margin + 4), val) |
112 | a6757cbc | Giorgos Verigakis | continue
|
113 | a6757cbc | Giorgos Verigakis | |
114 | eb3ca8ca | Giorgos Verigakis | print '%s: %s' % (key.rjust(margin), val) |
115 | eb3ca8ca | Giorgos Verigakis | |
116 | eb3ca8ca | Giorgos Verigakis | |
117 | a6757cbc | Giorgos Verigakis | def print_items(items, title=('id', 'name')): |
118 | eb3ca8ca | Giorgos Verigakis | for item in items: |
119 | a6757cbc | Giorgos Verigakis | print ' '.join(str(item.pop(key)) for key in title if key in item) |
120 | a6757cbc | Giorgos Verigakis | if item:
|
121 | a6757cbc | Giorgos Verigakis | print_dict(item) |
122 | eb3ca8ca | Giorgos Verigakis | print |