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