예제 #1
0
파일: task.py 프로젝트: SEJeff/taskflow
def _build_arg_mapping(task_name, reqs, rebind_args, function, do_infer):
    """Given a function, its requirements and a rebind mapping this helper
    function will build the correct argument mapping for the given function as
    well as verify that the final argument mapping does not have missing or
    extra arguments (where applicable).
    """
    task_args = reflection.get_callable_args(function, required_only=True)
    result = {}
    if reqs:
        result.update((a, a) for a in reqs)
    if do_infer:
        result.update((a, a) for a in task_args)
    result.update(_build_rebind_dict(task_args, rebind_args))

    if not reflection.accepts_kwargs(function):
        all_args = reflection.get_callable_args(function, required_only=False)
        extra_args = set(result) - set(all_args)
        if extra_args:
            extra_args_str = ', '.join(sorted(extra_args))
            raise ValueError('Extra arguments given to task %s: %s'
                             % (task_name, extra_args_str))

    # NOTE(imelnikov): don't use set to preserve order in error message
    missing_args = [arg for arg in task_args if arg not in result]
    if missing_args:
        raise ValueError('Missing arguments for task %s: %s'
                         % (task_name, ' ,'.join(missing_args)))
    return result
예제 #2
0
def _build_arg_mapping(task_name, reqs, rebind_args, function, do_infer):
    task_args = reflection.get_required_callable_args(function)
    accepts_kwargs = reflection.accepts_kwargs(function)
    result = {}
    if reqs:
        result.update((a, a) for a in reqs)
    if do_infer:
        result.update((a, a) for a in task_args)
    result.update(_build_rebind_dict(task_args, rebind_args))
    _check_args_mapping(task_name, result, task_args, accepts_kwargs)
    return result
예제 #3
0
 def test_with_kwargs(self):
     self.assertEqual(
         reflection.accepts_kwargs(function_with_kwargs), True)
예제 #4
0
 def test_no_kwargs(self):
     self.assertEqual(
         reflection.accepts_kwargs(mere_function), False)
예제 #5
0
 def test_with_kwargs(self):
     self.assertEquals(reflection.accepts_kwargs(function_with_kwargs),
                       True)
예제 #6
0
 def test_no_kwargs(self):
     self.assertEquals(reflection.accepts_kwargs(mere_function), False)