@@ -138,6 +138,7 @@ def define_compiler(
138138 compiler (str): Package name to use for compilation
139139 package_manager (str): Glob supported pattern to match package managers
140140 this compiler applies to
141+ when (list | None): List of when conditions to apply to directive
141142 """
142143
143144 def _execute_define_compiler (obj ):
@@ -184,6 +185,7 @@ def software_spec(
184185 compiler (str): Package name to use as compiler for compiling this package
185186 package_manager (str): Glob supported pattern to match package managers
186187 this package applies to
188+ when (list | None): List of when conditions to apply to directive
187189 """
188190
189191 def _execute_software_spec (obj ):
@@ -221,6 +223,7 @@ def package_manager_config(name, config, package_manager=None, when=None, **kwar
221223 name (str): Name of this configuration
222224 config (str): Configuration option to set
223225 package_manager (str): Name of the package manager this config should be used with
226+ when (list | None): List of when conditions to apply to directive
224227 """
225228
226229 def _execute_package_manager_config (obj ):
@@ -251,6 +254,7 @@ def required_package(name, package_manager=None, when=None, **kwargs):
251254 Args:
252255 name (str): Name of required package
253256 package_manager (str): Glob package manager name to apply this required package to
257+ when (list | None): List of when conditions to apply to directive
254258 """
255259
256260 def _execute_required_package (obj ):
@@ -419,7 +423,7 @@ def _store_builtin(obj):
419423
420424
421425@shared_directive ("phase_definitions" )
422- def register_phase (name , pipeline = None , run_before = None , run_after = None , ** kwargs ):
426+ def register_phase (name , pipeline = None , run_before = None , run_after = None , when = None , ** kwargs ):
423427 """Register a phase
424428
425429 Phases are portions of a pipeline that will execute when
@@ -436,6 +440,7 @@ def register_phase(name, pipeline=None, run_before=None, run_after=None, **kwarg
436440 pipeline (str): The name of the pipeline this phase should be registered into.
437441 run_before (list(str) | None): A list of phase names this phase should run before
438442 run_after (list(str) | None): A list of phase names this phase should run after
443+ when (list | None): List of when conditions to apply to directive
439444 """
440445 if run_before is None :
441446 run_before = []
@@ -445,6 +450,10 @@ def register_phase(name, pipeline=None, run_before=None, run_after=None, **kwarg
445450 def _execute_register_phase (obj ):
446451 import ramble .util .graph
447452
453+ when_list = ramble .language .language_helpers .build_when_list (
454+ when , obj , name , "register_phase"
455+ )
456+
448457 if pipeline not in obj ._pipelines :
449458 raise ramble .language .language_base .DirectiveError (
450459 "Directive register_phase was "
@@ -490,6 +499,8 @@ def _execute_register_phase(obj):
490499 for after in run_after :
491500 phase_node .order_after (after )
492501
502+ phase_node .when = when_list
503+
493504 obj .phase_definitions [pipeline ][name ] = phase_node
494505
495506 return _execute_register_phase
0 commit comments