Beispiel #1
0
    def _call_method(self, ctx, request):
        """Calls given method with given params and returns it value."""
        method = self.method_data[request['method']]['method']
        params = request['params']
        result = None
        try:
            if isinstance(params, list):
                # Does it have enough arguments?
                if len(params) < self._man_args(method) - 1:
                    raise InvalidParamsError('not enough arguments')
                # Does it have too many arguments?
                if (not self._vargs(method)
                        and len(params) > self._max_args(method) - 1):
                    raise InvalidParamsError('too many arguments')

                result = method(ctx, *params)
            elif isinstance(params, dict):
                # Do not accept keyword arguments if the jsonrpc version is
                # not >=1.1.
                if request['jsonrpc'] < 11:
                    raise KeywordError

                result = method(ctx, **params)
            else:  # No params
                result = method(ctx)
        except JSONRPCError:
            raise
        except Exception as e:
            # log.exception('method %s threw an exception' % request['method'])
            # Exception was raised inside the method.
            newerr = ServerError()
            newerr.trace = traceback.format_exc()
            newerr.data = e.__str__()
            raise newerr
        return result
Beispiel #2
0
    def _call_method(self, ctx, request):
        """Calls given method with given params and returns it value."""
        LOGGER.info(
            "### JSONRPCServiceCustom._call_method() ctx = {0} request = {1}".
            format(pformat(ctx), pformat(request)))
        method = self.method_data[request['method']]['method']
        params = request['params']
        result = None
        LOGGER.info(
            "### JSONRPCServiceCustom._call_method() params = {0}".format(
                pformat(params)))
        try:
            if isinstance(params, list):
                # Does it have enough arguments?
                if len(params) < self._man_args(method) - 1:
                    raise InvalidParamsError('not enough arguments')
                # Does it have too many arguments?
                if (not self._vargs(method)
                        and len(params) > self._max_args(method) - 1):
                    raise InvalidParamsError('too many arguments')

                result = method(ctx, *params)
            elif isinstance(params, dict):
                # Do not accept keyword arguments if the jsonrpc version is
                # not >=1.1.
                if request['jsonrpc'] < 11:
                    raise KeywordError

                result = method(ctx, **params)
            else:  # No params
                result = method(ctx)
        except JSONRPCError:
            raise
        except Exception as e:
            LOGGER.exception('method %s threw an exception' %
                             request['method'])
            # Exception was raised inside the method.
            newerr = JSONServerError()
            newerr.trace = traceback.format_exc()
            if isinstance(e.message, basestring):
                newerr.data = e.message
            else:
                # Some exceptions embed other exceptions as the message
                newerr.data = repr(e.message)
            raise newerr
        return result
    def _call_method(self, ctx, request):
        """Calls given method with given params and returns it value."""
        method = self.method_data[request['method']]['method']
        params = request['params']
        result = None
        try:
            if isinstance(params, list):
                # Does it have enough arguments?
                if len(params) < self._man_args(method) - 1:
                    raise InvalidParamsError('not enough arguments')
                # Does it have too many arguments?
                if (not self._vargs(method)
                        and len(params) > self._max_args(method) - 1):
                    raise InvalidParamsError('too many arguments')

                result = method(ctx, *params)
            elif isinstance(params, dict):
                # Do not accept keyword arguments if the jsonrpc version is
                # not >=1.1.
                if request['jsonrpc'] < 11:
                    raise KeywordError

                result = method(ctx, **params)
            else:  # No params
                result = method(ctx)
        except JSONRPCError:
            raise
        except Exception as e:
            # log.exception('method %s threw an exception' % request['method'])
            # Exception was raised inside the method.
            newerr = JSONServerError()
            newerr.trace = traceback.format_exc()
            if len(e.args) == 1:
                # THIS WAS CHANGED INTENTIONALLY - if you recompile please restore.
                # repr adds single quotes around string arguments which is not what we want.
                if type(e.args[0]) == str:
                    newerr.data = str(e.args[0])
                else:
                    newerr.data = repr(e.args[0])
            else:
                newerr.data = repr(e.args)
            raise newerr
        return result
 def validate_params(self, method_name, data):
     schema_key = method_name + '_params'
     try:
         self.schema.validate(schema_key, data)
     except SchemaError as ex:
         raise InvalidParamsError(
             data={
                 'schema_error': ex.message,
                 'schema_path': ex.path,
                 'schema_value': ex.value
             })
 def validate_config(self, data):
     schema_key = 'config'
     try:
         self.schema.validate(schema_key, data)
     except SchemaError as ex:
         raise InvalidParamsError(
             data={
                 'schema_error': ex.message,
                 'schema_path': ex.path,
                 'schema_value': ex.value
             })