11import inspect
22from collections import deque
33from typing import TYPE_CHECKING , Any
4- from pydantic import BaseModel
5-
6- if TYPE_CHECKING :
7- from .assembler import NodeAssembler
84
95from .consts import (
6+ COMP_ORDER_OVERRIDE ,
107 COMP_TYPE_OVERRIDE ,
118 START_FUNC_NAME ,
129 START_ORDER_OVERRIDE ,
1310 STOP_FUNC_NAME ,
1411 STOP_ORDER_OVERRIDE ,
12+ CompOrder ,
1513 CompType
1614)
1715
16+ if TYPE_CHECKING :
17+ from .assembler import NodeAssembler
18+
1819
19- class AssemblyArtifact :
20+ class BuildArtifact :
2021 assembler : "NodeAssembler"
2122 comp_dict : dict [str , Any ]
2223 dep_graph : dict [str , list [str ]]
@@ -130,10 +131,24 @@ def build_start_order(self):
130131 Checks if components define a start function in init order. Can
131132 be overridden by setting start order override in the `NodeAssembler`.
132133 """
133- self .start_order = getattr (self .assembler , START_ORDER_OVERRIDE , None ) or [
134- comp_name for comp_name in self .init_order
135- if getattr (self .comp_dict [comp_name ], START_FUNC_NAME , None )
136- ]
134+
135+ self .start_order = getattr (self .assembler , START_ORDER_OVERRIDE , None )
136+
137+ if self .start_order :
138+ return
139+
140+ workers = []
141+ start_order = []
142+ for comp_name in self .init_order :
143+ comp = self .comp_dict [comp_name ]
144+ if getattr (comp , START_FUNC_NAME , None ):
145+ if getattr (comp , COMP_ORDER_OVERRIDE , None ) == CompOrder .WORKER :
146+ workers .append (comp_name )
147+ else :
148+ start_order .append (comp_name )
149+
150+ # order workers first
151+ self .start_order = workers + start_order
137152
138153 print ("\n start order" )
139154 [print (f"{ i } : { comp_name } " ) for i , comp_name in enumerate (self .start_order )]
@@ -144,11 +159,26 @@ def build_stop_order(self):
144159 Checks if components define a stop function in init order. Can
145160 be overridden by setting stop order override in the `NodeAssembler`.
146161 """
147- self .stop_order = getattr (self .assembler , STOP_ORDER_OVERRIDE , None ) or [
148- comp_name for comp_name in self .init_order
149- if getattr (self .comp_dict [comp_name ], STOP_FUNC_NAME , None )
150- ]
151-
162+ self .stop_order = getattr (self .assembler , STOP_ORDER_OVERRIDE , None )
163+
164+ if self .stop_order :
165+ return
166+
167+ workers = []
168+ stop_order = []
169+ for comp_name in self .init_order :
170+ comp = self .comp_dict [comp_name ]
171+ if getattr (comp , STOP_FUNC_NAME , None ):
172+ if getattr (comp , COMP_ORDER_OVERRIDE , None ) == CompOrder .WORKER :
173+ workers .append (comp_name )
174+ else :
175+ stop_order .append (comp_name )
176+
177+ # order workers first (last)
178+ self .stop_order = workers + stop_order
179+ # reverse order from start order
180+ self .stop_order .reverse ()
181+
152182 print ("\n stop order" )
153183 [print (f"{ i } : { comp_name } " ) for i , comp_name in enumerate (self .stop_order )]
154184
0 commit comments