Source code for apstools.plans.input_plan
"""
Request user input in a plan
++++++++++++++++++++++++++++
.. autosummary::
~request_input
Wrap ``bps.input_plan()`` to *ask* the user a question.
"""
import bluesky.plan_stubs as bps
[docs]def request_input(msg="", default="n", agree="y", bypass=False):
"""
Request input from the user. Returns ``True`` if confirmed.
Return whether (lower case) the response from user (or default) starts with the text
of ``agree`` or ``bypass is True``.
PARAMETERS
msg str:
Message text to be printed.
(default: ``""``)
default str:
Default response if user accepts default.
(default: ``"n"``)
agree (str or list):
User (or default) response must start with this text for ``True``. If a
list of strings is provided, response must match (lower case) one of the
strings in the list.
(default: ``"y"``)
bypass bool:
Allow for automated plans to bypass this request in-place.
(default: ``False``)
New in release 1.6.6
"""
match = False
if not bypass:
# note: caller should write ``msg`` to show the value(s) that match ``agree``
full_text = f"{msg} [{default}] "
r = yield from bps.input_plan(full_text)
print(f"Response: {r = }")
if len(r) == 0:
r = default
r = r.lower()
if isinstance(agree, str):
match = r.startswith(agree)
elif isinstance(agree, list):
match = r in [str(l).lower() for l in agree]
else:
raise TypeError(f"Unhandled type: agree={agree}")
return bypass or match
# -----------------------------------------------------------------------------
# :author: Pete R. Jemian
# :email: jemian@anl.gov
# :copyright: (c) 2017-2024, UChicago Argonne, LLC
#
# Distributed under the terms of the Argonne National Laboratory Open Source License.
#
# The full license is in the file LICENSE.txt, distributed with this software.
# -----------------------------------------------------------------------------