ExportToXLSX
Exports context data to a Microsoft Excel Open XML Spreadsheet (XLSX) file.
python · Common Scripts
Details
| ID | ExportToXLSX |
|---|---|
| Language | python |
| From Version | 6.5.0 |
| Docker Image | demisto/xslxwriter:1.0.0.10120494 |
README
Exports context data to a Microsoft Excel Open XML Spreadsheet (XLSX) file.
Script Data
| Name | Description |
|---|---|
| Script Type | python3 |
| Tags | |
| Cortex XSOAR Version | 5.0.0 |
Inputs
| Argument Name | Description |
|---|---|
| file_name | The output file name (for example “Report.xlsx”). |
| data | The data to export. Accepts a context key of a dictionary or a list of dictionaries for a single sheet file (${data}). Separate multiple sheet files using a comma “,”. For example, if you are exporting multiple sheet files, the argument would be: ${data1},${data2}. |
| sheet_name | The sheet name. Separate multiple sheet names using a comma “,”, for example, sheet1,sheet2. |
| headers | A comma-separated list of headers. The order that you pass the headers determines how they display in the exported sheet(s). Separated multiple sheets using a semicolon. For example, if you are exporting two sheets that includes two headers each, the argument would be: “header1,header2;header3,header4”. |
| bold | Whether table headers should be bold. If this argument is set to “true”, table headers are bold. Default is “true”. |
| border | Whether borders should be added to table cells. If this argument is set to “true”, borders are added to table cells. Default is “true”. |
Outputs
There are no outputs for this script.
from unittest.mock import patch import pytest from ExportToXLSX import parse_data DATA_INPUT_SINGLE_DICT = {"key1": "val1", "key2": "val2"} DATA_INPUT_MULTIPLE_DICTS = '{"key1":"val1","key2":"val2"},{"key1":"val3","key2":"val4"}' def test_parse_data_single_item_no_error(): """Unit test Given - parse_data help method - inputs: data : a single dictionary sheets: a list of one sheet name When - the data is valid - the sheets number is valid Then Validate the content of the response """ parsed_data = parse_data(data=DATA_INPUT_SINGLE_DICT, sheets=["sheet1"]) assert isinstance(parsed_data, list) assert len(parsed_data) == 1 def test_parse_data_single_item_with_error(): """Unit test Given - parse_data help method - inputs: data : comma-separated string represented dictionaries sheets: a list of two sheet names When - the data is valid - the sheets number is not valid (should be equal to the number of dicts in 'data') Then Validate the method raises a Value error """ try: parse_data(data=DATA_INPUT_SINGLE_DICT, sheets=["sheet1", "sheets2"]) pytest.fail() except ValueError as err: assert "Number of sheet names should be equal to the number of data items." in err.args[0] def test_parse_data_multiple_items_no_error(): """Unit test Given - parse_data help method - inputs: data : comma-separated string represented dictionaries sheets: a list of two sheet names When - the data is valid - the sheets number is valid Then Validate the content of the response """ parsed_data = parse_data(data=DATA_INPUT_MULTIPLE_DICTS, sheets=["sheet1", "sheet2"]) assert isinstance(parsed_data, list) assert len(parsed_data) == 2 def test_parse_data_multiple_items_with_error(): """Unit test Given - parse_data help method - inputs: data : comma-separated string represented dictionaries sheets: a list of one sheet names When - the data is valid - the sheets number is not valid ( should be equal to the number of dicts in 'data') Then Validate the method raises a Value error """ try: parse_data(data=DATA_INPUT_MULTIPLE_DICTS, sheets=["sheet1"]) pytest.fail() except ValueError as err: assert "Number of sheet names should be equal to the number of data items." in err.args[0] ARGS_VERIFY = [(None, None), (1, 1)] @pytest.mark.parametrize("is_bold, is_border", ARGS_VERIFY) def test_prepare_bold_and_border(is_bold: bool, is_border: bool): """ Given: - is_bold: bool, is_border: bool When: - running prepare_bold_and_border Then: - Returns the right command result. """ from ExportToXLSX import prepare_bold_and_border from xlsxwriter import Workbook workbook = Workbook() bold_value = 1 if is_bold else 0 border_value = 1 if is_border else 0 result_bold, result_border = prepare_bold_and_border(workbook, is_bold, is_border) assert result_bold.bold == bold_value assert result_bold.bottom == border_value assert result_border.bottom == border_value @patch("xlsxwriter.Workbook.worksheet_class") def test_write_data(self): """ When: - running write_data Then: - Checks that write function was called 4 times. """ import xlsxwriter from ExportToXLSX import write_data workbook = xlsxwriter.Workbook() format_arg = xlsxwriter.format.Format() write_data("", DATA_INPUT_SINGLE_DICT, None, workbook, format_arg, format_arg) assert self.return_value.write.call_count == 4 ARGS_MAIN = [ ({"data": DATA_INPUT_SINGLE_DICT, "file_name": "file_name", "sheet_name": "sheet_name", "headers": "headers_name"}), ({"data": DATA_INPUT_SINGLE_DICT, "file_name": "file_name", "sheet_name": "sheet_name"}), ] @pytest.mark.parametrize("args", ARGS_MAIN) def test_main(mocker, args): """ Given: - All return values from helper functions are valid When: - main function is executed Then: - Return results to War-Room """ import demistomock as demisto from ExportToXLSX import main mocker.patch.object(demisto, "args", return_value=args) mocker.patch("ExportToXLSX.parse_data", return_value=[DATA_INPUT_SINGLE_DICT]) mocker.patch("ExportToXLSX.prepare_bold_and_border", return_value=(None, None)) mocker.patch("ExportToXLSX.write_data") mocker.patch("CommonServerPython.file_result_existing_file", return_value={"state": "success"}) return_results_mock = mocker.patch("ExportToXLSX.return_results") main() assert return_results_mock.call_args.args[0].get("File") == "file_name"