ztfy/utils/security.py
changeset 24 d8b0b7625f9c
parent 4 974354a28adc
child 34 9b882e41b6d2
equal deleted inserted replaced
23:d6a38a66c8a6 24:d8b0b7625f9c
    12 #
    12 #
    13 ##############################################################################
    13 ##############################################################################
    14 
    14 
    15 
    15 
    16 # import standard packages
    16 # import standard packages
       
    17 from persistent.list import PersistentList
       
    18 from persistent.dict import PersistentDict
    17 
    19 
    18 # import Zope3 interfaces
    20 # import Zope3 interfaces
    19 
    21 
    20 # import local interfaces
    22 # import local interfaces
    21 
    23 
    22 # import Zope3 packages
    24 # import Zope3 packages
       
    25 from zc.set import Set
    23 from zope.security.proxy import removeSecurityProxy
    26 from zope.security.proxy import removeSecurityProxy
    24 
    27 
    25 # import local packages
    28 # import local packages
    26 
    29 
    27 
    30 
    28 def unproxied(value):
    31 def unproxied(value):
    29     """Remove security proxies from given value ; if value is a list or dict, all elements are unproxied"""
    32     """Remove security proxies from given value ; if value is a list or dict, all elements are unproxied"""
    30     if isinstance(value, list):
    33     if isinstance(value, (list, PersistentList)):
    31         result = []
    34         result = []
    32         for v in value:
    35         for v in value:
    33             result.append(unproxied(v))
    36             result.append(unproxied(v))
    34     elif isinstance(value, dict):
    37     elif isinstance(value, (dict, PersistentDict)):
    35         result = value.copy()
    38         result = value.copy()
    36         for v in value:
    39         for v in value:
    37             result[v] = unproxied(value[v])
    40             result[v] = unproxied(value[v])
       
    41     elif isinstance(value, (set, Set)):
       
    42         result = []
       
    43         for v in value:
       
    44             result.append(unproxied(v))
    38     else:
    45     else:
    39         result = removeSecurityProxy(value)
    46         result = removeSecurityProxy(value)
    40     return result
    47     return result