
    !i                        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rSSKrSSKrSSK	J
r
  SSKJr  SSKJr  SSKJr  SSKJr  SSKJrJrJrJr  S	rS
rSr\R6                  " S5      rSrSr\\4rS\4S j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  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\.\-]+$defaultmillisecondTc                     [         U    " US9nU(       a+  [        R                  " 5       n[        R                  " XC5      nU$ )a  Create a serializer for the given protocol.
:param protocol_name: The protocol name to create a serializer for.
:type protocol_name: str
:param include_validation: Whether to include parameter validation.
:type include_validation: bool
:param timestamp_precision: Timestamp precision level.
    - 'default': Microseconds for ISO timestamps, seconds for Unix and RFC
    - 'millisecond': Millisecond precision (ISO/Unix), seconds for RFC
:type timestamp_precision: str
:return: A serializer instance for the given protocol.
)timestamp_precision)SERIALIZERSr   ParamValidatorParamValidationDecorator)protocol_nameinclude_validationr   
serializer	validators        Q/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/botocore/serialize.pycreate_serializerr   M   s?    " ]+/J ++-	66yM
    c                   x    \ rS rSrSr\rSr\4S j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g
)
Serializerg   POSTutf-8c                 @    U[         ;  a  [        SU 35      eXl        g )Nz=Invalid timestamp precision found while creating serializer: )TIMESTAMP_PRECISION_OPTIONS
ValueError_timestamp_precision)selfr   s     r   __init__Serializer.__init__p   s,    &AAOPcOde  %8!r   c                     [        S5      e)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)r$   
parametersoperation_models      r   r(   Serializer.serialize_to_requestw   s    H ""899r   c                 *    SSU R                   0 SS.nU$ )N/ r   )url_pathquery_stringmethodheadersbody)DEFAULT_METHOD)r$   
serializeds     r   _create_default_request"Serializer._create_default_request   s(     ))

 r   c                     U R                   [        :X  a(  UR                  S-  nUR                  S5      SUS S3-   $ UR                  S:  a  [        nO[
        nUR                  U5      $ )zEReturn ISO8601 timestamp with precision based on timestamp_precision.  z%Y-%m-%dT%H:%M:%S.03dZr   )r#   TIMESTAMP_PRECISION_MILLISECONDmicrosecondstrftimeISO8601_MICROISO8601)r$   valuemillisecondstimestamp_formats       r   _timestamp_iso8601Serializer._timestamp_iso8601   sr     $$(GG ,,4L23,s9K16MM
   1$#0 #* >>"233r   c                     U R                   [        :X  a:  [        R                  " UR	                  5       5      nUR
                  S-  S-  nX#-   $ [        [        R                  " UR	                  5       5      5      $ )zBReturn unix timestamp with precision based on timestamp_precision.r;   g     @@)r#   r?   calendartimegm	timetupler@   int)r$   rD   base_timestamprE   s       r   _timestamp_unixtimestamp#Serializer._timestamp_unixtimestamp   sa     $$(GG%__U__->?N!--5?L!00xu'89::r   c                     [        U[        R                  5      (       a-  [        [        R                  " UR                  5       5      5      n[        USS9$ )zSReturn RFC822 timestamp (always second precision - RFC doesn't support sub-second).T)usegmt)
isinstancedatetimerM   rJ   rK   rL   r   r$   rD   s     r   _timestamp_rfc822Serializer._timestamp_rfc822   s>     eX..//(9:;E%--r   Nc                     Uc  U R                   nUR                  5       n[        U5      n[        U SU 35      nU" U5      nU$ )N_timestamp_)TIMESTAMP_FORMATlowerr
   getattr)r$   rD   rF   datetime_obj	converterfinal_values         r   _convert_timestamp_to_str$Serializer._convert_timestamp_to_str   sR    ##44+113.u5DK0@/A"BC	-r   c                 :    UR                   R                  SU5      $ Nnameserializationget)r$   shapedefault_names      r   _get_serialized_nameSerializer._get_serialized_name   s     ""&&v|<<r   c                     [        U[        5      (       a  UR                  U R                  5      n[        R
                  " U5      R                  5       R                  U R                  5      $ N)rS   strencodeDEFAULT_ENCODINGbase64	b64encodestripdecoderU   s     r   _get_base64Serializer._get_base64   sP     eS!!LL!6!67E&,,.55d6K6KLLr   c                    UR                   nUb  SU;  a  g US   nUR                  c  U$ UR                  R                  nUR                  5        VVs/ s H)  u  pgUR                  R                  S5      (       d  M'  UPM+     nnn0 n	/ n
U H6  nX   n[        R                  U5      (       d  U
R                  U5        XU'   M8     U
(       a  [        SSR                  U
5       S3S9eUR                  " S0 U	D6$ s  snnf )N
hostPrefix	hostLabelz Invalid value for parameter(s): z, z?. Must contain only alphanumeric characters, hyphen, or period.)report )endpointinput_shapemembersitemsrf   rg   HOST_PREFIX_REmatchappendr   joinformat)r$   r+   r,   operation_endpointhost_prefix_expressioninput_membersmemberrh   host_labelsformat_kwargs
bad_labelsrd   params                r   _expand_host_prefixSerializer._expand_host_prefix   s   ,55&#55!3L!A&&.))'33;; "/!4!4!6
!6""&&{3 !6 	 

 
D$E!''..!!$'"'$	  
 &6tyy7L6M N! !  &,,=}==)
s   &C<>C<c                 8    UR                   R                  S5      $ )N	flattenedre   r$   rh   s     r   _is_shape_flattenedSerializer._is_shape_flattened  s    ""&&{33r   c                     U[        S5      :X  a  SnU$ U[        S5      :X  a  SnU$ [        R                  " U5      (       a  SnU$ )NInfinityz	-InfinityNaN)floatmathisnanrU   s     r   _handle_floatSerializer._handle_float  sQ    E*%%E
 	 eK((E  ZZEr   c                 L    UR                   R                  (       a	  SUS   S'   g g )Ntruer4   zx-amzn-query-mode)service_modelis_query_compatible)r$   r,   r7   s      r   _handle_query_compatible_trait)Serializer._handle_query_compatible_trait  s&    ((<<9?Jy!"56 =r   )r#   rm   )__name__
__module____qualname____firstlineno__r6   dictMAP_TYPErp   TIMESTAMP_PRECISION_DEFAULTr%   r(   r8   rG   rO   rV   r`   rj   ru   r   r   r   r   __static_attributes__r{   r   r   r   r   g   s\    N
 H+F 8$:L4 ;.=
M >D4@r   r   c                       \ rS rSrSrS rSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSS jrSrg)QuerySerializeri  r   c                 b   UR                   nU R                  5       nUR                  R                  SU R                  5      US'   SS0US'   U R                  5       nUR                  US'   UR                  S   US'   Ub  U R                  XQU5        XTS'   U R                  X5      nUb  XdS	'   U$ )
Nr3   Content-Typez0application/x-www-form-urlencoded; charset=utf-8r4   Action
apiVersionVersionr5   host_prefix)
r}   r8   httprg   r6   r   rd   metadata
_serializer   )r$   r+   r,   rh   r7   body_paramsr   s          r   r(   $QuerySerializer.serialize_to_request  s    ++113
.3377d)) 

8 N!

9
 mmo / 4 4H!0!9!9,!GIOOKU;(6..zK"(3}%r   c                 Z    [        U SUR                   3U R                  5      nU" XX4S9  g )N_serialize_type_)prefixr\   	type_name_default_serialize)r$   r7   rD   rh   r   r3   s         r   r   QuerySerializer._serialize1  s5     u/0##

 	z%7r   c                     UR                   nUR                  5        H:  u  pbXV   nU R                  Xv5      nU(       a  U SU 3nU R                  XXx5        M<     g )Nr<   )r~   r   rj   r   )	r$   r7   rD   rh   r   r~   keymember_shapemember_prefixs	            r   _serialize_type_structure)QuerySerializer._serialize_type_structure@  sU    --++-JC"<L 55lHM#)(!M? ;OOJ|K (r   c                    U(       d  SX'   g U R                  U5      (       an  UnUR                  R                  R                  S5      (       aA  U R	                  UR                  SS9nSR                  UR                  S5      S S U/-   5      nO-UR                  R                  R                  SS5      nU SU 3n[        US5       H*  u  pU SU 3n
UR                  nU R                  XX5        M,     g )Nr0   rd   ri   r<   r      )	r   r   rf   rg   rj   r   split	enumerater   )r$   r7   rD   rh   r   list_prefixrd   	list_nameielementelement_prefixelement_shapes               r   _serialize_type_list$QuerySerializer._serialize_type_listI  s    !#J##E** K||))--f5500B0O!hhv||C'8"'='FG2266vxHI#HAi[1K#E1-JA +}AaS1N!LLMOOJO .r   c                 r   U R                  U5      (       a  UnOU S3nUS-   nUR                  nUR                  nU R                  USS9n	U R                  US5      n
[	        US5       HJ  u  pUR                  XS9nUR                  XS9nU R                  XX}5        U R                  XU   X5        ML     g )Nz.entryz.{i}.{suffix}r   r   rD   r   )r   suffix)r   r   rD   rj   r   r   r   )r$   r7   rD   rh   r   full_prefixtemplate	key_shapevalue_shape
key_suffixvalue_suffixr   r   
key_prefixvalue_prefixs                  r   _serialize_type_map#QuerySerializer._serialize_type_map\  s    ##E** K#HF+K0II	kk..yu.M
00gFq)FA!1@J#??Q?DLOOJYCOOJc
KN	 *r   c                 *    U R                  U5      X'   g rm   ru   r$   r7   rD   rh   r   s        r   _serialize_type_blob$QuerySerializer._serialize_type_blobl  s    !--e4
r   c                 \    U R                  X#R                  R                  S5      5      X'   g NtimestampFormatr`   rf   rg   r   s        r   _serialize_type_timestamp)QuerySerializer._serialize_type_timestampp  s*    !;;&&**+<=

r   c                 $    U(       a  SX'   g SX'   g Nr   falser{   r   s        r   _serialize_type_boolean'QuerySerializer._serialize_type_booleanu  s    !'J!(Jr   c                     X!U'   g rm   r{   r   s        r   r   "QuerySerializer._default_serialize{  s
    "6r   c                 *    U R                  U5      X'   g rm   )r   r   s        r   _serialize_type_float%QuerySerializer._serialize_type_float~  s    !//6
r   c                 (    U R                  XX45        g rm   r   r   s        r   _serialize_type_double&QuerySerializer._serialize_type_double      "":eDr   r{   Nr0   )r   r   r   r   rZ   r(   r   r   r   r   r   r   r   r   r   r   r   r{   r   r   r   r     sC     08LP&O 5

)#7Er   r   c                   (    \ rS rSrSrS rSS jrSrg)EC2Serializeri  aA  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                     SUR                   ;   a  UR                   S   $ SUR                   ;   a(  UR                   S   nUS   R                  5       USS  -   $ U$ )N	queryNamerd   r   r   )rf   upper)r$   rh   ri   rd   s       r   rj   "EC2Serializer._get_serialized_name  sd     %---&&{33u*** &&v.D7==?T!"X--r   c                 x    [        US5       H*  u  pVU SU 3nUR                  nU R                  XX5        M,     g )Nr   r<   )r   r   r   )	r$   r7   rD   rh   r   r   r   r   r   s	            r   r   "EC2Serializer._serialize_type_list  s;    #E1-JA &xq_N!LLMOOJO .r   r{   Nr   )r   r   r   r   __doc__rj   r   r   r{   r   r   r   r     s     Pr   r   c                   `    \ 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S jrSS jrSrg)JSONSerializeri  unixtimestampc                    SR                  UR                  S   UR                  5      nUR                  S   nU R                  5       nUR                  R                  SU R                  5      US'   USU 3S.US'   U R                  X%5        U R                  5       nUR                  nUb  U R                  XaU5        [        R                  " U5      R                  U R                  5      US'   U R                  X5      nUb  XS	'   U$ )
Nz{}.{}targetPrefixjsonVersionr3   zapplication/x-amz-json-)zX-Amz-Targetr   r4   r5   r   )r   r   rd   r8   r   rg   r6   r   r   r}   r   jsondumpsro   rp   r   )	r$   r+   r,   targetjson_versionr7   r5   r}   r   s	            r   r(   #JSONSerializer.serialize_to_request  s
   $$^4  
 '//>113
.3377d)) 

8 #5l^D!

9 	++OH}}%11"OODk:!ZZ-44T5J5JK
6..zK"(3}%r   Nc                 ^    [        U SUR                   3U R                  5      nU" XX45        g Nr   r   r$   r7   rD   rh   r   r3   s         r   r   JSONSerializer._serialize  s3    u/0##

 	z%-r   c                    UR                   (       a  X!U'   g Ub  U R                  5       nXQU'   UnUR                  nUR                  5        H:  u  pxXg   n	SU	R                  ;   a  U	R                  S   nU R                  XX5        M<     g rc   )is_document_typer   r~   r   rf   r   )
r$   r7   rD   rh   r   new_serializedr~   
member_keymember_valuer   s
             r   r   (JSONSerializer._serialize_type_structure  s    !!#sO "&"03+
mmG,1KKM(
&2\777!-!;!;F!CJl	 -:r   c                     U R                  5       nXQU'   UR                  5        H"  u  pgU R                  XWUR                  U5        M$     g rm   )r   r   r   rD   )r$   r7   rD   rh   r   map_objsub_key	sub_values           r   r   "JSONSerializer._serialize_type_map  s;    --/!3"'++-GOOGWE #0r   c                     / nXQU'   U H6  n0 nU R                  XvUR                  S5        UR                  US   5        M8     g )N__current__)r   r   r   )r$   r7   rD   rh   r   list_obj	list_itemwrappers           r   r   #JSONSerializer._serialize_type_list  sD    "3IG
 OOGmLOOGM23 r   c                     X!U'   g rm   r{   r$   r7   rD   rh   r   s        r   r   !JSONSerializer._default_serialize  s	    3r   c                 \    U R                  X#R                  R                  S5      5      X'   g r   r   r#  s        r   r   (JSONSerializer._serialize_type_timestamp  s)    88&&**+<=

r   c                 *    U R                  U5      X'   g rm   r   r#  s        r   r   #JSONSerializer._serialize_type_blob  s    **51
r   c                 ~    [        U[        R                  5      (       a  [        U5      nU R	                  U5      X'   g rm   )rS   decimalDecimalr   r   r   s        r   r   $JSONSerializer._serialize_type_float  s/    eW__--%LE!//6
r   c                 (    U R                  XX45        g rm   r   r   s        r   r   %JSONSerializer._serialize_type_double  r   r   r{   rm   r   )r   r   r   r   rZ   r(   r   r   r   r   r   r   r   r   r   r   r{   r   r   r  r    s<    &8.,F
4 

27
Er   r  c                       \ rS rSrSrSrS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g
)CBORSerializeri  r   r                     Nc                     [        U SUR                   35      nUc  [        SUR                   S35      eU" XX45        g )Nr   zUnrecognized C2J type: z, unable to serialize request)r\   r   r"   r  s         r   _serialize_data_item#CBORSerializer._serialize_data_item  sO    !1%//1BCD>)%//): ;$ %  	z%-r   c                 
   US:  a  U R                   nOU R                  nSU-
  nU R                  U5      u  pgU R                  XV5      nUS:X  a  UR	                  U5        g UR	                  XR                  US5      -   5        g )Nr   r   big)UNSIGNED_INT_MAJOR_TYPENEGATIVE_INT_MAJOR_TYPE"_get_additional_info_and_num_bytes_get_initial_byteextendto_bytes)	r$   r7   rD   rh   r   
major_typeadditional_info	num_bytesinitial_bytes	            r   _serialize_type_integer&CBORSerializer._serialize_type_integer  s    A:55J55J JE%)%L%L&
" --jJ>l+l^^Iu-MMNr   c                 (    U R                  XX45        g rm   )rF  r#  s        r   _serialize_type_long#CBORSerializer._serialize_type_long+  s    $$ZCr   c                    [        U[        5      (       a  UR                  S5      nO+[        U[        [        45      (       d  UR                  5       n[        U5      nU R                  U5      u  pgU R                  U R                  U5      nUS:X  a  UR                  U5        O#UR                  XR                  US5      -   5        UR                  U5        g Nr   r   r;  )rS   rn   ro   bytes	bytearrayreadlenr>  r?  BLOB_MAJOR_TYPEr@  rA  )	r$   r7   rD   rh   r   lengthrC  rD  rE  s	            r   r   #CBORSerializer._serialize_type_blob.  s    eS!!LL)EEE9#566 JJLEU%)%L%L&
" --  /
 >l+l__Y-NNO% r   c                    UR                  S5      n[        U5      nU R                  U5      u  pxU R                  U R                  U5      n	US:X  a  UR                  X-   5        g UR                  XR                  US5      -   U-   5        g rL  )ro   rP  r>  r?  STRING_MAJOR_TYPEr@  rA  )
r$   r7   rD   rh   r   encodedrR  rC  rD  rE  s
             r   _serialize_type_string%CBORSerializer._serialize_type_stringB  s    ,,w'W%)%L%L&
" --""O
 >l45y%@@7Jr   c                 8   [        U5      nU R                  U5      u  pgU R                  U R                  U5      nUS:X  a  UR	                  U5        O#UR	                  XR                  US5      -   5        U H  n	U R                  XUR                  5        M!     g Nr   r;  )rP  r>  r?  LIST_MAJOR_TYPEr@  rA  r8  r   )
r$   r7   rD   rh   r   rR  rC  rD  rE  items
             r   r   #CBORSerializer._serialize_type_listR  s    U%)%L%L&
" --  /
 >l+l__Y-NNOD%%jE r   c                    [        U5      nU R                  U5      u  pgU R                  U R                  U5      nUS:X  a  UR	                  U5        O#UR	                  XR                  US5      -   5        UR                  5        H=  u  pU R                  XUR                  5        U R                  XUR                  5        M?     g rZ  )
rP  r>  r?  MAP_MAJOR_TYPEr@  rA  r   r8  r   rD   )r$   r7   rD   rh   r   rR  rC  rD  rE  key_itemr\  s              r   r   "CBORSerializer._serialize_type_mapa  s    U%)%L%L&
" --
 >l+l__Y-NNO#kkmNH%%jEIIF%%jD ,r   c                 n   Ub  U R                  XUR                  5        UR                  5        VVs0 s H  u  pVUc  M
  XV_M     nnn[        U5      nU R	                  U5      u  pU R                  U R                  U5      n
U	S:X  a  UR                  U
5        O#UR                  XR                  U	S5      -   5        UR                  nUR                  5        HR  u  pX   nSUR                  ;   a  UR                  S   nUc  M-  U R                  XS S 5        U R                  XU5        MT     g s  snnf )Nr   r;  rd   )r8  r   r   rP  r>  r?  r_  r@  rA  r~   rf   rW  )r$   r7   rD   rh   r   kv
map_lengthrC  rD  rE  r~   r  r  r   s                  r   r   (CBORSerializer._serialize_type_structureq  s(   ?%%juG #(++-A-$!1-AZ
%)%L%L&
" --
 >l+229eDD --(-$J".L333)77?
'++JD$O))l )6# Bs   	D1 D1c                    U R                  U5      nSnU R                  U R                  U5      nUR                  U5        U R	                  U5      u  pU	S:X  a.  U R                  U R
                  U5      nUR                  U5        g U R                  U R
                  U5      nUR                  XuR                  U	S5      -   5        g )Nr   r   r;  )r`   r?  TAG_MAJOR_TYPEr@  r>  r<  rA  )
r$   r7   rD   rh   r   	timestamptagrE  rC  rD  s
             r   r   (CBORSerializer._serialize_type_timestamp  s    2259	--d.A.A3G,'%)%L%L&
" >11,,iL l+11,,oL 11)UCCr   c                     U R                  U5      (       a!  UR                  U R                  U5      5        g U R                  U R                  S5      nUR                  U[
        R                  " SU5      -   5        g )N   z>f_is_special_numberr@  _get_bytes_for_special_numbersr?  FLOAT_AND_SIMPLE_MAJOR_TYPEstructpackr$   r7   rD   rh   r   rE  s         r   r   $CBORSerializer._serialize_type_float  l    ""5))33E:  1100"L lV[[u-EEFr   c                     U R                  U5      (       a!  UR                  U R                  U5      5        g U R                  U R                  S5      nUR                  U[
        R                  " SU5      -   5        g )N   z>drn  rt  s         r   r   %CBORSerializer._serialize_type_double  rv  r   c                 p    U(       a  SOSnUR                  U R                  U R                  U5      5        g )N      )r@  r?  rq  )r$   r7   rD   rh   r   rC  s         r   r   &CBORSerializer._serialize_type_boolean  s2     %"2""00/	
r   c                 B    US:  a  US4$ US:  a  gUS:  a  gUS:  a  gg	)
N   r      )r  r   i   )   r1  l        )rm  r3  )rx     r{   rU   s     r   r>  1CBORSerializer._get_additional_info_and_num_bytes  s>     2:!8O S[ U] Z r   c                 4    US-  nX2-  R                  SS5      $ )Nr4  r   r;  )rA  )r$   rB  rC  major_type_bytess       r   r?   CBORSerializer._get_initial_byte  s$     &? 2<<QFFr   c                 v    [        U[        S5      :H  U[        S5      :H  [        R                  " U5      /5      $ )Ninf-inf)anyr   r   r   rU   s     r   ro  !CBORSerializer._is_special_number  s8    u%v&

5!
 	
r   c                 N   SnU R                  U R                  U5      nU[        S5      :X  a  U[        R                  " SS5      -   $ U[        S5      :X  a  U[        R                  " SS5      -   $ [
        R                  " U5      (       a  U[        R                  " SS5      -   $ g )Nr  r  z>Hi |  r  i   i ~  )r?  rq  r   rr  rs  r   r   )r$   rD   rC  rE  s       r   rp  -CBORSerializer._get_bytes_for_special_numbers  s    --,,o
 E%L &++dF";;;eFm#&++dF";;;ZZ&++dF";;; r   r{   rm   )r   r   r   r   r<  r=  rQ  rU  r[  r_  rh  rq  r8  rF  rI  r   rW  r   r   r   r   r   r   r   r>  r?  ro  rp  r   r{   r   r   r0  r0    s    OONN"#.O$D!( FE B,	G	G
,G

<r   r0  c                   |    \ rS rSrSrSrSr/ SQ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)BaseRestSerializeri  a)  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headerr4   c                    U R                  5       nUR                  R                  SU R                  5      US'   UR                  nU R                  X5      nUb  XSS'   Uc  UR                  S   US'   U$ UR                  nU R                  5       U R                  5       U R                  5       U R                  5       S.nUR                  5        H  u  pU	c  M
  U R                  XxX5        M     U R                  UR                  S   US   5      US'   SUR                  ;   a%  U R                  UR                  S   US   5      US'   US	   US
'   US   (       a  US   US'   U R                  XqX4U5        U R                  X4U5        U$ )Nr3   r   
requestUrir1   )uri_path_kwargsquery_string_kwargsbody_kwargsr4   r  authPath	auth_pathr  r2   r4   )r8   r   rg   r6   r}   r   r~   r   r   _partition_parameters_render_uri_template_serialize_payload_serialize_content_type)
r$   r+   r,   r7   rh   r   shape_memberspartitioned
param_nameparam_values
             r   r(   'BaseRestSerializer.serialize_to_request
  s   113
.3377d)) 

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

: ---&*&?&?$$Z0-.'J{# &11F%G
>"y!$/	$:Jy!Z	
 	$$ZFr   c                     0 n[         R                  " SU5       H;  nUR                  S5      (       a  [        X$S S    SS9X4'   M,  [        X$   5      X4'   M=     UR                  " S0 UD6$ )Nz{(.*?)}+r   z/~)safer{   )refindallendswithr   r   )r$   uri_templateparamsencoded_paramstemplate_params        r   r  'BaseRestSerializer._render_uri_templateF  sx      jj\BN&&s++1?#2./d2. 2@*2. C ""4^44r   c                    UR                   R                  S5      nU R                  Xe5      (       a(  UR                  US5      nU R                  U5      nXsS'   g Ub@  UR                  U5      nUb  U R	                  XU   5      US'   g U R                  5       US'   g US   (       a  U R	                  US   U5      US'   g U R                  U5      (       a  U R                  5       US'   g g )Npayloadr   r5   r  )rf   rg   _has_streaming_payload_encode_payload_serialize_body_params_serialize_empty_body_requires_empty_body)	r$   r  r+   r7   rh   r  payload_memberbody_payloadr   s	            r   r  %BaseRestSerializer._serialize_payloadY  s     ,,00;&&~EE &>>.#>L//=L!-v' %..8K&%)%@%@~!>&
6" &*%?%?%A
6"'!%!<!<M*E"Jv &&u--!%!;!;!=Jv .r   c                     g)Nr   r{   r$   s    r   r  (BaseRestSerializer._serialize_empty_bodyy  s    r   c                     g)z
Some protocols require varied Content-Type headers
depending on user input. This allows subclasses to apply
this conditionally.
Nr{   )r$   r7   rh   r  s       r   r  *BaseRestSerializer._serialize_content_type|  s     	r   c                     g)z{
Some protocols require a specific body to represent an empty
payload. This allows subclasses to apply this conditionally.
Fr{   r   s     r   r  'BaseRestSerializer._requires_empty_body  s    
 r   c                 :    USL=(       a    X!   R                   S;   $ )z5Determine if payload is streaming (a blob or string).N)blobstring)r   )r$   r  r  s      r   r  )BaseRestSerializer._has_streaming_payload  s*    d" 
}'='G'G L
 (
 	
r   c                 f    [        U[        5      (       a  UR                  U R                  5      $ U$ rm   )rS   rn   ro   rp   )r$   r5   s     r   r  "BaseRestSerializer._encode_payload  s)    dC  ;;t4455r   c                    XB   nUR                   R                  S5      nUR                   R                  SU5      nUS:X  a  U R                  X55      nXS   U'   g US:X  a  [        U[        5      (       a  US   R                  U5        g UR                  S:X  a3  U V	s/ s H  n	U R                  XR                  5      PM      n
n	XS   U'   g U R                  X55      n
XS   U'   g US:X  a4  XB   nU(       d  UR                  S:X  a  g U R                  X5      US	   U'   g US	:X  a  UnU R                  XS	   U5        g X1S
   U'   g s  sn	f )Nlocationrd   r  r  r  r  listr  r4   r  )
rf   rg   _get_uri_and_query_string_valuerS   r   updater   r   _convert_header_value_do_serialize_header_map)r$   r  r  r  r  r   r  key_nameuri_path_valuerD   	new_paramrh   header_prefixs                r   r  (BaseRestSerializer._partition_parameters  s    *''++J7''++FJ?u!AAN 8F)*84&+t,,1299+F!!V+ "-!, 88N!,   @I128< @@	 @I128<!!-E5??f#</3/I/I0K	"8, " %M
 ))95{ 6A&z2=s   %Ec                 :   UR                   S:X  a  [        U5      R                  5       $ UR                   S:X  a7  UR                  R	                  SU R
                  5      nU R                  X5      $ UR                   S;   a  [        U R                  U5      5      $ U$ )Nbooleanri  r   r   double)r   rn   r[   rf   rg   QUERY_STRING_TIMESTAMP_FORMATr`   r   )r$   r  r   rF   s       r   r  2BaseRestSerializer._get_uri_and_query_string_value  s    y({#))++,%3377!4#E#E  11  !44t))+677r   c                 F    UR                  5        H  u  pEX-   nXRU'   M     g rm   )r   )r$   r  r4   
user_inputr   valfull_keys          r   r  +BaseRestSerializer._do_serialize_header_map  s'    "((*HC$*H #H +r   c                     [        S5      eNr  r)   )r$   r  rh   s      r   r  )BaseRestSerializer._serialize_body_params      !":;;r   c                 ^   UR                   S:X  ao  [        U5      n[        R                  " UR	                  5       5      nUR
                  R                  SU R                  5      n[        U R                  XE5      5      $ UR                   S:X  a  UR                  R                   S:X  a'  U Vs/ s H  nUc  M  U R                  U5      PM     nnO1U Vs/ s H$  nUc  M  U R                  UR                  U5      PM&     nnSR                  U5      $ [        U5      (       a$  U R                  [         R"                  " USS95      $ UR                   S:X  a  [        U5      R%                  5       $ UR                   S	;   a  [        U R'                  U5      5      $ [        U5      $ s  snf s  snf )
Nri  r   r  r  ,)r  :)
separatorsr  r  )r   r
   rJ   rK   utctimetuplerf   rg   HEADER_TIMESTAMP_FORMATrn   r`   r   _escape_header_list_stringr  r   r	   ru   r  r	  r[   r   )r$   rh   rD   r]   ri  rF   rd  converted_values           r   r  (BaseRestSerializer._convert_header_value  s   ??k)259L (A(A(CDI$2266!4#?#?  ..yK  __&||%%1 ##" 7D33A6"   # ##" @D..u||Q?"   #
 88O,,!%(( ##DJJu$LMM__	)u:##%%__ 33t))%011u:+##s   .F%9F%F*  F*c                 N    SU;   d  SU;   a  SUR                  SS5      -   S-   $ U$ )N"r  z\")replacerU   s     r   r  -BaseRestSerializer._escape_header_list_string  s1     %<3%<sE22S88Lr   r{   N)r   r   r   r   r  r  r  KNOWN_LOCATIONSr(   r  r  r  r  r  r  r  r  r  r  r  r  r  r   r{   r   r   r  r    sh     %.!& BO:x5&>@

1Af$
<!Fr   r  c                   0    \ rS rSrSrS rS rS rS rSr	g)	BaseRpcV2Serializeri  aH  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                    U R                  5       nUR                  R                  S   nUR                  nSU SU 3US'   UR                  nUb  U R                  XU5        U R                  X5      nUb  XsS'   U R                  X25        U$ )Nr  z	/service/z/operation/r1   r   )r8   r   r   rd   r}   r  r   _serialize_headers)r$   r+   r,   r7   service_nameoperation_namer}   r   s           r   r(   (BaseRpcV2Serializer.serialize_to_request  s    113
&44==nM(--~[0@A 	: &11"##JKH..zK"(3}%
<r   c                 .    U R                  X5      nXBS'   g )Nr5   )r  )r$   r+   r7   rh   r  s        r   r  &BaseRpcV2Serializer._serialize_payload,  s    22:E)6r   c                     [        S5      e)Nr  r)   )r$   r7   r,   s      r   r  &BaseRpcV2Serializer._serialize_headers0  s    !"677r   c                     [        S5      er  r)   )r$   r+   rh   s      r   r  *BaseRpcV2Serializer._serialize_body_params3  r  r   r{   N)
r   r   r   r   r  r(   r  r  r  r   r{   r   r   r  r    s    	(*8<r   r  c                   ,    \ rS rSrS rS rS rS rSrg)RestJSONSerializeri7  c                     g)Ns   {}r{   r  s    r   r  (RestJSONSerializer._serialize_empty_body8  s    r   c                 n    UR                   R                  5        H  u  p#SUR                  ;  d  M    g   g)zY
Serialize an empty JSON object whenever the shape has
members not targeting a location.
r  TF)r~   r   rf   )r$   rh   r   r  s       r   r  'RestJSONSerializer._requires_empty_body;  s3    
 !==..0KF!2!22 1 r   c                     UR                   R                  S5      nU R                  XC5      (       a  gUS   S:g  n[        SUS   5      nU(       a  U(       d	  SUS   S'   ggg)z?Set Content-Type to application/json for all structured bodies.r  Nr5   r   r   r4   zapplication/json)rf   rg   r  r   )r$   r7   rh   r  r  has_bodyhas_content_types          r   r  *RestJSONSerializer._serialize_content_typeE  si    %%)))4&&w>>f%,%nj6KL,4FJy!.1 -8r   c                     U R                  5       nU R                  X1U5        [        R                  " U5      R	                  U R
                  5      $ rm   )r   r   r  r	  ro   rp   )r$   r  rh   serialized_bodys       r   r  )RestJSONSerializer._serialize_body_paramsQ  s;    --/7zz/*11$2G2GHHr   r{   N)	r   r   r   r   r  r  r  r  r   r{   r   r   r  r  7  s    
GIr   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S rS rS rS rSrg)RestXMLSerializeriW  r   c                     UR                   S   n[        R                  " S5      nU R                  X!XC5        [	        U5      S   n[        R
                  " XPR                  S9$ )Nrd   r0   r   )encoding)rf   r   Elementr   r  tostringrp   )r$   r  rh   	root_namepseudo_root	real_roots         r   r  (RestXMLSerializer._serialize_body_paramsZ  sV    ''/	!))"-{>%a(	##I8M8MNNr   c                 ^    [        U SUR                   3U R                  5      nU" X2X5        g r  r   )r$   rh   r  xmlnoderd   r3   s         r   r   RestXMLSerializer._serializea  s3    u/0##

 	w,r   c                    [         R                  " X5      nU R                  X55        UR                  5        H  u  pgUR                  U   nUR
                  R                  SU5      n	Uc    g UR
                  R                  S5      (       a  UR
                  S   n
XuR                  U
'   Mt  U R                  XXY5        M     g )Nrd   xmlAttribute)	r   
SubElement_add_xml_namespacer   r~   rf   rg   attribr   )r$   r  r  rh   rd   structure_noder   rD   r   member_namexml_attribute_names              r   r   +RestXMLSerializer._serialize_type_structurei  s    $//>6 ,,.JC ==-L&4488EK
 }))--n==%1%?%?%G"<A%%&89OOLM )r   c                 "   UR                   nUR                  R                  S5      (       a  UnUnO2UR                  R                  SS5      n[        R                  " X5      nU R                  X75        U H  nU R                  XXXv5        M     g )Nr   rd   r   )r   rf   rg   r   r  r  r   )	r$   r  r  rh   rd   r   element_name	list_noder\  s	            r   r   &RestXMLSerializer._serialize_type_list~  sz    ||"";//LI'5599&(KL#..w=I1DOOL	H r   c                    U R                  U5      (       d'  [        R                  " X5      nU R                  X55        UR	                  5        H  u  pgU R                  U5      (       a  [        R                  " X5      O[        R                  " WS5      nU R                  UR                  SS9n	U R                  UR                  SS9n
U R                  UR                  XhU	5        U R                  UR                  XxU
5        M     g )Nentryr   r   rD   )	r   r   r  r  r   rj   r   rD   r   )r$   r  r  rh   rd   noder   rD   sub_noder  val_names              r   r   %RestXMLSerializer._serialize_type_map  s     ''..))'8D##E0 ,,.JC ++E22 &&w5 ++D': 
 000OH00' 1 H OOEIIsh?OOEKK(C )r   c                 v    [         R                  " X5      nU(       a  SnOSnXel        U R                  X55        g r   )r   r  textr  )r$   r  r  rh   rd   r%  	str_values          r   r   )RestXMLSerializer._serialize_type_boolean  s4     %%g4II	,r   c                 ~    [         R                  " X5      nU R                  U5      Ul        U R	                  X55        g rm   )r   r  ru   r*  r  r$   r  r  rh   rd   r%  s         r   r   &RestXMLSerializer._serialize_type_blob  s2    %%g4$$V,	,r   c                     [         R                  " X5      n[        U R                  X#R                  R                  S5      5      5      Ul        U R                  X55        g r   )r   r  rn   r`   rf   rg   r*  r  r.  s         r   r   +RestXMLSerializer._serialize_type_timestamp  sQ    %%g4**++//0AB
	
 	,r   c                     [         R                  " X5      n[        U R                  U5      5      Ul        U R                  X55        g rm   )r   r  rn   r   r*  r  r.  s         r   r   'RestXMLSerializer._serialize_type_float  s7    %%g4**623	,r   c                 (    U R                  XX45        g rm   r   )r$   r  r  rh   rd   s        r   r   (RestXMLSerializer._serialize_type_double  s    ""7E@r   c                 r    [         R                  " X5      n[        U5      Ul        U R	                  X55        g rm   )r   r  rn   r*  r  r.  s         r   r   $RestXMLSerializer._default_serialize  s+    %%g4K	,r   c                 "   SUR                   ;   a  UR                   S   nSn[        U[        5      (       a4  UR                  S5      (       a  USUS    3-  nUS   UR                  U'   g [        U[
        5      (       a  X2R                  U'   g g g )NxmlNamespacexmlnsr   r  r  )rf   rS   r   rg   r  rn   )r$   rh   r  namespace_metadataattribute_names        r   r  $RestXMLSerializer._add_xml_namespace  s    U000!&!4!4^!D$N,d33%))(33"*<X*F)G&HHN8J9%%n5 .448J%%n5 5 1r   r{   N)r   r   r   r   rZ   r  r   r   r   r   r   r   r   r   r   r   r  r   r{   r   r   r
  r
  W  sJ     O-N*
ID4
--
--
A-
Kr   r
  c                   8   ^  \ rS rSrSrU 4S jrS rS rSrU =r	$ )RpcV2CBORSerializeri  r  c                 8   > [        S5        [        TU ]	  X5      $ )NPROTOCOL_RPC_V2_CBOR)r   superr(   )r$   r+   r,   	__class__s      r   r(   (RpcV2CBORSerializer.serialize_to_request  s    23w+JHHr   c                 P    [        5       nU R                  X1U5        [        U5      $ rm   )rN  r8  rM  )r$   r+   r}   r5   s       r   r  *RpcV2CBORSerializer._serialize_body_params  s#    {!!$K@T{r   c                     SUS   S'   UR                   (       a  SnOSnU R                  X!5        US   S:g  n[        SUS   5      nX1S   S	'   U(       d  U(       a  X1S   S'   g g g )
Nzrpc-v2-cborr4   zsmithy-protocolz"application/vnd.amazon.eventstreamzapplication/cborr5   r   r   Accept)has_event_stream_outputr   r   )r$   r7   r,   
header_valr  r  s         r   r  &RpcV2CBORSerializer._serialize_headers  s{    3@
9/022=J+J++OHf%,%nj6KL*49h'H4>y!.1 %-r   r{   )
r   r   r   r   rZ   r(   r  r  r   __classcell__)rC  s   @r   r?  r?    s    &I
? ?r   r?  )ec2queryr  z	rest-jsonzrest-xmlzsmithy-rpc-v2-cbor),r  rq   rJ   rT   r*  r  r   r  rr  	xml.etreer   botocorer   botocore.compatr   botocore.exceptionsr   botocore.useragentr   botocore.utilsr   r	   r
   r   DEFAULT_TIMESTAMP_FORMATrC   rB   compiler   r   r?   r!   r   r   r   r   r  r0  r  r  r  r
  r?  r   r{   r   r   <module>rW     s=  8       	  !  & 4 2  % 
'12' "/ #  34l@ l@^lEj lE^PO P<`EZ `EFo<Z o<dQ Qh(<* (<VI+^ I@K* KD?-~ ?< #!-r   