def test_paginated_table(self, export_save):
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            tables=[
                TableConfiguration(label="My table",
                                   selected=True,
                                   columns=[
                                       ExportColumn(label="Q3",
                                                    item=ScalarItem(path=[
                                                        PathNode(name='form'),
                                                        PathNode(name='q3')
                                                    ], ),
                                                    selected=True),
                                       ExportColumn(label="Q1",
                                                    item=ScalarItem(path=[
                                                        PathNode(name='form'),
                                                        PathNode(name='q1')
                                                    ], ),
                                                    selected=True),
                                   ])
            ])

        assert_instance_gives_results(
            self.docs + self.docs, export_instance, {
                'My table_000': {
                    'headers': ['Q3', 'Q1'],
                    'rows': [['baz', 'foo'], ['bop', 'bip']],
                },
                'My table_001': {
                    'headers': ['Q3', 'Q1'],
                    'rows': [['baz', 'foo'], ['bop', 'bip']],
                }
            })
        self.assertTrue(export_save.called)
Beispiel #2
0
    def setUpClass(cls):
        super(TestCaseExportInstanceGeneration, cls).setUpClass()
        cls.app_id = '1234'
        cls.schema = CaseExportDataSchema(group_schemas=[
            ExportGroupSchema(
                path=MAIN_TABLE,
                items=[
                    ScalarItem(
                        path=[PathNode(name='p1')],
                        label='p1',
                        last_occurrences={},
                    ),
                ],
                last_occurrences={cls.app_id: 3},
            ),
        ], )

        cls.new_schema = CaseExportDataSchema(group_schemas=[
            ExportGroupSchema(
                path=MAIN_TABLE,
                items=[
                    ScalarItem(
                        path=[PathNode(name='p1')],
                        label='p1',
                        last_occurrences={},
                    ),
                    ScalarItem(
                        path=[PathNode(name='name')],
                        label='name',
                        last_occurrences={cls.app_id: 3},
                    ),
                ],
                last_occurrences={cls.app_id: 3},
            ),
        ], )
Beispiel #3
0
 def test_simple(self):
     table_configuration = TableConfiguration(
         path=[],
         columns=[
             ExportColumn(
                 item=ScalarItem(
                     path=[PathNode(name='form'),
                           PathNode(name='q3')], ),
                 selected=True,
             ),
             ExportColumn(
                 item=ScalarItem(
                     path=[PathNode(name='form'),
                           PathNode(name='q1')], ),
                 selected=True,
             ),
             ExportColumn(
                 item=ScalarItem(
                     path=[PathNode(name='form'),
                           PathNode(name='q2')], ),
                 selected=False,
             ),
         ])
     submission = {
         'domain': 'my-domain',
         '_id': '1234',
         "form": {
             "q1": "foo",
             "q2": "bar",
             "q3": "baz"
         }
     }
     self.assertEqual(
         [row.data for row in table_configuration.get_rows(submission, 0)],
         [['baz', 'foo']])
    def test_simple_table(self, export_save):
        """
        Confirm that some simple documents and a simple FormExportInstance
        are writtern with _write_export_file() correctly
        """

        export_instance = FormExportInstance(
            export_format=Format.JSON,
            tables=[
                TableConfiguration(label="My table",
                                   selected=True,
                                   columns=[
                                       ExportColumn(label="Q3",
                                                    item=ScalarItem(path=[
                                                        PathNode(name='form'),
                                                        PathNode(name='q3')
                                                    ], ),
                                                    selected=True),
                                       ExportColumn(label="Q1",
                                                    item=ScalarItem(path=[
                                                        PathNode(name='form'),
                                                        PathNode(name='q1')
                                                    ], ),
                                                    selected=True),
                                   ])
            ])

        assert_instance_gives_results(
            self.docs, export_instance, {
                'My table': {
                    'headers': ['Q3', 'Q1'],
                    'rows': [['baz', 'foo'], ['bop', 'bip']],
                }
            })
        self.assertTrue(export_save.called)
Beispiel #5
0
    def test_get_column(self):
        table_configuration = TableConfiguration(
            path=[
                PathNode(name='form', is_repeat=False),
                PathNode(name="repeat1", is_repeat=True)
            ],
            columns=[
                ExportColumn(item=ScalarItem(path=[
                    PathNode(name='form'),
                    PathNode(name='repeat1', is_repeat=True),
                    PathNode(name='q1')
                ], )),
                ExportColumn(item=ScalarItem(path=[
                    PathNode(name="form"),
                    PathNode(name="user_id"),
                ],
                                             transform=USERNAME_TRANSFORM)),
                ExportColumn(item=ScalarItem(path=[
                    PathNode(name='form'),
                    PathNode(name='repeat1', is_repeat=True),
                    PathNode(name='q2')
                ], )),
            ])

        index, column = table_configuration.get_column(
            [
                PathNode(name='form'),
                PathNode(name='repeat1', is_repeat=True),
                PathNode(name='q1')
            ],
            'ScalarItem',
            None,
        )
        self.assertEqual(column.item.path, [
            PathNode(name='form'),
            PathNode(name='repeat1', is_repeat=True),
            PathNode(name='q1')
        ])
        self.assertEqual(index, 0)

        index, column = table_configuration.get_column(
            [
                PathNode(name='form'),
                PathNode(name='repeat1', is_repeat=True),
                PathNode(name='DoesNotExist')
            ],
            'ScalarItem',
            None,
        )
        self.assertIsNone(column)

        # Verify that get_column ignores deid transforms
        index, column = table_configuration.get_column(
            [PathNode(name="form"),
             PathNode(name="user_id")], 'ScalarItem', USERNAME_TRANSFORM)
        self.assertIsNotNone(column)
        self.assertEqual(index, 1)
    def test_different_doc_types_ordering(self):
        schema = self._create_schema([
            GeopointItem(path=[PathNode(name='one')]),
            ScalarItem(path=[PathNode(name='two')]),
            ScalarItem(path=[PathNode(name='three')]),
            ScalarItem(path=[PathNode(name='one')]),
        ])

        ordered_schema = self._create_schema([
            ScalarItem(path=[PathNode(name='two')]),
            ScalarItem(path=[PathNode(name='one')]),
            ScalarItem(path=[PathNode(name='three')]),
            GeopointItem(path=[PathNode(name='one')]),
        ])

        schema = CaseExportDataSchema._reorder_schema_from_schema(
            schema,
            ordered_schema,
        )
        self._assert_item_order(
            schema,
            [],
            [
                ScalarItem(path=[PathNode(name='two')]),
                ScalarItem(path=[PathNode(name='one')]),
                ScalarItem(path=[PathNode(name='three')]),
                GeopointItem(path=[PathNode(name='one')]),
            ],
        )
Beispiel #7
0
    def test_multi_table(self):
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            tables=[
                TableConfiguration(
                    label="My table",
                    selected=True,
                    path=[],
                    columns=[
                        ExportColumn(
                            label="Q3",
                            item=ScalarItem(
                                path=[PathNode(name='form'), PathNode(name='q3')],
                            ),
                            selected=True,
                        ),
                    ]
                ),
                TableConfiguration(
                    label="My other table",
                    selected=True,
                    path=[PathNode(name='form', is_repeat=False), PathNode(name="q2", is_repeat=False)],
                    columns=[
                        ExportColumn(
                            label="Q4",
                            item=ScalarItem(
                                path=[PathNode(name='form'), PathNode(name='q2'), PathNode(name='q4')],
                            ),
                            selected=True,
                        ),
                    ]
                )
            ]
        )
        writer = _get_writer([export_instance])
        with writer.open([export_instance]):
            _write_export_instance(writer, export_instance, self.docs)
        with ExportFile(writer.path, writer.format) as export:
            self.assertEqual(
                json.loads(export.read()),
                {
                    u'My table': {
                        u'headers': [u'Q3'],
                        u'rows': [[u'baz'], [u'bop']],

                    },
                    u'My other table': {
                        u'headers': [u'Q4'],
                        u'rows': [[u'bar'], [u'boop']],
                    }
                }
            )
    def test_multi_table(self, export_save):
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            tables=[
                TableConfiguration(label="My table",
                                   selected=True,
                                   path=[],
                                   columns=[
                                       ExportColumn(
                                           label="Q3",
                                           item=ScalarItem(path=[
                                               PathNode(name='form'),
                                               PathNode(name='q3')
                                           ], ),
                                           selected=True,
                                       ),
                                   ]),
                TableConfiguration(label="My other table",
                                   selected=True,
                                   path=[
                                       PathNode(name='form', is_repeat=False),
                                       PathNode(name="q2", is_repeat=False)
                                   ],
                                   columns=[
                                       ExportColumn(
                                           label="Q4",
                                           item=ScalarItem(path=[
                                               PathNode(name='form'),
                                               PathNode(name='q2'),
                                               PathNode(name='q4')
                                           ], ),
                                           selected=True,
                                       ),
                                   ])
            ])

        assert_instance_gives_results(
            self.docs, export_instance, {
                'My table': {
                    'headers': ['Q3'],
                    'rows': [['baz'], ['bop']],
                },
                'My other table': {
                    'headers': ['Q4'],
                    'rows': [['bar'], ['boop']],
                }
            })
        self.assertTrue(export_save.called)
 def test_repeat(self):
     table_configuration = TableConfiguration(
         path=[PathNode(name="form", is_repeat=False), PathNode(name="repeat1", is_repeat=True)],
         columns=[
             ExportColumn(
                 item=ScalarItem(
                     path=[
                         PathNode(name="form"),
                         PathNode(name="repeat1", is_repeat=True),
                         PathNode(name="q1")
                     ],
                 ),
                 selected=True,
             ),
         ]
     )
     submission = {
         'domain': 'my-domain',
         '_id': '1234',
         'form': {
             'repeat1': [
                 {'q1': 'foo'},
                 {'q1': 'bar'}
             ]
         }
     }
     self.assertEqual(
         [row.data for row in table_configuration.get_rows(submission, 0)],
         [ExportRow(['foo']).data, ExportRow(['bar']).data]
     )
    def test_multi_table_order(self):
        tables = [
            TableConfiguration(label="My table {}".format(i),
                               selected=True,
                               path=[],
                               columns=[
                                   ExportColumn(
                                       label="Q{}".format(i),
                                       item=ScalarItem(path=[
                                           PathNode(name='form'),
                                           PathNode(name='q{}'.format(i))
                                       ], ),
                                       selected=True,
                                   ),
                               ]) for i in range(10)
        ]
        export_instance = FormExportInstance(export_format=Format.HTML,
                                             tables=tables)
        writer = _get_writer([export_instance])
        docs = [{
            'domain': 'my-domain',
            '_id': '1234',
            "form": {'q{}'.format(i): 'value {}'.format(i)
                     for i in range(10)}
        }]
        with writer.open([export_instance]):
            _write_export_instance(writer, export_instance, docs)
        with ExportFile(writer.path, writer.format) as export:
            exported_tables = [
                table for table in re.findall('<h2>(.*)</h2>', export.read())
            ]

        expected_tables = [t.label for t in tables]
        self.assertEqual(expected_tables, exported_tables)
 def test_empty_group(self):
     table_configuration = TableConfiguration(
         path=[
             PathNode(name="form", is_repeat=False),
             PathNode(name="group", is_repeat=False),
             PathNode(name="repeat1", is_repeat=True)
         ],
         columns=[
             ExportColumn(
                 item=ScalarItem(
                     path=[
                         PathNode(name="form"),
                         PathNode(name="group"),
                         PathNode(name="repeat1", is_repeat=True),
                         PathNode(name="q1")
                     ],
                 ),
                 selected=True,
             ),
         ]
     )
     submission = {
         'domain': 'my-domain',
         '_id': '1234',
         'form': {
             'group': ''
         }
     }
     self.assertEqual(
         [row.data for row in table_configuration.get_rows(submission, 0)], []
     )
    def test_empty_table_label(self, export_save):
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            domain=DOMAIN,
            case_type=DEFAULT_CASE_TYPE,
            split_multiselects=True,
            tables=[
                TableConfiguration(label="",
                                   selected=True,
                                   path=[],
                                   columns=[
                                       ExportColumn(label="Q1",
                                                    item=ScalarItem(path=[
                                                        PathNode(name='form'),
                                                        PathNode(name='q1')
                                                    ], ),
                                                    selected=True),
                                   ])
            ])

        assert_instance_gives_results(
            self.docs, export_instance,
            {'Sheet1': {
                'headers': ['Q1'],
                'rows': [['foo'], ['bip']],
            }})
        self.assertTrue(export_save.called)
    def test_empty_table_label(self):
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            domain=DOMAIN,
            case_type=DEFAULT_CASE_TYPE,
            split_multiselects=True,
            tables=[
                TableConfiguration(label="",
                                   selected=True,
                                   path=[],
                                   columns=[
                                       ExportColumn(label="Q1",
                                                    item=ScalarItem(path=[
                                                        PathNode(name='form'),
                                                        PathNode(name='q1')
                                                    ], ),
                                                    selected=True),
                                   ])
            ])
        writer = _get_writer([export_instance])
        with writer.open([export_instance]):
            _write_export_instance(writer, export_instance, self.docs)

        with ExportFile(writer.path, writer.format) as export:
            self.assertEqual(json.loads(export.read()), {
                u'Sheet1': {
                    u'headers': [u'Q1'],
                    u'rows': [[u'foo'], [u'bip']],
                }
            })
Beispiel #14
0
    def test_simple_table(self):
        """
        Confirm that some simple documents and a simple FormExportInstance
        are writtern with _write_export_file() correctly
        """

        export_instance = FormExportInstance(
            export_format=Format.JSON,
            tables=[
                TableConfiguration(
                    label="My table",
                    selected=True,
                    columns=[
                        ExportColumn(
                            label="Q3",
                            item=ScalarItem(
                                path=[PathNode(name='form'), PathNode(name='q3')],
                            ),
                            selected=True
                        ),
                        ExportColumn(
                            label="Q1",
                            item=ScalarItem(
                                path=[PathNode(name='form'), PathNode(name='q1')],
                            ),
                            selected=True
                        ),
                    ]
                )
            ]
        )

        writer = _get_writer([export_instance])
        with writer.open([export_instance]):
            _write_export_instance(writer, export_instance, self.docs)

        with ExportFile(writer.path, writer.format) as export:
            self.assertEqual(
                json.loads(export.read()),
                {
                    u'My table': {
                        u'headers': [u'Q3', u'Q1'],
                        u'rows': [[u'baz', u'foo'], [u'bop', u'bip']],

                    }
                }
            )
 def test_double_repeat(self):
     table_configuration = TableConfiguration(
         path=[
             PathNode(name="form", is_repeat=False),
             PathNode(name="repeat1", is_repeat=True),
             PathNode(name="group1", is_repeat=False),
             PathNode(name="repeat2", is_repeat=True),
         ],
         columns=[
             RowNumberColumn(
                 selected=True
             ),
             ExportColumn(
                 item=ScalarItem(
                     path=[
                         PathNode(name='form'),
                         PathNode(name='repeat1', is_repeat=True),
                         PathNode(name='group1'),
                         PathNode(name='repeat2', is_repeat=True),
                         PathNode(name='q1')
                     ],
                 ),
                 selected=True,
             ),
         ]
     )
     submission = {
         'domain': 'my-domain',
         '_id': '1234',
         'form': {
             'repeat1': [
                 {
                     'group1': {
                         'repeat2': [
                             {'q1': 'foo'},
                             {'q1': 'bar'}
                         ]
                     }
                 },
                 {
                     'group1': {
                         'repeat2': [
                             {'q1': 'beep'},
                             {'q1': 'boop'}
                         ]
                     }
                 },
             ]
         }
     }
     self.assertEqual(
         [row.data for row in table_configuration.get_rows(submission, 0)],
         [
             ["0.0.0", 0, 0, 0, 'foo'],
             ["0.0.1", 0, 0, 1, 'bar'],
             ["0.1.0", 0, 1, 0, 'beep'],
             ["0.1.1", 0, 1, 1, 'boop']
         ]
     )
Beispiel #16
0
 def test_get_export_properties(self):
     export_instance = FormExportInstance(tables=[
         TableConfiguration(label="My table",
                            selected=True,
                            path=[],
                            columns=[
                                ExportColumn(
                                    label="Q3",
                                    item=ScalarItem(path=[
                                        PathNode(name='form'),
                                        PathNode(name='q3')
                                    ], ),
                                    selected=True,
                                ),
                                ExportColumn(
                                    label="dontshow",
                                    item=ScalarItem(path=[
                                        PathNode(name='form'),
                                        PathNode(name='dontshow')
                                    ], ),
                                    selected=False,
                                ),
                            ]),
         TableConfiguration(label="My other table",
                            selected=True,
                            path=[
                                PathNode(name='form', is_repeat=False),
                                PathNode(name="q2", is_repeat=False)
                            ],
                            columns=[
                                ExportColumn(
                                    label="Q4",
                                    item=ScalarItem(path=[
                                        PathNode(name='form'),
                                        PathNode(name='q2'),
                                        PathNode(name='q4')
                                    ], ),
                                    selected=True,
                                ),
                            ])
     ])
     with mock.patch('corehq.apps.export.models.new.FormExportInstance.get',
                     return_value=export_instance):
         props = _get_export_properties("fake id for my export instance",
                                        False)
         self.assertEqual(props, set(['q2-q4', 'q3']))
    def test_paginated_table(self):
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            tables=[
                TableConfiguration(
                    label="My table",
                    selected=True,
                    columns=[
                        ExportColumn(
                            label="Q3",
                            item=ScalarItem(
                                path=[PathNode(name='form'), PathNode(name='q3')],
                            ),
                            selected=True
                        ),
                        ExportColumn(
                            label="Q1",
                            item=ScalarItem(
                                path=[PathNode(name='form'), PathNode(name='q1')],
                            ),
                            selected=True
                        ),
                    ]
                )
            ]
        )
        writer = get_export_writer([export_instance])
        with writer.open([export_instance]):
            write_export_instance(writer, export_instance, self.docs + self.docs)

        with ExportFile(writer.path, writer.format) as export:
            self.assertEqual(
                json.loads(export.read()),
                {
                    'My table_000': {
                        'headers': ['Q3', 'Q1'],
                        'rows': [['baz', 'foo'], ['bop', 'bip']],
                    },
                    'My table_001': {
                        'headers': ['Q3', 'Q1'],
                        'rows': [['baz', 'foo'], ['bop', 'bip']],
                    }
                }
            )
Beispiel #18
0
 def test_get_export_properties(self):
     export_instance = FormExportInstance(tables=[
         TableConfiguration(label="My table",
                            selected=True,
                            path=[],
                            columns=[
                                ExportColumn(
                                    label="Q3",
                                    item=ScalarItem(path=[
                                        PathNode(name='form'),
                                        PathNode(name='q3')
                                    ], ),
                                    selected=True,
                                ),
                                ExportColumn(
                                    label="dontshow",
                                    item=ScalarItem(path=[
                                        PathNode(name='form'),
                                        PathNode(name='dontshow')
                                    ], ),
                                    selected=False,
                                ),
                            ]),
         TableConfiguration(label="My other table",
                            selected=True,
                            path=[
                                PathNode(name='form', is_repeat=False),
                                PathNode(name="q2", is_repeat=False)
                            ],
                            columns=[
                                ExportColumn(
                                    label="Q4",
                                    item=ScalarItem(path=[
                                        PathNode(name='form'),
                                        PathNode(name='q2'),
                                        PathNode(name='q4')
                                    ], ),
                                    selected=True,
                                ),
                            ])
     ])
     props = _get_export_properties(export_instance)
     self.assertEqual(props, set(['q2-q4', 'q3']))
Beispiel #19
0
    def test_case_name_transform(self):
        docs = [
            {
                'domain': 'my-domain',
                '_id': '1234',
                "form": {
                    "caseid": "robin",
                },
            },
            {
                'domain': 'my-domain',
                '_id': '1234',
                "form": {
                    "caseid": "i-do-not-exist",
                },
            }
        ]
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            tables=[
                TableConfiguration(
                    label="My table",
                    selected=True,
                    columns=[
                        ExportColumn(
                            label="case_name",
                            item=ScalarItem(
                                path=[PathNode(name='form'), PathNode(name='caseid')],
                                transform=CASE_NAME_TRANSFORM,
                            ),
                            selected=True
                        ),
                    ]
                )
            ]
        )
        writer = _get_writer([export_instance])
        with writer.open([export_instance]):
            _write_export_instance(writer, export_instance, docs)

        with ExportFile(writer.path, writer.format) as export:
            self.assertEqual(
                json.loads(export.read()),
                {
                    u'My table': {
                        u'headers': [u'case_name'],
                        u'rows': [[u'batman'], [MISSING_VALUE]],

                    }
                }
            )
    def test_table_containing_duplicate_paths_with_differing_doc_types_can_find_either(self):
        path = [PathNode(name='closed')]
        prop1 = ScalarItem(path=path)
        prop2 = ExportItem(path=path)
        table_config = TableConfiguration(
            columns=[
                ExportColumn(item=prop1), ExportColumn(item=prop2)
            ]
        )

        scalarIndex, _ = table_config.get_column(path, 'ScalarItem', None)
        exportIndex, _ = table_config.get_column(path, 'ExportItem', None)

        self.assertEqual(scalarIndex, 0)
        self.assertEqual(exportIndex, 1)
    def test_empty_location(self):
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            tables=[
                TableConfiguration(
                    label="My table",
                    selected=True,
                    columns=[
                        ExportColumn(
                            label="location",
                            item=ScalarItem(
                                path=[PathNode(name='form'), PathNode(name='meta'), PathNode(name='location')],
                            ),
                            selected=True
                        ),
                    ]
                )
            ]
        )

        docs = [
            {
                'domain': 'my-domain',
                '_id': '1234',
                'form': {
                    'meta': {
                        'location': {'xmlns': 'abc'},
                    }
                }
            }
        ]

        writer = get_export_writer([export_instance])
        with writer.open([export_instance]):
            write_export_instance(writer, export_instance, docs)

        with ExportFile(writer.path, writer.format) as export:
            self.assertEqual(
                json.loads(export.read()),
                {
                    'My table': {
                        'headers': ['location'],
                        'rows': [[EMPTY_VALUE]],

                    }
                }
            )
    def test_array_data_in_scalar_question(self):
        '''
        This test ensures that when a question id has array data
        that we return still return a string for scalar data.
        This happens rarely
        '''
        doc = {
            'domain': 'my-domain',
            '_id': '12345',
            "form": {
                "array": ["one", "two"],
            }
        }

        export_instance = FormExportInstance(
            export_format=Format.JSON,
            domain=DOMAIN,
            xmlns='xmlns',
            tables=[TableConfiguration(
                label="My table",
                selected=True,
                path=[],
                columns=[
                    ExportColumn(
                        label="Scalar Array",
                        item=ScalarItem(path=[PathNode(name='form'), PathNode(name='array')]),
                        selected=True,
                    )
                ]
            )]
        )
        writer = get_export_writer([export_instance])
        with writer.open([export_instance]):
            write_export_instance(writer, export_instance, [doc])

        with ExportFile(writer.path, writer.format) as export:
            self.assertEqual(
                json.loads(export.read()),
                {
                    'My table': {
                        'headers': ['Scalar Array'],
                        'rows': [['one two']],

                    }
                }
            )
    def test_case_name_transform(self):
        docs = [
            {
                'domain': 'my-domain',
                '_id': '1234',
                "form": {
                    "caseid": "robin",
                },
            },
            {
                'domain': 'my-domain',
                '_id': '1234',
                "form": {
                    "caseid": "i-do-not-exist",
                },
            }
        ]
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            tables=[
                TableConfiguration(
                    label="My table",
                    selected=True,
                    columns=[
                        ExportColumn(
                            label="case_name",
                            item=ScalarItem(
                                path=[PathNode(name='form'), PathNode(name='caseid')],
                                transform=CASE_NAME_TRANSFORM,
                            ),
                            selected=True
                        ),
                    ]
                )
            ]
        )

        assert_instance_gives_results(docs, export_instance, {
            'My table': {
                'headers': ['case_name'],
                'rows': [['batman'], [MISSING_VALUE]],
            }
        })
    def test_array_data_in_scalar_question(self, export_save):
        '''
        This test ensures that when a question id has array data
        that we return still return a string for scalar data.
        This happens rarely
        '''
        doc = {
            'domain': 'my-domain',
            '_id': '12345',
            "form": {
                "array": ["one", "two"],
            }
        }

        export_instance = FormExportInstance(
            export_format=Format.JSON,
            domain=DOMAIN,
            xmlns='xmlns',
            tables=[
                TableConfiguration(label="My table",
                                   selected=True,
                                   path=[],
                                   columns=[
                                       ExportColumn(
                                           label="Scalar Array",
                                           item=ScalarItem(path=[
                                               PathNode(name='form'),
                                               PathNode(name='array')
                                           ]),
                                           selected=True,
                                       )
                                   ])
            ])

        assert_instance_gives_results([doc], export_instance, {
            'My table': {
                'headers': ['Scalar Array'],
                'rows': [['one two']],
            }
        })
        self.assertTrue(export_save.called)
    def test_empty_location(self):
        export_instance = FormExportInstance(
            export_format=Format.JSON,
            tables=[
                TableConfiguration(
                    label="My table",
                    selected=True,
                    columns=[
                        ExportColumn(
                            label="location",
                            item=ScalarItem(
                                path=[PathNode(name='form'), PathNode(name='meta'), PathNode(name='location')],
                            ),
                            selected=True
                        ),
                    ]
                )
            ]
        )

        docs = [
            {
                'domain': 'my-domain',
                '_id': '1234',
                'form': {
                    'meta': {
                        'location': {'xmlns': 'abc'},
                    }
                }
            }
        ]

        assert_instance_gives_results(docs, export_instance, {
            'My table': {
                'headers': ['location'],
                'rows': [[EMPTY_VALUE]],
            }
        })
    def test_basic_ordering(self):
        schema = self._create_schema([
            ScalarItem(path=[PathNode(name='three')]),
            ScalarItem(path=[PathNode(name='one')]),
            ScalarItem(path=[PathNode(name='two')]),
            ScalarItem(path=[PathNode(name='four')]),
        ])

        ordered_schema = self._create_schema([
            ScalarItem(path=[PathNode(name='one')]),
            ScalarItem(path=[PathNode(name='two')]),
            ScalarItem(path=[PathNode(name='three')]),
            ScalarItem(path=[PathNode(name='four')]),
        ])

        schema = CaseExportDataSchema._reorder_schema_from_schema(
            schema,
            ordered_schema,
        )
        self._assert_item_order(
            schema,
            [],
            [
                ScalarItem(path=[PathNode(name='one')]),
                ScalarItem(path=[PathNode(name='two')]),
                ScalarItem(path=[PathNode(name='three')]),
                ScalarItem(path=[PathNode(name='four')]),
            ],
        )
    def test_multiple_write_export_instance_calls(self, export_save):
        """
        Confirm that calling _write_export_instance() multiple times
        (as part of a bulk export) works as expected.
        """
        export_instances = [
            FormExportInstance(tables=[
                TableConfiguration(label="My table",
                                   selected=True,
                                   path=[],
                                   columns=[
                                       ExportColumn(
                                           label="Q3",
                                           item=ScalarItem(path=[
                                               PathNode(name='form'),
                                               PathNode(name='q3')
                                           ], ),
                                           selected=True,
                                       ),
                                   ]),
            ]),
            FormExportInstance(tables=[
                TableConfiguration(label="My other table",
                                   selected=True,
                                   path=[
                                       PathNode(name="form", is_repeat=False),
                                       PathNode(name="q2", is_repeat=False)
                                   ],
                                   columns=[
                                       ExportColumn(
                                           label="Q4",
                                           item=ScalarItem(path=[
                                               PathNode(name='form'),
                                               PathNode(name='q2'),
                                               PathNode(name='q4')
                                           ], ),
                                           selected=True,
                                       ),
                                   ])
            ]),
            FormExportInstance(tables=[
                TableConfiguration(label="My other table",
                                   selected=True,
                                   path=[
                                       PathNode(name="form", is_repeat=False),
                                       PathNode(name="q2", is_repeat=False)
                                   ],
                                   columns=[
                                       ExportColumn(
                                           label="Q4",
                                           item=ScalarItem(path=[
                                               PathNode(name='form'),
                                               PathNode(name='q2'),
                                               PathNode(name='q4')
                                           ], ),
                                           selected=True,
                                       ),
                                   ])
            ])
        ]

        with TransientTempfile() as temp_path:
            writer = _ExportWriter(get_writer(Format.JSON), temp_path)
            with writer.open(export_instances):
                write_export_instance(writer, export_instances[0], self.docs)
                write_export_instance(writer, export_instances[1], self.docs)
                write_export_instance(writer, export_instances[2], self.docs)

            with ExportFile(writer.path, writer.format) as export:
                self.assertEqual(
                    json.loads(export.read()), {
                        'My table': {
                            'headers': ['Q3'],
                            'rows': [['baz'], ['bop']],
                        },
                        'Export2-My other table': {
                            'headers': ['Q4'],
                            'rows': [['bar'], ['boop']],
                        },
                        'Export3-My other table': {
                            'headers': ['Q4'],
                            'rows': [['bar'], ['boop']],
                        },
                    })
        self.assertTrue(export_save.called)
    RowNumberColumn(
        tags=[PROPERTY_TAG_ROW],
        label='number',
        item=ExportItem(path=[PathNode(name='number')]),
        selected=True
    ),
    ExportColumn(
        tags=[PROPERTY_TAG_INFO],
        label='caseid',
        item=ExportItem(path=[PathNode(name='_id')]),
        help_text=_("The ID of the case"),
        selected=True
    ),
    ExportColumn(
        label='name',
        item=ScalarItem(path=[PathNode(name='name')]),
        help_text=_("The name of the case"),
        selected=True
    ),
]

BOTTOM_MAIN_CASE_TABLE_PROPERTIES = [
    # This second list is displayed below the case properties
    ExportColumn(
        tags=[PROPERTY_TAG_INFO],
        label='case_type',
        item=ExportItem(path=[PathNode(name='type')]),
        help_text=_("The type of the case"),
        is_advanced=True,
    ),
    ExportColumn(
Beispiel #29
0
    def test_multiple_write_export_instance_calls(self):
        """
        Confirm that calling _write_export_instance() multiple times
        (as part of a bulk export) works as expected.
        """
        export_instances = [
            FormExportInstance(
                # export_format=Format.JSON,
                tables=[
                    TableConfiguration(
                        label="My table",
                        selected=True,
                        path=[],
                        columns=[
                            ExportColumn(
                                label="Q3",
                                item=ScalarItem(
                                    path=[PathNode(name='form'), PathNode(name='q3')],
                                ),
                                selected=True,
                            ),
                        ]
                    ),
                ]
            ),
            FormExportInstance(
                # export_format=Format.JSON,
                tables=[
                    TableConfiguration(
                        label="My other table",
                        selected=True,
                        path=[PathNode(name="form", is_repeat=False), PathNode(name="q2", is_repeat=False)],
                        columns=[
                            ExportColumn(
                                label="Q4",
                                item=ScalarItem(
                                    path=[PathNode(name='form'), PathNode(name='q2'), PathNode(name='q4')],
                                ),
                                selected=True,
                            ),
                        ]
                    )
                ]
            )

        ]

        writer = _Writer(get_writer(Format.JSON))
        with writer.open(export_instances):
            _write_export_instance(writer, export_instances[0], self.docs)
            _write_export_instance(writer, export_instances[1], self.docs)

        with ExportFile(writer.path, writer.format) as export:
            self.assertEqual(
                json.loads(export.read()),
                {
                    u'Export1-My table': {
                        u'headers': [u'Q3'],
                        u'rows': [[u'baz'], [u'bop']],

                    },
                    u'Export2-My other table': {
                        u'headers': [u'Q4'],
                        u'rows': [[u'bar'], [u'boop']],
                    }
                }
            )