33from asyncio import Queue , sleep
44from typing import List , Dict
55
6- from pydantic import BaseModel , ValidationError
6+ from pydantic import BaseModel
77from .node .BaseNode import BaseNode
88from aiohttp import ClientSession
99from logging import getLogger
@@ -271,27 +271,31 @@ def _validate_nodes(self):
271271 errors .append (f"{ node .__name__ } does not have an Inputs class" )
272272 if not hasattr (node , "Outputs" ):
273273 errors .append (f"{ node .__name__ } does not have an Outputs class" )
274- if not issubclass (node .Inputs , BaseModel ):
275- errors .append (f"{ node .__name__ } does not have an Inputs class that inherits from pydantic.BaseModel" )
276- if not issubclass (node .Outputs , BaseModel ):
274+ inputs_is_basemodel = hasattr (node , "Inputs" ) and issubclass (node .Inputs , BaseModel )
275+ if not inputs_is_basemodel :
276+ errors .append (f"{ node .__name__ } does not have an Inputs class that inherits from pydantic.BaseModel" )
277+ outputs_is_basemodel = hasattr (node , "Outputs" ) and issubclass (node .Outputs , BaseModel )
278+ if not outputs_is_basemodel :
277279 errors .append (f"{ node .__name__ } does not have an Outputs class that inherits from pydantic.BaseModel" )
278280 if not hasattr (node , "Secrets" ):
279281 errors .append (f"{ node .__name__ } does not have an Secrets class" )
280- if not issubclass (node .Secrets , BaseModel ):
282+ secrets_is_basemodel = hasattr (node , "Secrets" ) and issubclass (node .Secrets , BaseModel )
283+ if not secrets_is_basemodel :
281284 errors .append (f"{ node .__name__ } does not have an Secrets class that inherits from pydantic.BaseModel" )
282285
283286 # check all data objects are strings
284- for field_name , field_info in node .Inputs .model_fields .items ():
285- if field_info .annotation is not str :
286- errors .append (f"{ node .__name__ } .Inputs field '{ field_name } ' must be of type str, got { field_info .annotation } " )
287-
288- for field_name , field_info in node .Outputs .model_fields .items ():
289- if field_info .annotation is not str :
290- errors .append (f"{ node .__name__ } .Outputs field '{ field_name } ' must be of type str, got { field_info .annotation } " )
291-
292- for field_name , field_info in node .Secrets .model_fields .items ():
293- if field_info .annotation is not str :
294- errors .append (f"{ node .__name__ } .Secrets field '{ field_name } ' must be of type str, got { field_info .annotation } " )
287+ if inputs_is_basemodel :
288+ for field_name , field_info in node .Inputs .model_fields .items ():
289+ if field_info .annotation is not str :
290+ errors .append (f"{ node .__name__ } .Inputs field '{ field_name } ' must be of type str, got { field_info .annotation } " )
291+ if outputs_is_basemodel :
292+ for field_name , field_info in node .Outputs .model_fields .items ():
293+ if field_info .annotation is not str :
294+ errors .append (f"{ node .__name__ } .Outputs field '{ field_name } ' must be of type str, got { field_info .annotation } " )
295+ if secrets_is_basemodel :
296+ for field_name , field_info in node .Secrets .model_fields .items ():
297+ if field_info .annotation is not str :
298+ errors .append (f"{ node .__name__ } .Secrets field '{ field_name } ' must be of type str, got { field_info .annotation } " )
295299
296300 # Find nodes with the same __class__.__name__
297301 class_names = [node .__name__ for node in self ._nodes ]
@@ -300,7 +304,7 @@ def _validate_nodes(self):
300304 errors .append (f"Duplicate node class names found: { duplicate_class_names } " )
301305
302306 if len (errors ) > 0 :
303- raise ValidationError ("Following errors while validating nodes: " + "\n " .join (errors ))
307+ raise ValueError ("Following errors while validating nodes: " + "\n " .join (errors ))
304308
305309 async def _worker (self ):
306310 """
0 commit comments