HEX
Server: LiteSpeed
System: Linux us-phx-web1284.main-hosting.eu 4.18.0-553.109.1.lve.el8.x86_64 #1 SMP Thu Mar 5 20:23:46 UTC 2026 x86_64
User: u300739242 (300739242)
PHP: 8.2.30
Disabled: system, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail
Upload Files
File: //opt/alt/python311/lib/python3.11/site-packages/botocore/__pycache__/parsers.cpython-311.pyc
�

/�;f'���6�dZddlZddlZddlZddlZddlZddlmZm	Z	ddl
mZmZddl
mZmZmZmZeje��ZeZGd�d��Zd�Zd	�ZGd
�de��ZGd�d
��ZGd�de��ZGd�de��ZGd�de��ZGd�de��ZGd�de��Z Gd�de e��Z!Gd�de e��Z"Gd�de��Z#Gd�de��Z$Gd �d!e$e��Z%Gd"�d#e$e��Z&eee#e%e&d$�Z'dS)%a�Response parsers for the various protocol types.

The module contains classes that can take an HTTP response, and given
an output shape, parse the response into a dict according to the
rules in the output shape.

There are many similarities amongst the different protocols with regard
to response parsing, and the code is structured in a way to avoid
code duplication when possible.  The diagram below is a diagram
showing the inheritance hierarchy of the response classes.

::



                                 +--------------+
                                 |ResponseParser|
                                 +--------------+
                                    ^    ^    ^
               +--------------------+    |    +-------------------+
               |                         |                        |
    +----------+----------+       +------+-------+        +-------+------+
    |BaseXMLResponseParser|       |BaseRestParser|        |BaseJSONParser|
    +---------------------+       +--------------+        +--------------+
              ^         ^          ^           ^           ^        ^
              |         |          |           |           |        |
              |         |          |           |           |        |
              |        ++----------+-+       +-+-----------++       |
              |        |RestXMLParser|       |RestJSONParser|       |
        +-----+-----+  +-------------+       +--------------+  +----+-----+
        |QueryParser|                                          |JSONParser|
        +-----------+                                          +----------+


The diagram above shows that there is a base class, ``ResponseParser`` that
contains logic that is similar amongst all the different protocols (``query``,
``json``, ``rest-json``, ``rest-xml``).  Amongst the various services there
is shared logic that can be grouped several ways:

* The ``query`` and ``rest-xml`` both have XML bodies that are parsed in the
  same way.
* The ``json`` and ``rest-json`` protocols both have JSON bodies that are
  parsed in the same way.
* The ``rest-json`` and ``rest-xml`` protocols have additional attributes
  besides body parameters that are parsed the same (headers, query string,
  status code).

This is reflected in the class diagram above.  The ``BaseXMLResponseParser``
and the BaseJSONParser contain logic for parsing the XML/JSON body,
and the BaseRestParser contains logic for parsing out attributes that
come from other parts of the HTTP response.  Classes like the
``RestXMLParser`` inherit from the ``BaseXMLResponseParser`` to get the
XML body parsing logic and the ``BaseRestParser`` to get the HTTP
header/status code/query string parsing.

Additionally, there are event stream parsers that are used by the other parsers
to wrap streaming bodies that represent a stream of events. The
BaseEventStreamParser extends from ResponseParser and defines the logic for
parsing values from the headers and payload of a message from the underlying
binary encoding protocol. Currently, event streams support parsing bodies
encoded as JSON and XML through the following hierarchy.


                                  +--------------+
                                  |ResponseParser|
                                  +--------------+
                                    ^    ^    ^
               +--------------------+    |    +------------------+
               |                         |                       |
    +----------+----------+   +----------+----------+    +-------+------+
    |BaseXMLResponseParser|   |BaseEventStreamParser|    |BaseJSONParser|
    +---------------------+   +---------------------+    +--------------+
                     ^                ^        ^                 ^
                     |                |        |                 |
                     |                |        |                 |
                   +-+----------------+-+    +-+-----------------+-+
                   |EventStreamXMLParser|    |EventStreamJSONParser|
                   +--------------------+    +---------------------+

Return Values
=============

Each call to ``parse()`` returns a dict has this form::

    Standard Response

    {
      "ResponseMetadata": {"RequestId": <requestid>}
      <response keys>
    }

    Error response

    {
      "ResponseMetadata": {"RequestId": <requestid>}
      "Error": {
        "Code": <string>,
        "Message": <string>,
        "Type": <string>,
        <additional keys>
      }
    }

�N)�ETree�
XMLParseError)�EventStream�NoInitialResponseError)�is_json_value_header�lowercase_dict�merge_dicts�parse_timestampc� �eZdZd�Zd�Zd�ZdS)�ResponseParserFactoryc��i|_dS�N)�	_defaults)�selfs �C/opt/alt/python311/lib/python3.11/site-packages/botocore/parsers.py�__init__zResponseParserFactory.__init__�s
�������c�:�|j�|��dS)aOSet default arguments when a parser instance is created.

        You can specify any kwargs that are allowed by a ResponseParser
        class.  There are currently two arguments:

            * timestamp_parser - A callable that can parse a timestamp string
            * blob_parser - A callable that can parse a blob type

        N)r�update)r�kwargss  r�set_parser_defaultsz)ResponseParserFactory.set_parser_defaults�s ��	
����f�%�%�%�%�%rc�6�t|}|di|j��S)N�)�PROTOCOL_PARSERSr)r�
protocol_name�
parser_clss   r�
create_parserz#ResponseParserFactory.create_parser�s$��%�m�4�
��z�+�+�D�N�+�+�+rN)�__name__�
__module__�__qualname__rrrrrrrr�sA���������
&�
&�
&�,�,�,�,�,rrc�D�t���|��Sr)rr)�protocols rrr�s�� �"�"�0�0��:�:�:rc����fd�}|S)Nc�Z��t|d��r|j}|�d}n|}�|||��S)N�text�)�hasattrr%)r�shape�node_or_stringr%�funcs    �r�_get_text_contentz(_text_content.<locals>._get_text_content�sC����>�6�*�*�	"�!�&�D��|����!�D��t�D�%��&�&�&rr)r*r+s` r�
_text_contentr,�s$���
'�
'�
'�
'�
'��rc��eZdZdS)�ResponseParserErrorN)rrr rrrr.r.�s�������Drr.c��eZdZdZdZdZdd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZdS)�ResponseParseraoBase class for response parsing.

    This class represents the interface that all ResponseParsers for the
    various protocols must implement.

    This class will take an HTTP response and a model shape and parse the
    HTTP response into a dictionary.

    There is a single public method exposed: ``parse``.  See the ``parse``
    docstring for more info.

    zutf-8Nc��|�t}||_|�|j}||_d|_|j�|�||��|_dSdSr)�DEFAULT_TIMESTAMP_PARSER�_timestamp_parser�_default_blob_parser�_blob_parser�_event_stream_parser�EVENT_STREAM_PARSER_CLS)r�timestamp_parser�blob_parsers   rrzResponseParser.__init__�sh���#�7��!1������3�K�'���$(��!��'�3�(,�(D�(D� �+�)�)�D�%�%�%�4�3rc�*�tj|��Sr)�base64�	b64decode�r�values  rr4z#ResponseParser._default_blob_parser�s�����&�&�&rc��t�d|d��t�d|d��|ddkro|�|��r|�|��}nZ|�|��r|�||��}|S|�||��}n|�||��}|r|j�	d��r|St|t��rV|�	di��}|d|d	<|d}t|��|d
<||d<|�
||��|S)a>Parse the HTTP response given a shape.

        :param response: The HTTP response dictionary.  This is a dictionary
            that represents the HTTP request.  The dictionary must have the
            following keys, ``body``, ``headers``, and ``status_code``.

        :param shape: The model shape describing the expected output.
        :return: Returns a dictionary representing the parsed response
            described by the model.  In addition to the shape described from
            the model, each response will also have a ``ResponseMetadata``
            which contains metadata about the response, which contains at least
            two keys containing ``RequestId`` and ``HTTPStatusCode``.  Some
            responses may populate additional keys, but ``RequestId`` will
            always be present.

        zResponse headers: %r�headerszResponse body:
%r�body�status_codei-�eventstream�ResponseMetadata�HTTPStatusCode�HTTPHeaders)�LOG�debug�_is_generic_error_response�_do_generic_error_parse�_is_modeled_error_shape�_do_modeled_error_parse�_do_error_parse�	_do_parse�
serialization�get�
isinstance�dictr�_add_checksum_response_metadata)r�responser(�parsed�response_metadatar@s      r�parsezResponseParser.parse�su��"	�	�	�(�(�9�*=�>�>�>��	�	�&���(8�9�9�9��M�"�c�)�)��.�.�x�8�8�
?��5�5�h�?�?����-�-�e�4�4�
?��5�5�h��F�F���
��-�-�h��>�>����^�^�H�e�4�4�F��	�U�(�,�,�]�;�;�	��M��f�d�#�#�		N� &�
�
�+=�r� B� B��2:�=�2I��.�/��y�)�G�/=�g�/F�/F��m�,�):�F�%�&��0�0��;L�M�M�M��
rc��|�di���di��}|�d��}|r||d<dSdS)N�context�checksum�response_algorithm�ChecksumAlgorithm�rP)rrTrV�checksum_context�	algorithms     rrSz.ResponseParser._add_checksum_response_metadatas^��#�<�<�	�2�6�6�:�:�:�r�J�J��$�(�(�)=�>�>�	��	?�5>��1�2�2�2�	?�	?rc�@�|duo|j�dd��S)N�	exceptionF)�metadatarP)rr(s  rrKz&ResponseParser._is_modeled_error_shapes$���D� �K�U�^�%7�%7��U�%K�%K�Krc��|ddkr@d|vs|d�dS|d���}|�d��p|SdS)NrBi�rATs<html>)�strip�
startswith)rrTrAs   rrIz)ResponseParser._is_generic_error_responsese���M�"�c�)�)��X�%�%��&�)9�)A��t��F�#�)�)�+�+�D��?�?�9�-�-�9�T��9�*�)rc��t�d��t|d��tjj�|dd��d�id�S)NzlReceived a non protocol specific error response from the service, unable to populate error code and message.rBr&��Code�Message��ErrorrD)rGrH�str�http�client�	responsesrP�rrTs  rrJz&ResponseParser._do_generic_error_parse,sr��	�	�	�
B�	
�	
�	
��H�]�3�4�4��;�0�4�4��]�+�R�����!#�
�
�	
rc�:�td|jjz���)Nz%s._do_parse��NotImplementedError�	__class__r�rrTr(s   rrNzResponseParser._do_parse=s��!�.�4�>�3J�"J�K�K�Krc�:�t|jj�d����)Nz._do_error_parserrrus   rrMzResponseParser._do_error_parse@s��!�T�^�%<�"N�"N�"N�O�O�Orc�:�t|jj�d����)Nz._do_modeled_error_parserr)rrTr(rUs    rrLz&ResponseParser._do_modeled_error_parseCs%��!��~�&�@�@�@�
�
�	
rc�V�t|d|j��|j��}|||��S)N�_handle_)�getattr�	type_name�_default_handle)rr(�node�handlers    r�_parse_shapezResponseParser._parse_shapeHs:����.�U�_�.�.��0D�
�
���w�u�d�#�#�#rc�t�g}|j}|D]+}|�|�||�����,|Sr)�member�appendr)rr(r}rU�member_shape�items      r�_handle_listzResponseParser._handle_listNsK�����|���	A�	A�D��M�M�$�+�+�L�$�?�?�@�@�@�@��
rc��|Srr�rr(r>s   rr|zResponseParser._default_handleWs���rc�v�|j}|d�d��}t|d|||��S)NrY�operation_namerA)r6rPr)rrTr(�parser�names     r�_create_event_streamz#ResponseParser._create_event_streamZs<���*���	�"�&�&�'7�8�8���8�F�+�U�F�D�A�A�Arc�,�t|��dS�Nr)�listr=s  r�_get_first_keyzResponseParser._get_first_key_s���E�{�{�1�~�rc�>�|jr�|���}|�dd��t|��dkrd}t	||jz���|�|��}||jvr!d}t�	||z��dSdS)N�__type�zCInvalid service response: %s must have one and only one member set.zqReceived a tagged union response with member unknown to client: %s. Please upgrade SDK for full response support.TF)
�is_tagged_union�copy�pop�lenr.r�r��membersrG�info)rr(r>�
cleaned_value�	error_msg�tag�msgs       r� _has_unknown_tagged_union_memberz/ResponseParser._has_unknown_tagged_union_memberbs���� �	�!�J�J�L�L�M����h��-�-�-��=�!�!�Q�&�&�&��*�)�e�j�*@�A�A�A��%�%�m�4�4�C��%�-�'�'�(��
����s��#�#�#��t��urc��dd|iiS)N�SDK_UNKNOWN_MEMBERr�r)rr�s  r�#_handle_unknown_tagged_union_memberz2ResponseParser._handle_unknown_tagged_union_memberws��$�v�s�m�4�4r�NN)rrr �__doc__�DEFAULT_ENCODINGr7rr4rWrSrKrIrJrNrMrLrr�r|r�r�r�r�rrrr0r0�s=����������"������'�'�'�/�/�/�b?�?�?�L�L�L�:�:�:�&
�
�
�"L�L�L�P�P�P�
�
�
�
$�$�$�������B�B�B�
������*5�5�5�5�5rr0c����eZdZd�fd�	Zd�Zd�Z�fd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Ze
d���Ze
d
���Ze
d���Ze
d���Ze
d���Ze
d���ZeZeZeZ�xZS)�BaseXMLResponseParserNc�~��t���||��tjd��|_dS)Nz{.*})�superr�re�compile�
_namespace_re)rr8r9rts   �rrzBaseXMLResponseParser.__init__|s6���
�����)�;�7�7�7��Z��/�/����rc���i}|j}|j}|j�d��pd}|j�d��pd}|j�d��rt	|t
��s|g}|D]l}|D]b}	|�|	��}
|
|kr|�||	��}�4|
|kr|�||	��}�Qtd|
z���|||<�m|S)Nr��keyr>�	flattenedzUnknown tag: %s)	r�r>rOrPrQr��	_node_tagrr.)
rr(r}rU�	key_shape�value_shape�key_location_name�value_location_name�keyval_node�single_pair�tag_name�key_name�val_names
             r�_handle_mapz!BaseXMLResponseParser._handle_map�s�����I�	��k��%�3�7�7��?�?�H�5��)�7�;�;�F�C�C�N�w����"�"�;�/�/�	�
�4��8N�8N�	��6�D��
	(�
	(�K�*�
L�
L���>�>�+�6�6���0�0�0�#�0�0��K�H�H�H�H��!4�4�4�#�0�0��k�J�J�H�H�-�.?�(�.J�K�K�K�'�F�8����
rc�B�|j�d|j��S�Nr&)r��subr�)rr}s  rr�zBaseXMLResponseParser._node_tag�s���!�%�%�b�$�(�3�3�3rc���|j�d��rt|t��s|g}t	���||��S)Nr�)rOrPrQr�r�r�)rr(r}rts   �rr�z"BaseXMLResponseParser._handle_list�sP�����"�"�;�/�/�	�
�4��8N�8N�	��6�D��w�w�#�#�E�4�0�0�0rc�<�i}|j}|j�dd��r|�|��}|�|��}|�||��r*|�|��}|�|��S|D�]	}||}d|jvs|j�d��r�/|�	||��}	|�|	��}
|
�|�
||
��||<�v|j�d��ryi}|jd}|j���D]A\}
}|j
�|�d��ddz|
��}|||<�B||vr||||<��|S)	NraF�location�eventheader�xmlAttributer��:r)r�rbrP�_get_error_root�_build_name_to_xml_noder�r�r�rO�_member_key_namer�attrib�itemsr�r��split)rr(r}rUr��xml_dictr��member_namer��xml_name�member_node�attribs�
location_namer�r>�new_keys                r�_handle_structurez'BaseXMLResponseParser._handle_structure�s������-���>���k�5�1�1�	.��'�'��-�-�D��/�/��5�5���0�0���A�A�	A��%�%�h�/�/�C��;�;�C�@�@�@�"�	A�	A�K�"�;�/�L��l�8�8�8��-�1�1�-�@�@�9�
��,�,�\�;�G�G�H�"�,�,�x�0�0�K��&�&*�&7�&7� �+�'�'��{�#�#��+�/�/��?�?�	
A��� ,� :�6� B�
�"&�+�"3�"3�"5�"5�-�-�J�C��"�0�4�4�%�+�+�C�0�0��3�c�9�3���G�(-�G�G�$�$� �G�+�+�*1�-�*@�F�;�'���
rc�|�|�|��dkr"|D]}|�|��dkr|cS� |S)N�
ErrorResponserk�r�)r�
original_root�childs   rr�z%BaseXMLResponseParser._get_error_root�sS���>�>�-�(�(�O�;�;�&�
!�
!���>�>�%�(�(�G�3�3� �L�L�L�4��rc���|jdkr=|j�d��r#|jj�d��}|�|S|j�d��}|�|S|S)Nr�r�r�)r{rOrPr�)rr(r��list_member_serialized_name�serialized_names     rr�z&BaseXMLResponseParser._member_key_name�s{��
�?�f�$�$��)<�)@�)@��)M�)M�$�*/�,�*D�*H�*H��+�+�'�+�6�2�2��-�1�1�&�9�9���&�"�"��rc�:�t|t��r|�|d��Si}|D]e}|�|��}||vrEt||t��r||�|���R|||g||<�`|||<�f|Sr�)rQr�r�r�r�)r�parent_noder�r�r�s     rr�z-BaseXMLResponseParser._build_name_to_xml_node�s����k�4�(�(�	@��/�/��A��?�?�?����
	%�
	%�D��.�.��&�&�C��h���
�h�s�m�T�2�2�:��S�M�(�(��.�.�.�.�&.�c�]�D�$9�H�S�M�M� $���
�
��rc��	tjtj��|j���}|�|��|���}n'#t$r}td|�d|�����d}~wwxYw|S)N)�target�encodingzUnable to parse response (z6), invalid XML received. Further retries may succeed:
)r�	XMLParser�TreeBuilderr��feed�closerr.)r�
xml_stringr��root�es     r�_parse_xml_string_to_domz.BaseXMLResponseParser._parse_xml_string_to_dom�s���	��_��(�*�*�T�5J����F�
�K�K�
�#�#�#��<�<�>�>�D�D���	�	�	�%�%��1�1�j�j�"���
�����	�����s�AA�
A<�"A7�7A<c���|���D]L\}}t|��r.|�|��}|�|��||<�B|j||<�M|Sr)r�r�r��_replace_nodesr%)rrUr�r>�sub_dicts     rr�z$BaseXMLResponseParser._replace_nodessi�� �,�,�.�.�	)�	)�J�C���E�{�{�
)��7�7��>�>��"�1�1�(�;�;��s���#�j��s����
rc��|dkrdSdS)N�trueTFr�rr(r%s   r�_handle_booleanz%BaseXMLResponseParser._handle_booleans���6�>�>��4��5rc� �t|��Sr)�floatr�s   r�
_handle_floatz#BaseXMLResponseParser._handle_floats���T�{�{�rc�,�|�|��Sr�r3r�s   r�_handle_timestampz'BaseXMLResponseParser._handle_timestamps���%�%�d�+�+�+rc� �t|��Sr��intr�s   r�_handle_integerz%BaseXMLResponseParser._handle_integers���4�y�y�rc��|Srrr�s   r�_handle_stringz$BaseXMLResponseParser._handle_strings���rc�,�|�|��Sr�r5r�s   r�_handle_blobz"BaseXMLResponseParser._handle_blob#s��� � ��&�&�&rr�)rrr rr�r�r�r�r�r�r�r�r�r,r�r�r�r�r�r��_handle_character�_handle_double�_handle_long�
__classcell__�rts@rr�r�{sw�������0�0�0�0�0�0����*4�4�4�1�1�1�1�1�"�"�"�H������ ���.
�
�
��������]������]���,�,��]�,�����]������]���'�'��]�'�'��"�N�"�L�L�L�L�Lrr�c�4�eZdZd�Zd�Zd�Zd	d�Zd�Zd�ZdS)
�QueryParserc�(�|d}|�|��}|�|��}|�|��d|vr(|�|�d����d|vrd|�d��i|d<|S)NrA�Errors�	RequestIdrD)r�r�r�rr�)rrTr(�xml_contentsr�rUs      rrMzQueryParser._do_error_parse-s�����'���,�,�\�:�:���-�-�d�3�3�����F�#�#�#��v����M�M�&�*�*�X�.�.�/�/�/��&� � �*5�v�z�z�+�7N�7N�)O�F�%�&��
rc�2�|�||d���S)NF��inject_metadata��_parse_body_as_xmlrus   rrLz#QueryParser._do_modeled_error_parse=s���&�&�x���&�N�N�Nrc�2�|�||d���S)NTrr
rus   rrNzQueryParser._do_parse@s���&�&�x���&�M�M�MrTc��|d}|�|��}i}|�B|}d|jvr!|�|jd|��}|�||��}|r|�||��|S)NrA�
resultWrapper)r�rO�_find_result_wrapped_shaper�_inject_response_metadata)rrTr(r	rr�rU�starts        rrzQueryParser._parse_body_as_xmlCs�����'���,�,�\�:�:�������E��%�"5�5�5��7�7��'��8�$�����&�&�u�e�4�4�F��	9��*�*�4��8�8�8��
rc�<�|�|��}||Sr)r�)r�element_name�
xml_root_node�mappings    rrz&QueryParser._find_result_wrapped_shapeRs ���.�.�}�=�=���|�$�$rc���|�|��}|�d��}|�@|�|��}|���D]\}}|j||<�||d<dSdS�NrD)r�rPr�r%)rr}�inject_intor�
child_node�sub_mappingr�r>s        rrz%QueryParser._inject_response_metadataVs����.�.�t�4�4���[�[�!3�4�4�
��!��6�6�z�B�B�K�)�/�/�1�1�
.�
.�
��U�#(�:��C� � �.9�K�*�+�+�+�	"�!rN)T)	rrr rMrLrNrrrrrrrr,sy��������� O�O�O�N�N�N�
�
�
�
�%�%�%�:�:�:�:�:rrc�*��eZdZd�Z�fd�Zd�Z�xZS)�EC2QueryParserc�z�|�|��}|�d��}|�d|ji|d<dSdS)N�	requestIdrrD)r�rPr%)rr}rrrs     rrz(EC2QueryParser._inject_response_metadataasL���.�.�t�4�4���[�[��-�-�
��!�/:�J�O�.L�K�*�+�+�+�"�!rc���t���||��}d|vrd|�d��i|d<|S)N�	RequestIDrrD)r�rMr�)rrTr(�originalrts    �rrMzEC2QueryParser._do_error_parsegsN����7�7�*�*�8�U�;�;���(�"�"��X�\�\�+�6�6�,�H�'�(��rc��|D]?}|�|��dkr$|D]!}|�|��dkr|ccS�"�@|S)Nrrkr�)rr�r��errors_childs    rr�zEC2QueryParser._get_error_root{sl��"�	,�	,�E��~�~�e�$�$��0�0�$)�,�,�L��~�~�l�3�3�w�>�>�+�+�+�+�+�+�?���r)rrr rrMr�r�rs@rrr`sY�������M�M�M������(������rrc�>�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	S)
�BaseJSONParserc�t�i}|jr|}n�|j}|�dSi}|�||��r*|�|��}|�|��S|D][}||}|j�d|��}|�|��}	|	�|�|||	��||<�\|S)Nr�)�is_document_typer�r�r�r�rOrPr)
rr(r>�final_parsed�
member_shapesr�r�r��	json_name�	raw_values
          rr�z BaseJSONParser._handle_structure�s������!�	� �L�L�!�M�M��}��t��L��4�4�U�E�B�B�
E��)�)�%�0�0���?�?��D�D�D�,�
�
��,�[�9��(�6�:�:�6�;�O�O�	�!�I�I�i�0�0�	��(�04�0A�0A�%�k�2�I�1�1�L��-���rc��i}|j}|j}|���D]6\}}|�||��}|�||��}|||<�7|Sr)r�r>r�r)	rr(r>rUr�r�r��
actual_key�actual_values	         rr�zBaseJSONParser._handle_map�sl�����I�	��k���+�+�-�-�	.�	.�J�C���*�*�9�c�:�:�J��,�,�[�%�@�@�L�!-�F�:����
rc�,�|�|��Srr�r�s   rr�zBaseJSONParser._handle_blob�s��� � ��'�'�'rc�,�|�|��Srr�r�s   rr�z BaseJSONParser._handle_timestamp�s���%�%�e�,�,�,rc��|�|d��}ddd�id�}|d}|�d|�dd����|dd<|�d	��}|�d
|ot|����}|�Fd|vr|�dd��d}d
|vr|�|||��}||dd<|�||d��|S)NrAr&�rirhrjr@�messagerirkrBr��#r��x-amzn-query-errorrh)�_parse_body_as_jsonrPrl�rsplit� _do_query_compatible_error_parser)rrTr(rA�errorr@�
response_code�codes        rrMzBaseJSONParser._do_error_parse�s���'�'���(8�9�9��&(�"�5�5�2�N�N���9�%��%)�H�H��t�x�x�	�2�.�.�%
�%
��g��y�!�
!���]�3�3�
��x�x��-�"F�C�
�4F�4F�G�G�����d�{�{��{�{�3��*�*�1�-��#�w�.�.��<�<��'�5����&*�E�'�N�6�"��&�&�u�h�y�.A�B�B�B��rc��|d}|�d��}t|��dkr,|dr$||dd<|d|dd<|dS|S)	z�
        Error response may contain an x-amzn-query-error header to translate
        errors codes from former `query` services into `json`. We use this to
        do our lookup in the errorfactory for modeled errors.
        r5�;�rrk�QueryErrorCoder��Type)r�r�)rr;r@r9�query_error�query_error_componentss      rr8z/BaseJSONParser._do_query_compatible_error_parse�st���2�3��!,�!2�!2�3�!7�!7���%�&�&�!�+�+�0F�q�0I�+�/3�E�'�N�+�,�%;�A�%>�E�'�N�6�"�)�!�,�,��rc�P�d|vr!|d|�di��d<dSdS)N�x-amzn-requestidrDr)�
setdefault)rrUr@s   rrz(BaseJSONParser._inject_response_metadata�s?����(�(�EL�"�F�F���0�"�5�5�k�B�B�B�)�(rc��|siS|�|j��}	tj|��}|S#t$rd|icYSwxYw)Nr3)�decoder��json�loads�
ValueError)r�
body_contentsrA�original_parseds    rr6z"BaseJSONParser._parse_body_as_json�sm���	��I��#�#�D�$9�:�:��	%�"�j��.�.�O�"�"���	%�	%�	%��t�$�$�$�$�	%���s�6�A�AN)rrr r�r�r�r�rMr8rr6rrrr%r%�s����������2���(�(�(�-�-�-� � � �D
�
�
����
%�
%�
%�
%�
%rr%c�,�eZdZd�Zd�Zd�Zd�Zd�ZdS)�BaseEventStreamParserc�T�i}|j�d��rQ|d�d��}|j�|��}|r|�||��||<n:|�|||j|��|�|||j|��|S)NrCr@z:event-type)rOrPr�rN�_parse_non_payload_attrs�_parse_payload)rrTr(r(�
event_type�event_shapes      rrNzBaseEventStreamParser._do_parse�s�������"�"�=�1�1�	N�!�)�,�0�0��?�?�J��-�+�+�J�7�7�K��
�+/�>�>��k�,�,��Z�(��
�)�)��%����
�
�
�
����%����M�M�M��rc	��|d�d��}|j�|��}|�a|�|d��}|�||��}d||�d|�dd����d�i}n;d|d�d	d��|d�d
d��d�i}|S)Nr@z:exception-typerArkrir3r&rgz:error-codez:error-message)rPr��_initial_body_parser)rrTr(�exception_type�exception_shaperLrAr9s        rrMz%BaseEventStreamParser._do_error_parses���!�)�,�0�0�1B�C�C���-�+�+�N�;�;���&�"�6�6�x��7G�H�H�O��$�$�_�o�F�F�D��*�#�x�x�	�4�8�8�I�r�3J�3J�K�K����E�E��$�Y�/�3�3�M�2�F�F�'�	�2�6�6�7G��L�L����E��rc��|j�d��r�|D]�}||}|j�d��ro|d}|jdkr|}nQ|jdkr|�|j��}n+|�|��}	|�||	��}|||<dS��|�|d��}
|�||
��}|�|��dSdS)N�event�eventpayloadrA�blob�string)rOrPr{rGr�rUrr)rrTr(r)r(r�r�rA�parsed_body�	raw_parserL�body_parseds            rrQz$BaseEventStreamParser._parse_payloads(����"�"�7�+�+�	-�%�
�
��,�T�2���-�1�1�.�A�A��#�F�+�D�#�-��7�7�&*���%�/�8�;�;�&*�k�k�$�2G�&H�&H���$(�$<�$<�T�$B�$B�	�&*�&7�&7�(�)�'�'��*5�L��&��F�F��#�6�6�x��7G�H�H�O��+�+�E�?�C�C�K�����,�,�,�,�,�'	-�	-rc���|d}|D]X}||}|j�d��r4||vr0||}|jdkr|�|dz��}|||<�YdS)Nr@r��	timestampg@�@)rOrPr{r3)	rrTr(r)r(r@r�r�r>s	         rrPz.BaseEventStreamParser._parse_non_payload_attrs.s����9�%��!�		/�		/�D�(��.�L��)�-�-�m�<�<�
/��7�?�?�#�D�M�E�#�-��<�<�!%� 6� 6�u�v�~� F� F��).�L��&��		/�		/rc� �td����NrU�rs�rrKs  rrUz)BaseEventStreamParser._initial_body_parse=���
"�"7�8�8�8rN)rrr rNrMrQrPrUrrrrNrN�s_��������� ���*-�-�-�,
/�
/�
/�9�9�9�9�9rrNc��eZdZd�ZdS)�EventStreamJSONParserc�,�|�|��Sr�r6res  rrUz)EventStreamJSONParser._initial_body_parseF����'�'�
�6�6�6rN�rrr rUrrrrhrhEs#������7�7�7�7�7rrhc��eZdZd�ZdS)�EventStreamXMLParserc�X�|stjd��S|�|��Sr��r�Elementr��rr�s  rrUz(EventStreamXMLParser._initial_body_parseK�.���	%��=��$�$�$��,�,�Z�8�8�8rNrlrrrrnrnJs#������9�9�9�9�9rrnc�,�eZdZeZ	d�Zd�Zd�Zd�ZdS)�
JSONParserc��i}|�=|j}|r|�|||��}n|�|d|��}|�||d��|S)NrAr@)�event_stream_name�_handle_event_stream�_handle_json_bodyr)rrTr(rU�
event_names     rrNzJSONParser._do_parseVsq�������0�J��
I��2�2�8�U�J�O�O����/�/���0@�%�H�H���&�&�v�x�	�/B�C�C�C��
rc�:�|�|d|��S)NrA)ryrus   rrLz"JSONParser._do_modeled_error_parseas���%�%�h�v�&6��>�>�>rc��|j|}|�||��}	|���}n#t$rd}t	|���wxYw|�|j|��}|||<|S)Nz,First event was not of type initial-response)r�r��get_initial_responserr.ry�payload)	rrTr(rz�event_stream_shape�event_streamrYr�rUs	         rrxzJSONParser._handle_event_streamds���"�]�:�6���0�0��;M�N�N��	1� �5�5�7�7�E�E��%�	1�	1�	1�F�I�%�i�0�0�0�	1�����'�'��
�u�=�=��)��z���
s	�:�Ac�X�|�|��}|�||��Sr)r6r)r�raw_bodyr(�parsed_jsons    rryzJSONParser._handle_json_bodyps-���.�.�x�8�8��� � ���4�4�4rN)	rrr rhr7rNrLrxryrrrruruQsY������3��2�	�	�	�?�?�?�
�
�
�5�5�5�5�5rruc�T��eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Z�fd
�Z�xZ
S)�BaseRestParserc�h�i}|�|��|d<|�|||��|Sr)�_populate_response_metadata�_add_modeled_parse�rrTr(r(s    rrNzBaseRestParser._do_parseysE����+/�+K�+K��,
�,
��'�(�	
����%��>�>�>��rc�|�|�|S|j}|�||||��|�||||��dSr)r�rPrQ)rrTr(r(r)s     rr�z!BaseRestParser._add_modeled_parse�sW���=����
�
��%�%��e�]�L�	
�	
�	
�	
���H�e�]�L�I�I�I�I�Irc�8�i}|�|||��|Sr)r�r�s    rrLz&BaseRestParser._do_modeled_error_parse�s%��������%��>�>�>��rc��i}|d}d|vr|d|d<n(d|vr$|d|d<|�dd��|d<|S)Nr@rDr�x-amz-request-id�
x-amz-id-2r&�HostIdr])rrTrbr@s    rr�z*BaseRestParser._populate_response_metadata�si�����9�%����(�(�$+�,>�$?�H�[�!�!�
�7�
*�
*�$+�,>�$?�H�[�!�")���\�2�!>�!>�H�X���rc�6�d|jvr�|jd}||}|j�d��r|�||��}|||<dS|jdvr>|d}t	|t
��r|�|j��}|||<dS|�|d��}|�	||��||<dS|�|d��}|�	||��}	|�
|	��dS)Nr~rC)r\r[rA)rOrPr�r{rQ�bytesrGr�rUrr)
rrTr(r)r(�payload_member_name�
body_shaperArLr_s
          rrQzBaseRestParser._parse_payload�sA����+�+�+�#(�"5�i�"@��&�':�;�J��'�+�+�M�:�:�

��0�0��:�F�F��48��0�1�1�1��%�);�;�;���'���d�E�*�*�>��;�;�t�'<�=�=�D�48��0�1�1�1�"&�":�":�8�F�;K�"L�"L��48�4E�4E���5�5��0�1�1�1�#�6�6�x��7G�H�H�O��+�+�E�?�C�C�K�����,�,�,�,�,rc�~�|d}|D]�}||}|j�d��}|��'|dkr |�||d��||<�M|dkr|�||��||<�m|dkr>|j�d|��}	|	|vr|�|||	��||<��dS)Nr@r��
statusCoderB�headerr�)rOrPr�_parse_header_map)
rrTr(r)r(r@r�r�r��header_names
          rrPz'BaseRestParser._parse_non_payload_attrs�s���9�%��!�	�	�D�(��.�L�#�1�5�5�j�A�A�H�����\�)�)�%)�%6�%6� �(�=�"9�&�&��T�"�"��Y�&�&�%)�%;�%;� �'�&�&��T�"�"��X�%�%�*�8�<�<�V�T�J�J���'�)�)�)-�):�):�$�g�k�&:�*�*�L��&��!	�	rc��i}|j�dd�����}|D]K}|����|��r"|t	|��d�}||||<�L|S)Nr�r&)rOrP�lowerrer�)rr(r@rU�prefixr�r�s       rr�z BaseRestParser._parse_header_map�s������$�(�(���4�4�:�:�<�<��"�	4�	4�K�� � �"�"�-�-�f�5�5�
4�#�3�v�;�;�=�=�1��&�{�3��t����
rc� �td���rcrdres  rrUz"BaseRestParser._initial_body_parse�rfrc��|}t|��r@tj|���|j��}tj|��}|Sr)rr;r<rGr�rHrI)rr(r>rU�decodeds     rr�zBaseRestParser._handle_string�sL������&�&�	)��&�u�-�-�4�4�T�5J�K�K�G��Z��(�(�F��
rc����|j�d��}|dkr4t|t��sd�|�d��D��}t���||��S)Nr�r�c�6�g|]}|�����Sr)rd)�.0r�s  r�
<listcomp>z/BaseRestParser._handle_list.<locals>.<listcomp>�s ��7�7�7�!�A�G�G�I�I�7�7�7r�,)rOrPrQr�r�r�r�)rr(r}r�rts    �rr�zBaseRestParser._handle_list�sj����&�*�*�:�6�6���x���
�4��(>�(>��7�7�t�z�z�#���7�7�7�D��w�w�#�#�E�4�0�0�0r)rrr rNr�rLr�rQrPr�rUr�r�r�rs@rr�r�xs�����������J�J�J����
���-�-�-�2���0���9�9�9����1�1�1�1�1�1�1�1�1rr�c�8��eZdZeZd�Z�fd�Zd�Zd�ZeZ	�xZ
S)�RestJSONParserc�,�|�|��Srrjres  rrUz"RestJSONParser._initial_body_parse�rkrc�x��t���||��}|�||��|Sr)r�rM�_inject_error_code)rrTr(r9rts    �rrMzRestJSONParser._do_error_parse�s7������'�'��%�8�8������x�0�0�0��rc�6�|�|d��}d|dvr6|dd}|�d��d}||dd<dSd|vsd|vr5|�d|�dd	����|dd<dSdS)
NrAzx-amzn-errortyper@r�rrkrhr;r&)rUr�rP)rr9rTrAr;s     rr�z!RestJSONParser._inject_error_code�s����'�'���(8�9�9����)�!4�4�4��I�&�'9�:�D��:�:�c�?�?�1�%�D�%)�E�'�N�6�"�"�"�
�t�^�^�v��~�~�%)�X�X�f�d�h�h�v�r�6J�6J�%K�%K�E�'�N�6�"�"�"� .�~rc� �t|��Srr�r�s   rr�zRestJSONParser._handle_integers���5�z�z�r)rrr rhr7rUrMr�r�r�r�rs@rr�r��si�������3��7�7�7������
L�L�L����#�L�L�L�L�Lrr�c�J��eZdZeZd�Zd�Zd�Zd�Ze	�fd���Z
�xZS)�
RestXMLParserc�X�|stjd��S|�|��Sr�rprrs  rrUz!RestXMLParser._initial_body_parsersrc��|drB	|�|��S#t$rt�dd���YnwxYw|�|��S)NrAz2Exception caught when parsing error response body:T)�exc_info)�_parse_error_from_bodyr.rGrH�_parse_error_from_http_statusrus   rrMzRestXMLParser._do_error_parses����F��
	�
��2�2�8�<�<�<��&�
�
�
��	�	�H�!�������
����
�1�1�(�;�;�;s��&A�Ac��t|d��tjj�|dd��d�|d�dd��|d�dd��d�d�S)	NrBr&rgr@r�r�)rr�rj)rlrmrnrorPrps  rr�z+RestXMLParser._parse_error_from_http_status1s����H�]�3�4�4��;�0�4�4��]�+�R�����&�i�0�4�4�5G��L�L�"�9�-�1�1�,��C�C�!�!�
�
�	
rc��|d}|�|��}|�|��}|�|��|jdkrF|�|��}|�dd��|�dd��||d�Sd|vrd|�d��i|d<dddd�i}t
||��|S)	NrArkrr&r�rjrDr2)r�r�r�r�r�r�r	)rrTrr�rUrb�defaults       rr�z$RestXMLParser._parse_error_from_body?s�����'���,�,�\�:�:���-�-�d�3�3�����F�#�#�#��8�w����7�7��A�A�H�

�J�J�{�B�'�'�'��J�J�x��$�$�$�#��B�B�B�
�F�
"�
"�*5�v�z�z�+�7N�7N�)O�F�%�&���B�7�7�8���G�V�$�$�$��rc�L��t���||��}|Sr)r�r�)rr(r%rts   �rr�zRestXMLParser._handle_stringVs!����w�w�%�%�e�T�2�2���r)rrr rnr7rUrMr�r�r,r�r�rs@rr�r�s��������2��9�9�9�
<�<�<�6
�
�
����.������]�����rr�)�ec2�queryrHz	rest-jsonzrest-xml)(r�r;�http.clientrmrH�loggingr��botocore.compatrr�botocore.eventstreamrr�botocore.utilsrrr	r
�	getLoggerrrGr2rrr,�	Exceptionr.r0r�rrr%rNrhrnrur�r�r�rrrr�<module>r�s���g�g�P�
�
�
�������������	�	�	�	�0�0�0�0�0�0�0�0�D�D�D�D�D�D�D�D��������������g���!�!��*��,�,�,�,�,�,�,�,�*;�;�;����*	�	�	�	�	�)�	�	�	�}5�}5�}5�}5�}5�}5�}5�}5�@n#�n#�n#�n#�n#�N�n#�n#�n#�b1:�1:�1:�1:�1:�'�1:�1:�1:�h!�!�!�!�!�[�!�!�!�Hk%�k%�k%�k%�k%�^�k%�k%�k%�\P9�P9�P9�P9�P9�N�P9�P9�P9�f7�7�7�7�7�1�>�7�7�7�
9�9�9�9�9�0�2G�9�9�9�$5�$5�$5�$5�$5��$5�$5�$5�Nu1�u1�u1�u1�u1�^�u1�u1�u1�p#�#�#�#�#�^�^�#�#�#�<K�K�K�K�K�N�$9�K�K�K�^�
��������r