1 #!/usr/bin/env python 2 3 """ 4 Java Servlet adapter. 5 """ 6 7 import WebStack.JavaServlet 8 from WebStack.Generic import EndOfResponse 9 10 class Dispatcher: 11 12 "A servlet helper class dispatching requests to WebStack resources." 13 14 def __init__(self, resource, authenticator=None, handle_errors=1): 15 16 """ 17 Initialise the root application-specific 'resource' and optional 18 'authenticator'. The optional 'handle_errors' parameter (if true) 19 causes handlers to deal with uncaught exceptions cleanly. 20 """ 21 22 self.webstack_resource = resource 23 self.webstack_authenticator = authenticator 24 self.handle_errors = handle_errors 25 26 def service(self, request, response): 27 28 """ 29 Handle the 'request' and 'response' presented by the servlet. 30 """ 31 32 trans = WebStack.JavaServlet.Transaction(request, response) 33 if self.webstack_authenticator is None or self.webstack_authenticator.authenticate(trans): 34 try: 35 self.webstack_resource.respond(trans) 36 except EndOfResponse: 37 pass 38 except: 39 if self.handle_errors: 40 trans.set_response_code(500) # Internal error 41 else: 42 raise 43 else: 44 trans.set_response_code(401) # Unauthorized 45 #trans.set_header_value("WWW-Authenticate", '%s realm="%s"' % ( 46 # self.webstack_authenticator.get_auth_type(), self.webstack_authenticator.get_realm())) 47 48 trans.commit() 49 50 # vim: tabstop=4 expandtab shiftwidth=4