def test_custom_json_prop_marshall(self): """Test customizing JSON marshalling using functions""" def date_in(struct): return "%.4d-%.2d-%.2d" % ( struct.get("year", 0), struct.get("month", 0), struct.get("day", 0), ) def date_out(val): return dict( (k, int(v)) for k, v in zip( ("year", "month", "day"), val.split("-") ) if int(v) > 0 ) class PackedDate(Record): created_date = Property( check=lambda x: re.match(r'\d{4}-\d{2}-\d{2}', x), isa=str, json_in=date_in, json_name="created", json_out=date_out, ) class JsonPackedDate(PackedDate, JsonRecord): pass json_in = {"created": {"year": 2012, "month": 7, "day": 12}} pd = from_json(PackedDate, json_in) self.assertEqual(pd.created_date, "2012-07-12") self.assertJsonDataEqual(to_json(pd), json_in) jpd = JsonPackedDate.from_json(json_in) self.assertJsonDataEqual(jpd.json_data(), json_in) json_in_2 = {"created": {"year": 2012, "month": 7}} jpd = JsonPackedDate.from_json(json_in_2) self.assertEqual(jpd.created_date, "2012-07-00") self.assertJsonDataEqual(jpd.json_data(), json_in_2) # to_json should not emit keys for undefined values self.assertEqual(to_json(PackedDate()), {}) self.assertEqual(to_json(CheeseRecord()), {}) # unless they define defaults class DefaultNone(Record): none = Property(default=None) emptystring = Property(default="") false = Property(default=False) self.assertJsonDataEqual( to_json(DefaultNone()), { "none": None, "emptystring": "", "false": False, } )
def test_custom_json_prop_marshall(self): """Test customizing JSON marshalling using functions""" def date_in(struct): return "%.4d-%.2d-%.2d" % ( struct.get("year", 0), struct.get("month", 0), struct.get("day", 0), ) def date_out(val): return dict( (k, int(v)) for k, v in zip(("year", "month", "day"), val.split("-")) if int(v) > 0) class PackedDate(Record): created_date = Property( check=lambda x: re.match(r'\d{4}-\d{2}-\d{2}', x), isa=str, json_in=date_in, json_name="created", json_out=date_out, ) class JsonPackedDate(PackedDate, JsonRecord): pass json_in = {"created": {"year": 2012, "month": 7, "day": 12}} pd = from_json(PackedDate, json_in) self.assertEqual(pd.created_date, "2012-07-12") self.assertJsonDataEqual(to_json(pd), json_in) jpd = JsonPackedDate.from_json(json_in) self.assertJsonDataEqual(jpd.json_data(), json_in) json_in_2 = {"created": {"year": 2012, "month": 7}} jpd = JsonPackedDate.from_json(json_in_2) self.assertEqual(jpd.created_date, "2012-07-00") self.assertJsonDataEqual(jpd.json_data(), json_in_2) # to_json should not emit keys for undefined values self.assertEqual(to_json(PackedDate()), {}) self.assertEqual(to_json(CheeseRecord()), {}) # unless they define defaults class DefaultNone(Record): none = Property(default=None) emptystring = Property(default="") false = Property(default=False) self.assertJsonDataEqual(to_json(DefaultNone()), { "none": None, "emptystring": "", "false": False, })
def test_json_marshall(self): """Test coerce from JSON & marshall out""" json_struct = json.dumps(self.primitive) ccr = from_json(CheeseCupboardRecord, json.loads(json_struct)) self.assertDataOK(ccr) class RealWorldCCR(JsonRecord, CheeseCupboardRecord): pass ccr = RealWorldCCR.from_json(json_struct) self.assertDataOK(ccr) json_data = ccr.json_data() json_text = json.dumps(json_data) self.assertJsonDataEqual(json_data, self.primitive)
def test_json_marshall(self): """Test coerce from JSON & marshall out""" json_struct = json.dumps(self.primitive) ccr = from_json(CheeseCupboardRecord, json.loads(json_struct)) self.assertDataOK(ccr) class RealWorldCCR(JsonRecord, CheeseCupboardRecord): pass ccr = RealWorldCCR.from_json(json_struct) self.assertDataOK(ccr) json_data = ccr.json_data() json.dumps(json_data) self.assertJsonDataEqual(json_data, self.primitive)