11import base64
2- from collections import deque
3- import copy
42import time
53import asyncio
64
@@ -24,7 +22,7 @@ class GraphTemplate(BaseDatabaseModel):
2422 secrets : Dict [str , str ] = Field (default_factory = dict , description = "Secrets of the graph" )
2523
2624 _node_by_identifier : Dict [str , NodeTemplate ] | None = PrivateAttr (default = None )
27- _parents_by_identifier : Dict [str , set [str ]] | None = PrivateAttr (default = None )
25+ _parents_by_identifier : Dict [str , set [str ]] | None = PrivateAttr (default = None ) # type: ignore
2826 _root_node : NodeTemplate | None = PrivateAttr (default = None )
2927
3028 class Settings :
@@ -186,7 +184,23 @@ def _validate_secret_value(cls, secret_value: str) -> None:
186184 raise ValueError ("Decoded value is too short to contain valid nonce" )
187185 except Exception :
188186 raise ValueError ("Value is not valid URL-safe base64 encoded" )
189-
187+
188+ @model_validator (mode = 'after' )
189+ def validate_unites_identifiers_exist (self ) -> Self :
190+ errors = []
191+ identifiers = set ()
192+ for node in self .nodes :
193+ identifiers .add (node .identifier )
194+ for node in self .nodes :
195+ if node .unites is not None :
196+ if node .unites .identifier not in identifiers :
197+ errors .append (f"Node { node .identifier } has an unites target { node .unites .identifier } that does not exist" )
198+ if node .unites .identifier == node .identifier :
199+ errors .append (f"Node { node .identifier } has an unites target { node .unites .identifier } that is the same as the node itself" )
200+ if errors :
201+ raise ValueError ("\n " .join (errors ))
202+ return self
203+
190204 @model_validator (mode = 'after' )
191205 def validate_graph_is_connected (self ) -> Self :
192206 errors = []
@@ -210,22 +224,6 @@ def validate_graph_is_acyclic(self) -> Self:
210224 raise ValueError ("\n " .join (errors ))
211225 return self
212226
213- @model_validator (mode = 'after' )
214- def verify_unites_identifiers_exist (self ) -> Self :
215- errors = []
216- identifiers = set ()
217- for node in self .nodes :
218- identifiers .add (node .identifier )
219- for node in self .nodes :
220- if node .unites is not None :
221- if node .unites .identifier not in identifiers :
222- errors .append (f"Node { node .identifier } has a unit { node .unites .identifier } that does not exist" )
223- if node .unites .identifier == node .identifier :
224- errors .append (f"Node { node .identifier } has a unit { node .unites .identifier } that is the same as the node itself" )
225- if errors :
226- raise ValueError ("\n " .join (errors ))
227- return self
228-
229227 @model_validator (mode = 'after' )
230228 def verify_input_dependencies (self ) -> Self :
231229 errors = []
0 commit comments