def leave_Call(self, original: cst.Call, updated: cst.Call) -> cst.CSTNode:
    try:
        key = original.func.attr.value
        kword_params = self.METHOD_TO_PARAMS[key]
    except (AttributeError, KeyError):
        return updated
    (args, kwargs) = partition((lambda a: (not bool(a.keyword))), updated.args)
    if any(((k.keyword.value == 'request') for k in kwargs)):
        return updated
    (kwargs, ctrl_kwargs) = partition((lambda a: (a.keyword.value not in self.CTRL_PARAMS)), kwargs)
    (args, ctrl_args) = (args[:len(kword_params)], args[len(kword_params):])
    ctrl_kwargs.extend((cst.Arg(value=a.value, keyword=cst.Name(value=ctrl)) for (a, ctrl) in zip(ctrl_args, self.CTRL_PARAMS)))
    request_arg = cst.Arg(value=cst.Dict([cst.DictElement(cst.SimpleString("'{}'".format(name)), cst.Element(value=arg.value)) for (name, arg) in zip(kword_params, (args + kwargs))]), keyword=cst.Name('request'))
    return updated.with_changes(args=([request_arg] + ctrl_kwargs))
def leave_Call(self, original: cst.Call, updated: cst.Call) -> cst.CSTNode:
    try:
        key = original.func.attr.value
        kword_params = self.METHOD_TO_PARAMS[key]
    except (AttributeError, KeyError):
        return updated
    (args, kwargs) = partition((lambda a: (not bool(a.keyword))), updated.args)
    if any(((k.keyword.value == 'request') for k in kwargs)):
        return updated
    (kwargs, ctrl_kwargs) = partition((lambda a: (a.keyword.value not in self.CTRL_PARAMS)), kwargs)
    (args, ctrl_args) = (args[:len(kword_params)], args[len(kword_params):])
    ctrl_kwargs.extend((cst.Arg(value=a.value, keyword=cst.Name(value=ctrl)) for (a, ctrl) in zip(ctrl_args, self.CTRL_PARAMS)))
    request_arg = cst.Arg(value=cst.Dict([cst.DictElement(cst.SimpleString("'{}'".format(name)), cst.Element(value=arg.value)) for (name, arg) in zip(kword_params, (args + kwargs))]), keyword=cst.Name('request'))
    return updated.with_changes(args=([request_arg] + ctrl_kwargs))