From c97f43ce95a6275f621133d99a3f2f453ca08261 Mon Sep 17 00:00:00 2001 From: David Chang Date: Mon, 22 Jan 2024 15:21:16 +0800 Subject: [PATCH] ver Jan22ndv2 fixed a bug for checking data validation in excel --- desktop_env/evaluators/metrics/table.py | 77 +++++++++++++------ .../ecb0df7a-4e8d-4a03-b162-053391d3afaf.json | 2 +- 2 files changed, 53 insertions(+), 26 deletions(-) diff --git a/desktop_env/evaluators/metrics/table.py b/desktop_env/evaluators/metrics/table.py index 78e4090..304a3fa 100644 --- a/desktop_env/evaluators/metrics/table.py +++ b/desktop_env/evaluators/metrics/table.py @@ -1,5 +1,5 @@ import logging -import operator +#import operator from numbers import Number from typing import Any, Union, cast, Callable from typing import Dict, List, Tuple @@ -203,7 +203,7 @@ def compare_table(result: str, expected: str, **options) -> float: elif r["type"] == "data_validation": # Check Data Validation {{{ # # sheet_idx: 0 == "RI0" == "RNSheet1" | "EI0" == "ENSheet1" - # dv_props: list of dict like {attribute: "method": str, "ref": anythin} + # dv_props: list of dict like {attribute: {"method": str, "ref": anything}} # available attributes: # * ranges # * type @@ -224,14 +224,14 @@ def compare_table(result: str, expected: str, **options) -> float: sheet: Worksheet = _load_sheet(*parse_idx(r["sheet_idx"], xlworkbookr, xlworkbooke)) data_validators: List[DataValidation] = sheet.data_validations.dataValidation - total_metric = True + total_metric = len(data_validators)>=len(r["dv_props"]) for dat_vldt in data_validators: metric = False - for r in r["dv_props"]: + for prpt in r["dv_props"]: metric = metric or all( _match_value_to_rule( getattr(dat_vldt, attrbt) , mr )\ - for attrbt, mr in r.items() + for attrbt, mr in prpt.items() ) if metric: break @@ -254,15 +254,57 @@ def compare_table(result: str, expected: str, **options) -> float: # }}} function compare_table # if __name__ == '__main__': - path1 = "../../任务数据/LibreOffice Calc/Freeze_row_column.xlsx" - path2 = "../../任务数据/LibreOffice Calc/Freeze_row_column_gold.xlsx" + import datetime + import sys + + logger = logging.getLogger() + logger.setLevel(logging.DEBUG) + + datetime_str: str = datetime.datetime.now().strftime("%Y%m%d@%H%M%S") + + file_handler = logging.FileHandler(os.path.join("logs", "normal-{:}.log".format(datetime_str))) + debug_handler = logging.FileHandler(os.path.join("logs", "debug-{:}.log".format(datetime_str))) + stdout_handler = logging.StreamHandler(sys.stdout) + sdebug_handler = logging.FileHandler(os.path.join("logs", "sdebug-{:}.log".format(datetime_str))) + + file_handler.setLevel(logging.INFO) + debug_handler.setLevel(logging.DEBUG) + stdout_handler.setLevel(logging.INFO) + sdebug_handler.setLevel(logging.DEBUG) + + formatter = logging.Formatter(fmt="\x1b[1;33m[%(asctime)s \x1b[31m%(levelname)s \x1b[32m%(module)s/%(lineno)d-%(processName)s\x1b[1;33m] \x1b[0m%(message)s") + file_handler.setFormatter(formatter) + debug_handler.setFormatter(formatter) + stdout_handler.setFormatter(formatter) + sdebug_handler.setFormatter(formatter) + + stdout_handler.addFilter(logging.Filter("desktopenv")) + sdebug_handler.addFilter(logging.Filter("desktopenv")) + + logger.addHandler(file_handler) + logger.addHandler(debug_handler) + logger.addHandler(stdout_handler) + logger.addHandler(sdebug_handler) + + path1 = "../../任务数据/LibreOffice Calc/Order_Id_Mark_Pass_Fail.xlsx" + path2 = "../../任务数据/LibreOffice Calc/Order_Id_Mark_Pass_Fail_gold.xlsx" rules = [ { "type": "sheet_data" , "sheet_idx0": 0 , "sheet_idx1": "EI0" } - , { "type": "freeze" - , "sheet_idx0": 0 - , "sheet_idx1": "EI0" + , { "type": "data_validation" + , "sheet_idx": 0 + , "dv_props": [ { "ranges": { "method": "spreadsheet_range" + , "ref": ["D2:D29", "D2:D1048576"] + } + , "type": { "method": "eq" + , "ref": "list" + } + , "formula1": { "method": "str_set_eq" + , "ref": ["Pass", "Fail", "Held"] + } + } + ] } ] print( compare_table( path1, path2 @@ -273,18 +315,3 @@ if __name__ == '__main__': , rules=rules ) ) - - #path = "../../任务数据/LibreOffice Calc/Order_Id_Mark_Pass_Fail_gold.xlsx" - #print( check_data_validations( path, [ { "ranges": { "method": "spreadsheet_range" - #, "ref": ["D2:D29", "D2:D1048576"] - #} - #, "type": { "method": "eq" - #, "ref": "list" - #} - #, "formula1": { "method": "str_set_eq" - #, "ref": ["Pass", "Fail", "Held"] - #} - #} - #] - #) - #) diff --git a/evaluation_examples/examples/libreoffice_calc/ecb0df7a-4e8d-4a03-b162-053391d3afaf.json b/evaluation_examples/examples/libreoffice_calc/ecb0df7a-4e8d-4a03-b162-053391d3afaf.json index 93fb992..2bc7183 100644 --- a/evaluation_examples/examples/libreoffice_calc/ecb0df7a-4e8d-4a03-b162-053391d3afaf.json +++ b/evaluation_examples/examples/libreoffice_calc/ecb0df7a-4e8d-4a03-b162-053391d3afaf.json @@ -52,7 +52,7 @@ } } ], - "func": "check_data_validations", + "func": "compare_table", "options": { "rules": [ {