@@ -53,7 +53,14 @@ class ApplicationMeta(ramble.language.shared_language.SharedMeta):
5353
5454@application_directive ("workloads" )
5555def workload (
56- name , executables = None , executable = None , input = None , inputs = None , tags = None , ** kwargs
56+ name ,
57+ executables = None ,
58+ executable = None ,
59+ input = None ,
60+ inputs = None ,
61+ tags = None ,
62+ when = None ,
63+ ** kwargs ,
5764):
5865 """Adds a workload to this application
5966
@@ -78,7 +85,12 @@ def _execute_workload(app):
7885 input , inputs , app .inputs , "input" , "inputs" , "workload"
7986 )
8087
81- app .workloads [name ] = ramble .workload .Workload (name , all_execs , all_inputs , tags )
88+ when_list = ramble .language .language_helpers .build_when_list (when , app , name , "workload" )
89+ when_set = frozenset (when_list )
90+ if when_set not in app .workloads :
91+ app .workloads [when_set ] = {}
92+
93+ app .workloads [when_set ][name ] = ramble .workload .Workload (name , all_execs , all_inputs , tags )
8294
8395 return _execute_workload
8496
@@ -105,13 +117,15 @@ def _execute_workload_groups(app):
105117
106118 # Apply any existing variables in the group to the workload
107119 for workload in workloads :
108- if name in app .workload_group_vars :
109- for var in app .workload_group_vars [name ]:
110- app .workloads [workload ].add_variable (var )
120+ for when_set in app .workloads .keys ():
121+ if workload in app .workloads [when_set ]:
122+ if name in app .workload_group_vars :
123+ for var in app .workload_group_vars [name ]:
124+ app .workloads [when_set ][workload ].add_variable (var )
111125
112- if name in app .workload_group_env_vars :
113- for env_var in app .workload_group_env_vars [name ]:
114- app .workloads [workload ].add_environment_variable (env_var )
126+ if name in app .workload_group_env_vars :
127+ for env_var in app .workload_group_env_vars [name ]:
128+ app .workloads [ when_set ] [workload ].add_environment_variable (env_var )
115129
116130 return _execute_workload_groups
117131
@@ -264,8 +278,10 @@ def _execute_workload_variable(app):
264278 ** kwargs ,
265279 )
266280
267- for wl_name in all_workloads :
268- app .workloads [wl_name ].add_variable (workload_var .copy ())
281+ for when_set , app_workloads in app .workloads .items ():
282+ for wl_name in all_workloads :
283+ if wl_name in app_workloads :
284+ app .workloads [when_set ][wl_name ].add_variable (workload_var .copy ())
269285
270286 if workload_group is not None :
271287 workload_group_list = app .workload_groups [workload_group ]
@@ -276,9 +292,11 @@ def _execute_workload_variable(app):
276292 # Track which vars we add to, to allow us to re-apply during inheritance
277293 app .workload_group_vars [workload_group ].append (workload_var .copy ())
278294
279- for wl_name in workload_group_list :
280- # Apply the variable
281- app .workloads [wl_name ].add_variable (workload_var .copy ())
295+ for when_set , app_workloads in app .workloads .items ():
296+ for wl_name in workload_group_list :
297+ if wl_name in app_workloads :
298+ # Apply the variable
299+ app .workloads [when_set ][wl_name ].add_variable (workload_var .copy ())
282300
283301 if not all_workloads and workload_group is None :
284302 raise DirectiveError ("A workload or workload group is required" )
@@ -310,8 +328,12 @@ def _execute_environment_variable(app):
310328 name , value = value , description = description
311329 )
312330
313- for wl_name in all_workloads :
314- app .workloads [wl_name ].add_environment_variable (workload_env_var .copy ())
331+ for when_set , app_workloads in app .workloads .items ():
332+ for wl_name in all_workloads :
333+ if wl_name in app_workloads :
334+ app .workloads [when_set ][wl_name ].add_environment_variable (
335+ workload_env_var .copy ()
336+ )
315337
316338 if workload_group is not None :
317339 workload_group_list = app .workload_groups [workload_group ]
@@ -321,8 +343,11 @@ def _execute_environment_variable(app):
321343
322344 app .workload_group_env_vars [workload_group ].append (workload_env_var .copy ())
323345
324- for wl_name in workload_group_list :
325- app .workloads [wl_name ].add_environment_variable (workload_env_var .copy ())
346+ for when_set , app_workloads in app .workloads .items ():
347+ for wl_name in workload_group_list :
348+ app .workloads [when_set ][wl_name ].add_environment_variable (
349+ workload_env_var .copy ()
350+ )
326351
327352 if not all_workloads and workload_group is None :
328353 raise DirectiveError ("A workload or workload group is required" )
0 commit comments