예제 #1
0
파일: proxy.py 프로젝트: oirlab/tmt-crds
    def _call(self, *args, **kwargs):
        """Core of RPC dispatch without error interpretation, logging, or return value decoding."""
        params = kwargs if len(kwargs) else args
        jsonrpc_params = {"jsonrpc": self.__version,
                          "method": self.__service_name,
                          'params': params,
                          'id': message_id()
                         }

        parameters = json.dumps(jsonrpc_params)

        url = self._get_url(jsonrpc_params)

        if "serverless" in url or "server-less" in url:
            raise exceptions.ServiceError("Configured for server-less mode.  Skipping JSON RPC " + repr(self.__service_name))

        if log.get_verbose() <= 50:
            log.verbose("CRDS JSON RPC", self.__service_name, params if len(str(params)) <= 60 else "(...)", "-->")
        else:
            log.verbose("CRDS JSON RPC to", url, "parameters", params, "-->")

        response = apply_with_retries(self._call_service, parameters, url)

        try:
            rval = json.loads(response)
        except Exception as exc:
            log.warning("Invalid CRDS jsonrpc response:\n", response)
            raise

        return rval
예제 #2
0
파일: proxy.py 프로젝트: oirlab/tmt-crds
 def classify_exception(self, decoded):
     """Interpret exc __str__ to define as more precise CRDS exception."""
     if "Channel" in decoded and "not found" in decoded:
         return exceptions.StatusChannelNotFoundError(decoded)
     elif "External agent requested calling process termination." in decoded:
         return exceptions.OwningProcessAbortedError(decoded)
     else:
         msg = "CRDS jsonrpc failure " + repr(self.__service_name) + " " + str(decoded)
         return exceptions.ServiceError(msg)
예제 #3
0
파일: proxy.py 프로젝트: oirlab/tmt-crds
 def _call_service(self, parameters, url):
     """Call the JSONRPC defined by `parameters` and raise a ServiceError on any exception."""
     if not isinstance(parameters, bytes):
         parameters = parameters.encode("utf-8")
     try:
         channel = request.urlopen(url, parameters)
         return channel.read().decode("utf-8")
     except Exception as exc:
         raise exceptions.ServiceError("CRDS jsonrpc failure " + repr(self.__service_name) + " " + str(exc)) from exc
예제 #4
0
파일: proxy.py 프로젝트: sean-lockwood/crds
    def _call(self, *args, **kwargs):
        """Core of RPC dispatch without error interpretation, logging, or return value decoding."""
        params = kwargs if len(kwargs) else args
        # if Any.kind(params) == Object and self.__version != '2.0':
        #   raise Exception('Unsupport arg type for JSON-RPC 1.0 '
        #                  '(the default version for this client, '
        #                  'pass version="2.0" to use keyword arguments)')
        jsonrpc_params = {
            "jsonrpc": self.__version,
            "method": self.__service_name,
            'params': params,
            'id': message_id()
        }

        parameters = json.dumps(jsonrpc_params)

        url = self._get_url(jsonrpc_params)

        if "serverless" in url or "server-less" in url:
            raise exceptions.ServiceError(
                "Configured for server-less mode.  Skipping JSON RPC " +
                repr(self.__service_name))

        if log.get_verbose() <= 50:
            log.verbose("CRDS JSON RPC", self.__service_name,
                        params if len(str(params)) <= 60 else "(...)", "-->")
        else:
            log.verbose("CRDS JSON RPC to", url, "parameters", params, "-->")

        response = apply_with_retries(self._call_service, parameters, url)

        try:
            rval = json.loads(response)
        except Exception as exc:
            log.warning("Invalid CRDS jsonrpc response:\n", response)
            raise

        return rval