author | Tero Marttila <terom@paivola.fi> |
Tue, 14 Jan 2014 23:14:53 +0200 | |
changeset 374 | d2426cebb46a |
parent 368 | be42e2d38c77 |
permissions | -rw-r--r-- |
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
1 |
""" |
178
f9f5e669bace
pvl.verkko: refactor into dhcp -> hosts -> web+db modules, reworking index page
Tero Marttila <terom@paivola.fi>
parents:
164
diff
changeset
|
2 |
WSGI Application with pvl.web.urls-mapped Handlers building pvl.web.html. |
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
3 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
4 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
5 |
import werkzeug |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
6 |
from werkzeug.wrappers import Request, Response |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
7 |
from werkzeug.exceptions import HTTPException |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
8 |
|
197
9f18b11647fb
pvl.web.response: html/json/image response encodings
Tero Marttila <terom@paivola.fi>
parents:
178
diff
changeset
|
9 |
import pvl.web.response |
9f18b11647fb
pvl.web.response: html/json/image response encodings
Tero Marttila <terom@paivola.fi>
parents:
178
diff
changeset
|
10 |
|
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
11 |
import logging; log = logging.getLogger('pvl.web.application') |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
12 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
13 |
class Application (object) : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
14 |
""" |
164
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
15 |
Main wsgi entry point state. |
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
16 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
17 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
18 |
URLS = None |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
19 |
|
164
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
20 |
# TODO: charset |
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
21 |
|
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
22 |
def __init__ (self, urls=None, layout=None) : |
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
23 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
24 |
urls - werkzeug.routing.Map -> Handler |
164
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
25 |
layout - template with {TITLE} and {HEAD} and {BODY} |
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
26 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
27 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
28 |
if not urls : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
29 |
urls = self.URLS |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
30 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
31 |
if not urls : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
32 |
raise ValueError("No URLS/urls=... given") |
164
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
33 |
|
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
34 |
self.layout = layout |
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
35 |
self.urls = urls |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
36 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
37 |
def respond (self, request) : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
38 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
39 |
Lookup Request -> web.Handler, params |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
40 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
41 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
42 |
# bind to request |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
43 |
urls = self.urls.bind_to_environ(request) |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
44 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
45 |
# lookup |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
46 |
handler, params = urls.match() |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
47 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
48 |
# handler instance |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
49 |
handler = handler(self, request, urls, params) |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
50 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
51 |
try : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
52 |
# apply |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
53 |
return handler.respond() |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
54 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
55 |
finally : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
56 |
handler.cleanup() |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
57 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
58 |
@Request.application |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
59 |
def __call__ (self, request) : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
60 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
61 |
WSGI entry point, werkzeug Request -> Response |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
62 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
63 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
64 |
try : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
65 |
return self.respond(request) |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
66 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
67 |
except HTTPException as ex : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
68 |
return ex |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
69 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
70 |
from pvl.invoke import merge # XXX |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
71 |
from pvl.web.html import tags as html |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
72 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
73 |
class Handler (object) : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
74 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
75 |
Per-Request controller/view, containing the request context and generating the response. |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
76 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
77 |
|
347
d368f3b8a117
pvl.web.Application: provide DOCTYPE/HTML_XMLNS/HTML_LANG for overriding; support STYLE = ... for inline styles
Tero Marttila <terom@paivola.fi>
parents:
203
diff
changeset
|
78 |
DOCTYPE = 'html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"' |
d368f3b8a117
pvl.web.Application: provide DOCTYPE/HTML_XMLNS/HTML_LANG for overriding; support STYLE = ... for inline styles
Tero Marttila <terom@paivola.fi>
parents:
203
diff
changeset
|
79 |
HTML_XMLNS = 'http://www.w3.org/1999/xhtml' |
d368f3b8a117
pvl.web.Application: provide DOCTYPE/HTML_XMLNS/HTML_LANG for overriding; support STYLE = ... for inline styles
Tero Marttila <terom@paivola.fi>
parents:
203
diff
changeset
|
80 |
HTML_LANG = None |
d368f3b8a117
pvl.web.Application: provide DOCTYPE/HTML_XMLNS/HTML_LANG for overriding; support STYLE = ... for inline styles
Tero Marttila <terom@paivola.fi>
parents:
203
diff
changeset
|
81 |
|
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
82 |
TITLE = None |
347
d368f3b8a117
pvl.web.Application: provide DOCTYPE/HTML_XMLNS/HTML_LANG for overriding; support STYLE = ... for inline styles
Tero Marttila <terom@paivola.fi>
parents:
203
diff
changeset
|
83 |
STYLE = None |
363
6a0de0315782
pvl.web.Handler: SCRIPT = ... for inline javascript
Tero Marttila <terom@paivola.fi>
parents:
347
diff
changeset
|
84 |
SCRIPT = None |
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
85 |
CSS = ( |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
86 |
#"/static/...css", |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
87 |
) |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
88 |
JS = ( |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
89 |
#"/static/....js" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
90 |
) |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
91 |
|
368
be42e2d38c77
pvl.web.Handler: STATUS/status()
Tero Marttila <terom@paivola.fi>
parents:
363
diff
changeset
|
92 |
STATUS = 200 |
be42e2d38c77
pvl.web.Handler: STATUS/status()
Tero Marttila <terom@paivola.fi>
parents:
363
diff
changeset
|
93 |
|
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
94 |
def __init__ (self, app, request, urls, params) : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
95 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
96 |
app - wsgi.Application |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
97 |
request - werkzeug.Request |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
98 |
urls - werkzeug.routing.Map.bind_to_environ() |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
99 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
100 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
101 |
self.app = app |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
102 |
self.request = request |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
103 |
self.urls = urls |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
104 |
self.params = params |
203
8dc7db817818
pvl.web.Handler: add init() method
Tero Marttila <terom@paivola.fi>
parents:
197
diff
changeset
|
105 |
|
8dc7db817818
pvl.web.Handler: add init() method
Tero Marttila <terom@paivola.fi>
parents:
197
diff
changeset
|
106 |
self.init() |
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
107 |
|
203
8dc7db817818
pvl.web.Handler: add init() method
Tero Marttila <terom@paivola.fi>
parents:
197
diff
changeset
|
108 |
def init (self) : |
8dc7db817818
pvl.web.Handler: add init() method
Tero Marttila <terom@paivola.fi>
parents:
197
diff
changeset
|
109 |
""" |
8dc7db817818
pvl.web.Handler: add init() method
Tero Marttila <terom@paivola.fi>
parents:
197
diff
changeset
|
110 |
Initialize on request. |
8dc7db817818
pvl.web.Handler: add init() method
Tero Marttila <terom@paivola.fi>
parents:
197
diff
changeset
|
111 |
""" |
8dc7db817818
pvl.web.Handler: add init() method
Tero Marttila <terom@paivola.fi>
parents:
197
diff
changeset
|
112 |
|
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
113 |
def url (self, handler=None, **params) : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
114 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
115 |
Return an URL for given endpoint, with parameters, |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
116 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
117 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
118 |
if not handler : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
119 |
# XXX: just generate a plain-relative '?foo=...' url instead? |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
120 |
handler = self.__class__ |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
121 |
params = merge(self.params, params) |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
122 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
123 |
return self.urls.build(handler, params) |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
124 |
|
368
be42e2d38c77
pvl.web.Handler: STATUS/status()
Tero Marttila <terom@paivola.fi>
parents:
363
diff
changeset
|
125 |
def status (self) : |
be42e2d38c77
pvl.web.Handler: STATUS/status()
Tero Marttila <terom@paivola.fi>
parents:
363
diff
changeset
|
126 |
""" |
be42e2d38c77
pvl.web.Handler: STATUS/status()
Tero Marttila <terom@paivola.fi>
parents:
363
diff
changeset
|
127 |
Return HTTP status code for response. |
be42e2d38c77
pvl.web.Handler: STATUS/status()
Tero Marttila <terom@paivola.fi>
parents:
363
diff
changeset
|
128 |
""" |
be42e2d38c77
pvl.web.Handler: STATUS/status()
Tero Marttila <terom@paivola.fi>
parents:
363
diff
changeset
|
129 |
|
be42e2d38c77
pvl.web.Handler: STATUS/status()
Tero Marttila <terom@paivola.fi>
parents:
363
diff
changeset
|
130 |
return self.STATUS |
be42e2d38c77
pvl.web.Handler: STATUS/status()
Tero Marttila <terom@paivola.fi>
parents:
363
diff
changeset
|
131 |
|
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
132 |
def title (self) : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
133 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
134 |
Render site/page title as text. |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
135 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
136 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
137 |
return self.TITLE |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
138 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
139 |
def render (self) : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
140 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
141 |
Render page content (as <body>...</body>). |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
142 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
143 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
144 |
raise NotImplementedError() |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
145 |
|
374
d2426cebb46a
pvl.web.Application: render_html(body=..., extrahead=...)
Tero Marttila <terom@paivola.fi>
parents:
368
diff
changeset
|
146 |
def render_html (self, body=None, extrahead=None) : |
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
147 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
148 |
Render page layout (as <html>). |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
149 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
150 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
151 |
title = self.title() |
164
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
152 |
head = html( |
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
153 |
( |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
154 |
html.link(rel='Stylesheet', type="text/css", href=src) for src in self.CSS |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
155 |
), |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
156 |
( |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
157 |
html.script(src=src, type='text/javascript', _selfclosing=False) for src in self.JS |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
158 |
), |
347
d368f3b8a117
pvl.web.Application: provide DOCTYPE/HTML_XMLNS/HTML_LANG for overriding; support STYLE = ... for inline styles
Tero Marttila <terom@paivola.fi>
parents:
203
diff
changeset
|
159 |
html.style(type='text/css')(self.STYLE) if self.STYLE else None, |
363
6a0de0315782
pvl.web.Handler: SCRIPT = ... for inline javascript
Tero Marttila <terom@paivola.fi>
parents:
347
diff
changeset
|
160 |
html.script(type='text/javascript')(self.SCRIPT) if self.SCRIPT else None, |
374
d2426cebb46a
pvl.web.Application: render_html(body=..., extrahead=...)
Tero Marttila <terom@paivola.fi>
parents:
368
diff
changeset
|
161 |
extrahead, |
164
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
162 |
) |
374
d2426cebb46a
pvl.web.Application: render_html(body=..., extrahead=...)
Tero Marttila <terom@paivola.fi>
parents:
368
diff
changeset
|
163 |
|
d2426cebb46a
pvl.web.Application: render_html(body=..., extrahead=...)
Tero Marttila <terom@paivola.fi>
parents:
368
diff
changeset
|
164 |
if body is None : |
d2426cebb46a
pvl.web.Application: render_html(body=..., extrahead=...)
Tero Marttila <terom@paivola.fi>
parents:
368
diff
changeset
|
165 |
body = html(self.render()) |
164
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
166 |
|
178
f9f5e669bace
pvl.verkko: refactor into dhcp -> hosts -> web+db modules, reworking index page
Tero Marttila <terom@paivola.fi>
parents:
164
diff
changeset
|
167 |
if not title : |
f9f5e669bace
pvl.verkko: refactor into dhcp -> hosts -> web+db modules, reworking index page
Tero Marttila <terom@paivola.fi>
parents:
164
diff
changeset
|
168 |
raise Exception("%s: no page title!" % (self, )) |
f9f5e669bace
pvl.verkko: refactor into dhcp -> hosts -> web+db modules, reworking index page
Tero Marttila <terom@paivola.fi>
parents:
164
diff
changeset
|
169 |
|
164
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
170 |
if self.app.layout : |
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
171 |
return self.app.layout.format( |
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
172 |
TITLE = unicode(title), |
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
173 |
HEAD = unicode(head), |
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
174 |
BODY = unicode(body), |
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
175 |
) |
164
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
176 |
else : |
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
177 |
return html.document(html.html( |
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
178 |
html.head( |
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
179 |
html.title(title), |
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
180 |
head, |
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
181 |
), |
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
182 |
html.body( |
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
183 |
html.h1(title), |
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
184 |
body, |
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
185 |
) |
347
d368f3b8a117
pvl.web.Application: provide DOCTYPE/HTML_XMLNS/HTML_LANG for overriding; support STYLE = ... for inline styles
Tero Marttila <terom@paivola.fi>
parents:
203
diff
changeset
|
186 |
), doctype=self.DOCTYPE, html_xmlns=self.HTML_XMLNS, html_lang=self.HTML_LANG) |
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
187 |
|
197
9f18b11647fb
pvl.web.response: html/json/image response encodings
Tero Marttila <terom@paivola.fi>
parents:
178
diff
changeset
|
188 |
def response_file (self, file) : |
9f18b11647fb
pvl.web.response: html/json/image response encodings
Tero Marttila <terom@paivola.fi>
parents:
178
diff
changeset
|
189 |
""" |
9f18b11647fb
pvl.web.response: html/json/image response encodings
Tero Marttila <terom@paivola.fi>
parents:
178
diff
changeset
|
190 |
Wrap a file for returning in a response with direct_passthrough=True. |
9f18b11647fb
pvl.web.response: html/json/image response encodings
Tero Marttila <terom@paivola.fi>
parents:
178
diff
changeset
|
191 |
""" |
9f18b11647fb
pvl.web.response: html/json/image response encodings
Tero Marttila <terom@paivola.fi>
parents:
178
diff
changeset
|
192 |
|
9f18b11647fb
pvl.web.response: html/json/image response encodings
Tero Marttila <terom@paivola.fi>
parents:
178
diff
changeset
|
193 |
return werkzeug.wrap_file(self.request.environ, file) |
9f18b11647fb
pvl.web.response: html/json/image response encodings
Tero Marttila <terom@paivola.fi>
parents:
178
diff
changeset
|
194 |
|
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
195 |
def process (self, **params) : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
196 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
197 |
Process request args to build internal request state. |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
198 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
199 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
200 |
pass |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
201 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
202 |
def respond (self) : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
203 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
204 |
Generate a response, or raise an HTTPException |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
205 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
206 |
Does an HTML layout'd response per default. |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
207 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
208 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
209 |
# returning e.g. redirect? |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
210 |
response = self.process(**self.params) |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
211 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
212 |
if response : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
213 |
return response |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
214 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
215 |
# render as html per default |
197
9f18b11647fb
pvl.web.response: html/json/image response encodings
Tero Marttila <terom@paivola.fi>
parents:
178
diff
changeset
|
216 |
# XXX: might also be string? |
164
2c66ab45d91e
pvl.web.rrd: support --web-layout to use external template
Tero Marttila <terom@paivola.fi>
parents:
151
diff
changeset
|
217 |
text = unicode(self.render_html()) |
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
218 |
|
368
be42e2d38c77
pvl.web.Handler: STATUS/status()
Tero Marttila <terom@paivola.fi>
parents:
363
diff
changeset
|
219 |
return pvl.web.response.html(text, |
be42e2d38c77
pvl.web.Handler: STATUS/status()
Tero Marttila <terom@paivola.fi>
parents:
363
diff
changeset
|
220 |
status = self.status(), |
be42e2d38c77
pvl.web.Handler: STATUS/status()
Tero Marttila <terom@paivola.fi>
parents:
363
diff
changeset
|
221 |
) |
151
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
222 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
223 |
def cleanup (self) : |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
224 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
225 |
After request processing. Do not fail :) |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
226 |
""" |
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
227 |
|
8a9f01036091
split pvl.web from pvl.verkko, rename test.py -> pvl.verkko-dhcp
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
228 |
pass |