def setUp(self): class Poly(polymodel.PolyModel): s = db.StringProperty() self.klass = Poly self.p = Poly() self.alias = adapter_db.DataStoreClassAlias(self.klass, None)
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')
def setUp(self): class FloatModel(db.Model): f = db.FloatProperty() self.klass = FloatModel self.f = FloatModel() self.alias = adapter_db.DataStoreClassAlias(self.klass, None)
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'
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)
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})
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 })
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()
def setUp(self): self.alias = adapter_db.DataStoreClassAlias(PetModel, 'foo.bar') self.jessica = PetModel(name='Jessica', type='cat')
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 }, {}))