1 #!/usr/bin/env python 2 3 """ 4 BaseHTTPRequestHandler adapter. 5 """ 6 7 import WebStack.BaseHTTPRequestHandler 8 import BaseHTTPServer 9 10 class HandlerFactory: 11 12 "A factory class creating WebStack dispatcher objects." 13 14 def __init__(self, resource): 15 16 "Initialise the root application-specific 'resource'." 17 18 self.webstack_resource = resource 19 20 def __call__(self, request, client_address, server): 21 22 "Act as a factory for the server objects." 23 24 handler = Handler(request, client_address, server, self.webstack_resource) 25 return handler 26 27 class Handler(BaseHTTPServer.BaseHTTPRequestHandler): 28 29 "A class dispatching requests to WebStack resources." 30 31 def __init__(self, request, client_address, server, resource): 32 33 "Initialise the root application-specific 'resource'." 34 35 self.webstack_resource = resource 36 BaseHTTPServer.BaseHTTPRequestHandler.__init__(self, request, client_address, server) 37 38 def handle(self): 39 40 "Dispatch the request to the root application-specific resource." 41 42 # NOTE: Overriding and trimming back the method's functionality. 43 44 self.raw_requestline = self.rfile.readline() 45 if not self.parse_request(): # An error code has been sent, just exit 46 return 47 48 trans = WebStack.BaseHTTPRequestHandler.Transaction(self) 49 self.webstack_resource.respond(trans) 50 trans.commit() 51 52 # vim: tabstop=4 expandtab shiftwidth=4