]> git.llucax.com Git - software/pymin.git/blob - pymin/serializer.py
Use a handler object as the root dispatcher handler instead of a dict.
[software/pymin.git] / pymin / serializer.py
1 # vim: set encoding=utf-8 et sw=4 sts=4 :
2
3 from pymin import ucsv
4 from pymin import seqtools
5
6 r"UTF-8 encoded CSV serializer."
7
8 def serialize(obj, output=None):
9     r"""serialize(obj[, output]) -> None/unicode string
10
11     Serialize the object obj to a UTF-8 encoded CSV string. If output
12     is not None, it's used as a file object to store the string. If it's
13     None, the string is returned.
14
15     obj is expected to be a sequence of sequences, i.e. a list of rows.
16     """
17     stringio = False
18     if output is None:
19         stringio = True
20         try:
21             from cStringIO import StringIO
22         except ImportError:
23             from StringIO import StringIO
24         output = StringIO()
25     ucsv.writer(output).writerows(seqtools.as_table(obj))
26     if stringio:
27         return output.getvalue()
28
29
30 if __name__ == '__main__':
31
32     from seqtools import Sequence
33
34     class Host(Sequence):
35         r"""Host(name, ip, mac) -> Host instance :: Class representing a host.
36
37         name - Host name, should be a fully qualified name, but no checks are done.
38         ip - IP assigned to the hostname.
39         mac - MAC address to associate to the hostname.
40         """
41
42         def __init__(self, name, ip, mac):
43             r"Initialize Host object, see class documentation for details."
44             self.name = name
45             self.ip = ip
46             self.mac = mac
47
48         def as_tuple(self):
49             return (self.name, self.ip, self.mac)
50
51         def __unicode__(self):
52             return u'no anda'
53
54     print serialize(1)
55
56     print serialize("lala")
57
58     print serialize(u"lala")
59
60     print serialize([1, 2])
61
62     print serialize(["lala", "lala"])
63
64     print serialize([u"lala", u"lala"])
65
66     h = Host('name', 'ip', 'mac')
67     print serialize(h)
68
69     print serialize(dict(a=1, b=2))
70
71     print serialize([[1, 2, 3], [7, 4, 2]])
72
73     print serialize([["adfj", "jdfhk"], ["alskdjal", "1uas"]])
74
75     print serialize([[u"adfj", u"jdfhk"], [u"alskdjal", u"1uas"]])
76
77     print serialize([h, h])
78
79     import sys
80     print 'stdout:'
81     serialize([h, h], sys.stdout)
82     print
83
84     for i in h: print i
85