1+ import time
12from typing import Any
23
34import xarray as xr
@@ -15,7 +16,7 @@ def validate_dataset(config_obj: ConfigObject, dataset: Any, file_path: str):
1516 assert dataset is not None
1617 assert isinstance (file_path , str )
1718 if isinstance (dataset , xr .Dataset ):
18- messages = _validate_dataset (config_obj , dataset , file_path , None )
19+ messages = _validate_dataset (config_obj , dataset , file_path , None , None )
1920 else :
2021 messages = _open_and_validate_dataset (config_obj , dataset , file_path )
2122 return Result .new (config_object = config_obj , messages = messages , file_path = file_path )
@@ -26,12 +27,15 @@ def _validate_dataset(
2627 dataset : xr .Dataset ,
2728 file_path : str ,
2829 file_index : int | None ,
30+ access_latency : float | None ,
2931) -> list [Message ]:
3032 assert isinstance (config_obj , ConfigObject )
3133 assert isinstance (dataset , xr .Dataset )
3234 assert isinstance (file_path , str )
3335
34- context = RuleContextImpl (config_obj , dataset , file_path , file_index )
36+ context = RuleContextImpl (
37+ config_obj , dataset , file_path , file_index , access_latency
38+ )
3539 for rule_id , rule_config in config_obj .rules .items ():
3640 with context .use_state (rule_id = rule_id ):
3741 apply_rule (context , rule_id , rule_config )
@@ -48,24 +52,30 @@ def _open_and_validate_dataset(
4852 opener_options = config_obj .opener_options or {}
4953 if config_obj .processor is not None :
5054 processor_op = config_obj .get_processor_op (config_obj .processor )
55+ t0 = time .time ()
5156 try :
5257 ds_path_list = processor_op .preprocess (file_path , opener_options )
5358 except (OSError , ValueError , TypeError ) as e :
5459 return [new_fatal_message (str (e ))]
60+ access_latency = time .time () - t0
5561 return processor_op .postprocess (
5662 [
57- _validate_dataset (config_obj , ds , path , i )
63+ _validate_dataset (config_obj , ds , path , i , access_latency )
5864 for i , (ds , path ) in enumerate (ds_path_list )
5965 ],
6066 file_path ,
6167 )
6268 else :
69+ t0 = time .time ()
6370 try :
6471 dataset = _open_dataset (ds_source , opener_options , file_path )
6572 except (OSError , ValueError , TypeError ) as e :
6673 return [new_fatal_message (str (e ))]
74+ access_latency = time .time () - t0
6775 with dataset :
68- return _validate_dataset (config_obj , dataset , file_path , None )
76+ return _validate_dataset (
77+ config_obj , dataset , file_path , None , access_latency
78+ )
6979
7080
7181def _open_dataset (
0 commit comments