def testCircleWithInvoker(self):
     class dummyInvokerClass: pass
     dummyInvoker = dummyInvokerClass()
     dummyInvoker.serializingPerspective = None
     a0 = ClassA()
     jelly.setUnjellyableForClass(ClassA, ClassA)
     jelly.setUnjellyableForClass(ClassB, ClassB)
     j = jelly.jelly(a0, invoker=dummyInvoker)
     a1 = jelly.unjelly(j)
     self.failUnlessIdentical(a1.ref.ref, a1,
                              "Identity not preserved in circular reference")
Пример #2
0
 def test_circleWithInvoker(self):
     class DummyInvokerClass:
         pass
     dummyInvoker = DummyInvokerClass()
     dummyInvoker.serializingPerspective = None
     a0 = ClassA()
     jelly.setUnjellyableForClass(ClassA, ClassA)
     jelly.setUnjellyableForClass(ClassB, ClassB)
     j = jelly.jelly(a0, invoker=dummyInvoker)
     a1 = jelly.unjelly(j)
     self.failUnlessIdentical(a1.ref.ref, a1,
         "Identity not preserved in circular reference")
Пример #3
0
 def test_unjellyable(self):
     """
     Test that if Unjellyable is used to deserialize a jellied object,
     state comes out right.
     """
     class JellyableTestClass(jelly.Jellyable):
         pass
     jelly.setUnjellyableForClass(JellyableTestClass, jelly.Unjellyable)
     input = JellyableTestClass()
     input.attribute = 'value'
     output = jelly.unjelly(jelly.jelly(input))
     self.assertEquals(output.attribute, 'value')
     self.assertIsInstance(output, jelly.Unjellyable)
Пример #4
0
 def test_unjellyable(self):
     """
     Test that if Unjellyable is used to deserialize a jellied object,
     state comes out right.
     """
     class JellyableTestClass(jelly.Jellyable):
         pass
     jelly.setUnjellyableForClass(JellyableTestClass, jelly.Unjellyable)
     input = JellyableTestClass()
     input.attribute = 'value'
     output = jelly.unjelly(jelly.jelly(input))
     self.assertEqual(output.attribute, 'value')
     self.assertIsInstance(output, jelly.Unjellyable)
 def testUnjellyable(self):
     """
     Test that if Unjellyable is used to deserialize a jellied object,
     state comes out right.
     """
     class JellyableTestClass(jelly.Jellyable):
         pass
     jelly.setUnjellyableForClass(JellyableTestClass, jelly.Unjellyable)
     input = JellyableTestClass()
     input.attribute = 'value'
     output = jelly.unjelly(jelly.jelly(input))
     self.assertEquals(output.attribute, 'value')
     self.failUnless(
         isinstance(output, jelly.Unjellyable),
         "Got instance of %r, not Unjellyable" % (output.__class__,))
Пример #6
0
    def testUnjellyable(self):
        """
        Test that if Unjellyable is used to deserialize a jellied object,
        state comes out right.
        """
        class JellyableTestClass(jelly.Jellyable):
            pass

        jelly.setUnjellyableForClass(JellyableTestClass, jelly.Unjellyable)
        input = JellyableTestClass()
        input.attribute = 'value'
        output = jelly.unjelly(jelly.jelly(input))
        self.assertEquals(output.attribute, 'value')
        self.failUnless(
            isinstance(output, jelly.Unjellyable),
            "Got instance of %r, not Unjellyable" % (output.__class__, ))
Пример #7
0
            enum = etype(value, name, nicks[value])
            for extra_key, extra_values in extras.items():
                assert not hasattr(enum, extra_key)
                setattr(enum, extra_key, extra_values[value])
            etype[value] = enum

        _enumClassRegistry[type_name] = etype
        return etype


# Enum unjellyer should not be a new style class,
# otherwise Twsited 2.0.1 will not recognise it.


class EnumUnjellyer(jelly.Unjellyable):
    def unjellyFor(self, unjellier, jellyList):
        enumClassName, value, name, nick = jellyList[1:]
        enumClass = _enumClassRegistry.get(enumClassName, None)
        if enumClass:
            # Retrieve the enum singleton
            enum = enumClass.get(value)
            assert enum.name == name, "Inconsistent Enum Name"
        else:
            # Create a generic Enum container
            enum = Enum(value, name, nick)
            enum._enumClassName = enumClassName
        return enum


jelly.setUnjellyableForClass(qual(Enum), EnumUnjellyer)
Пример #8
0
            enum = etype(value, name, nicks[value])
            for extra_key, extra_values in extras.items():
                assert not hasattr(enum, extra_key)
                setattr(enum, extra_key, extra_values[value])
            etype[value] = enum

        _enumClassRegistry[type_name] = etype
        return etype


# Enum unjellyer should not be a new style class,
# otherwise Twsited 2.0.1 will not recognise it.


class EnumUnjellyer(jelly.Unjellyable):
    def unjellyFor(self, unjellier, jellyList):
        enumClassName, value, name, nick = jellyList[1:]
        enumClass = _enumClassRegistry.get(enumClassName, None)
        if enumClass:
            # Retrieve the enum singleton
            enum = enumClass.get(value)
            assert enum.name == name, "Inconsistent Enum Name"
        else:
            # Create a generic Enum container
            enum = Enum(value, name, nick)
            enum._enumClassName = enumClassName
        return enum


jelly.setUnjellyableForClass(qual(Enum), EnumUnjellyer)
Пример #9
0
    def __eq__(self, value):
        return (value is self
                or (self.str == value.str
                    and self.unicode == value.unicode
                    and self.int == value.int
                    and self.long == value.long
                    and abs(self.float - value.float) < 0.00000001
                    and self.bool == value.bool
                    and self.none == value.none
                    and self.list == value.list
                    and self.tuple == value.tuple
                    and self.set == value.set
                    and self.dict == value.dict
                    and self.ref == value.ref))

jelly.setUnjellyableForClass(qual(SerializableDummy),
                             SerializableDummy)


@serialization.register
class NotReferenceableDummy(serialization.Serializable, jelly.Jellyable):

    referenceable = False

    def __init__(self, value=42):
        self.value = value

    def getStateFor(self, jellyer):
        return self.snapshot()

    def unjellyFor(self, unjellyer, data):
        # The way to handle circular references in spread
Пример #10
0
def registerGIOJelly():
    """Register the jelly used by the GIO VFS backend.
    """
    setUnjellyableForClass(GIOFile, GIOFile)
    setUnjellyableForClass(GIODirectory, GIODirectory)
    log.info('jelly', 'GIO registered')
Пример #11
0
    def jellyFor(self, jellier):
        sxp = jellier.prepare(self)
        sxp.extend([
            qual(self.__class__),
            self._root, self._path])
        return jellier.preserve(self, sxp)


    ## Unjellyable Overriden Methods ##

    def unjellyFor(self, unjellier, jellyList):
        self._root, self._path = jellyList[1:]
        return self


jelly.setUnjellyableForClass(qual(VirtualPath), VirtualPath)


class VirtualPathProperty(properties.ValueProperty):

    def __init__(self, descriptor, default=None, required=False):
        properties.ValueProperty.__init__(self, descriptor, default, required)

    def checkValue(self, value):
        return isinstance(value, VirtualPath)

    def str2val(self, strval):
        return VirtualPath(strval)

    def val2str(self, value):
        return str(value)
Пример #12
0
def registerGnomeVFSJelly():
    """Register the jelly used by the GnomeVFS VFS backend.
    """
    setUnjellyableForClass(GnomeVFSFile, GnomeVFSFile)
    setUnjellyableForClass(GnomeVFSDirectory, GnomeVFSDirectory)
    log.info('jelly', 'GnomeVFS registered')
Пример #13
0
def registerGnomeVFSJelly():
    """Register the jelly used by the GnomeVFS VFS backend.
    """
    setUnjellyableForClass(GnomeVFSFile, GnomeVFSFile)
    setUnjellyableForClass(GnomeVFSDirectory, GnomeVFSDirectory)
    log.info('jelly', 'GnomeVFS registered')
Пример #14
0
def registerGIOJelly():
    """Register the jelly used by the GIO VFS backend.
    """
    setUnjellyableForClass(GIOFile, GIOFile)
    setUnjellyableForClass(GIODirectory, GIODirectory)
    log.info('jelly', 'GIO registered')
 def testSimpleCircle(self):
     jelly.setUnjellyableForClass(ClassA, ClassA)
     jelly.setUnjellyableForClass(ClassB, ClassB)
     a = jelly.unjelly(jelly.jelly(ClassA()))
     self.failUnless(a.ref.ref is a, "Identity not preserved in circular reference")
Пример #16
0
 def test_simpleCircle(self):
     jelly.setUnjellyableForClass(ClassA, ClassA)
     jelly.setUnjellyableForClass(ClassB, ClassB)
     a = jelly.unjelly(jelly.jelly(ClassA()))
     self.assertIs(a.ref.ref, a,
                   "Identity not preserved in circular reference")
Пример #17
0
 def test_simpleCircle(self):
     jelly.setUnjellyableForClass(ClassA, ClassA)
     jelly.setUnjellyableForClass(ClassB, ClassB)
     a = jelly.unjelly(jelly.jelly(ClassA()))
     self.assertIdentical(a.ref.ref, a, "Identity not preserved in circular reference")
Пример #18
0
# This file may be distributed and/or modified under the terms of
# the GNU Lesser General Public License version 2.1 as published by
# the Free Software Foundation.
# This file is distributed without any warranty; without even the implied
# warranty of merchantability or fitness for a particular purpose.
# See "LICENSE.LGPL" in the source distribution for more information.
#
# Headers in this file shall remain intact.

from twisted.spread import flavors
from twisted.python.reflect import qual


class Identity(flavors.Copyable, flavors.RemoteCopy):

    def __init__(self, identifier):
        self._identifier = identifier

    def getStateToCopyFor(self, perspective):
        return {"identifier": self._identifier}

    def setCopyableState(self, state):
        self._identifier = state["identifier"]


## Private ##

from twisted.spread import jelly

jelly.setUnjellyableForClass(qual(Identity), Identity)