[Python-checkins] python/dist/src/Lib/email Message.py,1.13,1.14
bwarsaw@users.sourceforge.net
bwarsaw@users.sourceforge.net
Fri, 28 Jun 2002 22:56:17 -0700
Update of /cvsroot/python/python/dist/src/Lib/email
In directory usw-pr-cvs1:/tmp/cvs-serv3560/email
Modified Files:
Message.py
Log Message:
Oleg Broytmann's support for RFC 2231 encoded parameters, SF patch #549133
Specifically,
_formatparam(): Teach this about encoded `param' arguments, which are
a 3-tuple of items (charset, language, value). language is ignored.
_unquotevalue(): Handle both 3-tuple RFC 2231 values and unencoded
values.
_get_params_preserve(): Decode the parameters before returning them.
get_params(), get_param(): Use _unquotevalue().
get_filename(), get_boundary(): Teach these about encoded (3-tuple)
parameters.
Index: Message.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/email/Message.py,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -d -r1.13 -r1.14
*** Message.py 2 Jun 2002 19:05:51 -0000 1.13
--- Message.py 29 Jun 2002 05:56:15 -0000 1.14
***************
*** 8,12 ****
import warnings
from cStringIO import StringIO
! from types import ListType, StringType
# Intrapackage imports
--- 8,12 ----
import warnings
from cStringIO import StringIO
! from types import ListType, TupleType, StringType
# Intrapackage imports
***************
*** 28,38 ****
! # Helper function
def _formatparam(param, value=None, quote=1):
"""Convenience function to format and return a key=value pair.
! Will quote the value if needed or if quote is true.
"""
if value is not None and len(value) > 0:
# BAW: Please check this. I think that if quote is set it should
# force quoting even if not necessary.
--- 28,44 ----
! # Helper functions
def _formatparam(param, value=None, quote=1):
"""Convenience function to format and return a key=value pair.
! This will quote the value if needed or if quote is true.
"""
if value is not None and len(value) > 0:
+ # TupleType is used for RFC 2231 encoded parameter values where items
+ # are (charset, language, value). charset is a string, not a Charset
+ # instance.
+ if isinstance(value, TupleType):
+ # Convert to ascii, ignore language
+ value = unicode(value[2], value[0]).encode("ascii")
# BAW: Please check this. I think that if quote is set it should
# force quoting even if not necessary.
***************
*** 45,48 ****
--- 51,61 ----
+ def _unquotevalue(value):
+ if isinstance(value, TupleType):
+ return (value[0], value[1], Utils.unquote(value[2]))
+ else:
+ return Utils.unquote(value)
+
+
class Message:
***************
*** 401,404 ****
--- 414,418 ----
val = ''
params.append((name, val))
+ params = Utils.decode_params(params)
return params
***************
*** 421,425 ****
return failobj
if unquote:
! return [(k, Utils.unquote(v)) for k, v in params]
else:
return params
--- 435,439 ----
return failobj
if unquote:
! return [(k, _unquotevalue(v)) for k, v in params]
else:
return params
***************
*** 440,444 ****
if k.lower() == param.lower():
if unquote:
! return Utils.unquote(v)
else:
return v
--- 454,458 ----
if k.lower() == param.lower():
if unquote:
! return _unquotevalue(v)
else:
return v
***************
*** 549,553 ****
if filename is missing:
return failobj
! return Utils.unquote(filename.strip())
def get_boundary(self, failobj=None):
--- 563,573 ----
if filename is missing:
return failobj
! if isinstance(filename, TupleType):
! # It's an RFC 2231 encoded parameter
! newvalue = _unquotevalue(filename)
! return unicode(newvalue[2], newvalue[0])
! else:
! newvalue = _unquotevalue(filename.strip())
! return newvalue
def get_boundary(self, failobj=None):
***************
*** 561,565 ****
if boundary is missing:
return failobj
! return Utils.unquote(boundary.strip())
def set_boundary(self, boundary):
--- 581,585 ----
if boundary is missing:
return failobj
! return _unquotevalue(boundary.strip())
def set_boundary(self, boundary):