'Accept input from the user.
:param str message: message to display to the user
:param default: default value to return (if one exists)
:param str cli_flag: option used to set this value with the CLI
:param bool force_interactive: True if it\'s safe to prompt the user
because it won\'t cause any workflow regressions
:returns: tuple of (`code`, `input`) where
`code` - str display exit code
`input` - str of the user\'s input
:rtype: tuple'

def input(self, message, default=None, cli_flag=None, force_interactive=False, **unused_kwargs):

    if self._return_default(message, default, cli_flag, force_interactive):
        return (OK, default)
    message = (_wrap_lines(("%s    (Enter    'c'    to    cancel):" % message)) + '    ')
    ans = input_with_timeout(message)
    if ((ans == 'c') or (ans == 'C')):
        return (CANCEL, '-1')
    else:
        return (OK, ans)
