Ticket #307: facorreia-ticket-307-with-test.patch
| File facorreia-ticket-307-with-test.patch, 4.7 KB (added by facorreia, 6 months ago) |
|---|
-
pyamf/adapters/_google_appengine_ext_db.py
26 26 remove = True 27 27 self.context.class_aliases[obj.__class__] = pyamf.ClassAlias(obj.__class__, None) 28 28 29 self.writeObject(obj, *args, **kwargs)29 writeObjectAMF(self, obj, args, kwargs, remove) 30 30 31 if remove:32 self.context.class_aliases[obj.__class__] = None33 34 31 def writeObjectAMF3(self, obj, *args, **kwargs): 35 32 try: 36 33 self.context.getClassDefinitionReference(obj) … … 44 41 alias = pyamf.ClassAlias(obj.__class__, None) 45 42 self.context.class_aliases[obj.__class__] = alias 46 43 44 writeObjectAMF(self, obj, args, kwargs, remove) 45 46 def writeObjectAMF(self, obj, args, kwargs, remove): 47 """ 48 Writes an object that has already been prepared by writeObjectAMF0 or writeObjectAMF3. 49 """ 50 try: 51 obj._key = str(obj.key()) 52 except: 53 obj._key = None 47 54 self.writeObject(obj, *args, **kwargs) 48 55 del obj._key 49 56 if remove: 50 57 self.context.class_aliases[obj.__class__] = None 51 58 … … 53 60 """ 54 61 Returns a list of properties on an C{db.Model} instance. 55 62 """ 56 return list(obj.__class__._properties) 63 return list(obj.__class__._properties) + ['_key'] 57 64 58 65 def get_attrs_for_expando(obj): 59 66 """ 60 67 Returns a list of dynamic properties on a C{db.Expando} instance. 61 68 """ 62 return obj.dynamic_properties() 69 return obj.dynamic_properties() + ['_key'] 63 70 64 71 pyamf.register_class(db.Model, attr_func=get_attrs_for_model, metadata=['dynamic']) 65 72 pyamf.register_class(db.Expando, attr_func=get_attrs_for_expando, metadata=['dynamic']) -
pyamf/tests/adapters/test_google.py
32 32 33 33 encoder.writeElement(jessica) 34 34 self.assertEquals(encoder.stream.getvalue(), 35 '\x03\x00\x 10weight_in_pounds\x00@\x14\x00\x00\x00\x00\x00\x00'36 '\ x00\x04type\x02\x00\x03cat\x00\x04name\x02\x00\x07Jessica\x00'37 ' \tbirthdate\x0bB^\xc4\xae\xaa\x00\x00\x00\x00\x00\x00\x12'38 ' spayed_or_neutered\x01\x00\x00\x00\t')35 '\x03\x00\x04name\x02\x00\x07Jessica\x00\x04_key\x05\x00' 36 '\tbirthdate\x0bB^\xc4\xae\xaa\x00\x00\x00\x00\x00\x00\x10' 37 'weight_in_pounds\x00@\x14\x00\x00\x00\x00\x00\x00\x00\x04' 38 'type\x02\x00\x03cat\x00\x12spayed_or_neutered\x01\x00\x00\x00\t') 39 39 40 40 encoder = pyamf.get_encoder(pyamf.AMF3) 41 41 encoder.writeElement(jessica) 42 42 self.assertEquals(encoder.stream.getvalue(), 43 '\n\x0b\x01 !weight_in_pounds\x04\x05\ttype\x06\x07cat\tname\x06'44 '\x0 fJessica\x13birthdate\x08\x01B^\xc4\xae\xaa\x00\x00\x00%'45 ' spayed_or_neutered\x02\x01')43 '\n\x0b\x01\tname\x06\x0fJessica\t_key\x01\x13birthdate' 44 '\x08\x01B^\xc4\xae\xaa\x00\x00\x00!weight_in_pounds' 45 '\x04\x05\ttype\x06\x07cat%spayed_or_neutered\x02\x01') 46 46 47 47 def test_expando(self): 48 48 # 'borrowed' from http://code.google.com/appengine/docs/datastore/entitiesandmodels.html … … 63 63 64 64 encoder.writeElement(jessica) 65 65 self.assertEquals(encoder.stream.getvalue(), 66 '\x03\x00\x04name\x02\x00\x07Jessica\x00\tbirthdate\x0bB^\xc4\xae' 67 '\xaa\x00\x00\x00\x00\x00\x00\x10weight_in_pounds\x00@\x14\x00' 68 '\x00\x00\x00\x00\x00\x00\x03foo\x02\x00\x03bar\x00\x04type\x02' 69 '\x00\x03cat\x00\x12spayed_or_neutered\x01\x00\x00\x00\t') 66 '\x03\x00\x04name\x02\x00\x07Jessica\x00\x04_key\x05\x00' 67 '\tbirthdate\x0bB^\xc4\xae\xaa\x00\x00\x00\x00\x00\x00\x10' 68 'weight_in_pounds\x00@\x14\x00\x00\x00\x00\x00\x00\x00\x03' 69 'foo\x02\x00\x03bar\x00\x04type\x02\x00\x03cat\x00\x12' 70 'spayed_or_neutered\x01\x00\x00\x00\t') 70 71 71 72 encoder = pyamf.get_encoder(pyamf.AMF3) 72 73 encoder.writeElement(jessica) 73 74 self.assertEquals(encoder.stream.getvalue(), 74 '\n\x0b\x01\tname\x06\x0fJessica\x13birthdate\x08\x01B^\xc4\xae' 75 '\xaa\x00\x00\x00!weight_in_pounds\x04\x05\x07foo\x06\x07bar\t' 76 'type\x06\x07cat%spayed_or_neutered\x02\x01') 75 '\n\x0b\x01\tname\x06\x0fJessica\t_key\x01\x13birthdate' 76 '\x08\x01B^\xc4\xae\xaa\x00\x00\x00!weight_in_pounds' 77 '\x04\x05\x07foo\x06\x07bar\ttype\x06\x07' 78 'cat%spayed_or_neutered\x02\x01') 77 79 78 80 79 81 def suite():
