annotate wordstream/dispatcher.py @ 9:ab37ae0e9cc0

fix imports
author Jeff Hammel <k0scist@gmail.com>
date Tue, 24 Nov 2020 08:55:28 -0800
parents ffe01043ecea
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
1 """
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
2 request dispatcher:
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
3 data persisting across requests should go here
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
4 """
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
5
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
6 import os
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
7
9
ab37ae0e9cc0 fix imports
Jeff Hammel <k0scist@gmail.com>
parents: 6
diff changeset
8 from .api import Corpus
ab37ae0e9cc0 fix imports
Jeff Hammel <k0scist@gmail.com>
parents: 6
diff changeset
9 from .handlers import Index, Feed, Eat, ViewCorpus, Dissociate
0
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
10
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
11 from genshi.template import TemplateLoader
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
12 from paste.fileapp import FileApp
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
13 from pkg_resources import resource_filename
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
14 from webob import Request, Response, exc
9
ab37ae0e9cc0 fix imports
Jeff Hammel <k0scist@gmail.com>
parents: 6
diff changeset
15
0
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
16
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
17 class Dispatcher(object):
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
18
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
19 ### class level variables
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
20 defaults = { 'auto_reload': 'False',
6
ffe01043ecea * allow jquery location to become configurable
Jeff Hammel <jhammel@mozilla.com>
parents: 3
diff changeset
21 'jquery': 'jquery.js',
0
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
22 'template_dirs': '',
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
23 'seed': '' }
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
24
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
25 def __init__(self, **kw):
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
26
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
27 # set instance parameters from kw and defaults
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
28 for key in self.defaults:
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
29 setattr(self, key, kw.get(key, self.defaults[key]))
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
30 self.auto_reload = self.auto_reload.lower() == 'true'
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
31 self.corpus = Corpus()
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
32 self.corpus.feed_stuff(*self.seed.split())
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
33
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
34 # request handlers
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
35 self.handlers = [ Index, ViewCorpus, Feed, Eat ]
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
36
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
37 # template loader
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
38 self.template_dirs = self.template_dirs.split()
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
39 self.template_dirs.append(resource_filename(__name__, 'templates'))
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
40 self.loader = TemplateLoader(self.template_dirs,
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
41 auto_reload=self.auto_reload)
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
42
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
43 def __call__(self, environ, start_response):
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
44
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
45 # get a request object
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
46 request = Request(environ)
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
47
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
48 # get the path
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
49 path = request.path_info.strip('/').split('/')
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
50 if path == ['']:
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
51 path = []
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
52 request.environ['path'] = path
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
53
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
54 # match the request to a handler
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
55 for h in self.handlers:
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
56 handler = h.match(self, request)
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
57 if handler is not None:
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
58 break
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
59 else:
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
60 handler = exc.HTTPNotFound
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
61
6
ffe01043ecea * allow jquery location to become configurable
Jeff Hammel <jhammel@mozilla.com>
parents: 3
diff changeset
62 # add data to handler
0
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
63 if hasattr(handler, 'data'):
6
ffe01043ecea * allow jquery location to become configurable
Jeff Hammel <jhammel@mozilla.com>
parents: 3
diff changeset
64 handler.data['jquery'] = self.jquery
0
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
65
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
66 # get response
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
67 res = handler()
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
68 return res(environ, start_response)
3
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
69
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
70
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
71 class Scrambler(object):
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
72
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
73 ### class level variables
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
74 defaults = { 'auto_reload': 'False',
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
75 'template_dirs': '', }
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
76
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
77 def __init__(self, **kw):
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
78
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
79 # set instance parameters from kw and defaults
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
80 for key in self.defaults:
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
81 setattr(self, key, kw.get(key, self.defaults[key]))
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
82 self.auto_reload = self.auto_reload.lower() == 'true'
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
83
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
84 # request handlers
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
85 self.handlers = [ Dissociate ]
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
86
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
87 # template loader
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
88 self.template_dirs = self.template_dirs.split()
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
89 self.template_dirs.append(resource_filename(__name__, 'templates'))
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
90 self.loader = TemplateLoader(self.template_dirs,
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
91 auto_reload=self.auto_reload)
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
92
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
93 def __call__(self, environ, start_response):
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
94
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
95 # get a request object
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
96 request = Request(environ)
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
97
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
98 # get the path
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
99 path = request.path_info.strip('/').split('/')
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
100 if path == ['']:
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
101 path = []
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
102 request.environ['path'] = path
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
103
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
104 # match the request to a handler
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
105 for h in self.handlers:
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
106 handler = h.match(self, request)
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
107 if handler is not None:
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
108 break
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
109 else:
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
110 handler = exc.HTTPNotFound
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
111
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
112 # get response
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
113 res = handler()
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
114 return res(environ, start_response)