@@ -183,7 +183,9 @@ def __init__(
183183 # Create input spec, disable any defaults that are unavailable due to
184184 # version, and then apply the inputs that were passed.
185185 self .inputs = self .input_spec ()
186- unavailable_traits = self ._check_version_requirements (self .inputs , raise_exception = False )
186+ unavailable_traits = self ._check_version_requirements (
187+ self .inputs , permissive = True
188+ )
187189 if unavailable_traits :
188190 self .inputs .trait_set (** {k : Undefined for k in unavailable_traits })
189191 self .inputs .trait_set (** inputs )
@@ -271,8 +273,12 @@ def _check_mandatory_inputs(self):
271273 ):
272274 self ._check_requires (spec , name , getattr (self .inputs , name ))
273275
274- def _check_version_requirements (self , trait_object , raise_exception = True ):
276+ def _check_version_requirements (self , trait_object , permissive = False ):
275277 """ Raises an exception on version mismatch
278+
279+ Set the ``permissive`` attribute to True to suppress warnings and exceptions.
280+ This is currently only used in __init__ to silently identify unavailable
281+ traits.
276282 """
277283 unavailable_traits = []
278284 # check minimum version
@@ -290,15 +296,16 @@ def _check_version_requirements(self, trait_object, raise_exception=True):
290296 f"Nipype cannot validate the package version { version !r} for "
291297 f"{ self .__class__ .__name__ } . Trait { name } requires version >={ min_ver } ."
292298 )
293- iflogger .warning (f"{ msg } . Please verify validity." )
299+ if not permissive :
300+ iflogger .warning (f"{ msg } . Please verify validity." )
294301 if config .getboolean ("execution" , "stop_on_unknown_version" ):
295302 raise ValueError (msg ) from err
296303 continue
297304 if too_old :
298305 unavailable_traits .append (name )
299306 if not isdefined (getattr (trait_object , name )):
300307 continue
301- if raise_exception :
308+ if not permissive :
302309 raise Exception (
303310 "Trait %s (%s) (version %s < required %s)"
304311 % (name , self .__class__ .__name__ , version , min_ver )
@@ -318,15 +325,16 @@ def _check_version_requirements(self, trait_object, raise_exception=True):
318325 f"Nipype cannot validate the package version { version !r} for "
319326 f"{ self .__class__ .__name__ } . Trait { name } requires version <={ max_ver } ."
320327 )
321- iflogger .warning (f"{ msg } . Please verify validity." )
328+ if not permissive :
329+ iflogger .warning (f"{ msg } . Please verify validity." )
322330 if config .getboolean ("execution" , "stop_on_unknown_version" ):
323331 raise ValueError (msg ) from err
324332 continue
325333 if too_new :
326334 unavailable_traits .append (name )
327335 if not isdefined (getattr (trait_object , name )):
328336 continue
329- if raise_exception :
337+ if not permissive :
330338 raise Exception (
331339 "Trait %s (%s) (version %s > required %s)"
332340 % (name , self .__class__ .__name__ , version , max_ver )
0 commit comments