@@ -183,7 +183,9 @@ def __init__(
183
183
# Create input spec, disable any defaults that are unavailable due to
184
184
# version, and then apply the inputs that were passed.
185
185
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
+ )
187
189
if unavailable_traits :
188
190
self .inputs .trait_set (** {k : Undefined for k in unavailable_traits })
189
191
self .inputs .trait_set (** inputs )
@@ -271,8 +273,12 @@ def _check_mandatory_inputs(self):
271
273
):
272
274
self ._check_requires (spec , name , getattr (self .inputs , name ))
273
275
274
- def _check_version_requirements (self , trait_object , raise_exception = True ):
276
+ def _check_version_requirements (self , trait_object , permissive = False ):
275
277
""" 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.
276
282
"""
277
283
unavailable_traits = []
278
284
# check minimum version
@@ -290,15 +296,16 @@ def _check_version_requirements(self, trait_object, raise_exception=True):
290
296
f"Nipype cannot validate the package version { version !r} for "
291
297
f"{ self .__class__ .__name__ } . Trait { name } requires version >={ min_ver } ."
292
298
)
293
- iflogger .warning (f"{ msg } . Please verify validity." )
299
+ if not permissive :
300
+ iflogger .warning (f"{ msg } . Please verify validity." )
294
301
if config .getboolean ("execution" , "stop_on_unknown_version" ):
295
302
raise ValueError (msg ) from err
296
303
continue
297
304
if too_old :
298
305
unavailable_traits .append (name )
299
306
if not isdefined (getattr (trait_object , name )):
300
307
continue
301
- if raise_exception :
308
+ if not permissive :
302
309
raise Exception (
303
310
"Trait %s (%s) (version %s < required %s)"
304
311
% (name , self .__class__ .__name__ , version , min_ver )
@@ -318,15 +325,16 @@ def _check_version_requirements(self, trait_object, raise_exception=True):
318
325
f"Nipype cannot validate the package version { version !r} for "
319
326
f"{ self .__class__ .__name__ } . Trait { name } requires version <={ max_ver } ."
320
327
)
321
- iflogger .warning (f"{ msg } . Please verify validity." )
328
+ if not permissive :
329
+ iflogger .warning (f"{ msg } . Please verify validity." )
322
330
if config .getboolean ("execution" , "stop_on_unknown_version" ):
323
331
raise ValueError (msg ) from err
324
332
continue
325
333
if too_new :
326
334
unavailable_traits .append (name )
327
335
if not isdefined (getattr (trait_object , name )):
328
336
continue
329
- if raise_exception :
337
+ if not permissive :
330
338
raise Exception (
331
339
"Trait %s (%s) (version %s > required %s)"
332
340
% (name , self .__class__ .__name__ , version , max_ver )
0 commit comments