diff --git a/src/caosadvancedtools/table_json_conversion/fill_xlsx.py b/src/caosadvancedtools/table_json_conversion/fill_xlsx.py index 3b22f1f9156f77165b0239d55941bf984e832c50..380a9d62ea85e6abf92194e7aaf8427d0eaef724 100644 --- a/src/caosadvancedtools/table_json_conversion/fill_xlsx.py +++ b/src/caosadvancedtools/table_json_conversion/fill_xlsx.py @@ -31,7 +31,7 @@ def _fill_leaves(json_doc: dict, workbook): for el in value: if isinstance(el, dict): _fill_leaves(el, workbook) - wb.cell(1, 2, el) + workbook.cell(1, 2, el) def _get_row_type_column(worksheet): diff --git a/src/caosadvancedtools/table_json_conversion/table_generator.py b/src/caosadvancedtools/table_json_conversion/table_generator.py index 1e7020fbc1681caaeb56cfcd9e9c325dff24055e..e4a17a57edc388b1c24899116895a2fa0e7d50e1 100644 --- a/src/caosadvancedtools/table_json_conversion/table_generator.py +++ b/src/caosadvancedtools/table_json_conversion/table_generator.py @@ -22,13 +22,11 @@ """ This module allows to generate template tables from JSON schemas. """ -import argparse import re import sys from abc import ABC, abstractmethod -from argparse import RawTextHelpFormatter from enum import Enum -from typing import Dict, List, Tuple, Union +from typing import Dict, List, Optional, Tuple, Union from openpyxl import Workbook from openpyxl.workbook.child import INVALID_TITLE_REGEX @@ -52,7 +50,7 @@ class TableTemplateGenerator(ABC): pass @abstractmethod - def generate(self, schema: dict, foreign_keys: dict): + def generate(self, schema: dict, foreign_keys: dict, filepath: str): """ generates a sheet definition from a given JSON schema Parameters: @@ -73,8 +71,8 @@ class TableTemplateGenerator(ABC): """ pass - def _generate_sheets_from_schema(self, schema: dict, foreign_keys: dict = None - ) -> Dict[str, Dict[str, list]]: + def _generate_sheets_from_schema(self, schema: dict, foreign_keys: Optional[dict] = None + ) -> Dict[str, Dict[str, Tuple[ColumnType, Optional[str], list]]]: """ generates a sheet definition from a given JSON schema Parameters @@ -104,7 +102,7 @@ class TableTemplateGenerator(ABC): foreign_keys = {} # here, we treat the top level # sheets[sheetname][colname]= (COL_TYPE, description, [path]) - sheets: Dict[str, dict[str, Tuple[str, list]]] = {} + sheets: Dict[str, Dict[str, Tuple[ColumnType, Optional[str], list]]] = {} if "properties" not in schema: raise ValueError("Inappropriate JSON schema: The following part should contain " f"the 'properties' key:\n{schema}\n") @@ -128,10 +126,10 @@ class TableTemplateGenerator(ABC): else: raise ValueError(msg) - def _treat_schema_element(self, schema: dict, sheets: dict = None, path: list = None, - foreign_keys: dict = None, level_in_sheet_name: int = 1, - array_paths: list = None - ) -> Dict[str, Tuple[str, str, list]]: + def _treat_schema_element(self, schema: dict, sheets: dict, path: list, + foreign_keys: Optional[dict] = None, level_in_sheet_name: int = 1, + array_paths: Optional[list] = None + ) -> Dict[str, Tuple[ColumnType, Optional[str], list]]: """ recursively transforms elements from the schema into column definitions sheets is modified in place. @@ -157,6 +155,8 @@ class TableTemplateGenerator(ABC): # if this is not set, we are at top level and the top level element may always be an # array array_paths = [path] + if foreign_keys is None: + foreign_keys = {} ctype = ColumnType.SCALAR @@ -272,7 +272,8 @@ class XLSXTemplateGenerator(TableTemplateGenerator): return ordered_cols - def _create_workbook_from_sheets_def(self, sheets: Dict[str, Dict[str, Tuple[str, list]]]): + def _create_workbook_from_sheets_def( + self, sheets: Dict[str, Dict[str, Tuple[ColumnType, Optional[str], list]]]): wb = Workbook() assert wb.sheetnames == ["Sheet"] for sn, sheetdef in sheets.items(): @@ -322,18 +323,3 @@ class XLSXTemplateGenerator(TableTemplateGenerator): wb.move_sheet(sn, index-wb.index(wb[sn])) return wb - - -def parse_args(): - parser = argparse.ArgumentParser(description=__doc__, - formatter_class=RawTextHelpFormatter) - parser.add_argument("path", - help="the subtree of files below the given path will " - "be considered. Use '/' for everything.") - - return parser.parse_args() - - -if __name__ == "__main__": - args = parse_args() - sys.exit(main(args))