(channel, message_dict, body=None)
| 910 | |
| 911 | @staticmethod |
| 912 | def _parse(channel, message_dict, body=None): |
| 913 | seq = message_dict("seq", int) if (body is None) else None |
| 914 | request_seq = message_dict("request_seq", int) |
| 915 | command = message_dict("command", str) |
| 916 | success = message_dict("success", bool) |
| 917 | if body is None: |
| 918 | if success: |
| 919 | body = message_dict("body", _payload) |
| 920 | else: |
| 921 | error_message = message_dict("message", str) |
| 922 | exc_type = MessageHandlingError |
| 923 | if error_message.startswith(InvalidMessageError.PREFIX): |
| 924 | error_message = error_message[len(InvalidMessageError.PREFIX) :] |
| 925 | exc_type = InvalidMessageError |
| 926 | body = exc_type(error_message, silent=True) |
| 927 | |
| 928 | try: |
| 929 | with channel: |
| 930 | request = channel._sent_requests.pop(request_seq) |
| 931 | known_request = True |
| 932 | except KeyError: |
| 933 | # Synthetic Request that only has seq and command as specified in response |
| 934 | # JSON, for error reporting purposes. |
| 935 | request = OutgoingRequest(channel, request_seq, command, "<unknown>") |
| 936 | known_request = False |
| 937 | |
| 938 | if not success: |
| 939 | body.cause = request |
| 940 | |
| 941 | response = Response(channel, seq, request, body, json=message_dict) |
| 942 | |
| 943 | with channel: |
| 944 | request.response = response |
| 945 | request._enqueue_response_handlers() |
| 946 | |
| 947 | if known_request: |
| 948 | return response |
| 949 | else: |
| 950 | raise response.isnt_valid( |
| 951 | "request_seq={0} does not match any known request", request_seq |
| 952 | ) |
| 953 | |
| 954 | |
| 955 | class Disconnect(Message): |
nothing calls this directly
no test coverage detected