25
25
class ExperimentHelper :
26
26
def __init__ (self , exp ):
27
27
self .spec = exp .spec
28
+ self .variables = {}
29
+ self .env_vars = {
30
+ "set" : {},
31
+ "append" : {},
32
+ }
28
33
29
34
def compute_include_section (self ):
30
35
return []
@@ -47,6 +52,19 @@ def get_helper_name_prefix(self):
47
52
def get_spack_variants (self ):
48
53
return None
49
54
55
+ def set_environment_variable (self , name , value ):
56
+ self .env_vars ["set" ][name ] = value
57
+
58
+ def append_environment_variable (self , name , value ):
59
+ self .env_vars ["append" ][name ] = value
60
+
61
+ def compute_config_variables (self ):
62
+ pass
63
+
64
+ def compute_config_variables_wrapper (self ):
65
+ self .compute_config_variables ()
66
+ return self .variables , self .env_vars
67
+
50
68
51
69
class SingleNode :
52
70
variant (
@@ -102,9 +120,9 @@ class Experiment(ExperimentSystemBase, SingleNode):
102
120
)
103
121
104
122
variant (
105
- "env_modules_path " ,
123
+ "append_path " ,
106
124
default = " " ,
107
- description = "path to local package to use as environment module " ,
125
+ description = "Append to environment PATH during experiment execution " ,
108
126
)
109
127
110
128
def __init__ (self , spec ):
@@ -163,7 +181,10 @@ def add_experiment_variable(self, name, values, use_in_expr_name=False):
163
181
self .expr_name .append (f"{{{ name } }}" )
164
182
165
183
def set_environment_variable (self , name , values ):
166
- self .set_env_vars [name ] = values
184
+ self .env_vars ["set" ][name ] = values
185
+
186
+ def append_environment_variable (self , name , values ):
187
+ self .env_vars ["append" ][0 ]["paths" ][name ] = values
167
188
168
189
def zip_experiment_variables (self , name , variable_names ):
169
190
self .zips [name ] = list (variable_names )
@@ -186,12 +207,25 @@ def compute_applications_section(self):
186
207
187
208
def compute_applications_section_wrapper (self ):
188
209
self .expr_name = []
189
- self .set_env_vars = {}
210
+ self .env_vars = {
211
+ "set" : {},
212
+ "append" : [
213
+ {
214
+ "paths" : {},
215
+ }
216
+ ],
217
+ }
190
218
self .variables = {}
191
219
self .zips = {}
192
220
self .matrix = []
193
221
self .excludes = []
194
222
223
+ for cls in self .helpers :
224
+ variables , env_vars = cls .compute_config_variables_wrapper ()
225
+ self .variables |= variables
226
+ self .env_vars ["set" ] |= env_vars ["set" ]
227
+ self .env_vars ["append" ][0 ] |= env_vars ["append" ]
228
+
195
229
self .compute_applications_section ()
196
230
197
231
expr_helper_list = []
@@ -203,6 +237,7 @@ def compute_applications_section_wrapper(self):
203
237
204
238
expr_setup = {
205
239
"variants" : {"package_manager" : self .spec .variants ["package_manager" ][0 ]},
240
+ "env_vars" : self .env_vars ,
206
241
"variables" : self .variables ,
207
242
"zips" : self .zips ,
208
243
"matrix" : self .matrix ,
@@ -275,11 +310,9 @@ def compute_environment_modules_section(self):
275
310
276
311
self .compute_spack_section ()
277
312
278
- if "env_modules_path" in self .spec .variants :
279
- self .add_experiment_variable (
280
- "binary_path" ,
281
- [p for p in self .spec .variants ["env_modules_path" ]],
282
- False ,
313
+ if "append_path" in self .spec .variants :
314
+ self .append_environment_variable (
315
+ "PATH" , self .spec .variants ["append_path" ][0 ]
283
316
)
284
317
285
318
return {
0 commit comments