passing context into BaseHTTPRequestHandler

Steve Howell showell30 at yahoo.com
Fri Mar 23 17:37:36 EDT 2012


On Mar 23, 12:19 pm, Bernhard Herzog <b... at intevation.de> wrote:
> Steve Howell <showel... at yahoo.com> writes:
> > I have a use case where I'm running BaseHTTPServer.HTTPServer, and I
> > want to configure the request handler with some context.  I've gotten
> > the code to work, but it feels overly heavy.  I am wondering if
> > anybody could suggest an easier idiom for this.
>
> > This is a brief sketch of the code:
>
> >     class MyHandler(BaseHTTPRequestHandler):
> >         def __init__(self, context, *args):
> >             self.context = context
> >             BaseHTTPRequestHandler.__init__(self, *args)
>
> >         def do_GET(self):
> >             // self.context will be available here
>
> >     context = { .... }
> >     def handler(*args):
> >         MyHandler(context, *args)
>
> >     server = HTTPServer(('', port), handler)
> >     server.serve_forever()
>
> You could store the context in the server object and access it in the
> handler methods via self.server.context. It basically works like this:
>
> class MyHTTPServer(HTTPServer):
>
>     def __init__(self, *args, **kw):
>         HTTPServer.__init__(self, *args, **kw)
>         self.context = { .... }
>
> class MyHandler(BaseHTTPRequestHandler):
>
>     def do_GET(self):
>         context = self.server.context
>         ...
>
> server = MyHTTPServer(('', port), MyHandler)
> server.serve_forever()
>

Thanks for the suggestion.  I made the change, and I think the code's
a bit easier to read now.




More information about the Python-list mailing list