in awsiot/eventstreamrpc.py [0:0]
def _on_continuation_message(
self,
headers: Sequence[Header],
payload: bytes,
message_type: protocol.MessageType,
flags: int,
**kwargs):
self._message_count += 1
logger.debug("%r received #%d %s %s %r", self, self._message_count, message_type.name, headers, payload)
try:
model_name = self._find_header(headers, SERVICE_MODEL_TYPE_HEADER)
if model_name is None:
if flags & protocol.MessageFlag.TERMINATE_STREAM:
# it's ok for a TERMINATE_STREAM message to be empty
return
msg = "Missing header: " + SERVICE_MODEL_TYPE_HEADER
raise UnmappedDataError(msg, headers, payload)
content_type = self._find_header(headers, CONTENT_TYPE_HEADER)
if content_type is None:
msg = "Missing header: " + CONTENT_TYPE_HEADER
raise UnmappedDataError(msg, headers, payload)
if content_type != CONTENT_TYPE_APPLICATION_JSON:
msg = "Unexpected {}: '{}', expected: '{}'".format(
CONTENT_TYPE_HEADER, content_type, CONTENT_TYPE_APPLICATION_JSON)
raise UnmappedDataError(msg, headers, payload)
if message_type == protocol.MessageType.APPLICATION_MESSAGE:
self._handle_data(model_name, payload)
return
# otherwise it's an APPLICATION_ERROR
found_type = self._shape_index.find_shape_type(model_name)
if found_type is None:
msg = "Unknown error type: {}".format(model_name)
raise UnmappedDataError(msg, payload)
if not issubclass(found_type, Exception):
msg = "Unexpected type: {} sent as APPLICATION_ERROR, expected subclass of Exception".format(model_name)
raise UnmappedDataError(msg, payload)
shape = self._shape_from_json_payload(payload, found_type)
raise shape
except Exception as e:
self._handle_error(e, flags)