def serialize_model(self, instance): """ Given a model instance or dict, serialize it to a dict.. """ data = {} fields = self.get_fields(instance) # serialize each required field for fname in fields: if hasattr(self, safestr(fname)): # check first for a method 'fname' on self first meth = getattr(self, fname) if inspect.ismethod(meth) and len( inspect.getargspec(meth)[0]) == 2: obj = meth(instance) elif hasattr(instance, '__contains__') and fname in instance: # check for a key 'fname' on the instance obj = instance[fname] elif hasattr(instance, safestr(fname)): # finally check for an attribute 'fname' on the instance obj = getattr(instance, fname) else: continue key = self.serialize_key(fname) val = self.serialize_val(fname, obj) data[key] = val return data
def serialize_model(self, instance): """ Given a model instance or dict, serialize it to a dict.. """ data = {} fields = self.get_fields(instance) # serialize each required field for fname in fields: if hasattr(self, safestr(fname)): # check first for a method 'fname' on self first meth = getattr(self, fname) if inspect.ismethod(meth) and len(inspect.getargspec(meth)[0]) == 2: obj = meth(instance) elif hasattr(instance, '__contains__') and fname in instance: # check for a key 'fname' on the instance obj = instance[fname] elif hasattr(instance, safestr(fname)): # finally check for an attribute 'fname' on the instance obj = getattr(instance, fname) else: continue key = self.serialize_key(fname) val = self.serialize_val(fname, obj) data[key] = val return data
def test_safestr(self): class HasUnicode(object): def __unicode__(self): return u"unicode here" uni = u"unicode" base = "basestring" hasUni = HasUnicode() noUni = 5 uniList = [u"z", u"y"] strList = ["a", "b", "c"] numList = [1, 2, 3] self.assertEqual(type(util.safestr(uni)), str) self.assertEqual(type(util.safestr(base)), str) self.assertEqual(type(util.safestr(hasUni)), str) self.assertEqual(type(util.safestr(noUni)), str) self.assertEqual(type(util.safestr(iter(strList)).next()), str) self.assertNotEqual(type(uniList[0]), str) self.assertEqual(type(util.safestr(iter(uniList)).next()), str) self.assertNotEqual(type(numList[0]), str) self.assertEqual(type(util.safestr(iter(numList)).next()), str) self.assertEqual(list(util.safestr(iter(numList))), ["1", "2", "3"]) self.assertEqual(util.safestr(numList), "[1, 2, 3]")
def serialize_key(self, key): """ Keys serialize to their string value, unless they exist in the `rename` dict. """ return self.rename.get(safestr(key), safestr(key))