Skip to content

Commit ddb5be6

Browse files
committed
Fix error on typed lists
1 parent 2417417 commit ddb5be6

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

modules/pymol/commanding.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -641,11 +641,13 @@ def _into_types(type, value):
641641

642642
elif issubclass(list, origin):
643643
args = get_args(type)
644-
if len(args) > 0:
644+
if len(args) == 1:
645645
f = args[0]
646-
else:
647-
f = lambda x: x
648-
return [f(i) for i in shlex.split(value)]
646+
return [
647+
_into_types(f, a)
648+
for a in shlex.split(value)
649+
]
650+
return shlex.split(value)
649651

650652
elif issubclass(type, Enum):
651653
if value in type:

testing/tests/api/test_commanding.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
from pytest import mark
2-
from pymol import cmd
31
import sys
2+
from pytest import mark
43
from typing import List, Union, Any, Tuple
54
from pathlib import Path
6-
5+
from pymol import cmd
76

87
def test_docstring():
98
@cmd.new_command
@@ -40,6 +39,7 @@ def func(
4039
out, err = capsys.readouterr()
4140
assert out + err == ''
4241

42+
4343
def test_path(capsys):
4444
@cmd.new_command
4545
def func(dirname: Path = Path('.')):
@@ -50,7 +50,6 @@ def func(dirname: Path = Path('.')):
5050
assert out + err == ''
5151

5252

53-
5453
@mark.skip("This function does not works as expected")
5554
def test_any(capsys):
5655
@cmd.new_command
@@ -61,29 +60,36 @@ def func(old_style: Any):
6160
out, err = capsys.readouterr()
6261
assert 'AssertionError' not in out+err
6362

63+
6464
def test_list(capsys):
6565
@cmd.new_command
6666
def func(a: List):
6767
assert a[1] == "2"
68-
6968
cmd.do("func 1 2 3")
7069
out, err = capsys.readouterr()
7170
assert out + err == ''
7271

7372
@cmd.new_command
7473
def func(a: List[int]):
7574
assert a[1] == 2
76-
7775
cmd.do("func 1 2 3")
7876
out, err = capsys.readouterr()
7977
assert out + err == ''
8078

79+
@cmd.new_command
80+
def func(a: List[bool]):
81+
assert a.pop(0) == False
82+
assert a.pop(0) == True
83+
cmd.do("func 0 yes")
84+
out, err = capsys.readouterr()
85+
assert out + err == ''
86+
87+
8188
def test_tuple(capsys):
8289
@cmd.new_command
8390
def func(a: Tuple[str, int]):
84-
assert a == ("fooo", 42)
85-
86-
cmd.do("func fooo 42")
91+
assert a == ("fooo a", 42)
92+
cmd.do("func 'fooo a' 42")
8793
out, err = capsys.readouterr()
8894
assert out + err == ''
8995

@@ -97,6 +103,7 @@ def func(a: str="sele"):
97103
out, err = capsys.readouterr()
98104
assert out + err == ''
99105

106+
100107
@mark.skipif(
101108
sys.version_info < (3, 11),
102109
reason="Requires StrEnum of Python 3.11+"
@@ -113,6 +120,7 @@ def func(e: E):
113120
out, err = capsys.readouterr()
114121
assert out + err == ''
115122

123+
116124
def test_quiet(capsys):
117125
@cmd.new_command
118126
def func(quiet: bool=True):

0 commit comments

Comments
 (0)