# HG changeset patch # User paulb # Date 1085696073 0 # Node ID 667749333ee2e2fb6c547829449467d620ab4467 # Parent f00f856702bde3d47f6eac2b1438e092a0cf9d03 [project @ 2004-05-27 22:14:33 by paulb] Improved the Transaction class so that repeated accesses of the fields from a request body will not cause a process to lock up - instead, the previously acquired FieldStorage object is reused. diff -r f00f856702bd -r 667749333ee2 WebStack/BaseHTTPRequestHandler.py --- a/WebStack/BaseHTTPRequestHandler.py Fri Jun 20 22:22:56 2008 +0200 +++ b/WebStack/BaseHTTPRequestHandler.py Thu May 27 22:14:33 2004 +0000 @@ -38,6 +38,10 @@ self.cookies_in = Cookie.SimpleCookie(self.get_headers().get("cookie")) + # Cached information. + + self.storage_body = None + def commit(self): """ @@ -188,19 +192,20 @@ single value is associated with any given field name). """ - storage = FieldStorage(fp=self.get_request_stream(), headers=self.get_headers(), - environ={"REQUEST_METHOD" : self.get_request_method()}, keep_blank_values=1) + if self.storage_body is None: + self.storage_body = FieldStorage(fp=self.get_request_stream(), headers=self.get_headers(), + environ={"REQUEST_METHOD" : self.get_request_method()}, keep_blank_values=1) # Avoid strange design issues with FieldStorage by checking the internal # field list directly. fields = {} - if storage.list is not None: + if self.storage_body.list is not None: # Traverse the storage, finding each field value. - for field_name in storage.keys(): - fields[field_name] = storage.getlist(field_name) + for field_name in self.storage_body.keys(): + fields[field_name] = self.storage_body.getlist(field_name) return fields def get_user(self):