def test_to_csv_file(self):
     d = IODict({
         'values': [
             {
                 'id': '1',
                 'name': 'Alice',
                 'age': '20',
                 'height': '62',
                 'weight': '120.6',
             },
             {
                 'id': '2',
                 'name': 'Freddie',
                 'age': '21',
                 'height': '74',
                 'weight': '190.6',
             },
             {
                 'id': '3',
                 'name': 'Bob',
                 'age': '17',
                 'height': '68',
                 'weight': '120.0',
             },
             {
                 'id': '4',
                 'name': 'François',
                 'age': '32',
                 'height': '75',
                 'weight': '110.05',
             },
         ],
     })
     filepath = self.output_path('test_to_csv_file.csv')
     d.to_csv(filepath=filepath)
     self.assertFileExists(filepath)
     self.assertEqual(d, IODict.from_csv(filepath))
    def test_to_csv_with_custom_columns(self):
        d = IODict({
            'values': [
                {
                    'id': '1',
                    'name': 'Alice',
                    'age': '20',
                    'height': '62',
                    'weight': '120.6',
                },
                {
                    'id': '2',
                    'name': 'Freddie',
                    'age': '21',
                    'height': '74',
                    'weight': '190.6',
                },
                {
                    'id': '3',
                    'name': 'Bob',
                    'age': '17',
                    'height': '68',
                    'weight': '120.0',
                },
                {
                    'id': '4',
                    'name': 'François',
                    'age': '32',
                    'height': '75',
                    'weight': '110.05',
                },
            ],
        })
        s = d.to_csv(key='values',
                     columns=[
                         'id', 'name', 'family_name', 'age', 'height',
                         'gender', 'weight'
                     ])
        r = """id,name,family_name,age,height,gender,weight
1,Alice,,20,62,,120.6
2,Freddie,,21,74,,190.6
3,Bob,,17,68,,120.0
4,François,,32,75,,110.05
"""
        self.assertEqual(s, r)
    def test_to_csv_with_custom_delimiter_and_quotes(self):
        d = IODict({
            'values': [
                {
                    'id': '1',
                    'name': 'Alice',
                    'age': '20',
                    'height': '62',
                    'weight': '120.6',
                },
                {
                    'id': '2',
                    'name': 'Freddie',
                    'age': '21',
                    'height': '74',
                    'weight': '190.6',
                },
                {
                    'id': '3',
                    'name': 'Bob',
                    'age': '17',
                    'height': '68',
                    'weight': '120.0',
                },
                {
                    'id': '4',
                    'name': 'François',
                    'age': '32',
                    'height': '75',
                    'weight': '110.05',
                },
            ],
        })
        s = d.to_csv(columns=['id', 'name', 'age', 'height', 'weight'],
                     delimiter=";",
                     quote=True)
        r = """"id";"name";"age";"height";"weight"
"1";"Alice";"20";"62";"120.6"
"2";"Freddie";"21";"74";"190.6"
"3";"Bob";"17";"68";"120.0"
"4";"François";"32";"75";"110.05"
"""
        self.assertEqual(s, r)
    def test_to_csv_with_custom_key_valid(self):
        d = IODict({
            'results': [
                {
                    'id': '1',
                    'name': 'Alice',
                    'age': '20',
                    'height': '62',
                    'weight': '120.6',
                },
                {
                    'id': '2',
                    'name': 'Freddie',
                    'age': '21',
                    'height': '74',
                    'weight': '190.6',
                },
                {
                    'id': '3',
                    'name': 'Bob',
                    'age': '17',
                    'height': '68',
                    'weight': '120.0',
                },
                {
                    'id': '4',
                    'name': 'François',
                    'age': '32',
                    'height': '75',
                    'weight': '110.05',
                },
            ],
        })
        s = d.to_csv('results',
                     columns=['id', 'name', 'age', 'height', 'weight'])
        r = """id,name,age,height,weight
1,Alice,20,62,120.6
2,Freddie,21,74,190.6
3,Bob,17,68,120.0
4,François,32,75,110.05
"""
        self.assertEqual(s, r)
    def test_to_csv(self):
        d = IODict({
            'values': [
                {
                    'id': '1',
                    'name': 'Alice',
                    'age': '20',
                    'height': '62',
                    'weight': '120.6',
                },
                {
                    'id': '2',
                    'name': 'Freddie',
                    'age': '21',
                    'height': '74',
                    'weight': '190.6',
                },
                {
                    'id': '3',
                    'name': 'Bob',
                    'age': '17',
                    'height': '68',
                    'weight': '120.0',
                },
                {
                    'id': '4',
                    'name': 'François',
                    'age': '32',
                    'height': '75',
                    'weight': '110.05',
                },
            ],
        })
        s = d.to_csv()
        r = """age,height,id,name,weight
20,62,1,Alice,120.6
21,74,2,Freddie,190.6
17,68,3,Bob,120.0
32,75,4,François,110.05
"""
        self.assertEqual(s, r)
 def test_to_csv_with_custom_key_invalid(self):
     d = IODict({
         'values': [
             {
                 'id': '1',
                 'name': 'Alice',
                 'age': '20',
                 'height': '62',
                 'weight': '120.6',
             },
             {
                 'id': '2',
                 'name': 'Freddie',
                 'age': '21',
                 'height': '74',
                 'weight': '190.6',
             },
             {
                 'id': '3',
                 'name': 'Bob',
                 'age': '17',
                 'height': '68',
                 'weight': '120.0',
             },
             {
                 'id': '4',
                 'name': 'François',
                 'age': '32',
                 'height': '75',
                 'weight': '110.05',
             },
         ],
     })
     with self.assertRaises(KeyError):
         s = d.to_csv('invalid_values',
                      columns=['id', 'name', 'age', 'height', 'weight'])