Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 88ea7f1

Browse files
committed
_zerorpc_inspect return a language agnostic format
1 parent 7c8642b commit 88ea7f1

File tree

2 files changed

+33
-15
lines changed

2 files changed

+33
-15
lines changed

zerorpc/core.py

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ def __init__(self, channel, methods=None, name=None, context=None,
5050
methods = self
5151

5252
self._context = context or Context.get_instance()
53-
self._name = name or repr(methods)
53+
self._name = name or self._extract_name()
5454
self._task_pool = gevent.pool.Pool(size=pool_size)
5555
self._acceptor_task = None
56-
self._methods = self._zerorpc_filter_methods(ServerBase, self, methods)
56+
self._methods = self._filter_methods(ServerBase, self, methods)
5757

5858
self._inject_builtins()
5959
self._heartbeat_freq = heartbeat
@@ -63,7 +63,7 @@ def __init__(self, channel, methods=None, name=None, context=None,
6363
self._methods[k] = rep(functor)
6464

6565
@staticmethod
66-
def _zerorpc_filter_methods(cls, self, methods):
66+
def _filter_methods(cls, self, methods):
6767
if hasattr(methods, '__getitem__'):
6868
return methods
6969
server_methods = set(getattr(self, k) for k in dir(cls) if not
@@ -75,20 +75,29 @@ def _zerorpc_filter_methods(cls, self, methods):
7575
and getattr(methods, k) not in server_methods
7676
)
7777

78+
@staticmethod
79+
def _extract_name(methods):
80+
return getattr(type(methods), '__name__', None) or repr(methods)
81+
7882
def close(self):
7983
self.stop()
8084
self._multiplexer.close()
8185

82-
def _zerorpc_inspect(self, method=None, long_doc=True):
83-
if method:
84-
methods = {method: self._methods[method]}
85-
else:
86-
methods = dict((m, f) for m, f in self._methods.items()
86+
87+
def _format_args_spec(self, args_spec):
88+
r = [dict(name=name) for name in args_spec[0]]
89+
default_values = args_spec[3]
90+
if default_values is not None:
91+
for arg, def_val in zip(reversed(r), reversed(default_values)):
92+
arg['default'] = def_val
93+
return r
94+
95+
def _zerorpc_inspect(self):
96+
methods = dict((m, f) for m, f in self._methods.items()
8797
if not m.startswith('_'))
88-
detailled_methods = [(m, f._zerorpc_args(),
89-
f.__doc__ if long_doc else
90-
f.__doc__.split('\n', 1)[0] if f.__doc__ else None)
91-
for (m, f) in methods.items()]
98+
detailled_methods = dict((m,
99+
dict(args=self._format_args_spec(f._zerorpc_args()),
100+
doc=f._zerorpc_doc())) for (m, f) in methods.items())
92101
return {'name': self._name,
93102
'methods': detailled_methods}
94103

@@ -97,7 +106,8 @@ def _inject_builtins(self):
97106
if not m.startswith('_')]
98107
self._methods['_zerorpc_name'] = lambda: self._name
99108
self._methods['_zerorpc_ping'] = lambda: ['pong', self._name]
100-
self._methods['_zerorpc_help'] = lambda m: self._methods[m].__doc__
109+
self._methods['_zerorpc_help'] = lambda m: \
110+
self._methods[m]._zerorpc_doc()
101111
self._methods['_zerorpc_args'] = \
102112
lambda m: self._methods[m]._zerorpc_args()
103113
self._methods['_zerorpc_inspect'] = self._zerorpc_inspect
@@ -244,9 +254,12 @@ class Server(SocketBase, ServerBase):
244254
def __init__(self, methods=None, name=None, context=None, pool_size=None,
245255
heartbeat=5):
246256
SocketBase.__init__(self, zmq.XREP, context)
257+
247258
if methods is None:
248259
methods = self
249-
methods = ServerBase._zerorpc_filter_methods(Server, self, methods)
260+
261+
name = name or ServerBase._extract_name(methods)
262+
methods = ServerBase._filter_methods(Server, self, methods)
250263
ServerBase.__init__(self, self._events, methods, name, context,
251264
pool_size, heartbeat)
252265

@@ -291,7 +304,7 @@ def __init__(self, methods=None, context=None, zmq_socket=zmq.PULL):
291304
if methods is None:
292305
methods = self
293306

294-
self._methods = ServerBase._zerorpc_filter_methods(Puller, self, methods)
307+
self._methods = ServerBase._filter_methods(Puller, self, methods)
295308
self._receiver_task = None
296309

297310
def close(self):

zerorpc/decorators.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ def __get__(self, instance, type_instance=None):
4343
def __call__(self, *args, **kargs):
4444
return self._functor(*args, **kargs)
4545

46+
def _zerorpc_doc(self):
47+
if self.__doc__ is None:
48+
return None
49+
return inspect.cleandoc(self.__doc__)
50+
4651
def _zerorpc_args(self):
4752
try:
4853
args_spec = self._functor._zerorpc_args()

0 commit comments

Comments
 (0)