From fd0fae0b473d8dd5248172ab148c4090ddd6ec2b Mon Sep 17 00:00:00 2001 From: Sebastian Wagner Date: Thu, 20 Feb 2020 14:09:24 +0100 Subject: [PATCH] mgr/orchestrator: functools.partial doesn't work for methods Use `partialmethod` instead: ``` def decorator_partial(f): return partial(f) def decorator_lambda(f): return lambda *args, **kwargs: f(*args, **kwargs) class C: @decorator_partial def f(self, arg): pass decorator_lambda def g(self, arg): pass C().f(1) TypeError: f() missing 1 required positional argument: 'arg' C().g(1) None ``` Signed-off-by: Sebastian Wagner --- src/pybind/mgr/orchestrator/_interface.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pybind/mgr/orchestrator/_interface.py b/src/pybind/mgr/orchestrator/_interface.py index 2f04de54e0004..6509c126328ab 100644 --- a/src/pybind/mgr/orchestrator/_interface.py +++ b/src/pybind/mgr/orchestrator/_interface.py @@ -11,7 +11,7 @@ import pickle import sys import time from collections import namedtuple -from functools import wraps, partial +from functools import wraps, partialmethod import uuid import string import random @@ -150,7 +150,7 @@ def handle_exception(prefix, cmd_args, desc, perm, func): return HandleCommandResult(-errno.ENOENT, stderr=msg) # misuse partial to copy `wrapper` - wrapper_copy = partial(wrapper) + wrapper_copy = lambda *l_args, **l_kwargs: wrapper(*l_args, **l_kwargs) wrapper_copy._prefix = prefix # type: ignore wrapper_copy._cli_command = CLICommand(prefix, cmd_args, desc, perm) # type: ignore wrapper_copy._cli_command.func = wrapper_copy # type: ignore -- 2.39.5