home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_271 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  3.3 KB  |  85 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from warnings import warnpy3k
  5. warnpy3k('the Bastion module has been removed in Python 3.0', stacklevel = 2)
  6. del warnpy3k
  7. __all__ = [
  8.     'BastionClass',
  9.     'Bastion']
  10. from types import MethodType
  11.  
  12. class BastionClass:
  13.     
  14.     def __init__(self, get, name):
  15.         self._get_ = get
  16.         self._name_ = name
  17.  
  18.     
  19.     def __repr__(self):
  20.         return '<Bastion for %s>' % self._name_
  21.  
  22.     
  23.     def __getattr__(self, name):
  24.         attribute = self._get_(name)
  25.         self.__dict__[name] = attribute
  26.         return attribute
  27.  
  28.  
  29.  
  30. def Bastion(object, filter = (lambda name: name[:1] != '_'), name = None, bastionclass = BastionClass):
  31.     raise RuntimeError, 'This code is not secure in Python 2.2 and later'
  32.     
  33.     def get1(name, object = object, filter = filter):
  34.         if filter(name):
  35.             attribute = getattr(object, name)
  36.             if type(attribute) == MethodType:
  37.                 return attribute
  38.         
  39.         raise AttributeError, name
  40.  
  41.     
  42.     def get2(name, get1 = get1):
  43.         return get1(name)
  44.  
  45.     if name is None:
  46.         name = repr(object)
  47.     
  48.     return bastionclass(get2, name)
  49.  
  50.  
  51. def _test():
  52.     
  53.     class Original:
  54.         
  55.         def __init__(self):
  56.             self.sum = 0
  57.  
  58.         
  59.         def add(self, n):
  60.             self._add(n)
  61.  
  62.         
  63.         def _add(self, n):
  64.             self.sum = self.sum + n
  65.  
  66.         
  67.         def total(self):
  68.             return self.sum
  69.  
  70.  
  71.     o = Original()
  72.     b = Bastion(o)
  73.     testcode = 'if 1:\n    b.add(81)\n    b.add(18)\n    print "b.total() =", b.total()\n    try:\n        print "b.sum =", b.sum,\n    except:\n        print "inaccessible"\n    else:\n        print "accessible"\n    try:\n        print "b._add =", b._add,\n    except:\n        print "inaccessible"\n    else:\n        print "accessible"\n    try:\n        print "b._get_.func_defaults =", map(type, b._get_.func_defaults),\n    except:\n        print "inaccessible"\n    else:\n        print "accessible"\n    \n'
  74.     exec testcode
  75.     print '====================', 'Using rexec:', '===================='
  76.     import rexec
  77.     r = rexec.RExec()
  78.     m = r.add_module('__main__')
  79.     m.b = b
  80.     r.r_exec(testcode)
  81.  
  82. if __name__ == '__main__':
  83.     _test()
  84.  
  85.