Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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