Ticket #1743: nevow_wsgi.py

File nevow_wsgi.py, 1.5 kB (added by pythy, 3 years ago)

wsgiref+nevow example

Line 
1 #!/usr/bin/python
2
3 # --- nevow part, from examples/wsgi/test-cgi.py
4
5 from nevow import wsgi
6 from nevow import rend, loaders, url
7 from nevow import tags as T
8
9 class Index(rend.Page):
10
11     addSlash = True
12
13     def __init__(self, name='main'):
14         rend.Page.__init__(self)
15         self.name = name
16
17     def render_name(self, ctx, data):
18         return self.name
19
20     def render_links(self, ctx, data):
21         inner = [T.li[T.a(href=url.here.child(x))[x]] for x in ['a', 'b', 'c']]
22         return T.ul[inner]
23
24     def childFactory(self, ctx, name):
25         return Index(self.name+'/'+name)
26
27     docFactory = loaders.stan(
28         T.html[
29             T.head[T.title['Nevow wsgi Test cgi app']],
30             T.body[
31                 T.h1(render=T.directive('name')),
32                 T.invisible(render=T.directive('links'))
33             ]
34         ]
35     )
36
37 def getNevowWSGIApp():
38     app = wsgi.createWSGIApplication(Index())
39     return app
40
41 # --- wsgiref part
42
43 from wsgiref import simple_server, validate
44
45 class TrivialWSGIServer(object):
46     def __init__(self, app, validate_it=True, port=5000):
47         self.app = app
48         self.server = simple_server.WSGIServer(
49                         ('', port),
50                         simple_server.WSGIRequestHandler,
51                         )
52         if validate_it:
53             app = validate.validator(self.app)
54         else:
55             app = self.app
56         self.server.set_app(app)
57                                                                    
58     def serve(self):
59         self.server.serve_forever()
60
61 # --- run-part
62
63 if __name__ == '__main__':
64     TrivialWSGIServer(getNevowWSGIApp(), port=80).serve()
jethro@divmod.org