
    D.hy                        d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZ ddlmZ ddlmZ ddlmZ ddlmZmZmZmZ d	Zd
ZdZ ej        d          Zd$dZ G d d          Z G d de          Z G d de          Z  G d de          Z! G d de          Z" G d de          Z# G d de          Z$ G d de#e!          Z% G d d e#          Z& G d! d"e$e"          Z'e ee!e%e&e'd#Z(dS )%a  Protocol input serializes.

This module contains classes that implement input serialization
for the various AWS protocol types.

These classes essentially take user input, a model object that
represents what the expected input should look like, and it returns
a dictionary that contains the various parts of a request.  A few
high level design decisions:


* Each protocol type maps to a separate class, all inherit from
  ``Serializer``.
* The return value for ``serialize_to_request`` (the main entry
  point) returns a dictionary that represents a request.  This
  will have keys like ``url_path``, ``query_string``, etc.  This
  is done so that it's a) easy to test and b) not tied to a
  particular HTTP library.  See the ``serialize_to_request`` docstring
  for more details.

Unicode
-------

The input to the serializers should be text (str/unicode), not bytes,
with the exception of blob types.  Those are assumed to be binary,
and if a str/unicode type is passed in, it will be encoded as utf-8.
    N)ElementTree)validate)
formatdate)ParamValidationError)register_feature_id)
has_headeris_json_value_headerparse_to_aware_datetimepercent_encodeiso8601z%Y-%m-%dT%H:%M:%SZz%Y-%m-%dT%H:%M:%S.%fZz^[A-Za-z0-9\.\-]+$Tc                     t          |                      }|r(t          j                    }t          j        ||          }|S N)SERIALIZERSr   ParamValidatorParamValidationDecorator)protocol_nameinclude_validation
serializer	validators       d/Users/user/workspace/sujinbaek/cqa-test-app/venv/lib/python3.11/site-packages/botocore/serialize.pycreate_serializerr   F   sA    ]+--J N+--	6y*MM
    c                   d    e Zd ZdZeZdZd Zd Zd Z	d Z
d Zdd	Zd
 Zd Zd Zd Zd Zd ZdS )
SerializerPOSTutf-8c                      t          d          )a  Serialize parameters into an HTTP request.

        This method takes user provided parameters and a shape
        model and serializes the parameters to an HTTP request.
        More specifically, this method returns information about
        parts of the HTTP request, it does not enforce a particular
        interface or standard for an HTTP request.  It instead returns
        a dictionary of:

            * 'url_path'
            * 'host_prefix'
            * 'query_string'
            * 'headers'
            * 'body'
            * 'method'

        It is then up to consumers to decide how to map this to a Request
        object of their HTTP library of choice.  Below is an example
        return value::

            {'body': {'Action': 'OperationName',
                      'Bar': 'val2',
                      'Foo': 'val1',
                      'Version': '2014-01-01'},
             'headers': {},
             'method': 'POST',
             'query_string': '',
             'host_prefix': 'value.',
             'url_path': '/'}

        :param parameters: The dictionary input parameters for the
            operation (i.e the user input).
        :param operation_model: The OperationModel object that describes
            the operation.
        serialize_to_requestNotImplementedError)self
parametersoperation_models      r   r   zSerializer.serialize_to_requestX   s    H ""8999r   c                      dd| j         i dd}|S )N/ r   )url_pathquery_stringmethodheadersbody)DEFAULT_METHOD)r!   
serializeds     r   _create_default_requestz"Serializer._create_default_request~   s*     )
 

 r   c                 `    |j         dk    rt          }nt          }|                    |          S )Nr   )microsecondISO8601_MICROISO8601strftime)r!   valuetimestamp_formats      r   _timestamp_iso8601zSerializer._timestamp_iso8601   s2    q  ,&~~.///r   c                 h    t          t          j        |                                                    S r   )intcalendartimegm	timetupler!   r4   s     r   _timestamp_unixtimestampz#Serializer._timestamp_unixtimestamp   s$    8?5??#4#455666r   c                     t          |t          j                  r|                     |          }t          |d          S )NT)usegmt)
isinstancedatetimer=   r   r<   s     r   _timestamp_rfc822zSerializer._timestamp_rfc822   s=    eX.// 	911%88E%----r   Nc                     || j         }|                                }t          |          }t          | d|           } ||          }|S )N_timestamp_)TIMESTAMP_FORMATlowerr
   getattr)r!   r4   r5   datetime_obj	converterfinal_values         r   _convert_timestamp_to_strz$Serializer._convert_timestamp_to_str   s^    ##4+1133.u55D"B0@"B"BCC	i--r   c                 8    |j                             d|          S Nnameserializationget)r!   shapedefault_names      r   _get_serialized_namezSerializer._get_serialized_name   s     "&&v|<<<r   c                     t          |t                    r|                    | j                  }t	          j        |                                                              | j                  S r   )r@   strencodeDEFAULT_ENCODINGbase64	b64encodestripdecoder<   s     r   _get_base64zSerializer._get_base64   sX     eS!! 	8LL!677E&&,,..55d6KLLLr   c                    |j         }|d|vrd S |d         }|j        |S |j        j        }d |                                D             }i }g }|D ]>}	||	         }
t                              |
          s|                    |	           |
||	<   ?|r't          dd                    |           d           |j	        di |S )N
hostPrefixc                 L    g | ]!\  }}|j                             d           |"S )	hostLabelrO   ).0memberrR   s      r   
<listcomp>z2Serializer._expand_host_prefix.<locals>.<listcomp>   sC     
 
 
"&&{33

 
 
r   z Invalid value for parameter(s): z, z?. Must contain only alphanumeric characters, hyphen, or period.)report )
endpointinput_shapemembersitemsHOST_PREFIX_REmatchappendr   joinformat)r!   r"   r#   operation_endpointhost_prefix_expressioninput_membershost_labelsformat_kwargs
bad_labelsrN   params              r   _expand_host_prefixzSerializer._expand_host_prefix   s*   ,5&#5554!3L!A&.))'3;
 
!.!4!4!6!6
 
 

 
 	( 	(Dt$E!''.. (!!$'''"'M$ 	&!tyy7L7L ! ! !    -%,==}===r   c                 6    |j                             d          S )N	flattenedrO   r!   rR   s     r   _is_shape_flattenedzSerializer._is_shape_flattened   s    "&&{333r   c                     |t          d          k    rd}n,|t          d          k    rd}nt          j        |          rd}|S )NInfinityz	-InfinityNaN)floatmathisnanr<   s     r   _handle_floatzSerializer._handle_float   sR    E*%%%%EEeK((((EEZ 	Er   c                 8    |j         j        rd|d         d<   d S d S )Ntruer*   zx-amzn-query-mode)service_modelis_query_compatible)r!   r#   r-   s      r   _handle_query_compatible_traitz)Serializer._handle_query_compatible_trait   s3    (< 	@9?Jy!"5666	@ 	@r   r   )__name__
__module____qualname__r,   dictMAP_TYPErX   r   r.   r6   r=   rB   rK   rT   r]   rw   r{   r   r   rf   r   r   r   r   O   s        N
 H$: $: $:L  0 0 07 7 7. . .
   = = =
M M M >  >  >D4 4 4  @ @ @ @ @r   r   c                   h    e Zd ZdZd ZddZddZddZddZddZ	dd	Z
dd
ZddZddZddZdS )QuerySerializerr   c                 b   |j         }|                                 }|j                            d| j                  |d<   ddi|d<   |                                 }|j        |d<   |j        d         |d<   ||                     |||           ||d<   | 	                    ||          }|||d	<   |S )
Nr)   Content-Typez0application/x-www-form-urlencoded; charset=utf-8r*   Action
apiVersionVersionr+   host_prefix)
rh   r.   httprQ   r,   r   rN   metadata
_serializerw   )r!   r"   r#   rR   r-   body_paramsr   s          r   r   z$QuerySerializer.serialize_to_request   s    +1133
.377d) 
  

8 N!

9
 mmoo / 4H!0!9,!GIOOKU;;;(
6..z?KK"(3J}%r   r&   c                 `    t          | d|j         | j                  } |||||           d S )N_serialize_type_)prefixrG   	type_name_default_serialize)r!   r-   r4   rR   r   r)   s         r   r   zQuerySerializer._serialize   sJ     0u00#
 

 	z5%777777r   c                     |j         }|                                D ]D\  }}||         }|                     ||          }|r| d| }|                     ||||           Ed S )N.)ri   rj   rT   r   )	r!   r-   r4   rR   r   ri   keymember_shapemember_prefixs	            r   _serialize_type_structurez)QuerySerializer._serialize_type_structure  s    -++-- 	L 	LJC"3<L 55lCHHM <#) ; ;M ; ;OOJ|]KKKK	L 	Lr   c                    |sd||<   d S |                      |          rr|}|j        j                            d          rP|                     |j        d          }d                    |                    d          d d         |gz             }n'|j        j                            dd          }| d| }t          |d          D ]+\  }}	| d| }
|j        }|                     ||	||
           ,d S )Nr&   rN   rS   r   rc      )	r{   rc   rP   rQ   rT   rn   split	enumerater   )r!   r-   r4   rR   r   list_prefixrN   	list_nameielementelement_prefixelement_shapes               r   _serialize_type_listz$QuerySerializer._serialize_type_list  s%    	!#JvF##E** 	2 K|)--f55 H00B0OO!hhv||C'8'8"'='FGG266vxHHI#11i11K#E1-- 	P 	PJAw +11a11N!LMOOJOOOO	P 	Pr   c                    |                      |          r|}n| d}|dz   }|j        }|j        }|                     |d          }	|                     |d          }
t	          |d          D ]i\  }}|                    ||	          }|                    ||
          }|                     ||||           |                     |||         ||           jd S )Nz.entryz.{i}.{suffix}r   r   r4   r   )r   suffix)r{   r   r4   rT   r   ro   r   )r!   r-   r4   rR   r   full_prefixtemplate	key_shapevalue_shape
key_suffixvalue_suffixr   r   
key_prefixvalue_prefixs                  r   _serialize_type_mapz#QuerySerializer._serialize_type_map+  s    ##E** 	, KK#+++K0I	k..yu.MM
00gFFq)) 	O 	OFAs!1Z@@J#??Q|?DDLOOJY
CCCOOJc
KNNNN		O 	Or   c                 6    |                      |          ||<   d S r   r]   r!   r-   r4   rR   r   s        r   _serialize_type_blobz$QuerySerializer._serialize_type_blob;  s     !--e44
6r   c                 h    |                      ||j                            d                    ||<   d S NtimestampFormatrK   rP   rQ   r   s        r   _serialize_type_timestampz)QuerySerializer._serialize_type_timestamp?  s9    !;;5&**+<==
 

6r   c                 "    |rd||<   d S d||<   d S Nr   falserf   r   s        r   _serialize_type_booleanz'QuerySerializer._serialize_type_booleanD  s*     	)!'Jv!(Jvr   c                     |||<   d S r   rf   r   s        r   r   z"QuerySerializer._default_serializeJ  s    "
6r   c                 6    |                      |          ||<   d S r   )r   r   s        r   _serialize_type_floatz%QuerySerializer._serialize_type_floatM  s     !//66
6r   c                 6    |                      ||||           d S r   r   r   s        r   _serialize_type_doublez&QuerySerializer._serialize_type_doubleP  "    "":ueVDDDDDr   Nr&   )r   r   r   rE   r   r   r   r   r   r   r   r   r   r   r   rf   r   r   r   r      s          08 8 8 8L L L LP P P P&O O O O 5 5 5 5
 
 
 

) ) ) )# # # #7 7 7 7E E E E E Er   r   c                        e Zd ZdZd ZddZdS )EC2SerializeraU  EC2 specific customizations to the query protocol serializers.

    The EC2 model is almost, but not exactly, similar to the query protocol
    serializer.  This class encapsulates those differences.  The model
    will have be marked with a ``protocol`` of ``ec2``, so you don't need
    to worry about wiring this class up correctly.

    c                     d|j         v r|j         d         S d|j         v r2|j         d         }|d                                         |dd          z   S |S )N	queryNamerN   r   r   )rP   upper)r!   rR   rS   rN   s       r   rT   z"EC2Serializer._get_serialized_name^  sb     %---&{33u*** &v.D7==??T!""X--r   r&   c                 ~    t          |d          D ]+\  }}| d| }|j        }|                     ||||           ,d S )Nr   r   )r   rc   r   )	r!   r-   r4   rR   r   r   r   r   r   s	            r   r   z"EC2Serializer._serialize_type_listk  s^    #E1-- 	P 	PJAw &____N!LMOOJOOOO	P 	Pr   Nr   )r   r   r   __doc__rT   r   rf   r   r   r   r   T  sG              P P P P P Pr   r   c                   T    e Zd ZdZd ZddZd Zd Zd Zd Z	d	 Z
d
 ZddZddZdS )JSONSerializerunixtimestampc                    d                     |j        d         |j                  }|j        d         }|                                 }|j                            d| j                  |d<   |d| d|d<   |                     ||           |                                 }|j	        }|| 
                    |||           t          j        |                              | j                  |d<   |                     ||          }|||d	<   |S )
Nz{}.{}targetPrefixjsonVersionr)   zapplication/x-amz-json-)zX-Amz-Targetr   r*   r+   r   )ro   r   rN   r.   r   rQ   r,   r   r   rh   r   jsondumpsrW   rX   rw   )	r!   r"   r#   targetjson_versionr-   r+   rh   r   s	            r   r   z#JSONSerializer.serialize_to_requestu  s%   $^4 
 
 '/>1133
.377d) 
  

8 #DlDD!
 !

9 	++OZHHH}}%1"OOD*k:::!Z--44T5JKK
6..z?KK"(3J}%r   Nc                 ^    t          | d|j         | j                  } |||||           d S Nr   r   r!   r-   r4   rR   r   r)   s         r   r   zJSONSerializer._serialize  sE    0u00#
 

 	z5%-----r   c                 
   |j         r|||<   d S ||                                 }|||<   |}|j        }|                                D ];\  }}||         }	d|	j        v r|	j        d         }|                     |||	|           <d S rM   )is_document_typer   ri   rj   rP   r   )
r!   r-   r4   rR   r   new_serializedri   
member_keymember_valuer   s
             r   r   z(JSONSerializer._serialize_type_structure  s    ! 	#JsOOO "&"0
3+
mG,1KKMM  (
L&z2\777!-!;F!CJlJ   	 r   c                     |                                  }|||<   |                                D ]"\  }}|                     |||j        |           #d S r   )r   rj   r   r4   )r!   r-   r4   rR   r   map_objsub_key	sub_values           r   r   z"JSONSerializer._serialize_type_map  s_    --//!
3"'++-- 	F 	FGYOOGYWEEEE	F 	Fr   c                     g }|||<   |D ]<}i }|                      |||j        d           |                    |d                    =d S )N__current__)r   rc   rm   )r!   r-   r4   rR   r   list_obj	list_itemwrappers           r   r   z#JSONSerializer._serialize_type_list  sd    "
3 	4 	4IG
 OOGYmLLLOOGM23333	4 	4r   c                     |||<   d S r   rf   r!   r-   r4   rR   r   s        r   r   z!JSONSerializer._default_serialize  s    
3r   c                 h    |                      ||j                            d                    ||<   d S r   r   r   s        r   r   z(JSONSerializer._serialize_type_timestamp  s6    885&**+<==
 

3r   c                 6    |                      |          ||<   d S r   r   r   s        r   r   z#JSONSerializer._serialize_type_blob  s    **511
3r   r&   c                     t          |t          j                  rt          |          }|                     |          ||<   d S r   )r@   decimalDecimalr   r   r   s        r   r   z$JSONSerializer._serialize_type_float  s?    eW_-- 	!%LLE!//66
6r   c                 6    |                      ||||           d S r   r   r   s        r   r   z%JSONSerializer._serialize_type_double  r   r   r   r   )r   r   r   rE   r   r   r   r   r   r   r   r   r   r   rf   r   r   r   r   r  s        &  8. . . .  ,F F F
4 
4 
4     
 
 

2 2 27 7 7 7
E E E E E Er   r   c                       e Zd ZdZdZdZdZdZdZdZ	dZ
dd
Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd	S )CBORSerializerr   r                     Nc                     t          | d|j                   }|t          d|j         d           |||||           d S )Nr   zUnrecognized C2J type: z, unable to serialize request)rG   r   
ValueErrorr   s         r   _serialize_data_itemz#CBORSerializer._serialize_data_item  si    C%/CCDD>%%/ % % %   	z5%-----r   c                 (   |dk    r| j         }n| j        }d|z
  }|                     |          \  }}|                     ||          }|dk    r|                    |           d S |                    ||                    |d          z              d S )Nr   r   big)UNSIGNED_INT_MAJOR_TYPENEGATIVE_INT_MAJOR_TYPE"_get_additional_info_and_num_bytes_get_initial_byteextendto_bytes)	r!   r-   r4   rR   r   
major_typeadditional_info	num_bytesinitial_bytes	            r   _serialize_type_integerz&CBORSerializer._serialize_type_integer  s    A::5JJ5J JE%)%L%L&
 &
" --j/JJ>>l+++++lU^^Iu-M-MMNNNNNr   c                 6    |                      ||||           d S r   )r  r   s        r   _serialize_type_longz#CBORSerializer._serialize_type_long  s"    $$ZsCCCCCr   c                    t          |t                    r|                    d          }n0t          |t          t          f          s|                                }t          |          }|                     |          \  }}|                     | j	        |          }|dk    r|
                    |           n,|
                    ||                    |d          z              |
                    |           d S Nr   r   r  )r@   rV   rW   bytes	bytearrayreadlenr  r  BLOB_MAJOR_TYPEr  r  )	r!   r-   r4   rR   r   lengthr  r  r  s	            r   r   z#CBORSerializer._serialize_type_blob  s    eS!! 	!LL))EEEE9#566 	! JJLLEU%)%L%L&
 &
" -- /
 
 >>l++++lV__Y-N-NNOOO%     r   c                 R   |                     d          }t          |          }|                     |          \  }}|                     | j        |          }	|dk    r|                    |	|z              d S |                    |	|                    |d          z   |z              d S r  )rW   r  r  r  STRING_MAJOR_TYPEr  r  )
r!   r-   r4   rR   r   encodedr  r  r  r  s
             r   _serialize_type_stringz%CBORSerializer._serialize_type_string  s    ,,w''W%)%L%L&
 &
" --"O
 
 >>lW455555vy%@@@7J    r   c                 \   t          |          }|                     |          \  }}|                     | j        |          }|dk    r|                    |           n,|                    ||                    |d          z              |D ]}	|                     ||	|j                   d S Nr   r  )r  r  r  LIST_MAJOR_TYPEr  r  r  rc   )
r!   r-   r4   rR   r   r  r  r  r  items
             r   r   z#CBORSerializer._serialize_type_list!  s    U%)%L%L&
 &
" -- /
 
 >>l++++lV__Y-N-NNOOO 	F 	FD%%j$EEEE	F 	Fr   c                    t          |          }|                     |          \  }}|                     | j        |          }|dk    r|                    |           n,|                    ||                    |d          z              |                                D ]=\  }	}
|                     ||	|j                   |                     ||
|j	                   >d S r#  )
r  r  r  MAP_MAJOR_TYPEr  r  rj   r  r   r4   )r!   r-   r4   rR   r   r  r  r  r  key_itemr%  s              r   r   z"CBORSerializer._serialize_type_map0  s    U%)%L%L&
 &
" --
 
 >>l++++lV__Y-N-NNOOO#kkmm 	E 	ENHd%%j(EIFFF%%j$DDDD	E 	Er   c                 r   ||                      |||j                   d |                                D             }t          |          }|                     |          \  }}|                     | j        |          }|dk    r|                    |           n,|                    ||                    |d          z              |j	        }	|                                D ]T\  }
}|	|
         }d|j
        v r|j
        d         }
|/|                     ||
d d            |                      |||           Ud S )Nc                     i | ]
\  }}|||S r   rf   )rb   kvs      r   
<dictcomp>z<CBORSerializer._serialize_type_structure.<locals>.<dictcomp>F  s    AAA$!Q1=A===r   r   r  rN   )r  r   rj   r  r  r  r'  r  r  ri   rP   r!  )r!   r-   r4   rR   r   
map_lengthr  r  r  ri   r   r   r   s                r   r   z(CBORSerializer._serialize_type_structure@  sl   ?%%j#uGGG BA%++--AAAZZ
%)%L%L&
 &
" --
 
 >>l++++z229eDDD   -(- 	 	$J":.L333)7?
'++J
D$OOO))l  	 	r   c                    |                      |          }d}|                     | j        |          }|                    |           |                     |          \  }}	|	dk    r2|                     | j        |          }|                    |           d S |                     | j        |          }|                    ||                    |	d          z              d S )Nr   r   r  )rK   r  TAG_MAJOR_TYPEr  r  r	  r  )
r!   r-   r4   rR   r   	timestamptagr  r  r  s
             r   r   z(CBORSerializer._serialize_type_timestampa  s    22599	--d.A3GG,'''%)%L%L&
 &
" >>11,i L l+++++11,o L y11)UCCC    r   c                    |                      |          r*|                    |                     |                     d S |                     | j        d          }|                    |t          j        d|          z              d S )N   z>f_is_special_numberr  _get_bytes_for_special_numbersr  FLOAT_AND_SIMPLE_MAJOR_TYPEstructpackr!   r-   r4   rR   r   r  s         r   r   z$CBORSerializer._serialize_type_floatw      ""5)) 	G33E::      110" L lV[u-E-EEFFFFFr   c                    |                      |          r*|                    |                     |                     d S |                     | j        d          }|                    |t          j        d|          z              d S )N   z>dr5  r;  s         r   r   z%CBORSerializer._serialize_type_double  r<  r   c                 n    |rdnd}|                     |                     | j        |                     d S )N      )r  r  r8  )r!   r-   r4   rR   r   r  s         r   r   z&CBORSerializer._serialize_type_boolean  sM     %-""2""0/ 	
 	
 	
 	
 	
r   c                 J    |dk     r|dfS |dk     rdS |dk     rdS |dk     rdS d	S )
N   r      )rC  r   i   )   r   l        )r4  r   )r>     rf   r<   s     r   r  z1CBORSerializer._get_additional_info_and_num_bytes  sO     2::!8O S[[5 U]]5 Z5 5r   c                 >    |dz  }||z                       dd          S )Nr  r   r  )r  )r!   r  r  major_type_bytess       r   r  z CBORSerializer._get_initial_byte  s)     &? ?2<<QFFFr   c                     t          |t          d          k    |t          d          k    t          j        |          g          S )Ninf-inf)anyr   r   r   r<   s     r   r6  z!CBORSerializer._is_special_number  sB    u%v&
5!!
 
 	
r   c                 D   d}|                      | j        |          }|t          d          k    r|t          j        dd          z   S |t          d          k    r|t          j        dd          z   S t          j        |          r|t          j        dd          z   S d S )NrE  rJ  z>Hi |  rK  i   i ~  )r  r8  r   r9  r:  r   r   )r!   r4   r  r  s       r   r7  z-CBORSerializer._get_bytes_for_special_numbers  s    --,o
 
 E%LL  &+dF";";;;eFmm##&+dF";";;;Z 	<&+dF";";;;	< 	<r   r   )r   r   r   r	  r
  r  r  r$  r'  r0  r8  r  r  r  r   r!  r   r   r   r   r   r   r   r  r  r6  r7  rf   r   r   r   r     sK       OONN"#. . . .O O O$D D D! ! !(   F F FE E E   B  ,	G 	G 	G	G 	G 	G
 
 
  ,G G G
 
 

< 
< 
< 
< 
<r   r   c                   v    e Zd ZdZdZdZg dZd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd ZdS )BaseRestSerializera=  Base class for rest protocols.

    The only variance between the various rest protocols is the
    way that the body is serialized.  All other aspects (headers, uri, etc.)
    are the same and logic for serializing those aspects lives here.

    Subclasses must implement the ``_serialize_body_params`` method.

    r   rfc822)uriquerystringheaderr*   c                 P   |                                  }|j                            d| j                  |d<   |j        }|                     ||          }|||d<   ||j        d         |d<   |S |j        }|                                 |                                 |                                 |                                 d}|                                D ] \  }}	|	| 	                    |||	|           !| 
                    |j        d         |d                   |d<   d|j        v r*| 
                    |j        d         |d                   |d<   |d	         |d
<   |d         r|d         |d<   |                     |||||           |                     |||           |S )Nr)   r   
requestUrir'   )uri_path_kwargsquery_string_kwargsbody_kwargsr*   rV  authPath	auth_pathrW  r(   r*   )r.   r   rQ   r,   rh   rw   ri   r   rj   _partition_parameters_render_uri_template_serialize_payload_serialize_content_type)
r!   r"   r#   r-   rR   r   shape_memberspartitioned
param_nameparam_values
             r   r   z'BaseRestSerializer.serialize_to_request  s   1133
.377d) 
  

8  +..z?KK"(3J}%=%4%9,%GJz"  $}}#'==??==??}}	
 
 (2'7'7'9'9 	 	#J"&&Zm    "&!:!: .<M0N"
 "

: ---&*&?&?$Z0-.' 'J{# &11F%G
>"y! 	;$/	$:Jy!Z	
 	
 	
 	$$ZFFFr   c                     i }t          j        d|          D ]R}|                    d          r#t          ||d d                  d          ||<   :t          ||                   ||<   S |j        di |S )Nz{(.*?)}+r   z/~)saferf   )refindallendswithr   ro   )r!   uri_templateparamsencoded_paramstemplate_params        r   r\  z'BaseRestSerializer._render_uri_template  s      j\BB 	 	N&&s++ 1?>#2#./d2 2 2~.. 2@>*2 2~.. #|"44^444r   c                    |j                             d          }|                     ||          r2|                    |d          }|                     |          }||d<   d S |Q|                    |          }|!|                     |||                   |d<   d S |                                 |d<   d S |d         r!|                     |d         |          |d<   d S |                     |          r|                                 |d<   d S d S )Npayloadr   r+   rX  )rP   rQ   _has_streaming_payload_encode_payload_serialize_body_params_serialize_empty_body_requires_empty_body)	r!   r`  r"   r-   rR   r_  payload_memberbody_payloadr   s	            r   r]  z%BaseRestSerializer._serialize_payload(  sF    ,00;;&&~}EE 	> &>>.#>>L//==L!-Jv' %..88K&%)%@%@~!>& &
6""" &*%?%?%A%A
6"""' 	>!%!<!<M*E" "Jv &&u-- 	>!%!;!;!=!=Jv	> 	>r   c                     dS )Nr   rf   r!   s    r   rr  z(BaseRestSerializer._serialize_empty_bodyH  s    sr   c                     dS )z
        Some protocols require varied Content-Type headers
        depending on user input. This allows subclasses to apply
        this conditionally.
        Nrf   )r!   r-   rR   r_  s       r   r^  z*BaseRestSerializer._serialize_content_typeK  s	     	r   c                     dS )z
        Some protocols require a specific body to represent an empty
        payload. This allows subclasses to apply this conditionally.
        Frf   rz   s     r   rs  z'BaseRestSerializer._requires_empty_bodyS  s	    
 ur   c                 (    |duo||         j         dv S )z5Determine if payload is streaming (a blob or string).N)blobstring)r   )r!   rn  r_  s      r   ro  z)BaseRestSerializer._has_streaming_payloadZ  s)    d" 
}W'='G L
 (
 	
r   c                 d    t          |t                    r|                    | j                  S |S r   )r@   rV   rW   rX   )r!   r+   s     r   rp  z"BaseRestSerializer._encode_payloada  s.    dC   	6;;t4555r   c                     ||         j                             d          }j                             d|          }|dk    r#                     |          }||d         |<   d S |dk    r|t          |t                    r|d                             |           d S j        dk    r fd|D             }||d         |<   d S                      |          }||d         |<   d S |d	k    r8||         }	|s|	j        dk    rd S                      |	|          |d
         |<   d S |d
k    r!|}
                     |
|d
         |           d S ||d         |<   d S )NlocationrN   rQ  rV  rR  rW  listc                 F    g | ]}                     |j                  S rf   )_get_uri_and_query_string_valuerc   )rb   r4   rc   r!   s     r   rd   z<BaseRestSerializer._partition_parameters.<locals>.<listcomp>y  s;        88NN  r   rS  r*   rX  )	rP   rQ   r  r@   r   updater   _convert_header_value_do_serialize_header_map)r!   r`  ra  rb  r_  r  key_nameuri_path_value	new_paramrR   header_prefixrc   s   `          @r   r[  z(BaseRestSerializer._partition_parametersf  s    z*'++J77'++FJ??u!AAV N 8FK)*8444&&+t,, I1299+FFFFF!V++    !,  	 @I128<<< @@ 	 @I128<<<!!!*-E 5?f#<#</3/I/I{0 0K	"8,,, "" %M
 )){95{     6AK&z222r   c                 6   |j         dk    r!t          |                                          S |j         dk    r6|j                            d| j                  }|                     ||          S |j         dv r"t          |                     |                    S |S )Nbooleanr1  r   r   double)r   rV   rF   rP   rQ   QUERY_STRING_TIMESTAMP_FORMATrK   r   )r!   rb  rc   r5   s       r   r  z2BaseRestSerializer._get_uri_and_query_string_value  s    y(({##))+++,,%377!4#E    11-   !444t))+66777r   c                 N    |                                 D ]\  }}||z   }|||<   d S r   )rj   )r!   r  r*   
user_inputr   valfull_keys          r   r  z+BaseRestSerializer._do_serialize_header_map  sB    "((** 	$ 	$HC$s*H #GH	$ 	$r   c                      t          d          Nrq  r   )r!   rj  rR   s      r   rq  z)BaseRestSerializer._serialize_body_params      !":;;;r   c                     j         dk    rxt          |          }t          j        |                                          }j                            d j                  }t           	                    ||                    S j         dk    rCj
        j         dk    r fd|D             }n fd|D             }d                    |          S t                    r)                     t          j        |d	                    S j         d
k    r!t          |                                          S j         dv r"t                               |                    S t          |          S )Nr1  r   r  r|  c                 >    g | ]}|                     |          S r   )_escape_header_list_string)rb   r,  r!   s     r   rd   z<BaseRestSerializer._convert_header_value.<locals>.<listcomp>  s4     # # #} 33A66$}}r   c                 J    g | ]}|                     j        |           S r   )r  rc   )rb   r,  r!   rR   s     r   rd   z<BaseRestSerializer._convert_header_value.<locals>.<listcomp>  s8     # # #} ..u|Q??$}}r   ,)r  :)
separatorsr  r  )r   r
   r9   r:   utctimetuplerP   rQ   HEADER_TIMESTAMP_FORMATrV   rK   rc   rn   r	   r]   r   r   rF   r   )r!   rR   r4   rH   r1  r5   converted_values   ``     r   r  z(BaseRestSerializer._convert_header_value  s   ?k))2599L (A(A(C(CDDI$266!4#?    ..y:JKK   _&&|%11# # # #"# # ## # # # #"# # #
 88O,,,!%(( 		 ##DJu$L$L$LMMM_	))u::##%%%_ 333t))%00111u::r   c                 N    d|v sd|v rd|                     dd          z   dz   S |S )N"r  z\")replacer<   s     r   r  z-BaseRestSerializer._escape_header_list_string  s8     %<<3%<<sE222S88Lr   N)r   r   r   r   r  r  KNOWN_LOCATIONSr   r\  r]  rr  r^  rs  ro  rp  r[  r  r  rq  r  r  rf   r   r   rO  rO    s         %.!& BAAO: : :x5 5 5&> > >@      
 
 
  
1A 1A 1Af  $ $ $
< < <! ! !F    r   rO  c                   *    e Zd ZdZd Zd Zd Zd ZdS )BaseRpcV2Serializera`  Base class for RPCv2 protocols.

    The only variance between the various RPCv2 protocols is the
    way that the body is serialized.  All other aspects (headers, uri, etc.)
    are the same and logic for serializing those aspects lives here.

    Subclasses must implement the ``_serialize_body_params``  and
    ``_serialize_headers`` methods.

    c                     |                                  }|j        j        d         }|j        }d| d| |d<   |j        }||                     |||           |                     ||           |S )Nr   z	/service/z/operation/r'   )r.   r   r   rN   rh   r]  _serialize_headers)r!   r"   r#   r-   service_nameoperation_namerh   s          r   r   z(BaseRpcV2Serializer.serialize_to_request  s    1133
&4=nM(-AAAAA 	: &1"##J
KHHH
O<<<r   c                 <    |                      ||          }||d<   d S )Nr+   )rq  )r!   r"   r-   rR   ru  s        r   r]  z&BaseRpcV2Serializer._serialize_payload  s'    22:uEE)
6r   c                      t          d          )Nr  r   )r!   r-   r#   s      r   r  z&BaseRpcV2Serializer._serialize_headers  s    !"6777r   c                      t          d          r  r   )r!   r"   rR   s      r   rq  z*BaseRpcV2Serializer._serialize_body_params  r  r   N)r   r   r   r   r   r]  r  rq  rf   r   r   r  r    sZ        	 	   * * *8 8 8< < < < <r   r  c                   &    e Zd Zd Zd Zd Zd ZdS )RestJSONSerializerc                     dS )Ns   {}rf   rw  s    r   rr  z(RestJSONSerializer._serialize_empty_body  s    ur   c                 \    |j                                         D ]\  }}d|j        vr dS dS )zq
        Serialize an empty JSON object whenever the shape has
        members not targeting a location.
        r  TF)ri   rj   rP   )r!   rR   rc   r  s       r   rs  z'RestJSONSerializer._requires_empty_body  sD    
 !=..00 	 	KFC!222tt 3ur   c                     |j                             d          }|                     ||          rdS |d         dk    }t          d|d                   }|r|sd|d         d<   dS dS dS )z?Set Content-Type to application/json for all structured bodies.rn  Nr+   r   r   r*   zapplication/json)rP   rQ   ro  r   )r!   r-   rR   r_  rn  has_bodyhas_content_types          r   r^  z*RestJSONSerializer._serialize_content_type  s    %)))44&&w>> 	Ff%,%nj6KLL 	G, 	G4FJy!.111	G 	G 	G 	Gr   c                     |                                  }|                     |||           t          j        |                              | j                  S r   )r   r   r   r   rW   rX   )r!   rj  rR   serialized_bodys       r   rq  z)RestJSONSerializer._serialize_body_params  sF    --//777z/**11$2GHHHr   N)r   r   r   rr  rs  r^  rq  rf   r   r   r  r    sX            
G 
G 
GI I I I Ir   r  c                   Z    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd ZdS )RestXMLSerializerr   c                     |j         d         }t          j        d          }|                     ||||           t	          |          d         }t          j        || j                  S )NrN   r&   r   )encoding)rP   r   Elementr   r  tostringrX   )r!   rj  rR   	root_namepseudo_root	real_roots         r   rq  z(RestXMLSerializer._serialize_body_params%  sb    '/	!)"--v{I>>>%%a(	#I8MNNNNr   c                 ^    t          | d|j         | j                  } |||||           d S r   r   )r!   rR   rj  xmlnoderN   r)   s         r   r   zRestXMLSerializer._serialize,  sE    0u00#
 

 	wt,,,,,r   c                 ~   t          j        ||          }|                     ||           |                                D ]|\  }}|j        |         }|j                            d|          }	| d S |j                            d          r|j        d         }
||j        |
<   d|                     ||||	           }d S )NrN   xmlAttribute)	r   
SubElement_add_xml_namespacerj   ri   rP   rQ   attribr   )r!   r  rj  rR   rN   structure_noder   r4   r   member_namexml_attribute_names              r   r   z+RestXMLSerializer._serialize_type_structure4  s    $/>>~666 ,,.. 	N 	NJC =-L&488EEK
 })--n== %1%?%G"<A%&89OOL%MMMM	N 	Nr   c                    |j         }|j                            d          r|}|}n0|j                            dd          }t          j        ||          }|                     ||           |D ]}|                     ||||           d S )Nry   rN   rc   )rc   rP   rQ   r   r  r  r   )	r!   r  rj  rR   rN   r   element_name	list_noder%  s	            r   r   z&RestXMLSerializer._serialize_type_listI  s    |"";// 	>LII'599&(KKL#.w==Iy111 	I 	IDOOL$	<HHHH	I 	Ir   c                    |                      |          s+t          j        ||          }|                     ||           |                                D ]\  }}|                      |          rt          j        ||          nt          j        |d          }|                     |j        d          }	|                     |j        d          }
|                     |j        |||	           |                     |j        |||
           d S )Nentryr   r   r4   )	r{   r   r  r  rj   rT   r   r4   r   )r!   r  rj  rR   rN   noder   r4   sub_noder  val_names              r   r   z%RestXMLSerializer._serialize_type_mapU  s     ''.. 	1)'488D##E4000 ,,.. 	D 	DJC ++E22;&w555 +D':: 
 000OOH00' 1  H OOEIsHh???OOEK(CCCC	D 	Dr   c                 x    t          j        ||          }|rd}nd}||_        |                     ||           d S r   )r   r  textr  )r!   r  rj  rR   rN   r  	str_values          r   r   z)RestXMLSerializer._serialize_type_booleano  sM     %gt44 	 III	t,,,,,r   c                     t          j        ||          }|                     |          |_        |                     ||           d S r   )r   r  r]   r  r  r!   r  rj  rR   rN   r  s         r   r   z&RestXMLSerializer._serialize_type_blob{  sE    %gt44$$V,,	t,,,,,r   c                     t          j        ||          }t          |                     ||j                            d                              |_        |                     ||           d S r   )r   r  rV   rK   rP   rQ   r  r  r  s         r   r   z+RestXMLSerializer._serialize_type_timestamp  sm    %gt44**+//0ABB 
 
	
 	t,,,,,r   c                     t          j        ||          }t          |                     |                    |_        |                     ||           d S r   )r   r  rV   r   r  r  r  s         r   r   z'RestXMLSerializer._serialize_type_float  sM    %gt44**62233	t,,,,,r   c                 6    |                      ||||           d S r   r   )r!   r  rj  rR   rN   s        r   r   z(RestXMLSerializer._serialize_type_double  s"    ""7FE4@@@@@r   c                     t          j        ||          }t          |          |_        |                     ||           d S r   )r   r  rV   r  r  r  s         r   r   z$RestXMLSerializer._default_serialize  s=    %gt44KK	t,,,,,r   c                    d|j         v rz|j         d         }d}t          |t                    r5|                    d          r|d|d          z  }|d         |j        |<   d S t          |t
                    r||j        |<   d S d S d S )NxmlNamespacexmlnsr   r  rQ  )rP   r@   r   rQ   r  rV   )r!   rR   r  namespace_metadataattribute_names        r   r  z$RestXMLSerializer._add_xml_namespace  s    U000!&!4^!D$N,d33 K%))(33 I"&H*<X*F&H&HHN8J9%n555 .44 K8J%n555 10K Kr   N)r   r   r   rE   rq  r   r   r   r   r   r   r   r   r   r   r  rf   r   r   r  r  "  s         O O O- - -N N N*
I 
I 
ID D D4
- 
- 
-- - -
- - -- - -
A A A- - -
K K K K Kr   r  c                   .     e Zd ZdZ fdZd Zd Z xZS )RpcV2CBORSerializerr   c                 f    t          d           t                                          ||          S )NPROTOCOL_RPC_V2_CBOR)r   superr   )r!   r"   r#   	__class__s      r   r   z(RpcV2CBORSerializer.serialize_to_request  s,    2333ww++JHHHr   c                 j    t                      }|                     |||           t          |          S r   )r  r  r  )r!   r"   rh   r+   s       r   rq  z*RpcV2CBORSerializer._serialize_body_params  s/    {{!!$
K@@@T{{r   c                     d|d         d<   |j         rd}nd}|                     ||           |d         dk    }t          d|d                   }||d         d	<   |s|r||d         d<   d S d S d S )
Nzrpc-v2-cborr*   zsmithy-protocolz"application/vnd.amazon.eventstreamzapplication/cborr+   r   r   Accept)has_event_stream_outputr   r   )r!   r-   r#   
header_valr  r  s         r   r  z&RpcV2CBORSerializer._serialize_headers  s    3@
9/02 	,=JJ+J++OZHHHf%,%nj6KLL*4
9h' 	?H 	?4>Jy!.111	? 	? 	? 	?r   )r   r   r   rE   r   rq  r  __classcell__)r  s   @r   r  r    sa        &I I I I I  
? ? ? ? ? ? ?r   r  )ec2queryr   z	rest-jsonzrest-xmlzsmithy-rpc-v2-cbor)T))r   rY   r9   rA   r   r   r   rf  r9  	xml.etreer   botocorer   botocore.compatr   botocore.exceptionsr   botocore.useragentr   botocore.utilsr   r	   r
   r   DEFAULT_TIMESTAMP_FORMATr2   r1   compilerk   r   r   r   r   r   r   rO  r  r  r  r  r   rf   r   r   <module>r     s\   8       				  ! ! ! ! ! !       & & & & & & 4 4 4 4 4 4 2 2 2 2 2 2            % 
'122   S@ S@ S@ S@ S@ S@ S@ S@llE lE lE lE lEj lE lE lE^P P P P PO P P P<`E `E `E `E `EZ `E `E `EFo< o< o< o< o<Z o< o< o<dQ Q Q Q Q Q Q Qh$< $< $< $< $<* $< $< $<NI I I I I+^ I I I@K K K K K* K K KD? ? ? ? ?-~ ? ? ?< #!- r   