def create(type, target, name, **params): ''' Creates an instance representing a message of given type, target, name with the specified parameters. ''' msgcls = message.getMessageClass(type, target, name, *params) return msgcls(**params)
def parse(data, defaultClass=None): ''' Parses the given message data and returns an instance representing the message. ''' try: msg = etree.fromstring(data) except SyntaxError: # The message contains invalid XML characters msg = etree.fromstring(''.join( [c for c in data if ord(c) > 31 or c in _XML_VALID_CTRLS])) msg = msg[0] id = int(msg.get("id")) type = msg.tag target = msg.findtext("target") name = msg.findtext("name") elems = {} for elem in msg.find("params").getchildren(): elems[elem.tag] = elem try: msgcls = message.getMessageClass(type, target, name, *elems) params = {} for nm, elem in elems.iteritems(): param = msgcls.getParam(nm) params[nm] = param.unmarshal(elem) msg = msgcls(**params) except (message.UnsupportedMessageError, message.ParameterError): if defaultClass is None or defaultClass.type != type: raise UnsupportedMessageError(type, target, name, *elems) params = {} for nm in defaultClass.getParams(): param = defaultClass.getParam(nm) params[nm] = param.unmarshal(elems[nm]) msg = defaultClass(target, name, **params) msg.id = id return msg
def parse(data, defaultClass=None): ''' Parses the given message data and returns an instance representing the message. ''' try: msg = etree.fromstring(data) except SyntaxError: # The message contains invalid XML characters msg = etree.fromstring(''.join([c for c in data if ord(c) > 31 or c in _XML_VALID_CTRLS])) msg = msg[0] id = int(msg.get("id")) type = msg.tag target = msg.findtext("target") name = msg.findtext("name") elems = {} for elem in msg.find("params").getchildren(): elems[elem.tag] = elem try: msgcls = message.getMessageClass(type, target, name, *elems) params = {} for nm, elem in elems.iteritems(): param = msgcls.getParam(nm) params[nm] = param.unmarshal(elem) msg = msgcls(**params) except (message.UnsupportedMessageError, message.ParameterError): if defaultClass is None or defaultClass.type != type: raise UnsupportedMessageError(type, target, name, *elems) params = {} for nm in defaultClass.getParams(): param = defaultClass.getParam(nm) params[nm] = param.unmarshal(elems[nm]) msg = defaultClass(target, name, **params) msg.id = id return msg