At 03:02 AM 7/25/2005 -0400, Chris McDonough wrote: >Actually, let me give this a shot. > >We package up an egg called helloworld.egg. It happens to contain >something that can be used as a WSGI component. Let's say it's a WSGI >application that always returns 'Hello World'. And let's say it also >contains middleware that lowercases anything that passes through before >it's returned. > >The implementations of these components could be as follows: > >class HelloWorld: > def __init__(self, app, **kw): > pass # nothing to configure > > def __call__(self, environ, start_response): > start_response('200 OK', []) > return ['Hello World']
I'm thinking that an application like this wouldn't take an 'app' constuctor parameter, and if it takes no configuration parameters it doesn't need **kw, but good so far. >class Lowercaser: > def __init__(self, app, **kw): > self.app = app > # nothing else to configure > > def __call__(self, environ, start_response): > for chunk in self.app(environ, start_response): > yield chunk.lower() Again, no need for **kw if it doesn't take any configuration, but okay. >An import map would ship inside of the egg-info dir: > >[wsgi.app_factories] >helloworld = helloworld:HelloWorld >lowercaser = helloworld:Lowercaser I'm thinking it would be more like: [wsgi.middleware] lowercaser = helloworld:Lowercaser [wsgi.apps] helloworld = helloworld:HelloWorld and you'd specify it in the setup script as something like this: setup( #... entry_points = { 'wsgi.apps': ['helloworld = helloworld:HelloWorld'] 'wsgi.middleware': ['lowercaser = helloworld:Lowercaser'] } ) (And the CVS version of setuptools already supports this.) >So we install the egg and this does nothing except allow it to be used >from within Python. > >But when we create a "deployment descriptor" like so in a text editor: > >[helloworld from helloworld] > >[lowercaser from helloworld] Opposite order, though; the lowercaser comes first because it's the middleware; the application would always come last, because they're listed in the order in which they receive data, just like a pipes-and-filters command line. >... and run some "starter" script that parses that as a pipeline, ... possibly using a #! line if you're using CGI or FastCGI with Apache or some other non-Python webserver. >creates the two instances, wires them together, and we get a running >pipeline? > >Am I on track? Definitely. _______________________________________________ Web-SIG mailing list Web-SIG@python.org Web SIG: http://www.python.org/sigs/web-sig Unsubscribe: http://mail.python.org/mailman/options/web-sig/archive%40mail-archive.com