Skip to content

Commit e494b6b

Browse files
committed
fix tab completion for dynamic traits and tidy tests
1 parent d092d99 commit e494b6b

File tree

2 files changed

+22
-15
lines changed

2 files changed

+22
-15
lines changed

nipype/interfaces/base/specs.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ def __init__(self, **kwargs):
7272
self.trait_set(trait_change_notify=False, **undefined_traits)
7373
self._generate_handlers()
7474
self.trait_set(**kwargs)
75-
self.__all__ = self.class_editable_traits()
7675

7776
def items(self):
7877
""" Name, trait generator for user modifiable traits
@@ -312,6 +311,11 @@ def _get_sorteddict(self,
312311
out = objekt
313312
return out
314313

314+
@property
315+
def __all__(self):
316+
return [k for k,v in self.items() if not k == "__all__"]
317+
318+
315319

316320
class TraitedSpec(BaseTraitedSpec):
317321
""" Create a subclass with strict traits.

nipype/interfaces/base/tests/test_specs.py

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -55,17 +55,14 @@ def test_TraitedSpec_tab_completion():
5555
bet_nd = Node(fsl.BET(), name = 'bet')
5656
bet_interface = fsl.BET()
5757
bet_inputs = bet_nd.inputs.class_editable_traits()
58-
bet_outputs = bet_nd.outputs.class_editable_traits()
58+
bet_outputs = bet_nd.outputs.class_editable_traits()
5959

6060
# Check __all__ for bet node and interface inputs
61-
assert bet_nd.inputs.__all__ == [
62-
x for x in bet_inputs if not x == "__all__"]
63-
assert bet_interface.inputs.__all__ == [
64-
x for x in bet_inputs if not x == "__all__"]
61+
assert bet_nd.inputs.__all__ == bet_inputs
62+
assert bet_interface.inputs.__all__ == bet_inputs
6563

6664
# Check __all__ for bet node outputs
67-
assert bet_nd.outputs.__all__ == [
68-
x for x in bet_outputs if not x == "__all__"]
65+
assert bet_nd.outputs.__all__ == bet_outputs
6966

7067

7168
@pytest.mark.skip
@@ -91,20 +88,26 @@ def test_DynamicTraitedSpec_tab_completion():
9188
func_interface = Function(input_names=["list_out"],
9289
output_names=["out_file","another_file"],
9390
function=extract_func)
94-
# Check __all__ for interface inputs
95-
assert func_interface.inputs.__all__ == func_interface._input_names
96-
9791
# Define node
9892
list_extract = Node(Function(
9993
input_names=["list_out"],output_names=["out_file"],
10094
function=extract_func), name="list_extract")
10195

96+
# Check __all__ for interface inputs
97+
expected_input = sorted(list_extract.inputs.editable_traits())
98+
assert(sorted(func_interface.inputs.__all__) == expected_input)
99+
102100
# Check __all__ for node inputs
103-
assert list_extract.inputs.__all__ == list_extract._interface._input_names
101+
assert(sorted(list_extract.inputs.__all__) == expected_input)
102+
104103
# Check __all__ for node outputs
105-
outputs_dict = list_extract._interface._outputs().get().items()
106-
outputs = [k for k,v in outputs_dict if not k == "__all__"]
107-
assert list_extract.outputs.__all__ == outputs
104+
expected_output = sorted(list_extract.outputs.editable_traits())
105+
assert(sorted(list_extract.outputs.__all__) == expected_output)
106+
107+
# Add trait and retest
108+
list_extract.outputs.add_trait("added_out_trait","val")
109+
expected_output = sorted(['added_out_trait',*expected_output])
110+
assert(sorted(list_extract.outputs.__all__) == expected_output)
108111

109112

110113
def test_TraitedSpec_logic():

0 commit comments

Comments
 (0)