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 |