Example #1
0
    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,
            }
        )
Example #2
0
    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,
        })
Example #3
0
    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)
Example #4
0
    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)