Пример #1
0
class SQLReport(BaseReport):
    """
    Report to be used with raw SQL's.

    E.g.::

        class SalesReport(SQLReport):
            query = 'SELECT * FROM sales'

        report = SalesReport()
        report.process()

        print(report.output_filepaths) # --> Files with all rows from sales table.
    """

    query = None
    """Raw report query."""

    query_params = []
    """Params to be evaluated with query."""

    outputs = (outputs.TSVOutput(), )
    """Outputs list, default TSV."""

    db_alias = None
    """Database alias from django config to be used with queries"""
    @property
    def dataset(self):
        return datasets.SQLDataset(self.query, self.query_params,
                                   self.db_alias)
Пример #2
0
    def test_context_manager_must_close_file(self):
        with outputs.TSVOutput() as output:
            output.out(('Alisson', 38))

            self.assertFalse(self.open_result_mocked.close.called)

        self.assertTrue(self.open_result_mocked.close.called)
Пример #3
0
    def test_filepath_must_be_a_tsv_file(self):
        with outputs.TSVOutput() as output:
            output.out(('Alisson', 38))

            extension = output.filepath.split('.')[-1]

            self.assertEqual(extension, 'tsv')
Пример #4
0
    def test_out_must_write_correct_data_in_csv_writer(self):
        with outputs.TSVOutput() as output:
            output.header(('Name', 'Age'))
            for item in self.iterable_object:
                output.out(item)

            output.footer(('test footer', ))

        expected_calls = [
            mock.call(['Name', 'Age']),
            mock.call(['Alisson', '38']),
            mock.call(['Joao', '13']),
            mock.call(['test footer']),
        ]

        self.assertEqual(self.writer.writerow.mock_calls, expected_calls)
Пример #5
0
    def test_process_with_dataset_with_ordered_dict_must_write_data_into_a_file(
            self):
        iterable_object = [
            OrderedDict([('name', 'Alisson'), ('age', 38)]),
            OrderedDict([('name', 'Joao'), ('age', 13)]),
        ]

        with outputs.TSVOutput() as output:
            output.header(('Name', 'Age'))
            for item in iterable_object:
                output.out(item)

            output.footer(('test footer', ))

        expected_calls = [
            mock.call(['Name', 'Age']),
            mock.call(['Alisson', '38']),
            mock.call(['Joao', '13']),
            mock.call(['test footer']),
        ]

        self.assertEqual(self.writer.writerow.mock_calls, expected_calls)
Пример #6
0
    def test_out_must_call_open_with_correct_parameters(self):
        with outputs.TSVOutput() as output:
            output.out(('Alisson', 38))
            filename = output.filepath

        self.open_mocked.assert_called_once_with(filename, 'w+')