Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- from xml.etree import ElementTree
- def dump(name, obj, stream):
- def dump_dict(name, d):
- d_elem = ElementTree.Element(name, attrib={"type": "dict"})
- for k, v in d.items():
- d_elem.append(dispatch(str(k), v))
- return d_elem
- def dump_iter(name, l):
- l_elem = ElementTree.Element(name, attrib={"type": type(l).__name__})
- for v in l:
- l_elem.append(dispatch("item", v))
- return l_elem
- def dump_attr(name, a):
- a_elem = ElementTree.Element(name, attrib={"type": type(a).__name__})
- a_elem.text = "" if a == None else str(a)
- return a_elem
- def raiser(name, obj):
- msg = "{name} invalid type '{type}'".format(name=name, type=type(obj))
- raise TypeError(msg)
- def dispatch(name, obj):
- switch = {
- type(None): dump_attr,
- int: dump_attr,
- float: dump_attr,
- bool: dump_attr,
- str: dump_attr,
- unicode: dump_attr,
- list: dump_iter,
- tuple: dump_iter,
- dict: dump_dict,
- }
- func = switch.get(type(obj), raiser)
- return func(name, obj)
- root_elem = dispatch(name, obj)
- tree = ElementTree.ElementTree(root_elem)
- tree.write(stream, encoding="utf-8")
- #===============================================================================
- # TEST
- #===============================================================================
- d = {"k1": 1, "k2": 2.0, "k3": "string", "k4": [1,2,3,4]}
- import StringIO
- stream = StringIO.StringIO() # aca guarda el archivo
- dump("d", d, stream)
- print stream.getvalue()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement