author | Tero Marttila <terom@fixme.fi> |
Thu, 20 Jan 2011 23:14:07 +0200 | |
changeset 58 | 4f4150296cd3 |
parent 49 | 8bc64ef57ee0 |
child 60 | b364279347d9 |
permissions | -rw-r--r-- |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
# coding: utf-8 |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
""" |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
Generic controller base classes. |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
|
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
respond(Request) -> Response |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
""" |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
|
10
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
8 |
import werkzeug |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
from werkzeug import Response |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
|
58
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
11 |
from svv.html import tags as html |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
12 |
from svv import pdf, utils |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
13 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
14 |
import datetime |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
|
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
class AppHandler (object): |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
17 |
""" |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
Per-request handler type, containing the request context and implementing the response. |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
19 |
|
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
20 |
Works on a generic level, i.e. WSGI/Werkzeug URL-mapped request in, response out. |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
21 |
""" |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
22 |
|
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
23 |
def __init__ (self, app, request, urlmap) : |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
24 |
""" |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
25 |
Initialize for processing the given Request, to prepare for action-method later on |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |
|
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
app - the global Application state |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
28 |
request - the request state |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
urlmap - the URL map we were matched through |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
""" |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
|
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
32 |
self.app = app |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
self.request = request |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
34 |
self.urlmap = urlmap |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
35 |
|
48 | 36 |
def url_for (self, endpoint, fragment=None, **values) : |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
37 |
""" |
10
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
38 |
Return an URL for the given endpoint, applying the given URL-embedded values |
48 | 39 |
|
40 |
endpoint - endpoint mapped in svv.urls to target |
|
41 |
fragment - (optional) #fragment to add to URL |
|
42 |
**values - url-values for mapped endpoint |
|
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
43 |
""" |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
44 |
|
48 | 45 |
url = self.urlmap.build(endpoint, values) |
46 |
||
47 |
if fragment : |
|
48 |
# XXX: encode |
|
49 |
url += '#' + fragment |
|
50 |
||
51 |
return url |
|
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
52 |
|
10
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
53 |
def redirect_for (self, endpoint, **values) : |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
54 |
""" |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
55 |
Return a Response that will redirect the client to the given endpoint. |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
56 |
""" |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
57 |
|
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
58 |
return werkzeug.redirect(self.url_for(endpoint, **values)) |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
59 |
|
7 | 60 |
@property |
61 |
def POST (self) : |
|
62 |
""" |
|
63 |
Access request's POST data |
|
64 |
""" |
|
65 |
||
66 |
# MultiDict from werkzeug.Request |
|
67 |
return self.request.form |
|
68 |
||
32
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
69 |
def respond (self, **url_values) : |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
70 |
""" |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
71 |
Handle request that was mapped to ourselves via the URL routing, using given dict of values from URL. |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
72 |
""" |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
73 |
|
32
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
74 |
# process e.g. POST data for e.g. redirect |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
75 |
response = self.process(**url_values) |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
76 |
|
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
77 |
if not response : |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
78 |
# assume superclass does something else if process didn't handle it |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
79 |
pass |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
80 |
|
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
81 |
return response |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
82 |
|
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
83 |
def process (self, **args) : |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
84 |
""" |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
85 |
Process incoming POST data, optionally returning a redirect response. |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
86 |
""" |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
87 |
|
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
88 |
# default to ignore |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
89 |
pass |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
90 |
|
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
91 |
class PageHandler (AppHandler) : |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
92 |
""" |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
93 |
Specialized AppHandler for normal HTML page views. |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
94 |
|
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
95 |
Renders the layout template and HTML. |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
96 |
""" |
58
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
97 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
98 |
# XXX: how to handle site title vs page title? |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
99 |
def format_title (self) : |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
100 |
""" |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
101 |
Render site/page title as plain text. |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
102 |
""" |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
103 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
104 |
return u"SpeksiVVuokraus" |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
105 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
106 |
def build_breadcrumb (self) : |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
107 |
""" |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
108 |
Return an optional list of (title, target, args) segments leading up to and including this page. |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
109 |
""" |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
110 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
111 |
return None |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
112 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
113 |
def render_header (self) : |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
114 |
""" |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
115 |
Page header. |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
116 |
""" |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
117 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
118 |
from svv import urls |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
119 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
120 |
# link to main page |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
121 |
return html.a(href=self.url_for(urls.Index))( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
122 |
self.format_title() |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
123 |
) |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
124 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
125 |
def render_menu (self) : |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
126 |
""" |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
127 |
Site navigation menu (vertical menu next to content) |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
128 |
""" |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
129 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
130 |
# XXX: circular-import hack for urls |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
131 |
# it's not sustainable for a base class to referr to its subclasses at define time |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
132 |
from svv import urls |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
133 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
134 |
# XXX: menu def, should be somewhere elsewhere.. |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
135 |
menu = [ |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
136 |
("Kalenteri", urls.CalendarView), |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
137 |
("Uusi tilaus", urls.NewOrderView), |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
138 |
("Tilaukset", urls.OrdersView), |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
139 |
("Tilaajat", urls.CustomersView), |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
140 |
("Inventaari", urls.InventoryView), |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
141 |
] |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
142 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
143 |
# render |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
144 |
return html.ul( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
145 |
html.li( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
146 |
html.a(href=self.url_for(target))(title) |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
147 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
148 |
) for title, target in menu |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
149 |
) |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
150 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
151 |
def render_navigation (self) : |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
152 |
""" |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
153 |
Page navigation menu (compact horizontal above content), used for breadcrumb |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
154 |
""" |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
155 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
156 |
breadcrumb = self.build_breadcrumb() |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
157 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
158 |
if not breadcrumb : |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
159 |
# optional |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
160 |
return None |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
161 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
162 |
return html.ul( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
163 |
html.li( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
164 |
html.a(href=self.url_for(target, **args))( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
165 |
title |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
166 |
) |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
167 |
) for title, target, args in breadcrumb |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
168 |
) |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
169 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
170 |
def render_footer (self) : |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
171 |
""" |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
172 |
Page footer. |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
173 |
""" |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
174 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
175 |
# current tz-aware time |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
176 |
now = datetime.datetime.now(utils.LocalTimezone()) |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
177 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
178 |
return ( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
179 |
html.div(class_='right')( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
180 |
# timestamp with timezone offset |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
181 |
now.strftime('%Y/%m/%d %H:%M:%S %Z (GMT%z)') |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
182 |
) |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
183 |
) |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
184 |
|
10
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
185 |
def render_content (self, **args) : |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
186 |
""" |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
187 |
Render and return HTML for page content. |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
188 |
|
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
189 |
XXX: must be HTML object, support just text? |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
190 |
""" |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
191 |
|
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
192 |
raise NotImplementedError() |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
193 |
|
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
194 |
def render_layout (self, content) : |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
195 |
""" |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
196 |
Render the page layout for the given content block. |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
197 |
""" |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
198 |
|
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
199 |
# XXX: layout template, should be somewhere far away |
58
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
200 |
|
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
201 |
css = [ |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
202 |
"/static/layout.css", |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
203 |
"/static/style.css", |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
204 |
"/static/forms.css", |
13 | 205 |
"/static/tables.css", |
37
eabea2857143
cal: simple order calendar view
Tero Marttila <terom@fixme.fi>
parents:
32
diff
changeset
|
206 |
"/static/cal.css", |
13 | 207 |
|
7 | 208 |
"/static/treelist.css", |
209 |
||
22
c68ca09b08b9
Add external javascript libraries under ext/
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
210 |
"/static/jquery-ui.theme/jquery-ui.css", |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
211 |
] |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
212 |
scripts = [ |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
213 |
"/static/js/jquery.js", |
7 | 214 |
"/static/js/jquery-ui.min.js", # fairly big |
215 |
"/static/js/jquery-ui-timepicker.js", |
|
22
c68ca09b08b9
Add external javascript libraries under ext/
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
216 |
"/static/js/jquery-ui-datepicker-fi.js", |
7 | 217 |
|
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
218 |
"/static/js/forms.js", |
7 | 219 |
|
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
220 |
#"/static/js/prototype.js", |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
221 |
#"/static/js/scriptaculous/scriptaculous.js", |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
222 |
#"/static/js/treelist.js" |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
223 |
] |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
224 |
|
58
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
225 |
return html.document( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
226 |
head=( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
227 |
html.title( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
228 |
# plaintext title |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
229 |
self.format_title() |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
230 |
), |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
231 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
232 |
( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
233 |
html.link(rel='Stylesheet', type="text/css", href=src) for src in css |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
234 |
), |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
235 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
236 |
# XXX: script can't self-close? |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
237 |
( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
238 |
html.script(src=src, _selfclosing=False) for src in scripts |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
239 |
), |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
240 |
), |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
241 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
242 |
body=( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
243 |
html.div(id='header')( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
244 |
self.render_header() |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
245 |
), |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
246 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
247 |
html.div(id='container')( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
248 |
html.div(id='menu')( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
249 |
self.render_menu() |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
250 |
), |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
251 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
252 |
# XXX: breadcrumb etc. |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
253 |
# html.div(id='nav')( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
254 |
# self.render_navgation() |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
255 |
#), |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
256 |
|
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
257 |
# the actual page content (pre-rendered) |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
258 |
html.div(id='content')( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
259 |
content |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
260 |
), |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
261 |
), |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
262 |
html.div(id='footer')( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
263 |
self.render_footer() |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
264 |
), |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
265 |
), |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
266 |
) |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
267 |
|
10
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
268 |
def render (self, **url_values) : |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
269 |
""" |
10
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
270 |
Render full page HTML |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
271 |
""" |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
272 |
|
10
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
273 |
# render page content |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
274 |
content = self.render_content(**url_values) |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
275 |
|
10
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
276 |
# render into layout |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
277 |
response = self.render_layout(content) |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
278 |
|
10
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
279 |
# ok |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
280 |
return response |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
281 |
|
32
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
282 |
def respond (self, **url_values) : |
11
90a3c570c227
NewOrderView now works ~fully, including error handling
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
283 |
""" |
90a3c570c227
NewOrderView now works ~fully, including error handling
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
284 |
Build and return a response from the following steps: |
10
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
285 |
|
11
90a3c570c227
NewOrderView now works ~fully, including error handling
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
286 |
* process() |
90a3c570c227
NewOrderView now works ~fully, including error handling
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
287 |
* render() -> render_content() as HTML |
90a3c570c227
NewOrderView now works ~fully, including error handling
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
288 |
""" |
90a3c570c227
NewOrderView now works ~fully, including error handling
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
289 |
|
32
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
290 |
# optional processing |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
291 |
response = super(PageHandler, self).respond(**url_values) |
10
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
292 |
|
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
293 |
if not response : |
58
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
294 |
# render page HTML as unicode |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
295 |
html = unicode(self.render(**url_values)) |
11
90a3c570c227
NewOrderView now works ~fully, including error handling
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
296 |
|
90a3c570c227
NewOrderView now works ~fully, including error handling
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
297 |
# response object |
58
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
298 |
# XXX: charset? |
11
90a3c570c227
NewOrderView now works ~fully, including error handling
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
299 |
return Response(html, mimetype='text/html') |
10
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
300 |
|
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
301 |
# ok |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
302 |
return response |
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
303 |
|
15
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
304 |
class DocumentHandler (AppHandler) : |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
305 |
""" |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
306 |
PDF generation/export |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
307 |
""" |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
308 |
|
32
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
309 |
def respond (self, **url_values) : |
15
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
310 |
""" |
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
311 |
Generate the document, and return it as a .pdf file, with the filename generated from the document's title. |
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
312 |
""" |
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
313 |
|
32
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
314 |
# optional processing |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
315 |
response = super(DocumentHandler, self).respond(**url_values) |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
316 |
|
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
317 |
if not response : |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
318 |
pdf_file = self.generate(**url_values) |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
319 |
|
32
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
320 |
# file wrapper |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
321 |
# XXX: is this any use at all for StringIO? |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
322 |
pdf_file = werkzeug.wrap_file(self.request.environ, pdf_file) |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
323 |
|
32
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
324 |
# respond with file wrapper |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
325 |
response = Response(pdf_file, mimetype='application/pdf', direct_passthrough=True) |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
326 |
|
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
327 |
# ok |
10c48a6843ad
Optionally take contract text from form input
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
328 |
return response |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
329 |
|
15
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
330 |
def generate (self, **url_values) : |
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
331 |
""" |
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
332 |
Generate the PDF document as a file-like object. |
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
333 |
""" |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
334 |
|
15
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
335 |
document, elements = self.generate_document(**url_values) |
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
336 |
|
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
337 |
# render and return StringIO |
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
338 |
return document.render_buf(elements) |
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
339 |
|
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
340 |
def generate_document (self, **url_values) : |
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
341 |
""" |
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
342 |
Return the |
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
343 |
(DocumentTemplate, elements) |
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
344 |
to generate the PDF document from. |
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
345 |
""" |
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
346 |
|
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
347 |
raise NotImplementedError() |
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
348 |
|
e098ee83b363
Implement OrderContractDocument
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
349 |
### XXX: random test controllers |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
350 |
|
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
351 |
class Index (PageHandler) : |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
352 |
DATA = ( |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
353 |
(100, "Top A", []), |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
354 |
(200, "Top B", [ |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
355 |
(210, "Mid BA", [ |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
356 |
(211, "Sub BAA", []), |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
357 |
(212, "Sub BAB", []), |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
358 |
]), |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
359 |
(220, "Mid BB", []), |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
360 |
]), |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
361 |
(300, "Top C", [ |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
362 |
(310, "Mid CA", []), |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
363 |
(320, "Mid CB", []), |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
364 |
]), |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
365 |
) |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
366 |
|
10
4bdb45071c89
Fix up PageHandler.render to PageHandler.render_content, add PageHandler.process, and fix up orders
Tero Marttila <terom@fixme.fi>
parents:
7
diff
changeset
|
367 |
def render_content (self) : |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
368 |
# build data set |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
369 |
data = self.DATA |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
370 |
|
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
371 |
def render_item (id, text, children) : |
58
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
372 |
return html.li( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
373 |
html.div(class_='item')( |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
374 |
# item text |
58
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
375 |
html.a(html.input(type='checkbox', name_=id, checked=( |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
376 |
'checked' if self.request.form.get(str(id)) else None |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
377 |
)), text, class_='text'), |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
378 |
), |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
379 |
|
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
380 |
# children |
58
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
381 |
html.ul(render_item(*item) for item in children if item) if children else None, |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
382 |
|
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
383 |
# |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
384 |
class_=('more open' if children else None), |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
385 |
) |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
386 |
|
19 | 387 |
# XXX: nothing much to see here |
58
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
388 |
return html.h1("Mui.") |
19 | 389 |
|
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
390 |
# render it |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
391 |
return ( |
58
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
392 |
html.h3("Item list"), |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
393 |
html.form(action='.', method='post')( |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
394 |
html.ul(class_='treelist')(render_item(*item) for item in data), |
4f4150296cd3
controllers: tidy up PageHandler a little
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
395 |
html.input(type='submit'), |
6
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
396 |
), |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
397 |
) |
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
398 |
|
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
399 |
|
72c73df76db2
Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
400 |