
The "Module not allowed" exception means that you need to call setCopierForClass for the class. This maps a server-side class string to a client side class so the Jelly knows what type of object to create on the client. For example: pb.setCopierForClass('MyApp.game.server.door.Door', RemoteDoor) This is usually done at the bottom of the file that the class client-side is defined in. As far the inheritance, you should only to inherit from RemoteCopy for client side objects, not both pb.Copyable and pb.RemoteCopy... The "setCopyableState" idiom for constructing remote classes may seem onerous at first, but its use really is necessary. Distributed objects _are_ different from regular local objects and the requirements for managing them are different too. One of the benefits of PB is its inherent security model - it is far more secure and resistant to hackery than using Pickle. Pickle's internal use of Python's eval function makes it very scary to unserialized Pickled objects on a server... -----Original Message----- From: twisted-python-admin@twistedmatrix.com [mailto:twisted-python-admin@twistedmatrix.com]On Behalf Of Jasper Phillips Sent: Wednesday, March 19, 2003 6:04 PM To: twisted-python@twistedmatrix.com Subject: [Twisted-Python] Problems with PB and Jelly... -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 I'm new to twisted, and attempting to use it for networkable gaming; unfortunately I've run into some problems. I have a Perspective <-> Referenceable server/client setup, and am trying to pass objects between them. Following the online docs I've set all the relavent classes to inherit from pb.Copyable + pb.RemoteCopy, and passed them all to pb.setUnjellyableForClass. However, I still get "Module not allowed" exceptions raised in twisted.spread.jelly.py line 523. Looking more closely, I see that modules are not allowed unless passed to SecurityOptions.allowModules(), which is only called from SecurityOptions.allowInstancesOf(), which is not exposed through pb... In short I don't see how the example code on: http://twistedmatrix.com/documents/howto/pb-copyable could possibly work! Is it indeed necessary to call allowInstancesOf() directly? Hopefully I am just missing something... :-) I'm also unsure what to make of the last bullet under "Things To Watch Out For" on the above webpage. It seems unsure whether using __init__ to initialize transferable objects is ok... Must I truly go and hack all my objects to not use __init__, and instead use setCopyableState()? This, especially when combined with the need to inherit from pb.Copyable + pb.RemoteCopy, seems onerous when compared to the minimal interface of pickle. I would like to be able to simple pass objects of arbitrary classes, provided I've registered them as UnJellyable. Hopefully I'm missing something here as well! Thanks in advance, - -Jasper -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.6 (GNU/Linux) Comment: For info see http://www.gnupg.org iD8DBQE+eQVb8EpjZ7/X9bIRAoGmAKDOp/mMXUV0wGG057+CK5Shf75k9ACgu9Cb EuFB62b9vaObg3LZZlJ81jg= =8Dte -----END PGP SIGNATURE----- _______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python