ver Jan22ndv2

fixed a bug for checking data validation in excel
This commit is contained in:
David Chang
2024-01-22 15:21:16 +08:00
parent 65ea0d0469
commit c97f43ce95
2 changed files with 53 additions and 26 deletions

View File

@@ -1,5 +1,5 @@
import logging import logging
import operator #import operator
from numbers import Number from numbers import Number
from typing import Any, Union, cast, Callable from typing import Any, Union, cast, Callable
from typing import Dict, List, Tuple from typing import Dict, List, Tuple
@@ -203,7 +203,7 @@ def compare_table(result: str, expected: str, **options) -> float:
elif r["type"] == "data_validation": elif r["type"] == "data_validation":
# Check Data Validation {{{ # # Check Data Validation {{{ #
# sheet_idx: 0 == "RI0" == "RNSheet1" | "EI0" == "ENSheet1" # 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: # available attributes:
# * ranges # * ranges
# * type # * 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)) sheet: Worksheet = _load_sheet(*parse_idx(r["sheet_idx"], xlworkbookr, xlworkbooke))
data_validators: List[DataValidation] = sheet.data_validations.dataValidation 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: for dat_vldt in data_validators:
metric = False 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) metric = metric or all( _match_value_to_rule( getattr(dat_vldt, attrbt)
, mr , mr
)\ )\
for attrbt, mr in r.items() for attrbt, mr in prpt.items()
) )
if metric: if metric:
break break
@@ -254,15 +254,57 @@ def compare_table(result: str, expected: str, **options) -> float:
# }}} function compare_table # # }}} function compare_table #
if __name__ == '__main__': if __name__ == '__main__':
path1 = "../../任务数据/LibreOffice Calc/Freeze_row_column.xlsx" import datetime
path2 = "../../任务数据/LibreOffice Calc/Freeze_row_column_gold.xlsx" 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" rules = [ { "type": "sheet_data"
, "sheet_idx0": 0 , "sheet_idx0": 0
, "sheet_idx1": "EI0" , "sheet_idx1": "EI0"
} }
, { "type": "freeze" , { "type": "data_validation"
, "sheet_idx0": 0 , "sheet_idx": 0
, "sheet_idx1": "EI0" , "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 print( compare_table( path1, path2
@@ -273,18 +315,3 @@ if __name__ == '__main__':
, rules=rules , 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"]
#}
#}
#]
#)
#)

View File

@@ -52,7 +52,7 @@
} }
} }
], ],
"func": "check_data_validations", "func": "compare_table",
"options": { "options": {
"rules": [ "rules": [
{ {