1.1 --- a/WebStack/BaseHTTPRequestHandler.py Wed Aug 24 21:35:54 2005 +0000
1.2 +++ b/WebStack/BaseHTTPRequestHandler.py Wed Aug 24 21:45:48 2005 +0000
1.3 @@ -21,7 +21,7 @@
1.4 """
1.5
1.6 import Generic
1.7 -from Helpers.Request import MessageBodyStream, get_body_fields, get_storage_items, Cookie
1.8 +from Helpers.Request import MessageBodyStream, get_body_fields, decode_value, get_storage_items, Cookie
1.9 from Helpers.Response import ConvertingStream
1.10 from Helpers.Auth import UserInfo
1.11 from Helpers.Session import SessionStore
1.12 @@ -274,10 +274,10 @@
1.13
1.14 fields = {}
1.15 for name, values in parse_qs(self.get_query_string(), keep_blank_values=1).items():
1.16 - name = self.decode_path(name, encoding)
1.17 + name = decode_value(name, encoding)
1.18 fields[name] = []
1.19 for value in values:
1.20 - value = self.decode_path(value, encoding)
1.21 + value = decode_value(value, encoding)
1.22 fields[name].append(value)
1.23 return fields
1.24
2.1 --- a/WebStack/CGI.py Wed Aug 24 21:35:54 2005 +0000
2.2 +++ b/WebStack/CGI.py Wed Aug 24 21:45:48 2005 +0000
2.3 @@ -22,7 +22,7 @@
2.4
2.5 import Generic
2.6 import os, sys
2.7 -from Helpers.Request import MessageBodyStream, get_body_fields, get_storage_items, Cookie
2.8 +from Helpers.Request import MessageBodyStream, get_body_fields, decode_value, get_storage_items, Cookie
2.9 from Helpers.Response import ConvertingStream
2.10 from Helpers.Auth import UserInfo
2.11 from Helpers.Session import SessionStore
2.12 @@ -208,7 +208,7 @@
2.13 character values.
2.14 """
2.15
2.16 - path = self.decode_path(self.env.get("SCRIPT_NAME") or "", encoding)
2.17 + path = decode_value(self.env.get("SCRIPT_NAME") or "", encoding)
2.18 path += self.get_path_info(encoding)
2.19 return path
2.20
2.21 @@ -225,7 +225,7 @@
2.22 character values.
2.23 """
2.24
2.25 - return self.decode_path(self.env.get("PATH_INFO") or "", encoding)
2.26 + return decode_value(self.env.get("PATH_INFO") or "", encoding)
2.27
2.28 def get_query_string(self):
2.29
2.30 @@ -252,10 +252,10 @@
2.31
2.32 fields = {}
2.33 for name, values in parse_qs(self.get_query_string(), keep_blank_values=1).items():
2.34 - name = self.decode_path(name, encoding)
2.35 + name = decode_value(name, encoding)
2.36 fields[name] = []
2.37 for value in values:
2.38 - value = self.decode_path(value, encoding)
2.39 + value = decode_value(value, encoding)
2.40 fields[name].append(value)
2.41 return fields
2.42
3.1 --- a/WebStack/Generic.py Wed Aug 24 21:35:54 2005 +0000
3.2 +++ b/WebStack/Generic.py Wed Aug 24 21:45:48 2005 +0000
3.3 @@ -271,10 +271,10 @@
3.4 unquoted_path = urllib.unquote(path)
3.5 if encoding is not None:
3.6 try:
3.7 - return unquoted_path.decode(encoding)
3.8 + return unicode(unquoted_path, encoding)
3.9 except UnicodeError:
3.10 pass
3.11 - return unquoted_path.decode(self.default_charset)
3.12 + return unicode(unquoted_path, self.default_charset)
3.13
3.14 def encode_path(self, path, encoding=None):
3.15
4.1 --- a/WebStack/JavaServlet.py Wed Aug 24 21:35:54 2005 +0000
4.2 +++ b/WebStack/JavaServlet.py Wed Aug 24 21:45:48 2005 +0000
4.3 @@ -224,12 +224,10 @@
4.4 character values.
4.5 """
4.6
4.7 - # NOTE: To be verified.
4.8 -
4.9 path = self.get_path_without_query(encoding)
4.10 qs = self.get_query_string()
4.11 if qs:
4.12 - return path = "?" + qs
4.13 + return path + "?" + qs
4.14 else:
4.15 return path
4.16
4.17 @@ -245,6 +243,9 @@
4.18 character values.
4.19 """
4.20
4.21 + # NOTE: We do not actually use the encoding - this may be a servlet
4.22 + # NOTE: container option.
4.23 +
4.24 return self.request.getContextPath() + self.request.getServletPath() + self.get_path_info(encoding)
4.25
4.26 def get_path_info(self, encoding=None):
4.27 @@ -260,6 +261,9 @@
4.28 character values.
4.29 """
4.30
4.31 + # NOTE: We do not actually use the encoding - this may be a servlet
4.32 + # NOTE: container option.
4.33 +
4.34 return self.request.getPathInfo() or ""
4.35
4.36 def get_query_string(self):
5.1 --- a/WebStack/ModPython.py Wed Aug 24 21:35:54 2005 +0000
5.2 +++ b/WebStack/ModPython.py Wed Aug 24 21:45:48 2005 +0000
5.3 @@ -21,7 +21,7 @@
5.4 """
5.5
5.6 import Generic
5.7 -from Helpers.Request import get_body_field, filter_fields, Cookie
5.8 +from Helpers.Request import get_body_field, decode_value, filter_fields, Cookie
5.9 from Helpers.Response import ConvertingStream
5.10 from mod_python.util import parse_qs, FieldStorage
5.11 from mod_python import apache
5.12 @@ -186,9 +186,9 @@
5.13
5.14 query_string = self.get_query_string()
5.15 if query_string:
5.16 - return self.decode_path(self.trans.uri, encoding) + "?" + query_string
5.17 + return decode_value(self.trans.uri, encoding) + "?" + query_string
5.18 else:
5.19 - return self.decode_path(self.trans.uri, encoding)
5.20 + return decode_value(self.trans.uri, encoding)
5.21
5.22 def get_path_without_query(self, encoding=None):
5.23
5.24 @@ -202,7 +202,7 @@
5.25 character values.
5.26 """
5.27
5.28 - return self.decode_path(self.trans.uri, encoding)
5.29 + return decode_value(self.trans.uri, encoding)
5.30
5.31 def get_path_info(self, encoding=None):
5.32
5.33 @@ -217,7 +217,7 @@
5.34 character values.
5.35 """
5.36
5.37 - return self.decode_path(self.trans.path_info, encoding)
5.38 + return decode_value(self.trans.path_info, encoding)
5.39
5.40 def get_query_string(self):
5.41
5.42 @@ -244,10 +244,10 @@
5.43
5.44 fields = {}
5.45 for name, values in parse_qs(self.get_query_string(), 1).items(): # keep_blank_values=1
5.46 - name = self.decode_path(name, encoding)
5.47 + name = decode_value(name, encoding)
5.48 fields[name] = []
5.49 for value in values:
5.50 - value = self.decode_path(value, encoding)
5.51 + value = decode_value(value, encoding)
5.52 fields[name].append(value)
5.53 return fields
5.54
5.55 @@ -282,7 +282,7 @@
5.56
5.57 fields = {}
5.58 for field in self.storage_body.list:
5.59 - field_name = self.decode_path(field.name, encoding)
5.60 + field_name = decode_value(field.name, encoding)
5.61 if not fields.has_key(field_name):
5.62 fields[field_name] = []
5.63 fields[field_name].append(get_body_field(field.value, encoding))
6.1 --- a/WebStack/Twisted.py Wed Aug 24 21:35:54 2005 +0000
6.2 +++ b/WebStack/Twisted.py Wed Aug 24 21:45:48 2005 +0000
6.3 @@ -22,7 +22,7 @@
6.4
6.5 import Generic
6.6 from Helpers.Auth import UserInfo
6.7 -from Helpers.Request import Cookie, get_body_field, filter_fields
6.8 +from Helpers.Request import Cookie, decode_value, filter_fields
6.9 from Helpers.Response import ConvertingStream
6.10 from Helpers.Session import SessionStore
6.11 from cgi import parse_qs
6.12 @@ -187,7 +187,7 @@
6.13 character values.
6.14 """
6.15
6.16 - return self.decode_path("/%s" % "/".join(self.trans.postpath), encoding)
6.17 + return decode_value("/%s" % "/".join(self.trans.postpath), encoding)
6.18
6.19 def get_query_string(self):
6.20
6.21 @@ -221,10 +221,10 @@
6.22
6.23 fields = {}
6.24 for name, values in parse_qs(self.get_query_string(), keep_blank_values=1).items():
6.25 - name = self.decode_path(name, encoding)
6.26 + name = decode_value(name, encoding)
6.27 fields[name] = []
6.28 for value in values:
6.29 - value = self.decode_path(value, encoding)
6.30 + value = decode_value(value, encoding)
6.31 fields[name].append(value)
6.32 return fields
6.33
6.34 @@ -254,11 +254,7 @@
6.35 encoding = encoding or self.get_content_type().charset or self.default_charset
6.36 fields = {}
6.37 for field_name, field_values in self.trans.args.items():
6.38 -
6.39 - # NOTE: Need to use the special path decoding method due to the
6.40 - # NOTE: mixing of path and body fields within Twisted.
6.41 -
6.42 - field_name = self.decode_path(field_name, encoding)
6.43 + field_name = decode_value(field_name, encoding)
6.44
6.45 # Find the body values.
6.46
6.47 @@ -268,9 +264,9 @@
6.48 # Twisted stores plain strings.
6.49
6.50 for field_str in field_values:
6.51 - fields[field_name].append(get_body_field(field_str, encoding))
6.52 + fields[field_name].append(decode_value(field_str, encoding))
6.53 else:
6.54 - fields[field_name] = get_body_field(field_values, encoding)
6.55 + fields[field_name] = decode_value(field_values, encoding)
6.56
6.57 return fields
6.58
7.1 --- a/WebStack/WSGI.py Wed Aug 24 21:35:54 2005 +0000
7.2 +++ b/WebStack/WSGI.py Wed Aug 24 21:45:48 2005 +0000
7.3 @@ -22,7 +22,7 @@
7.4
7.5 import Generic
7.6 import os, sys
7.7 -from Helpers.Request import MessageBodyStream, get_body_fields, get_storage_items, Cookie
7.8 +from Helpers.Request import MessageBodyStream, get_body_fields, decode_value, get_storage_items, Cookie
7.9 from Helpers.Response import ConvertingStream
7.10 from Helpers.Auth import UserInfo
7.11 from Helpers.Session import SessionStore
7.12 @@ -212,7 +212,7 @@
7.13 character values.
7.14 """
7.15
7.16 - path = self.decode_path(self.env.get("SCRIPT_NAME") or "", encoding)
7.17 + path = decode_value(self.env.get("SCRIPT_NAME") or "", encoding)
7.18 path += self.get_path_info(encoding)
7.19 return path
7.20
7.21 @@ -229,7 +229,7 @@
7.22 character values.
7.23 """
7.24
7.25 - return self.decode_path(self.env.get("PATH_INFO") or "", encoding)
7.26 + return decode_value(self.env.get("PATH_INFO") or "", encoding)
7.27
7.28 def get_query_string(self):
7.29
7.30 @@ -256,10 +256,10 @@
7.31
7.32 fields = {}
7.33 for name, values in parse_qs(self.get_query_string(), keep_blank_values=1).items():
7.34 - name = self.decode_path(name, encoding)
7.35 + name = decode_value(name, encoding)
7.36 fields[name] = []
7.37 for value in values:
7.38 - value = self.decode_path(value, encoding)
7.39 + value = decode_value(value, encoding)
7.40 fields[name].append(value)
7.41 return fields
7.42
8.1 --- a/WebStack/Webware.py Wed Aug 24 21:35:54 2005 +0000
8.2 +++ b/WebStack/Webware.py Wed Aug 24 21:45:48 2005 +0000
8.3 @@ -24,7 +24,7 @@
8.4 from cgi import parse_qs
8.5 import StringIO
8.6 from Helpers import Environment
8.7 -from Helpers.Request import Cookie, get_body_field, filter_fields
8.8 +from Helpers.Request import Cookie, get_body_field, decode_value, filter_fields
8.9 from Helpers.Response import ConvertingStream
8.10
8.11 class Transaction(Generic.Transaction):
8.12 @@ -203,7 +203,7 @@
8.13 real_path_info = path_info[len(context_name):]
8.14 else:
8.15 real_path_info = path_info
8.16 - return self.decode_path(real_path_info, encoding)
8.17 + return decode_value(real_path_info, encoding)
8.18
8.19 def get_query_string(self):
8.20
8.21 @@ -230,10 +230,10 @@
8.22
8.23 fields = {}
8.24 for name, values in parse_qs(self.get_query_string(), keep_blank_values=1).items():
8.25 - name = self.decode_path(name, encoding)
8.26 + name = decode_value(name, encoding)
8.27 fields[name] = []
8.28 for value in values:
8.29 - value = self.decode_path(value, encoding)
8.30 + value = decode_value(value, encoding)
8.31 fields[name].append(value)
8.32 return fields
8.33
8.34 @@ -258,13 +258,17 @@
8.35 def _get_fields(self, encoding=None):
8.36 encoding = encoding or self.get_content_type().charset or self.default_charset
8.37 fields = {}
8.38 +
8.39 for field_name, field_values in self.trans.request().fields().items():
8.40 + field_name = decode_value(field_name, encoding)
8.41 +
8.42 if type(field_values) == type([]):
8.43 fields[field_name] = []
8.44 for field_str in field_values:
8.45 fields[field_name].append(get_body_field(field_str, encoding))
8.46 else:
8.47 fields[field_name] = [get_body_field(field_values, encoding)]
8.48 +
8.49 return fields
8.50
8.51 def get_fields(self, encoding=None):
9.1 --- a/WebStack/Zope.py Wed Aug 24 21:35:54 2005 +0000
9.2 +++ b/WebStack/Zope.py Wed Aug 24 21:45:48 2005 +0000
9.3 @@ -27,7 +27,7 @@
9.4
9.5 import Generic
9.6 from Helpers import Environment
9.7 -from Helpers.Request import Cookie, get_body_field, filter_fields
9.8 +from Helpers.Request import Cookie, get_body_field, decode_value, filter_fields
9.9 from Helpers.Response import ConvertingStream
9.10 from Helpers.Auth import UserInfo
9.11 import cgi
9.12 @@ -182,7 +182,7 @@
9.13
9.14 # NOTE: Based on WebStack.CGI.get_path.
9.15
9.16 - path = self.decode_path(self.request.environ.get("SCRIPT_NAME") or "", encoding)
9.17 + path = decode_value(self.request.environ.get("SCRIPT_NAME") or "", encoding)
9.18 path += self.get_path_info(encoding)
9.19 return path
9.20
9.21 @@ -202,7 +202,7 @@
9.22 product_path = "/".join(self.adapter.getPhysicalPath())
9.23 path_info = self.request.environ.get("PATH_INFO") or ""
9.24 real_path_info = path_info[len(product_path):]
9.25 - return self.decode_path(real_path_info, encoding)
9.26 + return decode_value(real_path_info, encoding)
9.27
9.28 def get_query_string(self):
9.29
9.30 @@ -229,10 +229,10 @@
9.31
9.32 fields = {}
9.33 for name, values in cgi.parse_qs(self.get_query_string()).items():
9.34 - name = self.decode_path(name, encoding)
9.35 + name = decode_value(name, encoding)
9.36 fields[name] = []
9.37 for value in values:
9.38 - value = self.decode_path(value, encoding)
9.39 + value = decode_value(value, encoding)
9.40 fields[name].append(value)
9.41 return fields
9.42
9.43 @@ -260,7 +260,9 @@
9.44
9.45 encoding = encoding or self.get_content_type().charset or self.default_charset
9.46 self._fields = {}
9.47 +
9.48 for field_name, field_values in self.request.form.items():
9.49 + field_name = decode_value(field_name, encoding)
9.50
9.51 # Find the body values.
9.52