Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
# create the body of the function to compile
# The generated function body should dispatch its received arguments to the inner function.
# For this we will pass as much as possible the arguments as keywords.
# However if there are varpositional arguments we cannot
assignments = [("%s=%s" % (k, k)) if is_kw else k for k, is_kw in params_to_kw_assignment_mode.items()]
params_str = ', '.join(assignments)
if inject_as_first_arg:
params_str = "%s, %s" % (func_name, params_str)
if _is_generator_func(func_impl):
if sys.version_info >= (3, 3):
body = "def %s\n yield from _func_impl_(%s)\n" % (func_signature_str, params_str)
else:
from makefun._main_legacy_py import get_legacy_py_generator_body_template
body = get_legacy_py_generator_body_template() % (func_signature_str, params_str)
else:
body = "def %s\n return _func_impl_(%s)\n" % (func_signature_str, params_str)
if iscoroutinefunction(func_impl):
body = ("async " + body).replace('return', 'return await')
# create the function by compiling code, mapping the `_func_impl_` symbol to `func_impl`
protect_eval_dict(evaldict, func_name, params_names)
evaldict['_func_impl_'] = func_impl
f = _make(func_name, params_names, body, evaldict)
# add the source annotation if needed
if add_source:
attrs['__source__'] = body
# add the handler if needed