@@ -51,18 +51,7 @@ def __init__(self, channel, methods=None, name=None, pool_size=None,
5151 self ._name = name or repr (methods )
5252 self ._task_pool = gevent .pool .Pool (size = pool_size )
5353 self ._acceptor_task = None
54-
55- if hasattr (methods , '__getitem__' ):
56- self ._methods = methods
57- else :
58- server_methods = set (getattr (self , k ) for k in dir (Server ) if not
59- k .startswith ('_' ))
60- self ._methods = dict ((k , getattr (methods , k ))
61- for k in dir (methods )
62- if callable (getattr (methods , k ))
63- and not k .startswith ('_' )
64- and getattr (methods , k ) not in server_methods
65- )
54+ self ._methods = self ._zerorpc_filter_methods (ServerBase , self , methods )
6655
6756 self ._inject_builtins ()
6857 self ._heartbeat_freq = heartbeat
@@ -71,6 +60,19 @@ def __init__(self, channel, methods=None, name=None, pool_size=None,
7160 if not isinstance (functor , DecoratorBase ):
7261 self ._methods [k ] = rep (functor )
7362
63+ @staticmethod
64+ def _zerorpc_filter_methods (cls , self , methods ):
65+ if hasattr (methods , '__getitem__' ):
66+ return methods
67+ server_methods = set (getattr (self , k ) for k in dir (cls ) if not
68+ k .startswith ('_' ))
69+ return dict ((k , getattr (methods , k ))
70+ for k in dir (methods )
71+ if callable (getattr (methods , k ))
72+ and not k .startswith ('_' )
73+ and getattr (methods , k ) not in server_methods
74+ )
75+
7476 def __del__ (self ):
7577 self .close ()
7678
@@ -324,6 +326,9 @@ class Server(SocketBase, ServerBase):
324326 def __init__ (self , methods = None , name = None , context = None , pool_size = None ,
325327 heartbeat = 5 ):
326328 SocketBase .__init__ (self , zmq .XREP , context )
329+ if methods is None :
330+ methods = self
331+ methods = ServerBase ._zerorpc_filter_methods (Server , self , methods )
327332 ServerBase .__init__ (self , self ._events , methods , name , pool_size , heartbeat )
328333
329334 def close (self ):
@@ -366,18 +371,7 @@ def __init__(self, methods=None, name=None, context=None,
366371 if methods is None :
367372 methods = self
368373
369- if hasattr (methods , '__getitem__' ):
370- self ._methods = methods
371- else :
372- server_methods = set (getattr (self , k )
373- for k in dir (Puller ) if not k .startswith ('_' ))
374- self ._methods = dict ((k , getattr (methods , k ))
375- for k in dir (methods )
376- if callable (getattr (methods , k ))
377- and not k .startswith ('_' )
378- and getattr (methods , k ) not in server_methods
379- )
380-
374+ self ._methods = ServerBase ._zerorpc_filter_methods (Puller , self , methods )
381375 self ._receiver_task = None
382376
383377 def close (self ):
0 commit comments