def add_cell_validation( worksheet: Worksheet, row_index: int, column_index: int, full_question_path: Tuple[str, ...], question: Dict[str, Any], question_to_cell: Dict[Tuple[str, ...], str], bool_options: Dict[str, str], date_format: Format, black_format: Format, ) -> None: type = question["questionType"] has_options = "options" in question if type == "BOOL": worksheet.data_validation( row_index, column_index, row_index, column_index, { "validate": "list", "source": list(bool_options.values()) }, ) elif has_options: options = question["options"] if "multiOptions" in question and question["multiOptions"]: s = set(options) multi_options = sum( map(lambda r: sorted(list(combinations(s, r))), range(1, len(s) + 1)), [], ) options = [ ";".join(multi_option) for multi_option in multi_options ] worksheet.data_validation( row_index, column_index, row_index, column_index, { "validate": "list", "source": options }, ) elif type == "INTEGER": worksheet.data_validation( row_index, column_index, row_index, column_index, { "validate": "integer", "criteria": ">", "value": -(2**32) }, ) elif type == "FLOAT": worksheet.data_validation( row_index, column_index, row_index, column_index, { "validate": "decimal", "criteria": ">", "value": -(2**32) }, ) elif type == "DATE": worksheet.write_datetime( row_index, column_index, datetime.strptime("01/01/1970", "%d/%m/%Y"), date_format, ) if "questionDescription" in question: worksheet.write_comment(row_index, column_index, question["questionDescription"]) if "dependsOn" in question: write_conditional_blank_color_if_dependency_fails( worksheet, row_index, column_index, question, full_question_path, question_to_cell, bool_options, black_format, )