equal
deleted
inserted
replaced
8 |
8 |
9 import logging; log = logging.getLogger('pvl.web.application') |
9 import logging; log = logging.getLogger('pvl.web.application') |
10 |
10 |
11 class Application (object) : |
11 class Application (object) : |
12 """ |
12 """ |
13 Main state. |
13 Main wsgi entry point state. |
14 """ |
14 """ |
15 |
15 |
16 URLS = None |
16 URLS = None |
17 |
17 |
18 def __init__ (self, urls=None) : |
18 # TODO: charset |
|
19 |
|
20 def __init__ (self, urls=None, layout=None) : |
19 """ |
21 """ |
20 urls - werkzeug.routing.Map -> Handler |
22 urls - werkzeug.routing.Map -> Handler |
|
23 layout - template with {TITLE} and {HEAD} and {BODY} |
21 """ |
24 """ |
22 |
25 |
23 if not urls : |
26 if not urls : |
24 urls = self.URLS |
27 urls = self.URLS |
25 |
28 |
26 if not urls : |
29 if not urls : |
27 raise ValueError("No URLS/urls=... given") |
30 raise ValueError("No URLS/urls=... given") |
28 |
31 |
|
32 self.layout = layout |
29 self.urls = urls |
33 self.urls = urls |
30 |
34 |
31 def respond (self, request) : |
35 def respond (self, request) : |
32 """ |
36 """ |
33 Lookup Request -> web.Handler, params |
37 Lookup Request -> web.Handler, params |
119 """ |
123 """ |
120 Render page layout (as <html>). |
124 Render page layout (as <html>). |
121 """ |
125 """ |
122 |
126 |
123 title = self.title() |
127 title = self.title() |
124 |
128 head = html( |
125 return html.html( |
|
126 html.head( |
|
127 html.title(title), |
|
128 ( |
129 ( |
129 html.link(rel='Stylesheet', type="text/css", href=src) for src in self.CSS |
130 html.link(rel='Stylesheet', type="text/css", href=src) for src in self.CSS |
130 ), |
131 ), |
131 ( |
132 ( |
132 html.script(src=src, type='text/javascript', _selfclosing=False) for src in self.JS |
133 html.script(src=src, type='text/javascript', _selfclosing=False) for src in self.JS |
133 ), |
134 ), |
134 ), |
135 ) |
135 html.body( |
136 body = html(self.render()) |
136 html.h1(title), |
137 |
137 self.render() |
138 if self.app.layout : |
|
139 return self.app.layout.format( |
|
140 TITLE = unicode(title), |
|
141 HEAD = unicode(head), |
|
142 BODY = unicode(body), |
138 ) |
143 ) |
139 ) |
144 else : |
|
145 return html.document(html.html( |
|
146 html.head( |
|
147 html.title(title), |
|
148 head, |
|
149 ), |
|
150 html.body( |
|
151 html.h1(title), |
|
152 body, |
|
153 ) |
|
154 )) |
140 |
155 |
141 def process (self, **params) : |
156 def process (self, **params) : |
142 """ |
157 """ |
143 Process request args to build internal request state. |
158 Process request args to build internal request state. |
144 """ |
159 """ |
157 |
172 |
158 if response : |
173 if response : |
159 return response |
174 return response |
160 |
175 |
161 # render as html per default |
176 # render as html per default |
162 render = self.render_html() |
177 text = unicode(self.render_html()) |
163 text = unicode(html.document(render)) |
|
164 |
178 |
165 return Response(text, mimetype='text/html') |
179 return Response(text, mimetype='text/html') |
166 |
180 |
167 def cleanup (self) : |
181 def cleanup (self) : |
168 """ |
182 """ |