Example #1
0
 def test_different_key_mapping(self):
     p1 = to_obj(Person, {'name': 'Yin', 'age': 10, 'pid': '001'})
     o2j_map = {'pid': 'perid'}
     j2o_map = {v: k for k, v in o2j_map.items()}
     p1j = to_json(p1, **o2j_map)
     p2 = to_obj(Person, p1j, **j2o_map)
     self.assertEqual(p1, p2)
Example #2
0
 def test_different_key_mapping(self):
     p1 = to_obj(Person, {'name': 'Yin', 'age': 10, 'pid': '001'})
     o2j_map = {'pid': 'perid'}
     j2o_map = {v: k for k, v in o2j_map.items()}
     p1j = to_dict(p1, **o2j_map)
     p2 = to_obj(Person, p1j, **j2o_map)
     self.assertEqual(p1, p2)
Example #3
0
 def test_mapping(self):
     p1 = to_obj(Person, {'name': 'Yin', 'age': 10, 'pid': '001'})
     p2 = to_obj(Person, {'name': 'Yang', 'age': 5, 'pid': '002'})
     p2.job = Job("pupil", -100)
     # p2 > json
     p2json = json.loads(dumps(p2))
     update_obj(p2json, p1, 'name', 'age', 'pid')
     p1.job = to_obj(Job, p2json['job'])
     self.assertEqual(p1, p2)
     # now change p1 salary
     p1.job.sal = -200
     self.assertNotEqual(p1.job.sal, p2.job.sal)
Example #4
0
 def test_mapping(self):
     p1 = to_obj(Person, {'name': 'Yin', 'age': 10, 'pid': '001'})
     p2 = to_obj(Person, {'name': 'Yang', 'age': 5, 'pid': '002'})
     p2.job = Job("pupil", -100)
     # p2 > json
     p2json = json.loads(dumps(p2))
     update_obj(p2json, p1, 'name', 'age', 'pid')
     p1.job = to_obj(Job, p2json['job'])
     self.assertEqual(p1, p2)
     # now change p1 salary
     p1.job.sal = -200
     self.assertNotEqual(p1.job.sal, p2.job.sal)
Example #5
0
    def test_csv(self):
        print("Test CSV io")
        # test writing numbers => strings
        data = ((1, 2, 3), (4, 5, 6))
        CSV.write(TEST_CSV, data)
        indata = CSV.read(TEST_CSV)
        self.assertEqual(indata, [['1', '2', '3'], ['4', '5', '6']])

        # test writing strings with spaces
        data = [["Doraemon", "Nobita Nobi", "Shizuka Minamoto", "Dorami"],
                ["Takeshi Goda", "Suneo Honekawa", "Jaiko", "Hidetoshi Dekisugi"]]
        CSV.write_tsv(TEST_CSV, data)
        indata = CSV.read(TEST_CSV)
        self.assertEqual(data, indata)

        # writing only 1 string with space?
        data = [['Takeshi Goda']]
        CSV.write_tsv(TEST_CSV, data, quoting=None)
        indata = CSV.read(TEST_CSV)
        expected = [['Takeshi', 'Goda']]  # not quoting => CSV reader cannot guess the format
        self.assertEqual(indata, expected)
        # read file with a proper dialect
        indata = CSV.read(TEST_CSV, dialect='excel-tab')
        self.assertEqual(data, indata)

        # write file with forced quoting (default option)
        data = [['Takeshi Goda']]
        CSV.write_tsv(TEST_CSV, data)
        indata = CSV.read(TEST_CSV)
        self.assertEqual(data, indata)

        # with header
        names = ["Doraemon - D001", "Nobita Nobi N001", "Shizuka Minamoto M001", "Dorami - D002",
                 "Takeshi Goda G001", "Suneo Honekawa H001", "Jaiko - G002", "Hidetoshi Dekisugi D003"]
        persons = [Person.parse(name) for name in names]
        header = ['first', 'last']
        CSV.write(TEST_CSV, [to_json(p) for p in persons], header=header)
        inrows = CSV.read(TEST_CSV, header=True)
        getLogger().debug("Inrows: {}".format(inrows))
        expected = [{'first': 'Doraemon', 'last': '-'}, {'first': 'Nobita', 'last': 'Nobi'}, {'first': 'Shizuka', 'last': 'Minamoto'}, {'first': 'Dorami', 'last': '-'}, {'first': 'Takeshi', 'last': 'Goda'}, {'first': 'Suneo', 'last': 'Honekawa'}, {'first': 'Jaiko', 'last': '-'}, {'first': 'Hidetoshi', 'last': 'Dekisugi'}]
        self.assertEqual(inrows, expected)
        # read in as objects
        csv_rows = chio.read_csv(TEST_CSV, fieldnames=True)
        inpersons = [to_obj(Person, row) for row in csv_rows]
        expected_names = [to_obj(Person, row) for row in expected]  # without idno
        self.assertEqual(inpersons, expected_names)

        # with idno
        header = ['first', 'last', 'idno']
        CSV.write(TEST_CSV, [to_json(p) for p in persons], header=header)
        inpersons = [to_obj(Person, row) for row in CSV.read(TEST_CSV, header=True)]
        self.assertEqual(persons, inpersons)
Example #6
0
 def test_new_object(self):
     p = to_obj(Person, {'name': 'Ji', 'age': 10, 'pid': 'p001'})
     p.job = 'dev'
     pj = to_dict(p)
     p2 = to_obj(Person, pj)
     self.assertIsInstance(p2, Person)
     self.assertEqual(p, p2)
     #
     pj2 = to_dict(pj, 'name', 'age', 'pid')
     p3 = to_obj(Person, pj2)
     self.assertFalse(p3.job)
     # obj to obj
     p4 = to_obj(Person, p3.__dict__)
     self.assertEqual(p3, p4)
Example #7
0
 def test_new_object(self):
     p = to_obj(Person, {'name': 'Ji', 'age': 10, 'pid': 'p001'})
     p.job = 'dev'
     pj = to_json(p)
     p2 = to_obj(Person, pj)
     self.assertIsInstance(p2, Person)
     self.assertEqual(p, p2)
     #
     pj2 = to_json(pj, 'name', 'age', 'pid')
     p3 = to_obj(Person, pj2)
     self.assertFalse(p3.job)
     # obj to obj
     p4 = to_obj(Person, p3.__dict__)
     self.assertEqual(p3, p4)
Example #8
0
    def test_typeless_json(self):
        p = to_obj(Person, {'name': 'Chun', 'age': 15})
        p.change_job('pupil', -500)
        pjstr = json.dumps(p, cls=PersonifyJSONEncoder)
        pjson = json.loads(pjstr)
        self.assertIn('__type__', pjson)
        self.assertEqual(pjson['__type__'], '__person__')
        self.assertIn('__type__', pjson['job'])
        self.assertEqual(pjson['job']['__type__'], '__job__')

        # Test typeless json
        # helper function
        pjtl = dumps(p, indent=2)
        pjson1 = json.loads(pjtl)
        # or full method
        pjtl2 = json.dumps(p, cls=TypelessSONEncoder)
        pjson2 = json.loads(pjtl2)
        self.assertEqual(pjson1, pjson2)
Example #9
0
    def test_typeless_json(self):
        p = to_obj(Person, {'name': 'Chun', 'age': 15})
        p.change_job('pupil', -500)
        pjstr = json.dumps(p, cls=PersonifyJSONEncoder)
        pjson = json.loads(pjstr)
        self.assertIn('__type__', pjson)
        self.assertEqual(pjson['__type__'], '__person__')
        self.assertIn('__type__', pjson['job'])
        self.assertEqual(pjson['job']['__type__'], '__job__')

        # Test typeless json
        # helper function
        pjtl = dumps(p, indent=2)
        pjson1 = json.loads(pjtl)
        # or full method
        pjtl2 = json.dumps(p, cls=TypelessSONEncoder)
        pjson2 = json.loads(pjtl2)
        self.assertEqual(pjson1, pjson2)
Example #10
0
 def test_json_encoder(self):
     p = to_obj(Person, {'name': 'Ji', 'age': 10})
     # Person > typed-json
     js = json.dumps(p, cls=PersonifyJSONEncoder)
     # typed-json > Person
     np = json.loads(js, cls=PersonifyJSONDecoder)
     self.assertIsInstance(np, Person)
     npjson = json.dumps(np, cls=PersonifyJSONEncoder)
     self.assertEqual(npjson, js)
     #
     # changing info
     p.change_job('dev', 5000)
     js2 = json.dumps(p, cls=PersonifyJSONEncoder)
     # change salary in JSON
     js2_json = json.loads(js2)
     js2_json['job']['sal'] = 10000
     # convert js2_json to object
     np2 = json.loads(json.dumps(js2_json), cls=PersonifyJSONDecoder)
     self.assertEqual(np2.job.sal, 10000)
Example #11
0
 def test_json_encoder(self):
     p = to_obj(Person, {'name': 'Ji', 'age': 10})
     # Person > typed-json
     js = json.dumps(p, cls=PersonifyJSONEncoder)
     # typed-json > Person
     np = json.loads(js, cls=PersonifyJSONDecoder)
     self.assertIsInstance(np, Person)
     npjson = json.dumps(np, cls=PersonifyJSONEncoder)
     self.assertEqual(npjson, js)
     #
     # changing info
     p.change_job('dev', 5000)
     js2 = json.dumps(p, cls=PersonifyJSONEncoder)
     # change salary in JSON
     js2_json = json.loads(js2)
     js2_json['job']['sal'] = 10000
     # convert js2_json to object
     np2 = json.loads(json.dumps(js2_json), cls=PersonifyJSONDecoder)
     self.assertEqual(np2.job.sal, 10000)
Example #12
0
 def from_string(patch_string):
     lines = [l.split("\t") for l in patch_string.splitlines()]
     patch_dict = {k: v for k, v in lines}
     return to_obj(DefPatch, patch_dict, **DefPatch.JOHN_MCCRAE_FIELD_MAP)
Example #13
0
    def test_csv(self):
        print("Test CSV io")
        # test writing numbers => strings
        data = ((1, 2, 3), (4, 5, 6))
        chio.write_csv(TEST_CSV, data)
        indata = chio.read_csv(TEST_CSV)
        self.assertEqual(indata, [['1', '2', '3'], ['4', '5', '6']])

        # test writing strings with spaces
        data = [["Doraemon", "Nobita Nobi", "Shizuka Minamoto", "Dorami"],
                [
                    "Takeshi Goda", "Suneo Honekawa", "Jaiko",
                    "Hidetoshi Dekisugi"
                ]]
        chio.write_tsv(TEST_CSV, data)
        indata = chio.read_csv(TEST_CSV)
        self.assertEqual(data, indata)

        # writing only 1 string with space?
        data = [['Takeshi Goda']]
        chio.write_tsv(TEST_CSV, data, quoting=None)
        indata = chio.read_csv(TEST_CSV)
        expected = [['Takeshi', 'Goda']
                    ]  # not quoting => CSV reader cannot guess the format
        self.assertEqual(indata, expected)
        # read file with a proper dialect
        indata = chio.read_csv(TEST_CSV, dialect='excel-tab')
        self.assertEqual(data, indata)

        # write file with forced quoting (default option)
        data = [['Takeshi Goda']]
        chio.write_tsv(TEST_CSV, data)
        indata = chio.read_csv(TEST_CSV)
        self.assertEqual(data, indata)

        # with header
        names = [
            "Doraemon - D001", "Nobita Nobi N001", "Shizuka Minamoto M001",
            "Dorami - D002", "Takeshi Goda G001", "Suneo Honekawa H001",
            "Jaiko - G002", "Hidetoshi Dekisugi D003"
        ]
        persons = [Person.parse(name) for name in names]
        header = ['first', 'last']
        chio.write_csv(TEST_CSV, [to_dict(p) for p in persons],
                       fieldnames=header)
        inrows = chio.read_csv(TEST_CSV, fieldnames=True)
        getLogger().debug("Inrows: {}".format(inrows))
        expected = [{
            'first': 'Doraemon',
            'last': '-'
        }, {
            'first': 'Nobita',
            'last': 'Nobi'
        }, {
            'first': 'Shizuka',
            'last': 'Minamoto'
        }, {
            'first': 'Dorami',
            'last': '-'
        }, {
            'first': 'Takeshi',
            'last': 'Goda'
        }, {
            'first': 'Suneo',
            'last': 'Honekawa'
        }, {
            'first': 'Jaiko',
            'last': '-'
        }, {
            'first': 'Hidetoshi',
            'last': 'Dekisugi'
        }]
        self.assertEqual(inrows, expected)
        # read in as objects
        csv_rows = chio.read_csv(TEST_CSV, fieldnames=True)
        inpersons = [to_obj(Person, row) for row in csv_rows]
        expected_names = [to_obj(Person, row)
                          for row in expected]  # without idno
        self.assertEqual(inpersons, expected_names)

        # with idno
        header = ['first', 'last', 'idno']
        chio.write_csv(TEST_CSV, [to_dict(p) for p in persons],
                       fieldnames=header)
        inpersons = [
            to_obj(Person, row)
            for row in chio.read_csv(TEST_CSV, fieldnames=True)
        ]
        self.assertEqual(persons, inpersons)