Ejemplo n.º 1
0
    def setUp(self):
        class Poly(polymodel.PolyModel):
            s = db.StringProperty()

        self.klass = Poly
        self.p = Poly()
        self.alias = adapter_db.DataStoreClassAlias(self.klass, None)
Ejemplo n.º 2
0
    def test_property_type(self):
        class PropertyTypeModel(db.Model):
            @property
            def readonly(self):
                return True

            def _get_prop(self):
                return False

            def _set_prop(self, v):
                self.prop = v

            read_write = property(_get_prop, _set_prop)

        alias = adapter_db.DataStoreClassAlias(PropertyTypeModel, 'foo.bar')

        obj = PropertyTypeModel()

        attrs = alias.getEncodableAttributes(obj)
        self.assertEqual(attrs, {
            '_key': None,
            'read_write': False,
            'readonly': True
        })

        self.assertFalse(hasattr(obj, 'prop'))

        alias.applyAttributes(obj, {
            '_key': None,
            'readonly': False,
            'read_write': 'foo'
        })

        self.assertEqual(obj.prop, 'foo')
Ejemplo n.º 3
0
    def setUp(self):
        class FloatModel(db.Model):
            f = db.FloatProperty()

        self.klass = FloatModel
        self.f = FloatModel()
        self.alias = adapter_db.DataStoreClassAlias(self.klass, None)
Ejemplo n.º 4
0
    def setUp(self):
        BaseTestCase.setUp(self)

        self.alias = adapter_db.DataStoreClassAlias(PetModel, 'foo.bar')

        self.jessica = PetModel(name='Jessica', type='cat')
        self.jessica_expando = PetExpando(name='Jessica', type='cat')
        self.jessica_expando.foo = 'bar'
Ejemplo n.º 5
0
    def setUp(self):
        BaseTestCase.setUp(self)

        self.alias = adapter_db.DataStoreClassAlias(test_models.PetModel, 'foo.bar')

        self.jessica = test_models.PetModel(name='Jessica', type='cat')
        self.jessica_expando = test_models.PetExpando(name='Jessica', type='cat')
        self.jessica_expando.foo = 'bar'

        self.addCleanup(self.deleteEntity, self.jessica)
        self.addCleanup(self.deleteEntity, self.jessica_expando)
Ejemplo n.º 6
0
    def test_deep_inheritance(self):
        class DeepPoly(self.klass):
            d = db.IntegerProperty()

        self.alias = adapter_db.DataStoreClassAlias(DeepPoly, None)
        self.dp = DeepPoly()
        self.dp.s = 'bar'
        self.dp.d = 92

        attrs = self.alias.getEncodableAttributes(self.dp)

        self.assertEqual(attrs, {'_key': None, 's': 'bar', 'd': 92})
Ejemplo n.º 7
0
    def test_nullreference(self):
        c = test_models.Novel(title='Pride and Prejudice', author=None)
        self.put(c)

        encoder = pyamf.get_encoder(encoding=pyamf.AMF3)
        alias = adapter_db.DataStoreClassAlias(test_models.Novel, None)

        attrs = alias.getEncodableAttributes(c, codec=encoder)

        self.assertEqual(attrs, {
            '_key': str(c.key()),
            'title': 'Pride and Prejudice',
            'author': None
        })
Ejemplo n.º 8
0
    def test_cached_reference_properties(self):
        class Author(db.Model):
            name = db.StringProperty()

        class Novel(db.Model):
            title = db.StringProperty()
            author = db.ReferenceProperty(Author)

        a = Author(name='Jane Austen')
        a.put()
        k = str(a.key())

        b = Novel(title='Sense and Sensibility', author=a)
        b.put()

        c = Novel(title='Pride and Prejudice', author=a)
        c.put()

        try:
            s, p = Novel.all().order('-title').fetch(2)

            encoder = pyamf.get_encoder(pyamf.AMF3)
            context = encoder.context

            self.assertFalse(hasattr(context, 'gae_objects'))
            encoder.writeElement(s)

            self.assertTrue(hasattr(context, 'gae_objects'))
            self.assertEquals(context.gae_objects, {
                Novel: {str(s.key()): s},
                Author: {k: a}
            })

            encoder.writeElement(p)

            self.assertEquals(context.gae_objects, {
                Novel: {
                    str(s.key()): s,
                    str(p.key()): p,
                },
                Author: {k: a}
            })
        finally:
            a.delete()
            b.delete()
            c.delete()

        c = Novel(title='Pride and Prejudice', author=None)
        c.put()

        try:
            encoder = pyamf.get_encoder(encoding=pyamf.AMF3)
            alias = adapter_db.DataStoreClassAlias(Novel, None)

            sa, da = alias.getEncodableAttributes(c, codec=encoder)

            self.assertEquals(sa, {
                '_key': str(c.key()),
                'title': 'Pride and Prejudice',
                'author': None
            })
            self.assertEquals(da, None)
        finally:
            c.delete()
Ejemplo n.º 9
0
    def setUp(self):
        self.alias = adapter_db.DataStoreClassAlias(PetModel, 'foo.bar')

        self.jessica = PetModel(name='Jessica', type='cat')
Ejemplo n.º 10
0
    def test_cached_reference_properties(self):
        gets = []

        class Author(db.Model):
            name = db.StringProperty()

            @staticmethod
            def get(*args, **kwargs):
                gets.append([Author, args, kwargs])

                return db.Model.get(*args, **kwargs)

        class Novel(db.Model):
            title = db.StringProperty()
            author = db.ReferenceProperty(Author)

            @staticmethod
            def get(*args, **kwargs):
                gets.append([Novel, args, kwargs])

                return db.Model.get(*args, **kwargs)

        a = Author(name='Jane Austen')
        a.put()
        k = str(a.key())

        b = Novel(title='Sense and Sensibility', author=a)
        b.put()

        c = Novel(title='Pride and Prejudice', author=a)
        c.put()

        try:
            s, p = Novel.all().order('-title').fetch(2)

            encoder = pyamf.get_encoder(pyamf.AMF3)
            stream = encoder.stream
            context = encoder.context

            self.assertFalse(hasattr(context, 'gae_objects'))
            self.assertEquals(gets, [])

            encoder.writeElement(s)

            self.assertTrue(hasattr(context, 'gae_objects'))
            self.assertEquals(context.gae_objects, {
                Novel: {
                    str(s.key()): s
                },
                Author: {
                    str(a.key()): a
                }
            })

            self.assertEquals(gets, [[Author, (k, ), {}]])

            encoder.writeElement(p)

            self.assertEquals(
                context.gae_objects, {
                    Novel: {
                        str(s.key()): s,
                        str(p.key()): p,
                    },
                    Author: {
                        str(a.key()): a
                    }
                })

            self.assertEquals(gets, [[Author, (k, ), {}]])

        finally:
            a.delete()
            b.delete()
            c.delete()

        c = Novel(title='Pride and Prejudice', author=None)
        c.put()

        encoder = pyamf.get_encoder(encoding=pyamf.AMF3)
        alias = adapter_db.DataStoreClassAlias(Novel, None)

        self.assertEquals(alias.getAttributes(c, codec=encoder),
                          ({
                              '_key': str(c.key()),
                              'title': 'Pride and Prejudice',
                              'author': None
                          }, {}))