@staticmethod
def parse(wmsg):
    '\n      Verifies and parses an unserialized raw message into an actual WAMP message instance.\n\n      :param wmsg: The unserialized raw message.\n      :type wmsg: list\n\n      :returns: An instance of this class.\n      '
    assert ((len(wmsg) > 0) and (wmsg[0] == Call.MESSAGE_TYPE))
    if (len(wmsg) not in (4, 5, 6)):
        raise ProtocolError('invalid message length {0} for CALL'.format(len(wmsg)))
    request = check_or_raise_id(wmsg[1], "'request' in CALL")
    options = check_or_raise_extra(wmsg[2], "'options' in CALL")
    procedure = check_or_raise_uri(wmsg[3], "'procedure' in CALL")
    args = None
    if (len(wmsg) > 4):
        args = wmsg[4]
        if (type(args) != list):
            raise ProtocolError("invalid type {0} for 'args' in CALL".format(type(args)))
    kwargs = None
    if (len(wmsg) > 5):
        kwargs = wmsg[5]
        if (type(kwargs) != dict):
            raise ProtocolError("invalid type {0} for 'kwargs' in CALL".format(type(kwargs)))
    timeout = None
    if (u'timeout' in options):
        option_timeout = options[u'timeout']
        if (type(option_timeout) not in six.integer_types):
            raise ProtocolError("invalid type {0} for 'timeout' option in CALL".format(type(option_timeout)))
        if (option_timeout < 0):
            raise ProtocolError("invalid value {0} for 'timeout' option in CALL".format(option_timeout))
        timeout = option_timeout
    receive_progress = None
    if (u'receive_progress' in options):
        option_receive_progress = options[u'receive_progress']
        if (type(option_receive_progress) != bool):
            raise ProtocolError("invalid type {0} for 'receive_progress' option in CALL".format(type(option_receive_progress)))
        receive_progress = option_receive_progress
    discloseMe = None
    if (u'disclose_me' in options):
        option_discloseMe = options[u'disclose_me']
        if (type(option_discloseMe) != bool):
            raise ProtocolError("invalid type {0} for 'disclose_me' option in CALL".format(type(option_discloseMe)))
        discloseMe = option_discloseMe
    obj = Call(request, procedure, args=args, kwargs=kwargs, timeout=timeout, receive_progress=receive_progress, discloseMe=discloseMe)
    return obj
Verifies and parses an unserialized raw message into an actual WAMP message instance.

:param wmsg: The unserialized raw message.
:type wmsg: list

:returns: An instance of this class.
@staticmethod
def parse(wmsg):
    '\n      Verifies and parses an unserialized raw message into an actual WAMP message instance.\n\n      :param wmsg: The unserialized raw message.\n      :type wmsg: list\n\n      :returns: An instance of this class.\n      '
    assert ((len(wmsg) > 0) and (wmsg[0] == Call.MESSAGE_TYPE))
    if (len(wmsg) not in (4, 5, 6)):
        raise ProtocolError('invalid message length {0} for CALL'.format(len(wmsg)))
    request = check_or_raise_id(wmsg[1], "'request' in CALL")
    options = check_or_raise_extra(wmsg[2], "'options' in CALL")
    procedure = check_or_raise_uri(wmsg[3], "'procedure' in CALL")
    args = None
    if (len(wmsg) > 4):
        args = wmsg[4]
        if (type(args) != list):
            raise ProtocolError("invalid type {0} for 'args' in CALL".format(type(args)))
    kwargs = None
    if (len(wmsg) > 5):
        kwargs = wmsg[5]
        if (type(kwargs) != dict):
            raise ProtocolError("invalid type {0} for 'kwargs' in CALL".format(type(kwargs)))
    timeout = None
    if (u'timeout' in options):
        option_timeout = options[u'timeout']
        if (type(option_timeout) not in six.integer_types):
            raise ProtocolError("invalid type {0} for 'timeout' option in CALL".format(type(option_timeout)))
        if (option_timeout < 0):
            raise ProtocolError("invalid value {0} for 'timeout' option in CALL".format(option_timeout))
        timeout = option_timeout
    receive_progress = None
    if (u'receive_progress' in options):
        option_receive_progress = options[u'receive_progress']
        if (type(option_receive_progress) != bool):
            raise ProtocolError("invalid type {0} for 'receive_progress' option in CALL".format(type(option_receive_progress)))
        receive_progress = option_receive_progress
    discloseMe = None
    if (u'disclose_me' in options):
        option_discloseMe = options[u'disclose_me']
        if (type(option_discloseMe) != bool):
            raise ProtocolError("invalid type {0} for 'disclose_me' option in CALL".format(type(option_discloseMe)))
        discloseMe = option_discloseMe
    obj = Call(request, procedure, args=args, kwargs=kwargs, timeout=timeout, receive_progress=receive_progress, discloseMe=discloseMe)
    return obj