Beispiel #1
0
    def test_dump_to_db(self, mock_dump_relations, mock_dumper):
        config = {
            'db': {},
        }
        list(dump_to_db('catalog_name', 'collection_name', config))

        mock_dumper.assert_called_with('catalog_name', 'collection_name',
                                       config)
        mock_dumper().dump_to_db.assert_called_with(full_dump=False)
        mock_dump_relations.assert_called_with('catalog_name',
                                               'collection_name', config)
        mock_dumper.return_value.create_utility_view.assert_called_once()

        mock_dump_relations.reset_mock()
        config['include_relations'] = False
        config['force_full'] = True
        list(dump_to_db('catalog_name', 'collection_name', config))
        mock_dumper().dump_to_db.assert_called_with(full_dump=True)
        mock_dump_relations.assert_not_called()

        # Assert create_utility_view not called for 'rel' dumps
        mock_dumper.return_value.create_utility_view.reset_mock()
        list(dump_to_db('rel', 'collection_name', config))
        mock_dumper.return_value.create_utility_view.assert_not_called()
Beispiel #2
0
def _dump(catalog_name, collection_name):
    """
    Dump all entities in the requested format. Currently only csv

    :param catalog_name:
    :param collection_name:
    :return: Streaming response of all entities in csv format with header
    """
    method = request.method

    if method == 'GET':
        format = request.args.get('format')
        exclude_deleted = request.args.get('exclude_deleted') == 'true'

        filter = (lambda table: getattr(table, FIELD.DATE_DELETED).is_(None)
                  ) if exclude_deleted else None
        entities, model = dump_entities(catalog_name,
                                        collection_name,
                                        filter=filter)

        if format == "csv":
            result = csv_entities(entities, model)
            return WorkerResponse.stream_with_context(result,
                                                      mimetype='text/csv')
        elif format == "sql":
            return Response(sql_entities(catalog_name, collection_name, model),
                            mimetype='application/sql')
        else:
            return f"Unrecognised format parameter '{format}'" if format else "Format parameter not set", 400
    elif method == 'POST':
        content_type = request.content_type
        if content_type == 'application/json':
            config = json.loads(request.data)
            result = dump_to_db(catalog_name, collection_name, config)
            return WorkerResponse.stream_with_context(result,
                                                      mimetype='text/plain')
        else:
            return f"Unrecognised content type '{content_type}'", 400
Beispiel #3
0
    def test_dump_to_db_exception(self, mock_dumper):
        mock_dumper.side_effect = Exception

        result = "".join(
            list(dump_to_db('catalog_name', 'collection_name', {})))
        self.assertIn("ERROR: Dump failed", result)