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