[PATCH i-g-t v2] scripts/doc_to_xls.py: split code into a XLS conversion and main()

Kamil Konieczny kamil.konieczny at linux.intel.com
Mon Mar 11 14:21:47 UTC 2024


Hi Mauro,
On 2024-03-11 at 15:04:42 +0100, Mauro Carvalho Chehab wrote:
> From: Mauro Carvalho Chehab <mchehab at kernel.org>
> 
> Such change allows using the code on some other python script that
> would be converting IGT doc test documentation into XLS files.
> 
> Signed-off-by: Mauro Carvalho Chehab <mchehab at kernel.org>
> ---
> v2:
>   - use autopep8 to follow PEP8 coding style;
>   - make pylint happy.
> 
>  scripts/doc_to_xls.py | 132 ++++++++++++++++++++++++------------------
>  1 file changed, 76 insertions(+), 56 deletions(-)

Reviewed-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>

> 
> diff --git a/scripts/doc_to_xls.py b/scripts/doc_to_xls.py
> index 12c0223920ae..448ff18429b6 100755
> --- a/scripts/doc_to_xls.py
> +++ b/scripts/doc_to_xls.py
> @@ -10,7 +10,15 @@
>  
>  """Write the contents of the testplan documentation to a XLS file."""
>  
> -EPILOG="""
> +import argparse
> +
> +from openpyxl.styles import Font
> +from openpyxl.utils import get_column_letter
> +from openpyxl import Workbook
> +
> +from test_list import TestList
> +
> +EPILOG = """
>  Examples:
>  
>  1. Create a XLS file with a single worksheet with Xe driver documentation:
> @@ -22,71 +30,83 @@ Examples:
>     scripts/doc_to_xls.py --config tests/kms_*json tests/*/*.json --xls igt_test_documentation.xls
>  """
>  
> -import argparse
>  
> -from openpyxl import Workbook
> -from openpyxl.utils import get_column_letter
> -from openpyxl.styles import Font
> +def tests_to_xls(tests, fname):
> +    """
> +    Convert an array of IGT documentation tests into a XLS file
> +    """
>  
> -from test_list import TestList
> +    wb = Workbook()
> +    ws = None
>  
> -parser = argparse.ArgumentParser(description=__doc__,
> -                                 formatter_class = argparse.RawDescriptionHelpFormatter,
> -                                 epilog = EPILOG)
> -parser.add_argument("--config", required = True,  nargs='+',
> -                    help="JSON file describing the test plan template")
> -parser.add_argument("--include-plan", action="store_true",
> -                    help="Include test plans, if any.")
> -parser.add_argument("--xls", required = True,
> -                    help="Output XLS file.")
> +    expand_fields = {
> +        "GPU excluded platform": "blocklist "
> +    }
>  
> -parse_args = parser.parse_args()
> +    for row in range(len(tests)):
> +        test = tests[row]
> +        sheet_name = test.title
>  
> -tests = []
> -for config_file in parse_args.config:
> -    # Implemented tests
> -    tests.append(TestList(config_file, parse_args.include_plan))
> +        if not ws:
> +            ws = wb.active
> +            ws.title = sheet_name
> +        else:
> +            ws = wb.create_sheet(sheet_name)
>  
> -wb = Workbook()
> -ws = None
> +        sheet = test.get_spreadsheet(expand_fields)
>  
> -expand_fields = {
> -    "GPU excluded platform": "blocklist "
> -}
> -
> -for row in range(len(tests)):
> -    test = tests[row]
> -    sheet_name = test.title
> -
> -    if not ws:
> -        ws = wb.active
> -        ws.title = sheet_name
> -    else:
> -        ws = wb.create_sheet(sheet_name)
> -
> -    sheet = test.get_spreadsheet(expand_fields)
> -
> -    max_length = []
> -    for col in range(len(sheet[row])):
> -        max_length.append(0)
> -
> -    for row in range(len(sheet)):
> +        max_length = []
>          for col in range(len(sheet[row])):
> -            c = ws.cell(row = row + 1, column = col + 1, value = sheet[row][col])
> -            if row == 0:
> -                c.font = Font(bold=True)
> +            max_length.append(0)
>  
> -            if len(sheet[row][col]) > max_length[col]:
> -                max_length[col] = len(sheet[row][col])
> +        for row in range(len(sheet)):
> +            for col in range(len(sheet[row])):
> +                c = ws.cell(row=row + 1, column=col + 1, value=sheet[row][col])
> +                if row == 0:
> +                    c.font = Font(bold=True)
>  
> -    # Estimate column length
> -    for col in range(len(sheet[0])):
> -        column = get_column_letter(col + 1)
> +                if len(sheet[row][col]) > max_length[col]:
> +                    max_length[col] = len(sheet[row][col])
>  
> -        adjusted_width = (max_length[col] + 2) * 1.2
> -        ws.column_dimensions[column].width = adjusted_width
> +        # Estimate column length
> +        for col in range(len(sheet[0])):
> +            column = get_column_letter(col + 1)
>  
> -    # Turn on auto-filter
> -    ws.auto_filter.ref = ws.dimensions
> +            adjusted_width = (max_length[col] + 2) * 1.2
> +            ws.column_dimensions[column].width = adjusted_width
>  
> -wb.save(parse_args.xls)
> +        # Turn on auto-filter
> +        ws.auto_filter.ref = ws.dimensions
> +
> +    wb.save(fname)
> +
> +######
> +# Main
> +######
> +
> +
> +def main():
> +    """Main program"""
> +
> +    parser = argparse.ArgumentParser(description=__doc__,
> +                                     formatter_class=argparse.RawDescriptionHelpFormatter,
> +                                     epilog=EPILOG)
> +    parser.add_argument("--config", required=True,  nargs='+',
> +                        help="JSON file describing the test plan template")
> +    parser.add_argument("--include-plan", action="store_true",
> +                        help="Include test plans, if any.")
> +    parser.add_argument("--xls", required=True,
> +                        help="Output XLS file.")
> +
> +    parse_args = parser.parse_args()
> +
> +    tests = []
> +    for config_file in parse_args.config:
> +        # Implemented tests
> +        tests.append(TestList(config_file, parse_args.include_plan))
> +
> +    tests_to_xls(tests, fname=parse_args.xls)
> +
> +
> +if __name__ == '__main__':
> +    main()
> -- 
> 2.43.2
> 


More information about the igt-dev mailing list