コード例 #1
0
ファイル: json.py プロジェクト: ly0/asyncio-jsonrpc
    def parse_responses(self, responses):
        if any([isinstance(i, Fault) for i in responses]):
            return dumps(responses[0])

        if len(responses) != len(self._requests):
            return dumps(self.faults.internal_error())
        response_list = []
        for i in range(0, len(responses)):
            version = jsonrpclib.config.version

            if isinstance(responses[i], Fault):
                return dumps(responses[i], rpcid=0, version=version)

            request = self._requests[i]
            response = responses[i]
            rpcid = request.get("id", str(uuid.uuid4()))

            if isnotification(request):
                # Even in batches, notifications have no
                # response entry
                continue

            if "jsonrpc" not in request.keys():
                version = 1.0
            try:
                response_json = dumps(response, version=version, rpcid=rpcid, methodresponse=True)
            except TypeError:
                return dumps(self.faults.parse_error(), rpcid=rpcid, version=version)
            response_list.append(response_json)

        if not self._batch:
            # Ensure it wasn't a batch to begin with, then
            # return 1 or 0 responses depending on if it was
            # a notification.
            if len(response_list) < 1:
                return ""
            return response_list[0]
        # Batch, return list
        return "[ %s ]" % ", ".join(response_list)
コード例 #2
0
 def parse_responses(self, responses):
     if isinstance(responses, Fault):
         return dumps(responses)
     if len(responses) != len(self._requests):
         return dumps(self.faults.internal_error())
     response_list = []
     for i in range(0, len(responses)):
         request = self._requests[i]
         response = responses[i]
         if isnotification(request):
             # Even in batches, notifications have no
             # response entry
             continue
         rpcid = request['id']
         version = jsonrpclib.config.version
         if 'jsonrpc' not in request.keys():
             version = 1.0
         try:
             response_json = dumps(
                 response, version=version,
                 rpcid=rpcid, methodresponse=True
             )
         except TypeError:
             return dumps(
                 self.faults.server_error(),
                 rpcid=rpcid, version=version
             )
         response_list.append(response_json)
     if not self._batch:
         # Ensure it wasn't a batch to begin with, then
         # return 1 or 0 responses depending on if it was
         # a notification.
         if len(response_list) < 1:
             return ''
         return response_list[0]
     # Batch, return list
     return '[ %s ]' % ', '.join(response_list)