diff --git a/src/aare/devices/workflow_tools.py b/src/aare/devices/workflow_tools.py index 494412df..c4ae57e9 100755 --- a/src/aare/devices/workflow_tools.py +++ b/src/aare/devices/workflow_tools.py @@ -6,14 +6,17 @@ from epics import poll def wait_position(motor, target, tolerance=None, timeout=60.0): position = motor.readback if isinstance(position, float) and tolerance is None: - tst = "%f %s" - ltst = lambda x, y, z: eval(tst % (x, y)) # noqa: E731 + tst = "%f == %s" + ltst = lambda x, y, z: x == y # noqa: E731 elif isinstance(position, float) and tolerance is not None: tst = "abs(%f - %f) < %f" - ltst = lambda x, y, z: eval(tst % (x, y, z)) # noqa: E731 - elif isinstance(position, bytes): + ltst = lambda x, y, z: abs(x - y) < z # noqa: E731 + elif isinstance(position, (bytes, str)): tst = "'%s' == '%s'" - ltst = lambda x, y, z: eval(tst % (x.lower(), y.lower())) # noqa: E731 + if isinstance(position, bytes): + ltst = lambda x, y, z: x.lower() == y.lower().encode() if isinstance(y, str) else x.lower() == y.lower() + else: + ltst = lambda x, y, z: x.lower() == y.lower() else: raise RuntimeError("BUG: could not understand arguments: ")