2828from cdisc_rules_engine .models .rule import Rule
2929from cdisc_rules_engine .utilities .utils import generate_report_filename
3030from scripts .script_utils import (
31+ get_datasets ,
3132 fill_cache_with_dictionaries ,
3233 get_cache_service ,
3334 get_library_metadata_from_cache ,
3435)
35- from cdisc_rules_engine .utilities .utils import get_directory_path
3636from cdisc_rules_engine .enums .progress_parameter_options import ProgressParameterOptions
3737
3838"""
@@ -54,7 +54,7 @@ def validate_single_rule(
5454 library_metadata : LibraryMetadataContainer ,
5555 rule : dict = None ,
5656):
57- set_log_level ("ERROR" )
57+ set_log_level (args )
5858 rule ["conditions" ] = ConditionCompositeFactory .get_condition_composite (
5959 rule ["conditions" ]
6060 )
@@ -68,11 +68,11 @@ def validate_single_rule(
6868 define_xml_path = args .define_xml_path ,
6969 library_metadata = library_metadata ,
7070 validate_xml = args .validate_xml ,
71- dataset_paths = args .dataset_path ,
71+ dataset_paths = args .dataset_paths ,
7272 )
7373 validated_domains = set ()
7474 results = []
75- directory = get_directory_path (args .dataset_path )
75+ directory = os . path . dirname (args .dataset_paths [ 0 ] )
7676
7777 if rule .get ("sensitivity" ).lower () == "study" :
7878 results .append (
@@ -103,39 +103,78 @@ def validate_single_rule(
103103 return RuleValidationResult (rule , results )
104104
105105
106- def set_log_level ( level : str ):
107- if level == " disabled" :
106+ def initialize_logger ( disabled , log_level ):
107+ if disabled :
108108 engine_logger .disabled = True
109109 else :
110- engine_logger .setLevel (level )
110+ engine_logger .disabled = False
111+ engine_logger .setLevel (log_level )
112+
113+
114+ def set_log_level (args ):
115+ if args .log_level .lower () == "disabled" :
116+ engine_logger .disabled = True
117+ else :
118+ engine_logger .setLevel (args .log_level .lower ())
111119
112120
113121def test (args : TestArgs ):
114- set_log_level ("ERROR" )
122+ set_log_level (args )
115123 # fill cache
116124 CacheManager .register ("RedisCacheService" , RedisCacheService )
117125 CacheManager .register ("InMemoryCacheService" , InMemoryCacheService )
118126 manager = CacheManager ()
119127 manager .start ()
120128 shared_cache = get_cache_service (manager )
129+ engine_logger .info (f"Populating cache, cache path: { args .cache } " )
121130 library_metadata : LibraryMetadataContainer = get_library_metadata_from_cache (args )
122131 # install dictionaries if needed
123132 dictionary_versions = fill_cache_with_dictionaries (shared_cache , args )
124133 with open (args .rule , "r" , encoding = "utf-8" ) as f :
125134 rules = [Rule .from_cdisc_metadata (json .load (f ))]
126- with open (args .dataset_path , "r" ) as f :
127- data_json = json .load (f )
128- datasets = [DummyDataset (data ) for data in data_json .get ("datasets" , [])]
129135 data_service_factory = DataServiceFactory (
130136 config , shared_cache , args .standard , args .version
131137 )
132- dummy_data_service = data_service_factory .get_dummy_data_service (datasets )
133138 data_service = data_service_factory .get_data_service ()
134-
139+ datasets = []
140+ for dataset_path in args .dataset_paths :
141+ try :
142+ with open (dataset_path , "r" ) as f :
143+ data_json = json .load (f )
144+ datasets .extend (
145+ [DummyDataset (data ) for data in data_json .get ("datasets" , [])]
146+ )
147+ except Exception as e :
148+ engine_logger .info (f"Dataset { dataset_path } is not encoded in { e } " )
149+ if not datasets :
150+ engine_logger .info (
151+ "No datasets loaded from JSON files, attempting to load using data service"
152+ )
153+ try :
154+ datasets = [
155+ DummyDataset (dataset )
156+ for dataset in get_datasets (data_service , args .dataset_paths )
157+ ]
158+ for dataset_path in args .dataset_paths :
159+ filename = os .path .basename (dataset_path ).lower ()
160+ matching_dataset = next (
161+ dataset
162+ for dataset in datasets
163+ if dataset .filename .lower () == filename
164+ )
165+ df = data_service .get_dataset (dataset_name = dataset_path )
166+ matching_dataset .data = df .data
167+ except Exception as e :
168+ engine_logger .error (f"Data service failed to load datasets: { e } " )
169+ dummy_data_service = data_service_factory .get_dummy_data_service (datasets )
135170 start = time .time ()
136171 results = []
172+ # instantiate logger in each child process to maintain log level
173+ initializer = partial (
174+ initialize_logger , engine_logger .disabled , engine_logger ._logger .level
175+ )
137176 # run each rule in a separate process
138- with Pool (10 ) as pool :
177+ with Pool (10 , initializer = initializer ) as pool :
139178 with click .progressbar (
140179 length = len (rules ),
141180 fill_char = click .style ("\u2588 " , fg = "green" ),
@@ -163,7 +202,7 @@ def test(args: TestArgs):
163202 validation_args = Validation_args (
164203 None ,
165204 None ,
166- [ args .dataset_path ] ,
205+ args .dataset_paths ,
167206 None ,
168207 os .path .join ("resources" , "templates" , "report-template.xlsx" ),
169208 args .standard ,
0 commit comments