Source code for concurrent.core.transport.pyjsonrpc.rpcresponse

#!/usr/bin/env python
# coding: utf-8

from bunch import Bunch
from rpcjson import json


[docs]class Response(Bunch): """ Represents a JSON-RPC-response. """
[docs] class Error(Bunch): def __init__(self, code, message, data): """ :param code: Error code :param message: Error message :param data: Additional error informations """ Bunch.__init__(self) self.code = code self.message = message self.data = data def __len__(self): return 1 if self.code else 0
def __init__( self, jsonrpc = None, id = None, result = None, error = None ): """ :param jsonrpc: JSON-RPC version string :param id: JSON-RPC transaction id :param result: Result data """ Bunch.__init__(self) self.jsonrpc = jsonrpc self.id = id self.result = result if not error else None self.error = error
[docs] def to_dict(self): """ Returns the response object as dictionary. """ retdict = {} if self.jsonrpc: retdict["jsonrpc"] = self.jsonrpc if not self.id is None: retdict["id"] = self.id if not self.result is None: retdict["result"] = self.result # Error if self.error: retdict.pop("result", None) retdict["error"] = error = {} error["code"] = self.error.code error["message"] = self.error.message if self.error.data: error["data"] = self.error.data # Finished return retdict
@classmethod
[docs] def from_dict(cls, response_dict): """ Returns a Response-object, created from dictionary """ error = response_dict.get("error") if error: result = None error = cls.Error( code = error.get("code"), message = error.get("message"), data = error.get("data") ) else: result = response_dict.get("result") error = None return cls( jsonrpc = response_dict.get("jsonrpc"), id = response_dict.get("id"), result = result, error = error )
[docs]def parse_response_json(json_string): """ Returns a RPC-Response or a list with RPC-Responses """ data = json.loads(json_string) if isinstance(data, list): retlist = [] for response in data: retlist.append(Response.from_dict(response)) return retlist else: return Response.from_dict(data)