Skip to content

Commit f6f97b6

Browse files
committed
use nipype's which in nifty package
1 parent 7b2b350 commit f6f97b6

File tree

18 files changed

+137
-119
lines changed

18 files changed

+137
-119
lines changed

nipype/interfaces/base.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1601,13 +1601,14 @@ def raise_exception(self, runtime):
16011601
def _get_environ(self):
16021602
return getattr(self.inputs, 'environ', {})
16031603

1604-
def version_from_command(self, flag='-v'):
1605-
cmdname = self.cmd.split()[0]
1604+
def version_from_command(self, flag='-v', cmd=None):
1605+
if cmd is None:
1606+
cmd = self.cmd.split()[0]
16061607
env = dict(os.environ)
1607-
if which(cmdname, env):
1608+
if which(cmd, env):
16081609
out_environ = self._get_environ()
16091610
env.update(out_environ)
1610-
proc = sp.Popen(' '.join((cmdname, flag)),
1611+
proc = sp.Popen(' '.join((cmd, flag)),
16111612
shell=True,
16121613
env=env,
16131614
stdout=sp.PIPE,

nipype/interfaces/niftyfit/base.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,11 @@
1919
"""
2020

2121
import os
22-
import warnings
2322

2423
from ..base import CommandLine
2524
from ...utils.filemanip import split_filename
2625

2726

28-
warn = warnings.warn
29-
warnings.filterwarnings('always', category=UserWarning)
30-
31-
3227
class NiftyFitCommand(CommandLine):
3328
"""
3429
Base support interface for NiftyFit commands.

nipype/interfaces/niftyfit/tests/test_asl.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,18 @@
44

55
import pytest
66

7-
from nipype.interfaces.niftyfit import FitAsl
8-
from nipype.interfaces.niftyreg import no_nifty_package, get_custom_path
9-
from nipype.testing import example_data
7+
from ....utils.filemanip import which
8+
from ....testing import example_data
9+
from ...niftyreg import get_custom_path
1010

11+
from ..niftyfit import FitAsl
1112

12-
@pytest.mark.skipif(no_nifty_package(cmd='fit_asl'),
13+
14+
def no_nifty_tool(cmd=None):
15+
return which(cmd) is None
16+
17+
18+
@pytest.mark.skipif(no_nifty_tool(cmd='fit_asl'),
1319
reason="niftyfit is not installed")
1420
def test_fit_asl():
1521
""" Testing FitAsl interface."""

nipype/interfaces/niftyfit/tests/test_dwi.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,18 @@
33

44
import pytest
55

6-
from nipype.interfaces.niftyfit import FitDwi, DwiTool
7-
from nipype.interfaces.niftyreg import no_nifty_package, get_custom_path
8-
from nipype.testing import example_data
6+
from ....utils.filemanip import which
7+
from ....testing import example_data
8+
from ...niftyreg import get_custom_path
99

10+
from ..niftyfit import FitDwi, DwiTool
1011

11-
@pytest.mark.skipif(no_nifty_package(cmd='fit_dwi'),
12+
13+
def no_nifty_tool(cmd=None):
14+
return which(cmd) is None
15+
16+
17+
@pytest.mark.skipif(no_nifty_tool(cmd='fit_dwi'),
1218
reason="niftyfit is not installed")
1319
def test_fit_dwi():
1420
""" Testing FitDwi interface."""
@@ -56,7 +62,7 @@ def test_fit_dwi():
5662
assert fit_dwi.cmdline == expected_cmd
5763

5864

59-
@pytest.mark.skipif(no_nifty_package(cmd='dwi_tool'),
65+
@pytest.mark.skipif(no_nifty_tool(cmd='dwi_tool'),
6066
reason="niftyfit is not installed")
6167
def test_dwi_tool():
6268
""" Testing DwiTool interface."""

nipype/interfaces/niftyfit/tests/test_qt1.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,18 @@
44

55
import pytest
66

7-
from nipype.interfaces.niftyfit import FitQt1
8-
from nipype.interfaces.niftyreg import no_nifty_package, get_custom_path
9-
from nipype.testing import example_data
7+
from ....utils.filemanip import which
8+
from ....testing import example_data
9+
from ...niftyreg import get_custom_path
1010

11+
from ..niftyfit import FitQt1
1112

12-
@pytest.mark.skipif(no_nifty_package(cmd='fit_qt1'),
13+
14+
def no_nifty_tool(cmd=None):
15+
return which(cmd) is None
16+
17+
18+
@pytest.mark.skipif(no_nifty_tool(cmd='fit_qt1'),
1319
reason="niftyfit is not installed")
1420
def test_fit_qt1():
1521
""" Testing FitQt1 interface."""

nipype/interfaces/niftyreg/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
Top-level namespace for niftyreg.
1010
"""
1111

12-
from .base import no_nifty_package, get_custom_path
12+
from .base import get_custom_path
1313
from .reg import RegAladin, RegF3D
1414
from .regutils import (RegResample, RegJacobian, RegAverage, RegTools,
1515
RegTransform, RegMeasure)

nipype/interfaces/niftyreg/base.py

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -22,28 +22,18 @@
2222
from builtins import property, super
2323
from distutils.version import StrictVersion
2424
import os
25-
import shutil
26-
import subprocess
27-
from warnings import warn
2825

26+
from ... import logging
2927
from ..base import CommandLine, CommandLineInputSpec, traits, Undefined
3028
from ...utils.filemanip import split_filename
3129

30+
iflogger = logging.getLogger('interface')
31+
3232

3333
def get_custom_path(command, env_dir='NIFTYREGDIR'):
3434
return os.path.join(os.getenv(env_dir, ''), command)
3535

3636

37-
def no_nifty_package(cmd='reg_f3d'):
38-
try:
39-
return shutil.which(cmd) is None
40-
except AttributeError: # Python < 3.3
41-
return not any(
42-
[os.path.isfile(os.path.join(path, cmd)) and
43-
os.access(os.path.join(path, cmd), os.X_OK)
44-
for path in os.environ["PATH"].split(os.pathsep)])
45-
46-
4737
class NiftyRegCommandInputSpec(CommandLineInputSpec):
4838
"""Input Spec for niftyreg interfaces."""
4939
# Set the number of omp thread to use
@@ -65,18 +55,18 @@ def __init__(self, required_version=None, **inputs):
6555
self.num_threads = 1
6656
super(NiftyRegCommand, self).__init__(**inputs)
6757
self.required_version = required_version
68-
_version = self.get_version()
58+
_version = self.get_version_from_command()
6959
if _version:
7060
_version = _version.decode("utf-8")
7161
if self._min_version is not None and \
7262
StrictVersion(_version) < StrictVersion(self._min_version):
7363
msg = 'A later version of Niftyreg is required (%s < %s)'
74-
warn(msg % (_version, self._min_version))
64+
iflogger.warning(msg, _version, self._min_version)
7565
if required_version is not None:
7666
if StrictVersion(_version) != StrictVersion(required_version):
7767
msg = 'The version of NiftyReg differs from the required'
7868
msg += '(%s != %s)'
79-
warn(msg % (_version, self.required_version))
69+
iflogger.warning(msg, _version, self.required_version)
8070
self.inputs.on_trait_change(self._omp_update, 'omp_core_val')
8171
self.inputs.on_trait_change(self._environ_update, 'environ')
8272
self._omp_update()
@@ -102,7 +92,7 @@ def _environ_update(self):
10292
self.inputs.omp_core_val = Undefined
10393

10494
def check_version(self):
105-
_version = self.get_version()
95+
_version = self.get_version_from_command()
10696
if not _version:
10797
raise Exception('Niftyreg not found')
10898
# Decoding to string:
@@ -116,18 +106,12 @@ def check_version(self):
116106
err += '(%s != %s)'
117107
raise ValueError(err % (_version, self.required_version))
118108

119-
def get_version(self):
120-
if no_nifty_package(cmd=self.cmd):
121-
return None
122-
exec_cmd = ''.join((self.cmd, ' -v'))
123-
return subprocess.check_output(exec_cmd, shell=True).strip()
124-
125109
@property
126110
def version(self):
127-
return self.get_version()
111+
return self.get_version_from_command()
128112

129113
def exists(self):
130-
return self.get_version() is not None
114+
return self.get_version_from_command() is not None
131115

132116
def _format_arg(self, name, spec, value):
133117
if name == 'omp_core_val':

nipype/interfaces/niftyreg/reg.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,12 @@
2020
absolute_import)
2121
from builtins import staticmethod
2222
import os
23-
import warnings
2423

2524
from ..base import TraitedSpec, File, traits, isdefined
2625
from .base import get_custom_path, NiftyRegCommand, NiftyRegCommandInputSpec
2726
from ...utils.filemanip import split_filename
2827

2928

30-
warn = warnings.warn
31-
warnings.filterwarnings('always', category=UserWarning)
32-
33-
3429
class RegAladinInputSpec(NiftyRegCommandInputSpec):
3530
""" Input Spec for RegAladin. """
3631
# Input reference file

nipype/interfaces/niftyreg/regutils.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,13 @@
1818
from __future__ import (print_function, division, unicode_literals,
1919
absolute_import)
2020
from builtins import len, open, property, super
21-
import warnings
2221
import os
2322

2423
from ..base import TraitedSpec, File, traits, isdefined
2524
from .base import get_custom_path, NiftyRegCommand, NiftyRegCommandInputSpec
2625
from ...utils.filemanip import split_filename
2726

2827

29-
warn = warnings.warn
30-
warnings.filterwarnings('always', category=UserWarning)
31-
32-
3328
class RegResampleInputSpec(NiftyRegCommandInputSpec):
3429
""" Input Spec for RegResample. """
3530
# Input reference file

nipype/interfaces/niftyreg/tests/test_reg.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,18 @@
44

55
import pytest
66

7-
from nipype.interfaces.niftyreg import (no_nifty_package, get_custom_path,
8-
RegAladin, RegF3D)
9-
from nipype.testing import example_data
7+
from ....utils.filemanip import which
8+
from ....testing import example_data
9+
from ..niftyreg import (
10+
get_custom_path, RegAladin, RegF3D)
11+
12+
13+
def no_nifty_tool(cmd=None):
14+
return which(cmd) is None
1015

1116

1217
@pytest.mark.skipif(
13-
no_nifty_package(cmd='reg_aladin'),
18+
no_nifty_tool(cmd='reg_aladin'),
1419
reason="niftyreg is not installed. reg_aladin not found.")
1520
def test_reg_aladin():
1621
""" tests for reg_aladin interface"""
@@ -48,7 +53,7 @@ def test_reg_aladin():
4853

4954

5055
@pytest.mark.skipif(
51-
no_nifty_package(cmd='reg_f3d'),
56+
no_nifty_tool(cmd='reg_f3d'),
5257
reason="niftyreg is not installed. reg_f3d not found.")
5358
def test_reg_f3d():
5459
""" tests for reg_f3d interface"""

0 commit comments

Comments
 (0)