# HG changeset patch # User paulb # Date 1132444794 0 # Node ID 83fcc5d284e5b916236fcc1f519b3f17409e7583 # Parent d384955273f30675bb7776e49619f2709f80d5fe [project @ 2005-11-19 23:59:54 by paulb] Introduced try...finally in order to commit transactions where unhandled exceptions occur, thus hopefully closing session stores properly. diff -r d384955273f3 -r 83fcc5d284e5 WebStack/Adapters/BaseHTTPRequestHandler.py --- a/WebStack/Adapters/BaseHTTPRequestHandler.py Thu Nov 17 19:21:34 2005 +0000 +++ b/WebStack/Adapters/BaseHTTPRequestHandler.py Sat Nov 19 23:59:54 2005 +0000 @@ -76,22 +76,24 @@ return trans = WebStack.BaseHTTPRequestHandler.Transaction(self) - if self.webstack_authenticator is None or self.webstack_authenticator.authenticate(trans): - try: - self.webstack_resource.respond(trans) - except EndOfResponse: - pass - except: - if self.handle_errors: - trans.set_response_code(500) # Internal error - else: - raise - else: - trans.set_response_code(401) # Unauthorized - trans.set_header_value("WWW-Authenticate", '%s realm="%s"' % ( - self.webstack_authenticator.get_auth_type(), self.webstack_authenticator.get_realm())) + try: + if self.webstack_authenticator is None or self.webstack_authenticator.authenticate(trans): + try: + self.webstack_resource.respond(trans) + except EndOfResponse: + pass + except: + if self.handle_errors: + trans.set_response_code(500) # Internal error + else: + raise + else: + trans.set_response_code(401) # Unauthorized + trans.set_header_value("WWW-Authenticate", '%s realm="%s"' % ( + self.webstack_authenticator.get_auth_type(), self.webstack_authenticator.get_realm())) - trans.commit() + finally: + trans.commit() default_address = ("", 8080) diff -r d384955273f3 -r 83fcc5d284e5 WebStack/Adapters/JavaServlet.py --- a/WebStack/Adapters/JavaServlet.py Thu Nov 17 19:21:34 2005 +0000 +++ b/WebStack/Adapters/JavaServlet.py Sat Nov 19 23:59:54 2005 +0000 @@ -46,21 +46,23 @@ """ trans = WebStack.JavaServlet.Transaction(request, response) - if self.webstack_authenticator is None or self.webstack_authenticator.authenticate(trans): - try: - self.webstack_resource.respond(trans) - except EndOfResponse: - pass - except: - if self.handle_errors: - trans.set_response_code(500) # Internal error - else: - raise - else: - trans.set_response_code(401) # Unauthorized - #trans.set_header_value("WWW-Authenticate", '%s realm="%s"' % ( - # self.webstack_authenticator.get_auth_type(), self.webstack_authenticator.get_realm())) + try: + if self.webstack_authenticator is None or self.webstack_authenticator.authenticate(trans): + try: + self.webstack_resource.respond(trans) + except EndOfResponse: + pass + except: + if self.handle_errors: + trans.set_response_code(500) # Internal error + else: + raise + else: + trans.set_response_code(401) # Unauthorized + #trans.set_header_value("WWW-Authenticate", '%s realm="%s"' % ( + # self.webstack_authenticator.get_auth_type(), self.webstack_authenticator.get_realm())) - trans.commit() + finally: + trans.commit() # vim: tabstop=4 expandtab shiftwidth=4 diff -r d384955273f3 -r 83fcc5d284e5 WebStack/Adapters/ModPython.py --- a/WebStack/Adapters/ModPython.py Thu Nov 17 19:21:34 2005 +0000 +++ b/WebStack/Adapters/ModPython.py Sat Nov 19 23:59:54 2005 +0000 @@ -38,20 +38,24 @@ try: try: - resource.respond(trans) - except EndOfResponse: - pass - trans.commit() - return trans.get_response_code() - except: + try: + resource.respond(trans) + except EndOfResponse: + pass + return trans.get_response_code() + + except: - # NOTE: Error conditions should be investigated further, along with - # NOTE: other response states. + # NOTE: Error conditions should be investigated further, along with + # NOTE: other response states. - if handle_errors: - return apache.HTTP_INTERNAL_SERVER_ERROR - else: - raise + if handle_errors: + return apache.HTTP_INTERNAL_SERVER_ERROR + else: + raise + + finally: + trans.commit() def authenticate(request, authenticator, handle_errors=1): diff -r d384955273f3 -r 83fcc5d284e5 WebStack/Adapters/Twisted.py --- a/WebStack/Adapters/Twisted.py Thu Nov 17 19:21:34 2005 +0000 +++ b/WebStack/Adapters/Twisted.py Sat Nov 19 23:59:54 2005 +0000 @@ -53,22 +53,24 @@ "Dispatch the given 'request' to the root application-specific resource." trans = WebStack.Twisted.Transaction(request) - if self.webstack_authenticator is None or self.webstack_authenticator.authenticate(trans): - try: - self.webstack_resource.respond(trans) - except EndOfResponse: - pass - except: - if self.handle_errors: - trans.set_response_code(500) # Internal error - else: - raise - else: - trans.set_response_code(401) # Unauthorized - trans.set_header_value("WWW-Authenticate", '%s realm="%s"' % ( - self.webstack_authenticator.get_auth_type(), self.webstack_authenticator.get_realm())) + try: + if self.webstack_authenticator is None or self.webstack_authenticator.authenticate(trans): + try: + self.webstack_resource.respond(trans) + except EndOfResponse: + pass + except: + if self.handle_errors: + trans.set_response_code(500) # Internal error + else: + raise + else: + trans.set_response_code(401) # Unauthorized + trans.set_header_value("WWW-Authenticate", '%s realm="%s"' % ( + self.webstack_authenticator.get_auth_type(), self.webstack_authenticator.get_realm())) - trans.commit() + finally: + trans.commit() request.finish() return twisted.web.server.NOT_DONE_YET diff -r d384955273f3 -r 83fcc5d284e5 WebStack/Adapters/Webware.py --- a/WebStack/Adapters/Webware.py Thu Nov 17 19:21:34 2005 +0000 +++ b/WebStack/Adapters/Webware.py Sat Nov 19 23:59:54 2005 +0000 @@ -158,21 +158,24 @@ """ new_trans = WebStack.Webware.Transaction(trans) - if self.webstack_authenticator is None or self.webstack_authenticator.authenticate(new_trans): - try: - self.webstack_resource.respond(new_trans) - except EndOfResponse: - pass - except: - if self.handle_errors: - new_trans.set_response_code(500) # Internal error - else: - raise - else: - new_trans.set_response_code(401) # Unauthorized - new_trans.set_header_value("WWW-Authenticate", '%s realm="%s"' % ( - self.webstack_authenticator.get_auth_type(), self.webstack_authenticator.get_realm())) - new_trans.commit() + try: + if self.webstack_authenticator is None or self.webstack_authenticator.authenticate(new_trans): + try: + self.webstack_resource.respond(new_trans) + except EndOfResponse: + pass + except: + if self.handle_errors: + new_trans.set_response_code(500) # Internal error + else: + raise + else: + new_trans.set_response_code(401) # Unauthorized + new_trans.set_header_value("WWW-Authenticate", '%s realm="%s"' % ( + self.webstack_authenticator.get_auth_type(), self.webstack_authenticator.get_realm())) + + finally: + new_trans.commit() # vim: tabstop=4 expandtab shiftwidth=4 diff -r d384955273f3 -r 83fcc5d284e5 WebStack/Adapters/Zope.py --- a/WebStack/Adapters/Zope.py Thu Nov 17 19:21:34 2005 +0000 +++ b/WebStack/Adapters/Zope.py Sat Nov 19 23:59:54 2005 +0000 @@ -69,22 +69,24 @@ else: raise "Internal Error" - if self.webstack_authenticator is None or self.webstack_authenticator.authenticate(trans): - try: - self.webstack_resource.respond(trans) - except EndOfResponse: - pass - except: - if self.handle_errors: - trans.set_response_code(500) # Internal error - else: - raise - else: - #trans.set_header_value("WWW-Authenticate", '%s realm="%s"' % ( - # self.webstack_authenticator.get_auth_type(), self.webstack_authenticator.get_realm())) - raise "Unauthorized" + try: + if self.webstack_authenticator is None or self.webstack_authenticator.authenticate(trans): + try: + self.webstack_resource.respond(trans) + except EndOfResponse: + pass + except: + if self.handle_errors: + trans.set_response_code(500) # Internal error + else: + raise + else: + #trans.set_header_value("WWW-Authenticate", '%s realm="%s"' % ( + # self.webstack_authenticator.get_auth_type(), self.webstack_authenticator.get_realm())) + raise "Unauthorized" - trans.commit() + finally: + trans.commit() #raise status_reasons[trans.get_response_code()] # vim: tabstop=4 expandtab shiftwidth=4