
    vKg                        S r SSKrSSKrSSKrSSKrSSKrSSKJrJ	r	  SSK
JrJr  SSKJrJrJrJr  \R$                  " \5      r\r " S S5      rS rS	 r " S
 S\5      r " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r  " S S\ \5      r! " S S\ \5      r" " S S\5      r# " S S\5      r$ " S  S!\$\5      r% " S" S#\$\5      r&\\\#\%\&S$.r'g)%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                   &    \ rS rSrS rS rS rSrg)ResponseParserFactory   c                     0 U l         g N	_defaults)selfs    P/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/botocore/parsers.py__init__ResponseParserFactory.__init__   s	        c                 :    U R                   R                  U5        g)a'  Set 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_defaults)ResponseParserFactory.set_parser_defaults   s     	f%r   c                 8    [         U   nU" S0 U R                  D6$ )N )PROTOCOL_PARSERSr   )r   protocol_name
parser_clss      r   create_parser#ResponseParserFactory.create_parser   s    %m4
+DNN++r   r   N)__name__
__module____qualname____firstlineno__r   r   r!   __static_attributes__r   r   r   r   r      s    
&,r   r   c                 4    [        5       R                  U 5      $ r   )r   r!   )protocols    r   r!   r!      s     "00::r   c                    ^  U 4S jnU$ )Nc                 `   > [        US5      (       a  UR                  nUc  SnOUnT" XU5      $ )Ntext )hasattrr,   )r   shapenode_or_stringr,   funcs       r   _get_text_content(_text_content.<locals>._get_text_content   s:    >6**!&&D| !DD&&r   r   )r1   r2   s   ` r   _text_contentr4      s    
' r   c                       \ rS rSrSrg)ResponseParserError   r   N)r#   r$   r%   r&   r'   r   r   r   r6   r6      s    r   r6   c                       \ rS rSrSrSrSrSS jrS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rSrg)ResponseParser   aS  Base 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.

zutf-8Nc                     Uc  [         nXl        Uc  U R                  nX l        S U l        U R
                  b  U R                  X5      U l        g g r   )DEFAULT_TIMESTAMP_PARSER_timestamp_parser_default_blob_parser_blob_parser_event_stream_parserEVENT_STREAM_PARSER_CLS)r   timestamp_parserblob_parsers      r   r   ResponseParser.__init__   sZ    #7!133K'$(!''3(,(D(D )D% 4r   c                 .    [         R                  " U5      $ r   )base64	b64decoder   values     r   r>   #ResponseParser._default_blob_parser   s     &&r   c                 d   [         R                  SUS   5        [         R                  SUS   5        US   S:  ac  U R                  U5      (       a  U R                  U5      nOLU R	                  U5      (       a  U R                  X5      nU$ U R                  X5      nOU R                  X5      nU(       a"  UR                  R                  S5      (       a  U$ [        U[        5      (       aB  UR                  S0 5      nUS   US	'   US   n[        U5      US
'   XCS'   U R                  X5        U$ )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.

zResponse headers: %rheaderszResponse 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_metadatarL   s         r   parseResponseParser.parse   s(   " 			((9*=>		&(89M"c)..x8855h?--e4455hF--h>^^H4F U((,,];;M fd## &

+=r B2:=2I./ y)G/=g/Fm,):%&00Mr   c                     UR                  S0 5      R                  S0 5      nUR                  S5      nU(       a  XBS'   g g )Ncontextchecksumresponse_algorithmChecksumAlgorithmr\   )r   r`   rb   checksum_context	algorithms        r   r_   .ResponseParser._add_checksum_response_metadata  sB    #<<	26:::rJ$(()=>	5>12 r   c                 P    US L=(       a    UR                   R                  SS5      $ )N	exceptionF)metadatar\   )r   r/   s     r   rW   &ResponseParser._is_modeled_error_shape  s#    D KU^^%7%7U%KKr   c                     US   S:  a?  SU;  d  US   c  gUS   R                  5       nUR                  S5      =(       d    U(       + $ g )NrN   i  rM   Ts   <html>)strip
startswith)r   r`   rM   s      r   rU   )ResponseParser._is_generic_error_response  sT     M"c)X%&)9)AF#))+D??9-9T9 *r   c                     [         R                  S5        [        US   5      [        R                  R
                  R                  US   S5      S.0 S.$ )NzlReceived a non protocol specific error response from the service, unable to populate error code and message.rN   r-   CodeMessageErrorrP   )rS   rT   strhttpclient	responsesr\   r   r`   s     r   rV   &ResponseParser._do_generic_error_parse-  s[     			B	
 H]34;;0044]+R !#
 	
r   c                 F    [        U R                  R                   S35      e)Nz
._do_parseNotImplementedError	__class__r#   r   r`   r/   s      r   rZ   ResponseParser._do_parse>  s    !T^^%<%<$=Z"HIIr   c                 F    [        U R                  R                   S35      e)Nz._do_error_parser   r   s      r   rY   ResponseParser._do_error_parseA  s     !T^^%<%<$==M"NOOr   c                 F    [        U R                  R                   S35      e)Nz._do_modeled_error_parser   )r   r`   r/   ra   s       r   rX   &ResponseParser._do_modeled_error_parseD  s%    !~~&&''?@
 	
r   c                 Z    [        U SUR                   3U R                  5      nU" X5      $ )N_handle_)getattr	type_name_default_handle)r   r/   nodehandlers       r   _parse_shapeResponseParser._parse_shapeI  s2    HU__-.0D0D
 u##r   c                 t    / nUR                   nU H#  nUR                  U R                  XE5      5        M%     U$ r   )memberappendr   )r   r/   r   ra   member_shapeitems         r   _handle_listResponseParser._handle_listO  s8     ||DMM$++L?@ r   c                     U$ r   r   r   r/   rI   s      r   r   ResponseParser._default_handleX  s    r   c                 b    U R                   nUS   R                  S5      n[        US   X#U5      $ )Nrf   operation_namerM   )r@   r\   r   )r   r`   r/   parsernames        r   _create_event_stream#ResponseParser._create_event_stream[  s7    **	"&&'788F+UDAAr   c                     [        U5      S   $ Nr   )listrH   s     r   _get_first_keyResponseParser._get_first_key`  s    E{1~r   c                 .   UR                   (       a  UR                  5       nUR                  SS 5        [        U5      S:w  a  Sn[	        XAR
                  -  5      eU R                  U5      nXQR                  ;  a  Sn[        R                  Xe-  5        gg)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lenr6   r   r   membersrS   info)r   r/   rI   cleaned_value	error_msgtagmsgs          r    _has_unknown_tagged_union_member/ResponseParser._has_unknown_tagged_union_memberc  s      !JJLMh-=!Q&&  *)jj*@AA%%m4C--'( 
 #r   c                     SSU00$ )NSDK_UNKNOWN_MEMBERr   r   )r   r   s     r   #_handle_unknown_tagged_union_member2ResponseParser._handle_unknown_tagged_union_memberx  s    $vsm44r   )r?   r@   r=   NN)r#   r$   r%   r&   __doc__DEFAULT_ENCODINGrA   r   r>   rc   r_   rW   rU   rV   rZ   rY   rX   r   r   r   r   r   r   r   r'   r   r   r   r9   r9      so     "'/b?L:&
"JP

$B
*5r   r9   c                      ^  \ rS rSrSU 4S jjrS rS rU 4S jrS rS r	S r
S	 rS
 rS r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\r\r\rSrU =r$ )BaseXMLResponseParseri|  c                 Z   > [         TU ]  X5        [        R                  " S5      U l        g )Nz{.*})superr   recompile_namespace_re)r   rB   rC   r   s      r   r   BaseXMLResponseParser.__init__}  s"    )7ZZ/r   c                    0 nUR                   nUR                  nUR                  R                  S5      =(       d    SnUR                  R                  S5      =(       d    SnUR                  R                  S5      (       a  [	        U[
        5      (       d  U/nU H^  nU HP  n	U R                  U	5      n
X:X  a  U R                  XI5      nM,  X:X  a  U R                  XY5      nMD  [        SU
 35      e   WUW'   M`     U$ )Nr   keyrI   	flattenedzUnknown tag: )	r   rI   r[   r\   r]   r   	_node_tagr   r6   )r   r/   r   ra   	key_shapevalue_shapekey_location_namevalue_location_namekeyval_nodesingle_pairtag_namekey_nameval_names                r   _handle_map!BaseXMLResponseParser._handle_map  s    II	kk%3377?H5)77;;FCNw"";//
48N8N6DK*>>+60#00HH4#00JH-hZ.HII  +  (F8   r   c                 N    U R                   R                  SUR                  5      $ Nr-   )r   subr   )r   r   s     r   r   BaseXMLResponseParser._node_tag  s    !!%%b$((33r   c                    > UR                   R                  S5      (       a  [        U[        5      (       d  U/n[        TU ]  X5      $ )Nr   )r[   r\   r]   r   r   r   )r   r/   r   r   s      r   r   "BaseXMLResponseParser._handle_list  s?     "";//
48N8N6Dw#E00r   c                 @   0 nUR                   nUR                  R                  SS5      (       a  U R                  U5      nU R	                  U5      nU R                  X5      (       a"  U R                  U5      nU R                  U5      $ U GH  nXG   nSUR                  ;   d   UR                  R                  S5      (       a  M:  U R                  X5      n	UR                  U	5      n
U
b  U R                  X5      X7'   Mt  UR                  R                  S5      (       d  M  0 nUR                  S   nUR                  R                  5        H:  u  pU R                  R                  UR                  S5      S   S-   U5      nXU'   M<     X;   d  GM  X   X7'   GM     U$ )	Nro   FlocationeventheaderxmlAttributer   :r   )r   rp   r\   _get_error_root_build_name_to_xml_noder   r   r   r[   _member_key_namer   attribitemsr   r   split)r   r/   r   ra   r   xml_dictr   member_namer   xml_namemember_nodeattribslocation_namer   rI   new_keys                   r   _handle_structure'BaseXMLResponseParser._handle_structure  s   -->>k511''-D//500AA%%h/C;;C@@"K"/Ll888--11-@@ ,,\GH",,x0K&&*&7&7 '# ++//?? , : :6 B"&++"3"3"5JC"0044%++C03c93G (-G$	 #6
 !+*1*@F'1 #2 r   c                 t    U R                  U5      S:X  a"  U H  nU R                  U5      S:X  d  M  Us  $    U$ )NErrorResponser{   r   )r   original_rootchilds      r   r   %BaseXMLResponseParser._get_error_root  s;    >>-(O;&>>%(G3 L ' r   c                     UR                   S:X  aJ  UR                  R                  S5      (       a*  UR                  R                  R                  S5      nUb  U$ UR                  R                  S5      nUb  U$ U$ )Nr   r   r   )r   r[   r\   r   )r   r/   r   list_member_serialized_nameserialized_names        r   r   &BaseXMLResponseParser._member_key_name  sz    
 ??f$)<)<)@)@)M)M*/,,*D*D*H*H+' +622--11&9&""r   c                    [        U[        5      (       a  U R                  US   5      $ 0 nU HS  nU R                  U5      nXB;   a6  [        X$   [        5      (       a  X$   R	                  U5        ME  X$   U/X$'   MO  X2U'   MU     U$ r   )r]   r   r   r   r   )r   parent_noder   r   r   s        r   r   -BaseXMLResponseParser._build_name_to_xml_node  s     k4((//A??D..&C
 hmT22M((. &.]D$9HM $   r   c                      [         R                  " [         R                  " 5       U R                  S9nUR	                  U5        UR                  5       nU$ ! [         a  n[        SU SU 35      eS nAff = f)N)targetencodingzUnable to parse response (z6), invalid XML received. Further retries may succeed:
)r   	XMLParserTreeBuilderr   feedcloser   r6   )r   
xml_stringr   rootes        r   _parse_xml_string_to_dom.BaseXMLResponseParser._parse_xml_string_to_dom  s    
	__((*T5J5JF KK
#<<>D   	%,QC 0GGQlT 	s   AA 
A7!A22A7c                     UR                  5        HI  u  p#[        U5      (       a&  U R                  U5      nU R                  U5      X'   M;  UR                  X'   MK     U$ r   )r   r   r   _replace_nodesr,   )r   ra   r   rI   sub_dicts        r   r  $BaseXMLResponseParser._replace_nodes  sQ     ,,.JCE{{77>"11(;#jj ) r   c                     US:X  a  gg)NtrueTFr   r   r/   r,   s      r   _handle_boolean%BaseXMLResponseParser._handle_boolean  s    6>r   c                     [        U5      $ r   )floatr  s      r   _handle_float#BaseXMLResponseParser._handle_float  s    T{r   c                 $    U R                  U5      $ r   r=   r  s      r   _handle_timestamp'BaseXMLResponseParser._handle_timestamp  s    %%d++r   c                     [        U5      $ r   intr  s      r   _handle_integer%BaseXMLResponseParser._handle_integer  s    4yr   c                     U$ r   r   r  s      r   _handle_string$BaseXMLResponseParser._handle_string  s    r   c                 $    U R                  U5      $ r   r?   r  s      r   _handle_blob"BaseXMLResponseParser._handle_blob#  s      &&r   )r   r   )r#   r$   r%   r&   r   r   r   r   r   r   r   r   r  r  r4   r  r  r  r  r!  r%  _handle_character_handle_double_handle_longr'   __classcell__r   s   @r   r   r   |  s    0*41"H .     , ,     ' ' '"N"Lr   r   c                   <    \ rS rSrS rS rS rS
S jrS rS r	Sr
g	)QueryParseri,  c                     US   nU R                  U5      nU R                  U5      nU R                  U5        SU;   a   UR                  UR	                  S5      5        SU;   a  SUR	                  S5      0US'   U$ )NrM   Errors	RequestIdrP   )r  r   r  r   r   )r   r`   r/   xml_contentsr  ra   s         r   rY   QueryParser._do_error_parse-  s    ',,\:--d3F# vMM&**X./& *5vzz+7N)OF%&r   c                 "    U R                  XSS9$ )NFinject_metadata_parse_body_as_xmlr   s      r   rX   #QueryParser._do_modeled_error_parse=  s    &&x&NNr   c                 "    U R                  XSS9$ )NTr4  r6  r   s      r   rZ   QueryParser._do_parse@  s    &&x&MMr   c                     US   nU R                  U5      n0 nUbB  UnSUR                  ;   a  U R                  UR                  S   U5      nU R                  X'5      nU(       a  U R	                  XV5        U$ )NrM   resultWrapper)r  r[   _find_result_wrapped_shaper   _inject_response_metadata)r   r`   r/   r5  r1  r  ra   starts           r   r7  QueryParser._parse_body_as_xmlC  s    ',,\:E%"5"5577''8$ &&u4F**48r   c                 ,    U R                  U5      nX1   $ r   )r   )r   element_namexml_root_nodemappings       r   r=  &QueryParser._find_result_wrapped_shapeR  s    ..}=$$r   c                     U R                  U5      nUR                  S5      nUb=  U R                  U5      nUR                  5        H  u  pgUR                  XV'   M     XRS'   g g NrP   )r   r\   r   r,   )r   r   inject_intorD  
child_nodesub_mappingr   rI   s           r   r>  %QueryParser._inject_response_metadataV  sf    ..t4[[!34
!66zBK)//1
#(::  2.9*+	 "r   r   N)T)r#   r$   r%   r&   rY   rX   rZ   r7  r=  r>  r'   r   r   r   r-  r-  ,  s"     ON%:r   r-  c                   4   ^  \ rS rSrS rU 4S jrS rSrU =r$ )EC2QueryParseri`  c                 r    U R                  U5      nUR                  S5      nUb  SUR                  0US'   g g )N	requestIdr0  rP   )r   r\   r,   )r   r   rH  rD  rI  s        r   r>  (EC2QueryParser._inject_response_metadataa  s?    ..t4[[-
!/:JOO.LK*+ "r   c                 ^   > [         TU ]  X5      nSU;   a  SUR                  S5      0US'   U$ )N	RequestIDr0  rP   )r   rY   r   )r   r`   r/   originalr   s       r   rY   EC2QueryParser._do_error_parseg  s>     7*8;("X\\+6,H'( r   c                     U H>  nU R                  U5      S:X  d  M  U H  nU R                  U5      S:X  d  M  Us  s  $    M@     U$ )Nr/  r{   r   )r   r   r   errors_childs       r   r   EC2QueryParser._get_error_root{  sF    "E~~e$0$)L~~l3w>++ %* #
 r   r   )	r#   r$   r%   r&   r>  rY   r   r'   r*  r+  s   @r   rM  rM  `  s    M( r   rM  c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)BaseJSONParseri  c                 r   0 nUR                   (       a  UnU$ UR                  nUc  g 0 nU R                  X5      (       a"  U R                  U5      nU R	                  U5      $ U HO  nXF   nUR
                  R                  SU5      nUR                  U5      n	U	c  M9  U R                  XF   U	5      X6'   MQ     U$ )Nr   )is_document_typer   r   r   r   r[   r\   r   )
r   r/   rI   final_parsedmember_shapesr   r   r   	json_name	raw_values
             r   r    BaseJSONParser._handle_structure  s    !! L( % "MMM} L44UBB))%0??DD,,9(66::6;O	!IIi0	(040A0A%2I1L-  - r   c                     0 nUR                   nUR                  nUR                  5        H+  u  pbU R                  XF5      nU R                  XR5      nXU'   M-     U$ r   )r   rI   r   r   )	r   r/   rI   ra   r   r   r   
actual_keyactual_values	            r   r   BaseJSONParser._handle_map  sZ    II	kk++-JC**9:J,,[@L!-: ( r   c                 $    U R                  U5      $ r   r$  r   s      r   r%  BaseJSONParser._handle_blob  s      ''r   c                 $    U R                  U5      $ r   r  r   s      r   r   BaseJSONParser._handle_timestamp  s    %%e,,r   c                    U R                  US   5      nSSS.0 S.nUS   nUR                  SUR                  SS5      5      US   S'   UR                  S	5      nUR                  S
U=(       a    [        U5      5      nUb:  SU;   a  UR                  SS5      S   nSU;   a  U R	                  XuU5      nXtS   S'   U R                  XAS   5        U$ )NrM   r-   ry   rx   rz   rL   messagery   r{   rN   r   #r   x-amzn-query-errorrx   )_parse_body_as_jsonr\   r|   rsplit _do_query_compatible_error_parser>  )r   r`   r/   rM   errorrL   response_codecodes           r   rY   BaseJSONParser._do_error_parse  s    ''(89&("52N9% %)HHtxx	2.%
gy!
 !]3xx-"FC4FG d{{{3*1-#w.<<5 &*'N6"&&uy.ABr   c                     US   nUR                  S5      n[        U5      S:X  a!  US   (       a  XS   S'   US   US   S'   US   $ U$ )	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.
rm  ;   r   r{   QueryErrorCoder   Type)r   r   )r   rs  rL   rq  query_errorquery_error_componentss         r   rp  /BaseJSONParser._do_query_compatible_error_parse  sf     23!,!2!23!7%&!+0Fq0I/3'N+,%;A%>E'N6")!,,r   c                 B    SU;   a  US   UR                  S0 5      S'   g g )Nx-amzn-requestidrP   r0  )
setdefault)r   ra   rL   s      r   r>  (BaseJSONParser._inject_response_metadata  s0    (EL"FF0"5kB )r   c                     U(       d  0 $ UR                  U R                  5      n [        R                  " U5      nU$ ! [         a    SU0s $ f = f)Nrk  )decoder   jsonloads
ValueError)r   body_contentsrM   original_parseds       r   rn  "BaseJSONParser._parse_body_as_json  sU    I##D$9$9:	%"jj.O"" 	% t$$	%s   > AAr   N)r#   r$   r%   r&   r   r   r%  r  rY   rp  r>  rn  r'   r   r   r   rY  rY    s+    2(- D
%r   rY  c                   2    \ rS rSrS rS rS rS rS rSr	g)	BaseEventStreamParseri  c                 T   0 nUR                   R                  S5      (       aK  US   R                  S5      nUR                  R                  U5      nU(       a  U R                  X5      X4'   U$ U R	                  XUR                  U5        U R                  XUR                  U5        U$ )NrO   rL   z:event-type)r[   r\   r   rZ   _parse_non_payload_attrs_parse_payload)r   r`   r/   r\  
event_typeevent_shapes         r   rZ   BaseEventStreamParser._do_parse  s    ""=11!),00?J--++J7K+/>>,( 	 )) Mr   c           	      `   US   R                  S5      nUR                  R                  U5      nUbN  U R                  US   5      nU R                  XE5      nSUUR                  SUR                  SS5      5      S.0nU$ SUS   R                  S	S5      US   R                  S
S5      S.0nU$ )NrL   z:exception-typerM   r{   ry   rk  r-   rw   z:error-codez:error-message)r\   r   _initial_body_parser   )r   r`   r/   exception_typeexception_shaper  rM   rq  s           r   rY   %BaseEventStreamParser._do_error_parse  s    !),001BC--++N;&"66x7GHO$$_FD*#xx	488Ir3JKE  $Y/33M2F'	2667GLE r   c                    UR                   R                  S5      (       a  U H  nX5   nUR                   R                  S5      (       d  M)  US   nUR                  S:X  a  UnONUR                  S:X  a  UR                  U R                  5      nO"U R                  U5      n	U R                  Xi5      nXU'     g    U R                  US   5      n
U R                  X*5      nUR                  U5        g g )NeventeventpayloadrM   blobstring)r[   r\   r   r  r   r  r   r   )r   r`   r/   r]  r\  r   r   rM   parsed_body	raw_parser  body_parseds               r   r  $BaseEventStreamParser._parse_payload  s    ""7++%,2--11.AA#F+D#--7&*%//8;&*kk$2G2G&H$($<$<T$B	&*&7&7(' *5& &  #66x7GHO++ECK,' ,r   c                     US   nU H\  nX6   nUR                   R                  S5      (       d  M)  Xe;   d  M0  XV   nUR                  S:X  a  U R                  US-  5      nXU'   M^     g )NrL   r   	timestampg     @@)r[   r\   r   r=   )	r   r`   r/   r]  r\  rL   r   r   rI   s	            r   r  .BaseEventStreamParser._parse_non_payload_attrs.  so     9%!D(.L))--m<<?#ME#--< !% 6 6uv~ F).& "r   c                     [        S5      eNr  r   r   r  s     r   r  )BaseEventStreamParser._initial_body_parse=      
 ""788r   r   N)
r#   r$   r%   r&   rZ   rY   r  r  r  r'   r   r   r   r  r    s     *-,/9r   r  c                       \ rS rSrS rSrg)EventStreamJSONParseriE  c                 $    U R                  U5      $ r   rn  r  s     r   r  )EventStreamJSONParser._initial_body_parseF      ''66r   r   Nr#   r$   r%   r&   r  r'   r   r   r   r  r  E  s    7r   r  c                       \ rS rSrS rSrg)EventStreamXMLParseriJ  c                 ^    U(       d  [         R                  " S5      $ U R                  U5      $ r   r   Elementr  r   r  s     r   r  (EventStreamXMLParser._initial_body_parseK  %    ==$$,,Z88r   r   Nr  r   r   r   r  r  J  s    9r   r  c                   2    \ rS rSr\r S rS rS rS r	Sr
g)
JSONParseriQ  c                     0 nUb;  UR                   nU(       a  U R                  XU5      nOU R                  US   U5      nU R                  X1S   5        U$ )NrM   rL   )event_stream_name_handle_event_stream_handle_json_bodyr>  )r   r`   r/   ra   
event_names        r   rZ   JSONParser._do_parseV  s\    00J228JO//0@%H&&v	/BCr   c                 ,    U R                  US   U5      $ )NrM   )r  r   s      r   rX   "JSONParser._do_modeled_error_parsea  s    %%hv&6>>r   c                     UR                   U   nU R                  X5      n UR                  5       nU R                  UR                  U5      nXXU'   U$ ! [         a    Sn[	        U5      ef = f)Nz,First event was not of type initial-response)r   r   get_initial_responser   r6   r  payload)	r   r`   r/   r  event_stream_shapeevent_streamr  r   ra   s	            r   r  JSONParser._handle_event_streamd  sz    "]]:600N	1 557E ''u=)z & 	1FI%i00	1s   A A,c                 F    U R                  U5      nU R                  X#5      $ r   )rn  r   )r   raw_bodyr/   parsed_jsons       r   r  JSONParser._handle_json_bodyp  s%     ..x8  44r   r   N)r#   r$   r%   r&   r  rA   rZ   rX   r  r  r'   r   r   r   r  r  Q  s    32	?
5r   r  c                   ^   ^  \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rU 4S jrSrU =r$ )BaseRestParserix  c                 V    0 nU R                  U5      US'   U R                  XU5        U$ rG  )_populate_response_metadata_add_modeled_parser   r`   r/   r\  s       r   rZ   BaseRestParser._do_parsey  s8    +/+K+K,
'( 	>r   c                 n    Uc  U$ UR                   nU R                  XXC5        U R                  XXC5        g r   )r   r  r  )r   r`   r/   r\  r]  s        r   r  !BaseRestParser._add_modeled_parse  s;    =%%]	
 	H]Ir   c                 .    0 nU R                  XU5        U$ r   )r  r  s       r   rX   &BaseRestParser._do_modeled_error_parse  s    >r   c                 z    0 nUS   nSU;   a
  US   US'   U$ SU;   a  US   US'   UR                  SS5      US'   U$ )NrL   r~  r0  x-amz-request-id
x-amz-id-2r-   HostIdrj   )r   r`   rp   rL   s       r   r  *BaseRestParser._populate_response_metadata  sf    9%($+,>$?H[!   7*$+,>$?H[! ")\2!>HXr   c                    SUR                   ;   a  UR                   S   nX5   nUR                   R                  S5      (       a  U R                  X5      nXtU'   g UR                  S;   a:  US   n[	        U[
        5      (       a  UR                  U R                  5      nXtU'   g U R                  US   5      nU R                  Xh5      XE'   g U R                  US   5      nU R                  X(5      n	UR                  U	5        g )Nr  rO   )r  r  rM   )r[   r\   r   r   r]   bytesr  r   r  r   r   )
r   r`   r/   r]  r\  payload_member_name
body_shaperM   r  r  s
             r   r  BaseRestParser._parse_payload  s    +++ #("5"5i"@&;J''++M::00F4801%%);;'dE**;;t'<'<=D4801"&":":8F;K"L484E4E51 #66x7GHO++ECK,r   c                 \   US   nU H  nX6   nUR                   R                  S5      nUc  M'  US:X  a  U R                  XqS   5      XF'   ME  US:X  a  U R                  Xu5      XF'   M`  US:X  d  Mh  UR                   R                  SU5      n	X;   d  M  U R                  XuU	   5      XF'   M     g )NrL   r   
statusCoderN   headerr   )r[   r\   r   _parse_header_map)
r   r`   r/   r]  r\  rL   r   r   r   header_names
             r   r  'BaseRestParser._parse_non_payload_attrs  s     9%!D(.L#1155jAH\)%)%6%6 ="9&" Y&%)%;%; &" X%*88<<VTJ))-):):$k&:*L&! "r   c                     0 nUR                   R                  SS5      R                  5       nU H=  nUR                  5       R                  U5      (       d  M)  U[	        U5      S  nX%   X6'   M?     U$ )Nr   r-   )r[   r\   lowerrt   r   )r   r/   rL   ra   prefixr  r   s          r   r   BaseRestParser._parse_header_map  sq     $$((4::<"K  "--f55 #3v;=1&3 # r   c                     [        S5      er  r  r  s     r   r  "BaseRestParser._initial_body_parse  r  r   c                     Un[        U5      (       aE  [        R                  " U5      R                  U R                  5      n[
        R                  " U5      nU$ r   )r   rF   rG   r  r   r  r  )r   r/   rI   ra   decodeds        r   r!  BaseRestParser._handle_string  sF    &&&&u-44T5J5JKGZZ(Fr   c                    > UR                   R                  S5      nUS:X  aB  [        U[        5      (       d-  UR	                  S5       Vs/ sH  oDR                  5       PM     nn[        TU ]  X5      $ s  snf )Nr   r  ,)r[   r\   r]   r   r   rs   r   r   )r   r/   r   r   r  r   s        r   r   BaseRestParser._handle_list  sb    &&**:6x
4(>(>'+zz#7!GGID7w#E00 8s   A4r   )r#   r$   r%   r&   rZ   r  rX   r  r  r  r  r  r!  r   r'   r*  r+  s   @r   r  r  x  s;    J
-2091 1r   r  c                   B   ^  \ rS rSr\rS rU 4S jrS rS r	\	r
SrU =r$ )RestJSONParseri  c                 $    U R                  U5      $ r   r  r  s     r   r  "RestJSONParser._initial_body_parse  r  r   c                 H   > [         TU ]  X5      nU R                  X15        U$ r   )r   rY   _inject_error_code)r   r`   r/   rq  r   s       r   rY   RestJSONParser._do_error_parse  s%    '80r   c                     U R                  US   5      nSUS   ;   a$  US   S   nUR                  S5      S   nXAS   S'   g SU;   d  SU;   a)  UR                  SUR                  SS	5      5      US   S'   g g )
NrM   zx-amzn-errortyperL   r   r   r{   rx   rs  r-   )r  r   r\   )r   rq  r`   rM   rs  s        r   r  !RestJSONParser._inject_error_code  s     ''(89)!44I&'9:D ::c?1%D%)'N6"t^v~%)XXfdhhvr6J%KE'N6"  .r   c                     [        U5      $ r   r  r   s      r   r  RestJSONParser._handle_integer  s    5zr   r   )r#   r$   r%   r&   r  rA   r  rY   r  r  r)  r'   r*  r+  s   @r   r  r    s%    37
L #Lr   r  c                   N   ^  \ rS rSr\rS rS rS rS r	\
U 4S j5       rSrU =r$ )RestXMLParseri  c                 ^    U(       d  [         R                  " S5      $ U R                  U5      $ r   r  r  s     r   r  !RestXMLParser._initial_body_parse  r  r   c                     US   (       a   U R                  U5      $ U R	                  U5      $ ! [         a    [        R                  SSS9   N1f = f)NrM   z2Exception caught when parsing error response body:T)exc_info)_parse_error_from_bodyr6   rS   rT   _parse_error_from_http_statusr   s      r   rY   RestXMLParser._do_error_parse  s]     F228<< 11(;; ' 		H!  s   . AAc                     [        US   5      [        R                  R                  R	                  US   S5      S.US   R	                  SS5      US   R	                  SS5      S.S.$ )	NrN   r-   rw   rL   r  r  )r0  r  rz   )r|   r}   r~   r   r\   r   s     r   r  +RestXMLParser._parse_error_from_http_status1  st     H]34;;0044]+R &i0445GL"9-11,C!
 	
r   c                 d   US   nU R                  U5      nU R                  U5      nU R                  U5        UR                  S:X  a9  U R	                  U5      nUR                  SS5        UR                  SS5        XES.$ SU;   a  SUR                  S5      0US'   SSSS.0n[        Xd5        U$ )	NrM   r{   r0  r-   r  rz   rP   rj  )r  r   r  r   r  r   r	   )r   r`   r1  r  ra   rp   defaults          r   r  $RestXMLParser._parse_error_from_body?  s    ',,\:--d3F#88w 77AH
 JJ{B'JJx$#BBF"*5vzz+7N)OF%&B78G$r   c                 &   > [         TU ]  X5      nU$ r   )r   r!  )r   r/   r,   r   s      r   r!  RestXMLParser._handle_stringV  s    w%e2r   r   )r#   r$   r%   r&   r  rA   r  rY   r  r  r4   r!  r'   r*  r+  s   @r   r  r    s1    29
<6
.  r   r  )ec2queryr  z	rest-jsonzrest-xml)(r   rF   http.clientr}   r  loggingr   botocore.compatr   r   botocore.eventstreamr   r   botocore.utilsr   r   r	   r
   	getLoggerr#   rS   r<   r   r!   r4   	Exceptionr6   r9   r   r-  rM  rY  r  r  r  r  r  r  r  r   r   r   r   <module>r     s.  gR     	 0 D  !* , ,*;*	) 	}5 }5@m#N m#`1:' 1:h![ !Hk%^ k%\P9N P9f71> 7
902G 9$5 $5Nu1^ u1p#^^ #<KN$9 K^  r   