diff --git a/src/jsonrpc/__init__.py b/src/jsonrpc/__init__.py index f6a574a..9d653bb 100644 --- a/src/jsonrpc/__init__.py +++ b/src/jsonrpc/__init__.py @@ -32,19 +32,12 @@ class Method: self.middlewares = middlewares self.debug = debug - def __call__(self, query): + def exec_function(self, query): params = None if 'params' in query: params = query['params'] if self.debug: log.error(params) - if isinstance(self.middlewares, list): - for item in self.middlewares: - item(query) - elif callable(self.middlewares): - self.middlewares(query) - - if params is None: response = self.function() elif isinstance(params, list): @@ -59,6 +52,23 @@ class Method: return response + def __call__(self, query): + if isinstance(self.middlewares, list): + i = iter(self.middlewares) + onion = self.exec_function + while (handler := next(i, None)): + onion = handler(onion) + response = onion(query) + return response + elif callable(self.middlewares): + middleware = self.middlewares(self.exec_function) + response = middleware(query) + return response + + + response = self.exec_function(query) + return response + def __repr__(self): return '<{}>'.format(self.function)