public
Description: Google's Webkit, ported to Python, ported to Desktops.
Homepage: http://lkcl.net/pyjamas-desktop
Clone URL: git://github.com/lkcl/pyjamas-desktop.git
pyjamas-desktop / pyjamas-web / htmldict.py
100644 95 lines (68 sloc) 2.293 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
__access__ = 0
 
from htmltmpl import TemplateProcessor, TemplateManager
 
class HTMLdict(dict, TemplateProcessor):
 
    def __init__(self, fname=None, htmlescape=0):
 
        self.tmpl_fname = fname
        dict.__init__(self)
        TemplateProcessor.__init__(self, html_escape=htmlescape)
 
    def __str__(self):
 
        if self.tmpl_fname is None:
            return ''
 
        for (k, val) in self.items():
            if type(val) != type([]) and type(val) != type('') and \
                val is not None:
                self.set(k, str(val))
            elif val is not None:
                self.set(k, val)
 
        template = TemplateManager().prepare(self.tmpl_fname)
 
        return self.process(template)
 
try:
    from HTMLTemplate import Template, defaultEncoder, defaultDecoder
 
    class HTMLdict2(dict):
 
        def __init__(self, fname=None, content=None, html_escape=0):
 
            dict.__init__(self)
            if fname:
                f = open(fname, "r")
                content = f.read()
                f.close()
            codecs = (defaultEncoder, defaultDecoder)
            if html_escape == 0:
                blankcodec = lambda x:x
                codecs = (blankcodec, blankcodec)
 
            self.t = Template(self.render, content, codecs=codecs)
 
        def render(self, node, kvs):
 
            for (k, val) in kvs.items():
                a = getattr(node, k)
                if isinstance(val, type([])):
                    a.repeat(self.render, val)
                else:
                    if val != None:
                        val = str(val)
                    a.content = val
 
        def __str__(self):
 
            return self.t.render(self)
except:
    pass
 
def test():
 
    html2 = """
<div node="con:text">some content</div>
"""
 
    html = """
<div node="rep:section">
<h2 node="con:title">section title</h2>
<p node="con:desc">section description</p>
<p node="con:text">section text</p>
</div>
"""
 
    content1 = HTMLdict2(content=html2)
    content1['text'] = 'fred'
 
    item = {'title': 'title1',
                'desc': 'desc1',
                'text' : content1
                }
    d = [item]
 
    x = HTMLdict2(content=html)
    x['section'] = d
    print str(x)
 
if __name__ == "__main__":
    test()