Skip to content

Commit 35d792c

Browse files
committed
RF: Handle garbled versions in a way compatible with packaging.version
1 parent b8c9a6c commit 35d792c

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

nipype/interfaces/base/core.py

+15-15
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import shutil
1717
import simplejson as json
1818
from traits.trait_errors import TraitError
19-
from packaging.version import Version
19+
from packaging.version import Version, InvalidVersion
2020

2121
from ... import config, logging
2222
from ...utils.provenance import write_provenance
@@ -293,23 +293,26 @@ def _check_version_requirements(self, trait_object, permissive=False):
293293
check = dict(min_ver=lambda t: t is not None)
294294
names = trait_object.trait_names(**check)
295295

296+
if self.version:
297+
try:
298+
version = Version(str(self.version))
299+
except InvalidVersion as err:
300+
version = err
301+
296302
if names and self.version:
297-
version = Version(str(self.version))
298303
for name in names:
299304
min_ver = Version(str(trait_object.traits()[name].min_ver))
300-
try:
301-
too_old = min_ver > version
302-
except TypeError as err:
305+
if isinstance(version, InvalidVersion):
303306
msg = (
304-
f"Nipype cannot validate the package version {version!r} for "
307+
f"Nipype cannot validate the package version {self.version} for "
305308
f"{self.__class__.__name__}. Trait {name} requires version >={min_ver}."
306309
)
307310
if not permissive:
308311
iflogger.warning(f"{msg}. Please verify validity.")
309312
if config.getboolean("execution", "stop_on_unknown_version"):
310-
raise ValueError(msg) from err
313+
raise ValueError(msg) from version
311314
continue
312-
if too_old:
315+
if min_ver > version:
313316
unavailable_traits.append(name)
314317
if not isdefined(getattr(trait_object, name)):
315318
continue
@@ -323,22 +326,19 @@ def _check_version_requirements(self, trait_object, permissive=False):
323326
check = dict(max_ver=lambda t: t is not None)
324327
names = trait_object.trait_names(**check)
325328
if names and self.version:
326-
version = Version(str(self.version))
327329
for name in names:
328330
max_ver = Version(str(trait_object.traits()[name].max_ver))
329-
try:
330-
too_new = max_ver < version
331-
except TypeError as err:
331+
if isinstance(version, InvalidVersion):
332332
msg = (
333-
f"Nipype cannot validate the package version {version!r} for "
333+
f"Nipype cannot validate the package version {self.version} for "
334334
f"{self.__class__.__name__}. Trait {name} requires version <={max_ver}."
335335
)
336336
if not permissive:
337337
iflogger.warning(f"{msg}. Please verify validity.")
338338
if config.getboolean("execution", "stop_on_unknown_version"):
339-
raise ValueError(msg) from err
339+
raise ValueError(msg) from version
340340
continue
341-
if too_new:
341+
if max_ver < version:
342342
unavailable_traits.append(name)
343343
if not isdefined(getattr(trait_object, name)):
344344
continue

0 commit comments

Comments
 (0)