Source code for schrodinger.test.stu.workups.workup_tools
import functools
messages = []
[docs]def workup(workup_function):
"""
Wrap a STU workup to:
* Return False for AssertionError
* Raise a WorkupImportFailure if the workup function does not exist
* Return True for return None?
* Capture messages and log to 'stu.workup'
"""
@functools.wraps(workup_function)
def wrapped(*args, **kwargs):
err = None
try:
rvalue = workup_function(*args, **kwargs)
if rvalue is None:
rvalue = True
except AssertionError as e:
err = e # py3 needs reassignment for scope
rvalue = False
if rvalue:
return rvalue
display_args = _display_args(args, kwargs)
message = workup_function.__name__
message += "("
message += ', '.join(display_args)
message += ") failed"
if err:
message += f":\n{err}"
messages.append(message)
return rvalue
setattr(wrapped, "wrapped", True)
return wrapped
def _display_args(args, kwargs):
display_args = list(map(repr, args))
# uses sorted to make tests consistent
display_args.extend(f'{k}={v!r}' for k, v in sorted(kwargs.items()))
return display_args