Merge pull request #3449 from dannon/backport_mistargeted_3429

[16.10] Backport of 3429, safestringwrapper
This commit is contained in:
John Chilton
2017-01-19 11:24:34 -05:00
committed by GitHub
+3 -2
View File
@@ -184,6 +184,7 @@ def wrap_with_safe_string( value, no_wrap_classes=None ):
# Set pickle and copy properties
copy_reg.pickle( wrapped_class, pickle_safe_object, do_wrap_func )
return wrapped_class( value, safe_string_wrapper_function=do_wrap_func )
# Determine classes not to wrap
if no_wrap_classes:
if not isinstance( no_wrap_classes, ( tuple, list ) ):
@@ -214,7 +215,7 @@ class SafeStringWrapper( object ):
will still be sanitized, but not wrapped), and e.g. integers will have neither.
"""
__UNSANITIZED_ATTRIBUTE_NAME__ = 'unsanitized'
__NO_WRAP_NAMES__ = [ '__safe_string_wrapper_function__', __UNSANITIZED_ATTRIBUTE_NAME__]
__NO_WRAP_NAMES__ = [ '__safe_string_wrapper_function__', '__class__', __UNSANITIZED_ATTRIBUTE_NAME__]
def __new__( cls, *arg, **kwd ):
# We need to define a __new__ since, we are subclassing from e.g. immutable str, which internally sets data
@@ -284,7 +285,7 @@ class SafeStringWrapper( object ):
def __getattr__( self, name ):
if name in SafeStringWrapper.__NO_WRAP_NAMES__:
# FIXME: is this ever reached?
return object.__getattr__( self, name )
return object.__getattribute__( self, name )
return self.__safe_string_wrapper_function__( getattr( self.unsanitized, name ) )
def __setattr__( self, name, value ):