]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/orchestrator: functools.partial doesn't work for methods 33432/head
authorSebastian Wagner <sebastian.wagner@suse.com>
Thu, 20 Feb 2020 13:09:24 +0000 (14:09 +0100)
committerSebastian Wagner <sebastian.wagner@suse.com>
Fri, 21 Feb 2020 09:00:22 +0000 (10:00 +0100)
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 <sebastian.wagner@suse.com>
src/pybind/mgr/orchestrator/_interface.py

index 2f04de54e0004a6f288a41a2f46b976a94576413..6509c126328ab4e92e25f01a5303f67d74f0c7e7 100644 (file)
@@ -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