6060from cylc .flow .id_cli import contains_fnmatch
6161from cylc .flow .id_match import filter_ids
6262from cylc .flow .platforms import get_platform
63+ from cylc .flow .prerequisite import PrereqTuple
6364from cylc .flow .run_modes import RunMode
6465from cylc .flow .run_modes .skip import process_outputs as get_skip_mode_outputs
6566from cylc .flow .task_action_timer import (
@@ -1916,7 +1917,9 @@ def _get_task_proxy_db_outputs(
19161917 self ._load_historical_outputs (itask )
19171918 return itask
19181919
1919- def _standardise_prereqs (self , prereqs : 'Iterable[str]' ) -> 'Set[Tokens]' :
1920+ def _standardise_prereqs (
1921+ self , prereqs : 'Iterable[str]'
1922+ ) -> 'Set[PrereqTuple]' :
19201923 """Extract task prerequistes from user input and standardise.
19211924
19221925 Weed out any xtrigger prerequisites.
@@ -1953,7 +1956,7 @@ def _standardise_prereqs(self, prereqs: 'Iterable[str]') -> 'Set[Tokens]':
19531956 LOG .warning (
19541957 f'Invalid prerequisite cycle point:\n { exc .args [0 ]} ' )
19551958 else :
1956- _prereqs .add (pre . duplicate ( task_sel = msg , cycle = cycle ))
1959+ _prereqs .add (PrereqTuple ( str ( cycle ), str ( pre [ 'task' ]), msg ))
19571960 return _prereqs
19581961
19591962 def _standardise_outputs (
@@ -1975,7 +1978,7 @@ def _standardise_outputs(
19751978
19761979 def _get_prereq_params (
19771980 self , prereqs : 'Iterable[str]' , tdef : 'TaskDef' , point : 'PointBase'
1978- ) -> 'Tuple[bool, Set[Tokens ], Dict[str, bool]]' :
1981+ ) -> 'Tuple[bool, Set[PrereqTuple ], Dict[str, bool]]' :
19791982 """Convert input prerequisites to Tokens of just the valid ones.
19801983
19811984 And convert the (mutually exclusive) "['all']" shortcut to a bool.
@@ -2104,7 +2107,7 @@ def set_prereqs_and_outputs(
21042107
21052108 def _get_valid_prereqs (
21062109 self , prereqs : Iterable [str ], tdef : 'TaskDef' , point : 'PointBase'
2107- ) -> 'Set[Tokens ]' :
2110+ ) -> 'Set[PrereqTuple ]' :
21082111 """Validate CLI prerequisites and return associated task messages.
21092112
21102113 To set prerequisites, the user gives trigger names, but we need the
@@ -2120,24 +2123,23 @@ def _get_valid_prereqs(
21202123 """
21212124 # Valid prerequisites as tokens (outputs as task messages).
21222125 valid_pre = {
2123- Tokens ( f" { key .point } / { key .task } : { key .output } " , relative = True )
2126+ PrereqTuple ( key .point , key .task , key .output )
21242127 for pre in tdef .get_prereqs (point )
21252128 for key in pre .keys ()
21262129 }
21272130
2128- # standardise, tokenise, and weed out xtrigger prerequisites
2131+ # standardise and weed out xtrigger prerequisites
21292132 req_pre = self ._standardise_prereqs (prereqs )
21302133
21312134 for prereq in req_pre - valid_pre :
21322135 # But log bad ones with triggers, not messages.
21332136 trg = self .config .get_taskdef (
2134- str (prereq [ " task" ] )
2135- ).get_output (prereq [ "task_sel" ] )
2137+ str (prereq . task )
2138+ ).get_output (prereq . output )
21362139 LOG .warning (
21372140 f'{ point } /{ tdef .name } does not depend on '
2138- f'"{ prereq [ "cycle" ] } /{ prereq [ " task" ] } :{ trg } "'
2141+ f'"{ prereq . point } /{ prereq . task } :{ trg } "'
21392142 )
2140-
21412143 return valid_pre & req_pre
21422144
21432145 def _get_valid_xtrigs (
@@ -2228,7 +2230,7 @@ def _set_outputs_itask(
22282230 def _set_prereqs_itask (
22292231 self ,
22302232 itask : 'TaskProxy' ,
2231- prereqs : 'Iterable[Tokens ]' ,
2233+ prereqs : 'Iterable[PrereqTuple ]' ,
22322234 xtrigs : 'Dict[str, bool]' ,
22332235 set_all : bool
22342236 ) -> None :
@@ -2237,9 +2239,12 @@ def _set_prereqs_itask(
22372239 Designated flows should already be merged to the task proxy.
22382240 """
22392241 if set_all :
2240- itask .state .set_prerequisites_all_satisfied ()
2242+ # (task prerequisites, not xtriggers)
2243+ itask .force_satisfy_all ()
22412244 else :
2242- itask .satisfy_me (prereqs , forced = True )
2245+ # task prerequisites
2246+ itask .force_satisfy (prereqs )
2247+ # xtriggers, including "all"
22432248 self .xtrigger_mgr .force_satisfy (itask , xtrigs )
22442249
22452250 if (
@@ -2253,7 +2258,7 @@ def _set_prereqs_tdef(
22532258 self ,
22542259 point : 'PointBase' ,
22552260 taskdef : 'TaskDef' ,
2256- prereqs : 'Iterable[Tokens ]' ,
2261+ prereqs : 'Iterable[PrereqTuple ]' ,
22572262 xtrigs : 'Dict[str, bool]' ,
22582263 flow_nums : 'FlowNums' ,
22592264 flow_wait : bool ,
0 commit comments