def __init__(self, response=""): #: Holds the response as plain text / string self._raw = response if (response is "") or (response is None): descr = "Empty API response. Probably unreachable API end point {CONNECTION_URL}" self._raw = "[RESPONSE]\r\nCODE=423\r\nDESCRIPTION=%s\r\nEOF\r\n" % ( descr) # try/except to support old versions of python (python2.5) try: if isinstance(self._raw, bytes): self._raw = self._raw.decode("utf-8") except UnicodeError: self._raw = self._raw.decode("latin1") except BaseException: self._raw = self._raw.decode("utf-8") if isinstance(response, dict): raise TypeError( 'Type "dict" is not allowed for parameter "response". Use type "string" instead.' ) else: #: Holds the response as hash self.__hash = RP.parse(self._raw) if ("CODE" not in self.__hash) or ("DESCRIPTION" not in self.__hash): self._raw = "[RESPONSE]\r\nCODE=423\r\nDESCRIPTION=Invalid API response. Contact Support\r\nEOF\r\n" self.__hash = RP.parse(self._raw)
def isTemplateMatchPlain(self, plain, id): """ Check if given API plain response matches a given template by code and description """ h = self.getTemplate(id).getHash() tpl2 = RP.parse(plain) return (h["CODE"] == tpl2["CODE"]) and (h["DESCRIPTION"] == tpl2["DESCRIPTION"])
def test_rpmethods(): rtm = RTM.getInstance() rtm.addTemplate( 'OK', rtm.generateTemplate('200', 'Command completed successfully')) # #.parse() plain = re.sub(r'/\r\nDESCRIPTION=/', '', rtm.generateTemplate('421', '')) assert RP.parse(plain)["DESCRIPTION"] is "" # #.serialize() # [w/ PROPERTY] r = rtm.getTemplate('OK').getHash() r["PROPERTY"] = { "DOMAIN": ['mydomain1.com', 'mydomain2.com', 'mydomain3.com'], "RATING": ['1', '2', '3'], "SUM": [3] } assert RP.serialize(r) == ( '[RESPONSE]\r\nPROPERTY[DOMAIN][0]=mydomain1.com\r\nPROPERTY[DOMAIN' + '][1]=mydomain2.com\r\nPROPERTY[DOMAIN][2]=mydomain3.com\r\nPROPERT' + 'Y[RATING][0]=1\r\nPROPERTY[RATING][1]=2\r\nPROPERTY[RATING][2]=3\r' + '\nPROPERTY[SUM][0]=3\r\nCODE=200\r\nDESCRIPTION=Command completed ' + 'successfully\r\nEOF\r\n') # [w/o PROPERTY] tpl = rtm.getTemplate('OK') assert RP.serialize(tpl.getHash()) == tpl.getPlain() # [w/o CODE, w/o DESCRIPTION] h = rtm.getTemplate('OK').getHash() h.pop('CODE') h.pop('DESCRIPTION') assert RP.serialize(h) == '[RESPONSE]\r\nEOF\r\n' # [w/ QUEUETIME, w/ RUNTIME] h = rtm.getTemplate('OK').getHash() h["QUEUETIME"] = '0' h["RUNTIME"] = '0.12' assert RP.serialize(h) == ( '[RESPONSE]\r\nCODE=200\r\nDESCRIPTION=Command completed successful' + 'ly\r\nQUEUETIME=0\r\nRUNTIME=0.12\r\nEOF\r\n')
def __init__(self, response=""): #: Holds the response as plain text / string self.__raw = response if (response is "") or (response is None): self.__raw = "[RESPONSE]\r\nCODE=423\r\nDESCRIPTION=Empty API response\r\nEOF\r\n" # try/except to support old versions of python (python2.5) try: if isinstance(self.__raw, bytes): self.__raw = self.__raw.decode("utf-8") except UnicodeError: self.__raw = self.__raw.decode("latin1") except BaseException: self.__raw = self.__raw.decode("utf-8") if isinstance(response, dict): raise TypeError( 'Type "dict" is not allowed for parameter "response". Use type "string" instead.' ) else: #: Holds the response as hash self.__hash = RP.parse(self.__raw)