ver Jan22ndv2
fixed a bug for checking data validation in excel
This commit is contained in:
@@ -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"]
|
|
||||||
#}
|
|
||||||
#}
|
|
||||||
#]
|
|
||||||
#)
|
|
||||||
#)
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"func": "check_data_validations",
|
"func": "compare_table",
|
||||||
"options": {
|
"options": {
|
||||||
"rules": [
|
"rules": [
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user