@@ -126,8 +126,25 @@ def create_osw(self, sim_id, building_id, upgrade_idx):
126
126
steps = []
127
127
measure_args = {}
128
128
debug = workflow_args .get ("debug" , False )
129
+
130
+ # start with defaults
131
+ for workflow_key , measure_name in workflow_key_to_measure_names .items ():
132
+ measure_args [measure_name ] = self .default_args .get (measure_name , {}).copy ()
133
+
134
+ # update with mapped args
135
+ for workflow_key , measure_name in workflow_key_to_measure_names .items ():
136
+ measure_args [measure_name ].update (self ._get_mapped_args (workflow_args , measure_name ))
137
+
138
+ # update with workflow block args
139
+ for workflow_key , measure_name in workflow_key_to_measure_names .items ():
140
+ measure_args [measure_name ].update (workflow_args .get (workflow_key , {}).copy ())
141
+
142
+ # Verify the arguments and add to steps
129
143
for workflow_key , measure_name in workflow_key_to_measure_names .items ():
130
- measure_args [measure_name ] = self ._get_measure_args (workflow_args , workflow_key , measure_name , debug )
144
+ xml_args = self .get_measure_arguments_from_xml (self .buildstock_dir , measure_name )
145
+ self ._validate_against_xml_args (measure_args [measure_name ], measure_name , xml_args )
146
+ if "debug" in xml_args :
147
+ measure_args [measure_name ]["debug" ] = debug
131
148
steps .append (
132
149
{
133
150
"measure_dir_name" : measure_name ,
@@ -194,33 +211,20 @@ def add_upgrade_step_to_osw(self, upgrade_idx, osw):
194
211
)
195
212
osw ["steps" ].insert (1 , apply_upgrade_measure ) # right after BuildExistingModel
196
213
197
- def _get_measure_args (self , workflow_args , workflow_key , measure_dir_name , debug ):
214
+ def _validate_against_xml_args (self , measure_args , measure_dir_name , xml_args ):
198
215
"""
199
- Get the arguments to the measure from the workflow_args and defaults. The arguments are filtered based
200
- on the measure's measure .xml file. If an argument is not found in the measure.xml file, it is not
201
- passed to the measure and a warning is logged .
216
+ Check if the arguments in the measure_args are valid for the measure_dir_name
217
+ based on the measure.xml file in the measure directory.
218
+ Optionally add the debug argument if it is present in the measure.xml file .
202
219
"""
203
220
xml_args = self .get_measure_arguments_from_xml (self .buildstock_dir , measure_dir_name )
204
- measure_args = {}
205
-
206
- default_args = self .default_args .get (measure_dir_name , {}).copy ()
207
- mapped_args = self ._get_mapped_args (workflow_args , measure_dir_name )
208
- workflow_block_args = workflow_args .get (workflow_key , {}).copy ()
209
-
210
- for update_dict in [default_args , mapped_args , workflow_block_args ]:
211
- measure_args .update (update_dict )
212
-
213
221
for key in list (measure_args .keys ()):
214
222
if key not in xml_args :
215
- location = "workflow_generator" if key in workflow_block_args else "defaults"
216
223
logger .warning (
217
- f"'{ key } ' in { location } not found in '{ measure_dir_name } '. This key will not be passed"
224
+ f"'{ key } ' not found in '{ measure_dir_name } '. This key will not be passed"
218
225
" to the measure. This warning is expected if you are using older version of ResStock."
219
226
)
220
227
del measure_args [key ]
221
- if "debug" in xml_args :
222
- measure_args ["debug" ] = debug
223
- return measure_args
224
228
225
229
def _get_mapped_args (
226
230
self ,
0 commit comments