# HG changeset patch # User paulb # Date 1085859168 0 # Node ID 5cf155eb8b9449cb156f54affc9bbb2d200f80f2 # Parent 7914aa22e6214537277243bd8c18b46180431b99 [project @ 2004-05-29 19:32:48 by paulb] Added FieldStorage caching to avoid issues with reading the fields from the request body repeatedly. diff -r 7914aa22e621 -r 5cf155eb8b94 WebStack/CGI.py --- a/WebStack/CGI.py Sat May 29 17:28:24 2004 +0000 +++ b/WebStack/CGI.py Sat May 29 19:32:48 2004 +0000 @@ -44,6 +44,10 @@ self.cookies_in = Cookie.SimpleCookie(self.env.get("HTTP_COOKIE")) + # Cached information. + + self.storage_body = None + def commit(self): """ @@ -64,6 +68,7 @@ ) self.output.write(str(self.cookies_out)) self.output.write("\n") + self.output.write("\n") self.content.seek(0) self.output.write(self.content.read()) @@ -191,18 +196,19 @@ single value is associated with any given field name). """ - storage = FieldStorage(fp=self.get_request_stream(), keep_blank_values=1) + if self.storage_body is None: + self.storage_body = FieldStorage(fp=self.get_request_stream(), 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): diff -r 7914aa22e621 -r 5cf155eb8b94 WebStack/ModPython.py --- a/WebStack/ModPython.py Sat May 29 17:28:24 2004 +0000 +++ b/WebStack/ModPython.py Sat May 29 19:32:48 2004 +0000 @@ -27,6 +27,10 @@ self.response_code = apache.OK self.user = None + # Cached information. + + self.storage_body = None + # Request-related methods. def get_request_stream(self): @@ -148,12 +152,13 @@ body with fields found in the path. """ - storage = FieldStorage(self.trans, keep_blank_values=1) + if self.storage_body is None: + self.storage_body = FieldStorage(self.trans, keep_blank_values=1) # Traverse the storage, finding each field value. fields = {} - for field in storage.list: + for field in self.storage_body.list: if not fields.has_key(field.name): fields[field.name] = [] fields[field.name].append(field.value)