Unicode support in printing
[kamaki] / kamaki / utils.py
index 6aa7ccf..99025b9 100644 (file)
 # interpreted as representing official policies, either expressed
 # or implied, of GRNET S.A.
 
-class OrderedDict(dict):
-    """An ordered dict implementation for Python versions prior to 2.7"""
-    
-    def __init__(self):
-        dict.__init__(self)
-        self._keys = []
-    
-    def __delitem__(self, key):
-        dict.__delitem__(self, key)
-        self._keys.remove(key)
-    
-    def __iter__(self):
-        return iter(self._keys)
-    
-    def __repr__(self):
-        return repr(self.items())
-    
-    def __setitem__(self, key, value):
-        if key not in self:
-            self._keys.append(key)
-        dict.__setitem__(self, key, value)
-    
-    def keys(self):
-        return self._keys
-    
-    def iteritems(self):
-        for key in self._keys:
-            yield key, self[key]
-    
-    def items(self):
-        return list(self.iteritems())
-
 
 def print_addresses(addresses, margin):
     for address in addresses:
@@ -85,12 +53,6 @@ def print_addresses(addresses, margin):
             print '%s: %s' % (key.rjust(margin + 8), ip['addr'])
 
 
-def print_metadata(metadata, margin):
-    print '%s:' % 'metadata'.rjust(margin)
-    for key, val in metadata.get('values', {}).items():
-        print '%s: %s' % (key.rjust(margin + 4), val)
-
-
 def print_dict(d, exclude=()):
     if not d:
         return
@@ -104,18 +66,22 @@ def print_dict(d, exclude=()):
             print '%s:' % 'addresses'.rjust(margin)
             print_addresses(val.get('values', []), margin)
             continue
-        elif key == 'metadata':
-            print_metadata(val, margin)
-            continue
         elif key == 'servers':
-            val = ', '.join(str(x) for x in val['values'])
+            val = ', '.join(unicode(x) for x in val['values'])
+        elif isinstance(val, dict):
+            if val.keys() == ['values']:
+                val = val['values']
+            print '%s:' % key.rjust(margin)
+            for key, val in val.items():
+                print '%s: %s' % (key.rjust(margin + 4), val)
+            continue
 
         print '%s: %s' % (key.rjust(margin), val)
 
 
-def print_items(items, detail=False):
+def print_items(items, title=('id', 'name')):
     for item in items:
-        print '%s %s' % (item['id'], item.get('name', ''))
-        if detail:
-            print_dict(item, exclude=('id', 'name'))
+        print ' '.join(unicode(item.pop(key)) for key in title if key in item)
+        if item:
+            print_dict(item)
             print