Viewing file: test.py (1.78 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
from mx import Proxy import sys
cleaned_up = 0
class DataRecord: a = 2 b = 3 # Make read-only: def __public_setattr__(self,what,to): raise Proxy.AccessError,'read-only' # Cleanup protocol def __cleanup__(self): global cleaned_up print 'cleaning up',self cleaned_up = 1
o = DataRecord()
# Wrap the instance: p = Proxy.InstanceProxy(o,('a',)) # Remove o from the accessible system: del o
print 'Read p.a through Proxy:',p.a
# This will cause an exception, because the object is read-only if 1: try: p.a = 3 except: pass else: raise AssertionError,'should be read-only'
# This will cause an exception, because no access is given to .b if 1: try: p.b except Proxy.AccessError: pass else: raise AssertionError,'should give no access'
# Cleanup error tracebacks by overwriting the previous error; # this should remove the reference to p in the traceback of the # previous exception. if 1: try: 1/0 except: pass
# Deleting the Proxy will also delete the wrapped object, if there # is no other reference to it in the system. It will invoke # the __cleanup__ method in that case. del p assert cleaned_up
# # Creating and deleting weak Proxies and their referenced objects # d = {} p = Proxy.WeakProxy(d) q = Proxy.WeakProxy(d) del p del q del d
d = {} p = Proxy.WeakProxy(d) q = Proxy.WeakProxy(d) del q del p del d
d = {} p = Proxy.WeakProxy(d) q = Proxy.WeakProxy(d) del d del p del q
d = {} p = Proxy.WeakProxy(d) q = Proxy.WeakProxy(d) del d del q del p
d = {} p = Proxy.WeakProxy(d) q = Proxy.WeakProxy(d) del d Proxy.checkweakrefs() try: p[1] except Proxy.LostReferenceError: pass else: print '*** Phantom object still alive !'
print print 'Works.'
|