Advertisement
Guest User

Untitled

a guest
Jul 31st, 2011
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.68 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. from xml.etree import ElementTree
  5.  
  6. def dump(name, obj, stream):
  7.    
  8.     def dump_dict(name, d):
  9.         d_elem = ElementTree.Element(name, attrib={"type": "dict"})
  10.         for k, v in d.items():
  11.             d_elem.append(dispatch(str(k), v))
  12.         return d_elem
  13.    
  14.     def dump_iter(name, l):
  15.         l_elem = ElementTree.Element(name, attrib={"type": type(l).__name__})
  16.         for v in l:
  17.             l_elem.append(dispatch("item", v))
  18.         return l_elem
  19.        
  20.     def dump_attr(name, a):
  21.         a_elem = ElementTree.Element(name, attrib={"type": type(a).__name__})
  22.         a_elem.text = "" if a == None else str(a)
  23.         return a_elem
  24.    
  25.     def raiser(name, obj):
  26.         msg = "{name} invalid type '{type}'".format(name=name, type=type(obj))
  27.         raise TypeError(msg)
  28.  
  29.     def dispatch(name, obj):
  30.         switch = {
  31.             type(None): dump_attr,
  32.             int: dump_attr,
  33.             float: dump_attr,
  34.             bool: dump_attr,
  35.             str: dump_attr,
  36.             unicode: dump_attr,
  37.             list: dump_iter,
  38.             tuple: dump_iter,
  39.             dict: dump_dict,
  40.         }
  41.         func = switch.get(type(obj), raiser)
  42.         return func(name, obj)
  43.    
  44.     root_elem = dispatch(name, obj)
  45.    
  46.     tree = ElementTree.ElementTree(root_elem)
  47.     tree.write(stream, encoding="utf-8")
  48.  
  49. #===============================================================================
  50. # TEST
  51. #===============================================================================
  52.  
  53. d = {"k1": 1, "k2": 2.0, "k3": "string", "k4": [1,2,3,4]}
  54.  
  55. import StringIO
  56.  
  57. stream = StringIO.StringIO() # aca guarda el archivo
  58.  
  59. dump("d", d, stream)
  60.  
  61. print stream.getvalue()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement