annotate wordstream/factory.py @ 3:e21f53582267

adding final dissociation stuff
author k0s <k0scist@gmail.com>
date Fri, 12 Feb 2010 01:37:38 -0500
parents 8af3412e907a
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 import os
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
2
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
3 from dispatcher import Dispatcher
3
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
4 from dispatcher import Scrambler
0
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
5 from paste.httpexceptions import HTTPExceptionHandler
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
6 from paste.urlparser import StaticURLParser
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
7 from pkg_resources import resource_filename
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
8
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
9 class PassthroughFileserver(object):
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
10 """serve files if they exist"""
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
11
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
12 def __init__(self, app, directory):
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
13 self.app = app
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
14 self.directory = directory
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
15 self.fileserver = StaticURLParser(self.directory)
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 def __call__(self, environ, start_response):
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
18 path = environ['PATH_INFO'].strip('/')
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
19 if path and os.path.exists(os.path.join(self.directory, path)):
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
20 return self.fileserver(environ, start_response)
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
21 return self.app(environ, start_response)
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
22
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
23 def factory(global_conf, **app_conf):
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
24 """create a webob view and wrap it in middleware"""
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
25
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
26 keystr = 'wordstream.'
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
27 args = dict([(key.split(keystr, 1)[-1], value)
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
28 for key, value in app_conf.items()
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
29 if key.startswith(keystr) ])
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
30 app = Dispatcher(**args)
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
31 return HTTPExceptionHandler(PassthroughFileserver(app, resource_filename(__name__, 'static')))
8af3412e907a initial import of wordstream
k0s <k0scist@gmail.com>
parents:
diff changeset
32
3
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
33 def dissociate_factory(global_conf, **app_conf):
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
34 keystr = 'dissociate.'
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
35 args = dict([(key.split(keystr, 1)[-1], value)
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
36 for key, value in app_conf.items()
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
37 if key.startswith(keystr) ])
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
38 app = Scrambler(**args)
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
39 return HTTPExceptionHandler(app)
e21f53582267 adding final dissociation stuff
k0s <k0scist@gmail.com>
parents: 0
diff changeset
40