Skip to content

Commit f31e79f

Browse files
authored
Support cmd.iterate expression as a decorated function (#449)
1 parent c208c62 commit f31e79f

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

modules/pymol/editing.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ def _iterate_prepare_args(expression, space, _self):
6666
if True:
6767

6868
import math
69+
from functools import partial
6970
from . import selector
7071
cmd = __import__("sys").modules["pymol.cmd"]
7172
from .cmd import _cmd,lock,unlock,is_string, \
@@ -1487,8 +1488,7 @@ def alter_list(object, expr_list, quiet=1, space=None, _self=cmd):
14871488
return _cmd.alter_list(_self._COb, object, list(expr_list),
14881489
int(quiet), dict(space))
14891490

1490-
1491-
def iterate(selection, expression, quiet=1, space=None, _self=cmd):
1491+
def iterate(selection, expression=None, quiet=1, space=None, _self=cmd):
14921492

14931493
'''
14941494
DESCRIPTION
@@ -1524,6 +1524,9 @@ def iterate(selection, expression, quiet=1, space=None, _self=cmd):
15241524
15251525
iterate_state, alter, alter_state
15261526
'''
1527+
if expression is None:
1528+
return partial(iterate, selection, quiet=quiet, space=space, _self=_self)
1529+
15271530
expression, space = _iterate_prepare_args(expression, space, _self)
15281531

15291532
# preprocess selection

testing/tests/api/editing.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,16 @@ def testIterateCallback(self):
5656
self.assertEqual([a.name for a in atoms], ['N', 'CA', 'C', 'O'])
5757
self.assertEqual([a.protons for a in atoms], [7, 6, 6, 8])
5858

59+
@testing.requires_version("3.1")
60+
def testIterateDecorator(self):
61+
cmd.fragment('gly')
62+
atoms = []
63+
@cmd.iterate('not hydro')
64+
def real_iterate(at):
65+
atoms.append(at)
66+
self.assertEqual([a.name for a in atoms], ['N', 'CA', 'C', 'O'])
67+
self.assertEqual([a.protons for a in atoms], [7, 6, 6, 8])
68+
5969
@testing.requires_version("2.6")
6070
def testIterate__explicit_degree(self):
6171
cmd.fragment("ala")

0 commit comments

Comments
 (0)