
     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j6                  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(y)$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\.\-]+$c                 x    t        |           }|r*t        j                         }t        j                  ||      }|S N)SERIALIZERSr   ParamValidatorParamValidationDecorator)protocol_nameinclude_validation
serializer	validators       n/home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/botocore/serialize.pycreate_serializerr   F   s8    ]+-J++-	66y*M
    c                   b    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y)
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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kD  rt        }nt        }|j                  |      S )Nr   )microsecondISO8601_MICROISO8601strftime)r!   valuetimestamp_formats      r   _timestamp_iso8601zSerializer._timestamp_iso8601   s,    q ,&~~.//r   c                 Z    t        t        j                  |j                                     S r   )intcalendartimegm	timetupler!   r4   s     r   _timestamp_unixtimestampz#Serializer._timestamp_unixtimestamp   s    8??5??#4566r   c                 r    t        |t        j                        r| j                  |      }t        |d      S )NT)usegmt)
isinstancedatetimer=   r   r<   s     r   _timestamp_rfc822zSerializer._timestamp_rfc822   s/    eX../11%8E%--r   Nc                     || j                   }|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   sR    ##44+113.u5DK0@/A"BC	-r   c                 :    |j                   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                  | j                        }t	        j
                  |      j                         j                  | j                        S r   )r@   strencodeDEFAULT_ENCODINGbase64	b64encodestripdecoder<   s     r   _get_base64zSerializer._get_base64   sM     eS!LL!6!67E&,,.55d6K6KLLr   c                    |j                   }|d|vry |d   }|j                  |S |j                  j                  }|j                         D cg c]"  \  }}|j                  j                  d      r|$ }}}i }	g }
|D ]2  }||   }t        j                  |      s|
j                  |       ||	|<   4 |
rt        ddj                  |
       d       |j                  di |	S c c}}w )N
hostPrefix	hostLabelz Invalid value for parameter(s): z, z?. Must contain only alphanumeric characters, hyphen, or period.)report )endpointinput_shapemembersitemsrP   rQ   HOST_PREFIX_REmatchappendr   joinformat)r!   r"   r#   operation_endpointhost_prefix_expressioninput_membersmemberrR   host_labelsformat_kwargs
bad_labelsrN   params                r   _expand_host_prefixzSerializer._expand_host_prefix   s%   ,55&#55!3L!A&&.))'33;; "/!4!4!6
""&&{3 
 

 
 	(Dt$E!''.!!$'"'M$		(
 &6tyy7L6M N! !  -%,,=}==)
s   'C(c                 8    |j                   j                  d      S )N	flattenedrO   r!   rR   s     r   _is_shape_flattenedzSerializer._is_shape_flattened   s    ""&&{33r   c                 |    |t        d      k(  rd}|S |t        d      k(  rd}|S t        j                  |      rd}|S )NInfinityz	-InfinityNaN)floatmathisnanr<   s     r   _handle_floatzSerializer._handle_float   sN    E*%%E
 	 eK((E  ZZEr   c                 B    |j                   j                  r	d|d   d<   y y )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   s&    ((<<9?Jy!"56 =r   r   )__name__
__module____qualname__r,   dictMAP_TYPErX   r   r.   r6   r=   rB   rK   rT   r]   rt   rx   r   r   rb   r   r   r   r   O   sT    N
 H$:L07.
=
M >D4@r   r   c                   f    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y)QuerySerializerr   c                 f   |j                   }| j                         }|j                  j                  d| j                        |d<   ddi|d<   | j                         }|j                  |d<   |j                  d   |d<   || j                  |||       ||d<   | j                  ||      }|||d	<   |S )
Nr)   Content-Typez0application/x-www-form-urlencoded; charset=utf-8r*   Action
apiVersionVersionr+   host_prefix)
rd   r.   httprQ   r,   r   rN   metadata
_serializert   )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
 mmo / 4 4H!0!9!9,!GIOOKU;(
6..z?K"(3J}%r   c                 d    t        | d|j                   | j                        } |||||       y )N_serialize_type_)prefixrG   	type_name_default_serialize)r!   r-   r4   rR   r   r)   s         r   r   zQuerySerializer._serialize   s9     u/0##

 	z5%7r   c                     |j                   }|j                         D ]9  \  }}||   }| j                  ||      }|r| d| }| j                  ||||       ; y )N.)re   rf   rT   r   )	r!   r-   r4   rR   r   re   keymember_shapemember_prefixs	            r   _serialize_type_structurez)QuerySerializer._serialize_type_structure  sf    --++- 	LJC"3<L 55lCHM#)(!M? ;OOJ|]K	Lr   c                    |sd||<   y | j                  |      rl|}|j                  j                  j                  d      rr| j	                  |j                  d      }dj                  |j                  d      d d |gz         }n-|j                  j                  j                  dd      }| d| }t        |d      D ],  \  }}	| d| }
|j                  }| j                  ||	||
       . y )Nr&   rN   rS   r   ro      )	rx   ro   rP   rQ   rT   rj   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##E* K||))--f500B0O!hhv||C'8"'='FG2266vxHI#HAi[1K#E1- 	PJAw +}AaS1N!LLMOOJO	Pr   c                    | j                  |      r|}n| d}|dz   }|j                  }|j                  }| j                  |d      }	| j                  |d      }
t	        |d      D ]V  \  }}|j                  ||	      }|j                  ||
      }| j                  ||||       | j                  |||   ||       X y )Nz.entryz.{i}.{suffix}r   r   r4   r   )r   suffix)rx   r   r4   rT   r   rk   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* K#HF+K0II	kk..yu.M
00gFq) 	OFAs!1Z@J#??Q|?DLOOJY
COOJc
KN		Or   c                 ,    | j                  |      ||<   y r   r]   r!   r-   r4   rR   r   s        r   _serialize_type_blobz$QuerySerializer._serialize_type_blob;  s    !--e4
6r   c                 `    | j                  ||j                  j                  d            ||<   y NtimestampFormatrK   rP   rQ   r   s        r   _serialize_type_timestampz)QuerySerializer._serialize_type_timestamp?  s.    !;;5&&**+<=

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

)#7Er   r   c                       e Zd ZdZd ZddZy)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 r(|j                   d   }|d   j                         |dd  z   S |S )N	queryNamerN   r   r   )rP   upper)r!   rR   rS   rN   s       r   rT   z"EC2Serializer._get_serialized_name^  sd     %---&&{33u*** &&v.D7==?T!"X--r   c                 z    t        |d      D ],  \  }}| d| }|j                  }| j                  ||||       . y )Nr   r   )r   ro   r   )	r!   r-   r4   rR   r   r   r   r   r   s	            r   r   z"EC2Serializer._serialize_type_listk  sH    #E1- 	PJAw &xq_N!LLMOOJO	Pr   Nr   )r   r   r   __doc__rT   r   rb   r   r   r   r   T  s     Pr   r   c                   R    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y)JSONSerializerunixtimestampc                    dj                  |j                  d   |j                        }|j                  d   }| j                         }|j                  j                  d| j                        |d<   |d| d|d<   | j                  ||       | j                         }|j                  }|| j                  |||       t        j                  |      j                  | j                        |d<   | j                  ||      }|||d	<   |S )
Nz{}.{}targetPrefixjsonVersionr)   zapplication/x-amz-json-)zX-Amz-Targetr   r*   r+   r   )rk   r   rN   r.   r   rQ   r,   r   r   rd   r   jsondumpsrW   rX   rt   )	r!   r"   r#   targetjson_versionr-   r+   rd   r   s	            r   r   z#JSONSerializer.serialize_to_requestu  s   $$^4  
 '//>113
.3377d)) 

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

9 	++OZH}}%11"OOD*k:!ZZ-44T5J5JK
6..z?K"(3J}%r   Nc                 b    t        | d|j                   | j                        } |||||       y Nr   r   r!   r-   r4   rR   r   r)   s         r   r   zJSONSerializer._serialize  s7    u/0##

 	z5%-r   c                    |j                   r|||<   y || j                         }|||<   |}|j                  }|j                         D ];  \  }}||   }	d|	j                  v r|	j                  d   }| j                  |||	|       = y rM   )is_document_typer   re   rf   rP   r   )
r!   r-   r4   rR   r   new_serializedre   
member_keymember_valuer   s
             r   r   z(JSONSerializer._serialize_type_structure  s    !!#JsO "&"0
3+
mmG,1KKM (
L&z2\777!-!;!;F!CJlJ	r   c                     | j                         }|||<   |j                         D ]#  \  }}| j                  |||j                  |       % y r   )r   rf   r   r4   )r!   r-   r4   rR   r   map_objsub_key	sub_values           r   r   z"JSONSerializer._serialize_type_map  sH    --/!
3"'++- 	FGYOOGYWE	Fr   c                     g }|||<   |D ]6  }i }| j                  |||j                  d       |j                  |d          8 y )N__current__)r   ro   ri   )r!   r-   r4   rR   r   list_obj	list_itemwrappers           r   r   z#JSONSerializer._serialize_type_list  sM    "
3 	4IG
 OOGYmLOOGM23	4r   c                     |||<   y r   rb   r!   r-   r4   rR   r   s        r   r   z!JSONSerializer._default_serialize  s    
3r   c                 `    | j                  ||j                  j                  d            ||<   y r   r   r   s        r   r   z(JSONSerializer._serialize_type_timestamp  s-    885&&**+<=

3r   c                 ,    | j                  |      ||<   y r   r   r   s        r   r   z#JSONSerializer._serialize_type_blob  s    **51
3r   c                 v    t        |t        j                        rt        |      }| j	                  |      ||<   y r   )r@   decimalDecimalr|   r   r   s        r   r   z$JSONSerializer._serialize_type_float  s.    eW__-%LE!//6
6r   c                 ,    | j                  ||||       y 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   rb   r   r   r   r   r  s<    &8.,F
4 

27
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y	)CBORSerializerr   r                     Nc                     t        | d|j                         }|t        d|j                   d       |||||       y )Nr   zUnrecognized C2J type: z, unable to serialize request)rG   r   
ValueErrorr   s         r   _serialize_data_itemz#CBORSerializer._serialize_data_item  sS    !1%//1BCD>)%//): ;$ %  	z5%-r   c                    |dk\  r| j                   }n| j                  }d|z
  }| j                  |      \  }}| j                  ||      }|dk(  r|j	                  |       y |j	                  ||j                  |d      z          y )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:55J55J JE%)%L%L&
" --j/J>l+lU^^Iu-MMNr   c                 ,    | j                  ||||       y r   )r  r   s        r   _serialize_type_longz#CBORSerializer._serialize_type_long  s    $$ZsCr   c                    t        |t              r|j                  d      }n&t        |t        t        f      s|j                         }t        |      }| j                  |      \  }}| j                  | j                  |      }|dk(  r|j                  |       n$|j                  ||j                  |d      z          |j                  |       y 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)EEE9#56 JJLEU%)%L%L&
" --  /
 >l+lV__Y-NNO% r   c                    |j                  d      }t        |      }| j                  |      \  }}| j                  | j                  |      }	|dk(  r|j                  |	|z          y |j                  |	|j                  |d      z   |z          y 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vy%@@7Jr   c                 8   t        |      }| j                  |      \  }}| j                  | j                  |      }|dk(  r|j	                  |       n$|j	                  ||j                  |d      z          |D ]  }	| j                  ||	|j                         ! y Nr   r  )r  r  r	  LIST_MAJOR_TYPEr
  r  r  ro   )
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O 	FD%%j$E	Fr   c                    t        |      }| j                  |      \  }}| j                  | j                  |      }|dk(  r|j	                  |       n$|j	                  ||j                  |d      z          |j                         D ]?  \  }	}
| j                  ||	|j                         | j                  ||
|j                         A y r   )
r  r  r	  MAP_MAJOR_TYPEr
  r  rf   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O#kkm 	ENHd%%j(EIIF%%j$D	Er   c                 f   || j                  |||j                         |j                         D ci c]  \  }}|	|| }}}t        |      }| j	                  |      \  }}	| j                  | j                  |      }
|	dk(  r|j                  |
       n$|j                  |
|j                  |	d      z          |j                  }|j                         D ]Q  \  }}||   }d|j                  v r|j                  d   }|+| j                  ||d d        | j                  |||       S y c c}}w )Nr   r  rN   )r  r   rf   r  r  r	  r$  r
  r  re   rP   r  )r!   r-   r4   rR   r   kv
map_lengthr  r  r  re   r   r   r   s                  r   r   z(CBORSerializer._serialize_type_structure@  s>   ?%%j#uG #(++-A$!Q1=AAAZ
%)%L%L&
" --
 >l+z229eDD --(- 	$J":.L333)77?
'++J
D$O))l	# Bs
   
D-D-c                    | j                  |      }d}| j                  | j                  |      }|j                  |       | j	                  |      \  }}	|	dk(  r.| j                  | j
                  |      }|j                  |       y | j                  | j
                  |      }|j                  ||j                  |	d      z          y )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	--d.A.A3G,'%)%L%L&
" >11,,iL l+11,,oL y11)UCCr   c                     | j                  |      r!|j                  | j                  |             y | j                  | j                  d      }|j                  |t        j                  d|      z          y )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  i    ""5)33E:  1100"L lV[[u-EEFr   c                     | j                  |      r!|j                  | j                  |             y | j                  | j                  d      }|j                  |t        j                  d|      z          y )N   z>dr0  r6  s         r   r   z%CBORSerializer._serialize_type_double  r7  r   c                 f    |rdnd}|j                  | j                  | j                  |             y )N      )r
  r	  r3  )r!   r-   r4   rR   r   r  s         r   r   z&CBORSerializer._serialize_type_boolean  s2     %"2""00/	
r   c                 :    |dk  r|dfS |dk  ry|dk  ry|dk  ryy	)
N   r      )r>  r   i   )   r   l        )r/  r   )r9     rb   r<   s     r   r  z1CBORSerializer._get_additional_info_and_num_bytes  s>     2:!8O S[ U] Z r   c                 6    |dz  }||z  j                  dd      S )Nr   r   r  )r  )r!   r  r  major_type_bytess       r   r	  z CBORSerializer._get_initial_byte  s&     &? ?2<<QFFr   c                 t    t        |t        d      k(  |t        d      k(  t        j                  |      g      S )Ninf-inf)anyr|   r}   r~   r<   s     r   r1  z!CBORSerializer._is_special_number  s8    u%v&

5!
 	
r   c                 8   d}| j                  | 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 y )Nr@  rE  z>Hi |  rF  i   i ~  )r	  r3  r|   r4  r5  r}   r~   )r!   r4   r  r  s       r   r2  z-CBORSerializer._get_bytes_for_special_numbers  s    --,,o
 E%L &++dF";;;eFm#&++dF";;;ZZ&++dF";;; r   r   )r   r   r   r  r  r  r  r!  r$  r+  r3  r  r  r  r   r  r   r   r   r   r   r   r   r  r	  r1  r2  rb   r   r   r   r     s    OONN"#.O$D!( FE B,	G	G
,G

<r   r   c                   t    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y)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                    | j                         }|j                  j                  d| j                        |d<   |j                  }| j                  ||      }|||d<   ||j                  d   |d<   |S |j                  }| j                         | j                         | j                         | j                         d}|j                         D ]  \  }}	|		| j                  |||	|        | j                  |j                  d   |d         |d<   d|j                  v r%| j                  |j                  d   |d         |d<   |d	   |d
<   |d   r|d   |d<   | j                  |||||       | j                  |||       |S )Nr)   r   
requestUrir'   )uri_path_kwargsquery_string_kwargsbody_kwargsr*   rQ  authPath	auth_pathrR  r(   r*   )r.   r   rQ   r,   rd   rt   re   r   rf   _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"(3J}%=%4%9%9,%GJz"  $}}#'==?==?}}	
 (2'7'7'9 	#J"&&Zm		 "&!:!:  .<M0N"

: ---&*&?&?$$Z0-.'J{# &11F%G
>"y!$/	$:Jy!Z	
 	$$ZFr   c                     i }t        j                  d|      D ];  }|j                  d      rt        ||d d    d      ||<   +t        ||         ||<   =  |j                  di |S )Nz{(.*?)}+r   z/~)saferb   )refindallendswithr   rk   )r!   uri_templateparamsencoded_paramstemplate_params        r   rW  z'BaseRestSerializer._render_uri_template  s      jj\B 	N&&s+1?>#2./d2~. 2@>*2~.	 #|""4^44r   c                    |j                   j                  d      }| j                  ||      r)|j                  |d      }| j                  |      }||d<   y |@|j                  |      }|| j	                  |||         |d<   y | j                         |d<   y |d   r| j	                  |d   |      |d<   y | j                  |      r| j                         |d<   y y )Npayloadr   r+   rS  )rP   rQ   _has_streaming_payload_encode_payload_serialize_body_params_serialize_empty_body_requires_empty_body)	r!   r[  r"   r-   rR   rZ  payload_memberbody_payloadr   s	            r   rX  z%BaseRestSerializer._serialize_payload(  s     ,,00;&&~}E &>>.#>L//=L!-Jv' %..8K&%)%@%@~!>&
6" &*%?%?%A
6"'!%!<!<M*E"Jv &&u-!%!;!;!=Jv .r   c                      y)Nr   rb   r!   s    r   rm  z(BaseRestSerializer._serialize_empty_bodyH  s    r   c                      y)z
        Some protocols require varied Content-Type headers
        depending on user input. This allows subclasses to apply
        this conditionally.
        Nrb   )r!   r-   rR   rZ  s       r   rY  z*BaseRestSerializer._serialize_content_typeK  s     	r   c                      y)z
        Some protocols require a specific body to represent an empty
        payload. This allows subclasses to apply this conditionally.
        Frb   rw   s     r   rn  z'BaseRestSerializer._requires_empty_bodyS  s    
 r   c                 0    |duxr ||   j                   dv S )z5Determine if payload is streaming (a blob or string).N)blobstring)r   )r!   ri  rZ  s      r   rj  z)BaseRestSerializer._has_streaming_payloadZ  s,    d" 
}W'='G'G L
 (
 	
r   c                 \    t        |t              r|j                  | j                        S |S r   )r@   rV   rW   rX   )r!   r+   s     r   rk  z"BaseRestSerializer._encode_payloada  s&    dC ;;t4455r   c                    ||   }|j                   j                  d      }|j                   j                  d|      }|dk(  r| j                  ||      }||d   |<   y |dk(  rt        |t              r|d   j                  |       y |j                  dk(  r2|D 	cg c]  }	| j                  |	|j                          }
}	|
|d   |<   y | j                  ||      }
|
|d   |<   y |dk(  r0||   }|s|j                  dk(  ry | j                  ||      |d	   |<   y |d	k(  r|}| j                  ||d	   |       y ||d
   |<   y c c}	w )NlocationrN   rL  rQ  rM  rR  listrN  r*   rS  )
rP   rQ   _get_uri_and_query_string_valuer@   r   updater   ro   _convert_header_value_do_serialize_header_map)r!   r[  r\  r]  rZ  ro   rz  key_nameuri_path_valuer4   	new_paramrR   header_prefixs                r   rV  z(BaseRestSerializer._partition_parametersf  s    z*''++J7''++FJ?u!AAVN 8FK)*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K&z2=s   #D?c                 4   |j                   dk(  rt        |      j                         S |j                   dk(  r8|j                  j	                  d| j
                        }| j                  ||      S |j                   dv rt        | j                  |            S |S )Nbooleanr,  r   r|   double)r   rV   rF   rP   rQ   QUERY_STRING_TIMESTAMP_FORMATrK   r   )r!   r]  ro   r5   s       r   r|  z2BaseRestSerializer._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                 H    |j                         D ]  \  }}||z   }|||<    y r   )rf   )r!   r  r*   
user_inputr   valfull_keys          r   r  z+BaseRestSerializer._do_serialize_header_map  s2    "((* 	$HC$s*H #GH	$r   c                     t        d      Nrl  r   )r!   re  rR   s      r   rl  z)BaseRestSerializer._serialize_body_params      !":;;r   c                 4   |j                   dk(  rot        |      }t        j                  |j	                               }|j
                  j                  d| j                        }t        | j                  ||            S |j                   dk(  rv|j                  j                   dk(  r!|D cg c]  }|| j                  |       }}n+|D cg c]   }|| j                  |j                  |      " }}dj                  |      S t        |      r&| j                  t!        j"                  |d            S |j                   dk(  rt        |      j%                         S |j                   d	v rt        | j'                  |            S t        |      S c c}w c c}w )
Nr,  r   r{  rw  ,)r  :)
separatorsr  r  )r   r
   r9   r:   utctimetuplerP   rQ   HEADER_TIMESTAMP_FORMATrV   rK   ro   _escape_header_list_stringr~  rj   r	   r]   r   r   rF   r   )r!   rR   r4   rH   r,  r5   r(  converted_values           r   r~  z(BaseRestSerializer._convert_header_value  s   ??k)259L (A(A(CDI$2266!4#?#?  ..y:JK  __&||%%1 ##} 33A6# # ##} ..u||Q?# #
 88O,,!%( ##DJJu$LMM__	)u:##%%__ 33t))%011u:+##s   +F%Fc                 F    d|v sd|v rd|j                  dd      z   dz   S |S )N"r  z\")replacer<   s     r   r  z-BaseRestSerializer._escape_header_list_string  s1     %<3%<sE22S88Lr   N)r   r   r   r   r  r  KNOWN_LOCATIONSr   rW  rX  rm  rY  rn  rj  rk  rV  r|  r  rl  r~  r  rb   r   r   rJ  rJ    sh     %.!& BO:x5&>@

1Af$
<!Fr   rJ  c                   (    e Zd ZdZd Zd Zd Zd Zy)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                  j                  d   }|j                  }d| d| |d<   |j                  }|| j                  |||       | j                  ||       |S )Nr   z	/service/z/operation/r'   )r.   r   r   rN   rd   rX  _serialize_headers)r!   r"   r#   r-   service_nameoperation_namerd   s          r   r   z(BaseRpcV2Serializer.serialize_to_request  s    113
&44==nM(--~[0@A 	: &11"##J
KH
O<r   c                 2    | j                  ||      }||d<   y )Nr+   )rl  )r!   r"   r-   rR   rp  s        r   rX  z&BaseRpcV2Serializer._serialize_payload  s    22:uE)
6r   c                     t        d      )Nr  r   )r!   r-   r#   s      r   r  z&BaseRpcV2Serializer._serialize_headers  s    !"677r   c                     t        d      r  r   )r!   r"   rR   s      r   rl  z*BaseRpcV2Serializer._serialize_body_params  r  r   N)r   r   r   r   r   rX  r  rl  rb   r   r   r  r    s    	 *8<r   r  c                   $    e Zd Zd Zd Zd Zd Zy)RestJSONSerializerc                      y)Ns   {}rb   rr  s    r   rm  z(RestJSONSerializer._serialize_empty_body  s    r   c                 h    |j                   j                         D ]  \  }}d|j                  vs y y)zq
        Serialize an empty JSON object whenever the shape has
        members not targeting a location.
        rz  TF)re   rf   rP   )r!   rR   ro   r  s       r   rn  z'RestJSONSerializer._requires_empty_body  s:    
 !==..0 	KFC!2!22	 r   c                     |j                   j                  d      }| j                  ||      ry|d   dk7  }t        d|d         }|r|s	d|d   d<   yyy)z?Set Content-Type to application/json for all structured bodies.ri  Nr+   r   r   r*   zapplication/json)rP   rQ   rj  r   )r!   r-   rR   rZ  ri  has_bodyhas_content_types          r   rY  z*RestJSONSerializer._serialize_content_type  sh    %%)))4&&w>f%,%nj6KL,4FJy!.1 -8r   c                     | j                         }| j                  |||       t        j                  |      j	                  | j
                        S r   )r   r   r   r   rW   rX   )r!   re  rR   serialized_bodys       r   rl  z)RestJSONSerializer._serialize_body_params  s=    --/7zz/*11$2G2GHHr   N)r   r   r   rm  rn  rY  rl  rb   r   r   r  r    s    
GIr   r  c                   X    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y)RestXMLSerializerr   c                     |j                   d   }t        j                  d      }| j                  ||||       t	        |      d   }t        j
                  || j                        S )NrN   r&   r   )encoding)rP   r   Elementr   r{  tostringrX   )r!   re  rR   	root_namepseudo_root	real_roots         r   rl  z(RestXMLSerializer._serialize_body_params%  s\    ''/	!))"-v{I>%a(	##I8M8MNNr   c                 b    t        | d|j                   | j                        } |||||       y r   r   )r!   rR   re  xmlnoderN   r)   s         r   r   zRestXMLSerializer._serialize,  s7    u/0##

 	wt,r   c                 ~   t        j                  ||      }| j                  ||       |j                         D ]  \  }}|j                  |   }|j
                  j                  d|      }	| y |j
                  j                  d      r|j
                  d   }
||j                  |
<   o| j                  ||||	        y )NrN   xmlAttribute)	r   
SubElement_add_xml_namespacerf   re   rP   rQ   attribr   )r!   r  re  rR   rN   structure_noder   r4   r   member_namexml_attribute_names              r   r   z+RestXMLSerializer._serialize_type_structure4  s    $//>~6 ,,. 	NJC ==-L&4488EK
 }))--n=%1%?%?%G"<A%%&89OOL%M	Nr   c                    |j                   }|j                  j                  d      r|}|}n2|j                  j                  dd      }t        j                  ||      }| j                  ||       |D ]  }| j                  ||||        y )Nrv   rN   ro   )ro   rP   rQ   r   r  r  r   )	r!   r  re  rR   rN   r   element_name	list_noder"  s	            r   r   z&RestXMLSerializer._serialize_type_listI  s    ||"";/LI'5599&(KL#..w=Iy1 	IDOOL$	<H	Ir   c                    | j                  |      s(t        j                  ||      }| j                  ||       |j	                         D ]  \  }}| j                  |      rt        j                  ||      nt        j                  d      }| j                  |j                  d      }	| j                  |j                  d      }
| j                  |j                  |||	       | j                  |j                  |||
        y )Nentryr   r   r4   )	rx   r   r  r  rf   rT   r   r4   r   )r!   r  re  rR   rN   noder   r4   sub_noder  val_names              r   r   z%RestXMLSerializer._serialize_type_mapU  s     ''.))'48D##E40 ,,. 	DJC ++E2 &&w5 ++D': 
 000OH00' 1 H OOEIIsHh?OOEKK(C	Dr   c                 p    t        j                  ||      }|rd}nd}||_        | j                  ||       y r   )r   r  textr  )r!   r  re  rR   rN   r  	str_values          r   r   z)RestXMLSerializer._serialize_type_booleano  s:     %%gt4II	t,r   c                     t        j                  ||      }| j                  |      |_        | j	                  ||       y r   )r   r  r]   r  r  r!   r  re  rR   rN   r  s         r   r   z&RestXMLSerializer._serialize_type_blob{  s6    %%gt4$$V,	t,r   c                     t        j                  ||      }t        | j                  ||j                  j                  d                  |_        | j                  ||       y r   )r   r  rV   rK   rP   rQ   r  r  r  s         r   r   z+RestXMLSerializer._serialize_type_timestamp  sW    %%gt4**++//0AB
	
 	t,r   c                     t        j                  ||      }t        | j                  |            |_        | j                  ||       y r   )r   r  rV   r   r  r  r  s         r   r   z'RestXMLSerializer._serialize_type_float  s;    %%gt4**623	t,r   c                 ,    | j                  ||||       y r   r   )r!   r  re  rR   rN   s        r   r   z(RestXMLSerializer._serialize_type_double  s    ""7FE4@r   c                 t    t        j                  ||      }t        |      |_        | j	                  ||       y r   )r   r  rV   r  r  r  s         r   r   z$RestXMLSerializer._default_serialize  s/    %%gt4K	t,r   c                    d|j                   v rq|j                   d   }d}t        |t              r/|j                  d      r|d|d    z  }|d   |j                  |<   y t        |t
              r||j                  |<   y y y )NxmlNamespacexmlnsr   r  rL  )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!4^!D$N,d3%))(3"*<X*F)G&HHN8J9%%n5 .48J%%n5 5 1r   N)r   r   r   rE   rl  r   r   r   r   r   r   r   r   r   r   r  rb   r   r   r  r  "  sJ     O-N*
ID4
--
--
A-
Kr   r  c                   .     e Zd ZdZ fdZd Zd Z xZS )RpcV2CBORSerializerr   c                 :    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w+JHHr   c                 R    t               }| j                  |||       t        |      S r   )r  r  r  )r!   r"   rd   r+   s       r   rl  z*RpcV2CBORSerializer._serialize_body_params  s%    {!!$
K@T{r   c                     d|d   d<   |j                   rd}nd}| j                  ||       |d   dk7  }t        d|d         }||d   d	<   |s|r	||d   d<   y y y )
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2=J+J++OZHf%,%nj6KL*4
9h'H4>Jy!.1 %-r   )r   r   r   rE   r   rl  r  __classcell__)r  s   @r   r  r    s    &I
?r   r  )ec2queryr   z	rest-jsonzrest-xmlzsmithy-rpc-v2-cbor)T))r   rY   r9   rA   r   r   r}   ra  r4  	xml.etreer   botocorer   botocore.compatr   botocore.exceptionsr   botocore.useragentr   botocore.utilsr   r	   r
   r   DEFAULT_TIMESTAMP_FORMATr2   r1   compilerg   r   r   r   r   r   r   rJ  r  r  r  r  r   rb   r   r   <module>r     s  8       	  !  & 4 2  % 
'12S@ S@llEj lE^PO P<`EZ `EFo<Z o<dQ Qh$<* $<NI+^ I@K* KD?-~ ?< #!-r   