Ë
    qPêj/Ë  ã                   óÞ  — 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ZdZdZeeefZ def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\.\-]+$ÚdefaultÚmillisecondÚlegacyTc                 ó|   — t        |    |¬«      }|r*t        j                  «       }t        j                  ||«      }|S )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': Full precision of the provided value (up to
          microseconds) for ISO and Unix timestamps, seconds for RFC
        - 'millisecond': Millisecond precision (ISO/Unix), seconds for RFC
        - 'legacy': Behavior prior to sub-second Unix timestamp support.
          Microseconds for ISO timestamps, seconds for Unix and RFC
    :type timestamp_precision: str
    :return: A serializer instance for the given protocol.
    )Útimestamp_precision)ÚSERIALIZERSr   ÚParamValidatorÚParamValidationDecorator)Úprotocol_nameÚinclude_validationr   Ú
serializerÚ	validators        úW/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/botocore/serialize.pyÚcreate_serializerr   O   sA   € ô( ˜]Ñ+Ø/ô€Jñ Ü×+Ñ+Ó-ˆ	Ü×6Ñ6°yÀ*ÓMˆ
ØÐó    c                   ól   — e Zd ZdZeZdZef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         vrt        d|› �«      ‚|| _        y )Nz=Invalid timestamp precision found while creating serializer: )ÚTIMESTAMP_PRECISION_OPTIONSÚ
ValueErrorÚ_timestamp_precision)Úselfr   s     r   Ú__init__zSerializer.__init__u   s.   € ØÔ&AÑAÜØOÐPcÐOdÐeóð ð %8ˆÕ!r   c                 ó   — 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)r$   Ú
parametersÚoperation_models      r   r'   zSerializer.serialize_to_request|   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                   t        k(  r(|j                  dz  }|j                  d«      d|d›d�z   S |j                  dkD  rt        }nt
        }|j                  |«      S )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_iso8601zSerializer._timestamp_iso8601±   sr   € ð ×$Ñ$Ô(GÒGØ ×,Ñ,°Ñ4ˆLà—‘Ð2Ó3¸¸,ÀsÐ9KÈ1Ð6MÑMðð
 × Ñ  1Ò$Ü#0Ñ ä#*Ð Ø—>‘>Ð"2Ó3Ð3r   c                 ó  — t        j                  |j                  «       «      }| j                  t        k(  r|j
                  dz  dz  }||z   S | j                  t        k(  r|S |j
                  dkD  r|dz  |j
                  z   dz  S |S )zBReturn unix timestamp with precision based on timestamp_precision.r8   g     @�@r   i@B )ÚcalendarÚtimegmÚ	timetupler#   r<   r=   ÚTIMESTAMP_PRECISION_LEGACY)r$   rA   Ú	timestamprB   s       r   Ú_timestamp_unixtimestampz#Serializer._timestamp_unixtimestampÁ   sŒ   € ä—O‘O E§O¡OÓ$5Ó6ˆ	Ø×$Ñ$Ô(GÒGØ!×-Ñ-°Ñ5¸Ñ?ˆLØ˜|Ñ+Ð+Ø×&Ñ&Ô*DÒDØÐØ×Ñ Ò"ð
  Ñ%¨×(9Ñ(9Ñ9¸UÑBÐBØÐr   c                 ó¨   — t        |t        j                  «      r,t        t        j                  |j                  «       «      «      }t        |d¬«      S )zSReturn RFC822 timestamp (always second precision - RFC doesn't support sub-second).T)Úusegmt)Ú
isinstanceÚdatetimeÚintrF   rG   rH   r   ©r$   rA   s     r   Ú_timestamp_rfc822zSerializer._timestamp_rfc822Ñ   s;   € ô �eœX×.Ñ.Ô/ÜœŸ™¨¯©Ó(9Ó:Ó;ˆEÜ˜%¨Ô-Ð-r   Nc                 ó†   — |€| j                   }|j                  «       }t        |«      }t        | d|› �«      } ||«      }|S )NÚ_timestamp_)ÚTIMESTAMP_FORMATÚlowerr
   Úgetattr)r$   rA   rC   Údatetime_objÚ	converterÚfinal_values         r   Ú_convert_timestamp_to_strz$Serializer._convert_timestamp_to_strØ   sR   € ØÐ#Ø#×4Ñ4ÐØ+×1Ñ1Ó3ÐÜ.¨uÓ5ˆÜ˜D KÐ0@Ð/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 ©N)rN   ÚstrÚencodeÚDEFAULT_ENCODINGÚbase64Ú	b64encodeÚstripÚdecoderQ   s     r   Ú_get_base64zSerializer._get_base64æ   sM   € ô �eœSÔ!Ø—L‘L ×!6Ñ!6Ó7ˆEÜ×Ñ Ó&×,Ñ,Ó.×5Ñ5°d×6KÑ6KÓ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Úitemsr`   ra   ÚHOST_PREFIX_REÚmatchÚappendr   ÚjoinÚformat)r$   r*   r+   Úoperation_endpointÚhost_prefix_expressionÚinput_membersÚmemberrb   Úhost_labelsÚformat_kwargsÚ
bad_labelsr^   Úparams                r   Ú_expand_host_prefixzSerializer._expand_host_prefixî   s%  € Ø,×5Ñ5ÐàÐ&ØÐ#5Ñ5àà!3°LÑ!AÐØ×&Ñ&Ð.Ø)Ð)Ø'×3Ñ3×;Ñ;ˆð "/×!4Ñ!4Ó!6÷
á�˜Ø×"Ñ"×&Ñ& {Ô3ò ð
ˆñ 
ð
 ˆØˆ
Øò 	(ˆDØ˜tÑ$ˆEÜ!×'Ñ'¨Ô.Ø×!Ñ! $Ô'Ø"'ˆM˜$Òð		(ñ
 Ü&à6°t·y±yÀÓ7LÐ6Mð N!ð !ôð ð -Ð%×,Ñ,Ñ=¨}Ñ=Ð=ùó)
s   Á'C(c                 ó8   — |j                   j                  d«      S )NÚ	flattenedr_   ©r$   rb   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ÚisnanrQ   s     r   Ú_handle_floatzSerializer._handle_float  sN   € Ø”E˜*Ó%Ò%ØˆEð
 ˆð	 ”e˜KÓ(Ò(ØˆEð ˆô �Z‰Z˜ÔØˆEØˆr   c                 óB   — |j                   j                  r	d|d   d<   y y )NÚtruer2   zx-amzn-query-mode)Úservice_modelÚis_query_compatible)r$   r+   r5   s      r   Ú_handle_query_compatible_traitz)Serializer._handle_query_compatible_trait  s&   € Ø×(Ñ(×<Ò<Ø9?ˆJ�yÑ!Ð"5Ò6ð =r   rf   )Ú__name__Ú
__module__Ú__qualname__r4   ÚdictÚMAP_TYPEri   ÚTIMESTAMP_PRECISION_DEFAULTr%   r'   r6   rD   rK   rR   r[   rd   rn   r…   r‰   r�   r•   rs   r   r   r   r   l   s\   „ Ø€Nð
 €HØÐà+Fó 8ò$:òLò4ò ò .óò=ò
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 )
Nr1   úContent-Typez0application/x-www-form-urlencoded; charset=utf-8r2   ÚActionÚ
apiVersionÚVersionr3   Úhost_prefix)
ru   r6   Úhttpra   r4   rš   r^   ÚmetadataÚ
_serializer…   )r$   r*   r+   rb   r5   Úbody_paramsr£   s          r   r'   z$QuerySerializer.serialize_to_request$  sÏ   € Ø×+Ñ+ˆØ×1Ñ1Ó3ˆ
Ø.×3Ñ3×7Ñ7Ø�d×)Ñ)ó 
ˆ
�8Ñð ÐNð!
ˆ
�9Ñð
 —m‘m“oˆØ /× 4Ñ 4ˆ�HÑØ!0×!9Ñ!9¸,Ñ!Gˆ�IÑØÐØ�O‰O˜K¨°UÔ;Ø(ˆ
�6Ñà×.Ñ.¨z¸?ÓKˆØÐ"Ø(3ˆJ�}Ñ%àÐr   c                 ód   — t        | d|j                  › �| j                  «      } |||||¬«       y )NÚ_serialize_type_)Úprefix©rW   Ú	type_nameÚ_default_serialize)r$   r5   rA   rb   rª   r1   s         r   r¦   zQuerySerializer._serialize<  s9   € ô ØØ˜uŸ™Ð/Ð0Ø×#Ñ#ó
ˆñ
 	ˆz˜5 %°Ö7r   c                 ó´   — |j                   }|j                  «       D ]9  \  }}||   }| j                  ||«      }|r|› d|› �}| j                  ||||«       Œ; y )Nr9   )rv   rw   rd   r¦   )	r$   r5   rA   rb   rª   rv   ÚkeyÚmember_shapeÚmember_prefixs	            r   Ú_serialize_type_structurez)QuerySerializer._serialize_type_structureK  sf   € Ø—-‘-ˆØŸ+™+›-ò 	L‰JˆC�Ø" 3™<ˆLØ ×5Ñ5°lÀCÓHˆMÙØ#) (¨!¨M¨?Ð ;�Ø�O‰O˜J¨¨|¸]Õ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.   r^   ©rc   r9   éÿÿÿÿr€   é   )	r‰   r€   r`   ra   rd   r{   ÚsplitÚ	enumerater¦   )r$   r5   rA   rb   rª   Úlist_prefixr^   Ú	list_nameÚiÚelementÚelement_prefixÚelement_shapes               r   Ú_serialize_type_listz$QuerySerializer._serialize_type_listT  sî   € Ùà!#ˆJ�vÑØØ×#Ñ# EÔ*Ø ˆKØ�|‰|×)Ñ)×-Ñ-¨fÔ5Ø×0Ñ0°·±ÈBÐ0ÓO�à!Ÿh™h v§|¡|°CÓ'8¸¸"Ð'=ÀÀÑ'FÓG‘àŸ™×2Ñ2×6Ñ6°v¸xÓHˆIØ#˜H A i [Ð1ˆKÜ# E¨1Ó-ò 	P‰JˆAˆwØ +˜}¨A¨a¨SÐ1ˆNØ!ŸL™LˆMØ�O‰O˜J¨°ÀÕ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´   rA   r¶   )r»   Úsuffix)r‰   r¯   rA   rd   r¸   r|   r¦   )r$   r5   rA   rb   rª   Úfull_prefixÚtemplateÚ	key_shapeÚvalue_shapeÚ
key_suffixÚvalue_suffixr»   r¯   Ú
key_prefixÚvalue_prefixs                  r   Ú_serialize_type_mapz#QuerySerializer._serialize_type_mapg  sÌ   € Ø×#Ñ# EÔ*Ø ‰Kà#˜H FÐ+ˆKØ Ñ0ˆØ—I‘Iˆ	Ø—k‘kˆØ×.Ñ.¨yÀuÐ.ÓMˆ
Ø×0Ñ0°¸gÓFˆÜ  qÓ)ò 	O‰FˆAˆsØ!Ÿ™¨1°Z˜Ó@ˆJØ#Ÿ?™?¨Q°|˜?ÓDˆLØ�O‰O˜J¨¨Y¸
ÔCØ�O‰O˜J¨¨c©
°KÀÕNñ		Or   c                 ó,   — | j                  |«      ||<   y rf   ©rn   ©r$   r5   rA   rb   rª   s        r   Ú_serialize_type_blobz$QuerySerializer._serialize_type_blobw  s   € à!×-Ñ-¨eÓ4ˆ
�6Òr   c                 ó`   — | j                  ||j                  j                  d«      «      ||<   y ©NÚtimestampFormat©r[   r`   ra   rÍ   s        r   Ú_serialize_type_timestampz)QuerySerializer._serialize_type_timestamp{  s.   € Ø!×;Ñ;Ø�5×&Ñ&×*Ñ*Ð+<Ó=ó
ˆ
�6Òr   c                 ó   — |rd||<   y d||<   y ©Nr’   Úfalsers   rÍ   s        r   Ú_serialize_type_booleanz'QuerySerializer._serialize_type_boolean€  s   € ÙØ!'ˆJ�vÒà!(ˆJ�vÒr   c                 ó   — |||<   y rf   rs   rÍ   s        r   r­   z"QuerySerializer._default_serialize†  s   € Ø"ˆ
�6Òr   c                 ó,   — | j                  |«      ||<   y rf   )r�   rÍ   s        r   Ú_serialize_type_floatz%QuerySerializer._serialize_type_float‰  s   € Ø!×/Ñ/°Ó6ˆ
�6Òr   c                 ó,   — | j                  ||||«       y rf   ©rÚ   rÍ   s        r   Ú_serialize_type_doublez&QuerySerializer._serialize_type_doubleŒ  ó   € Ø×"Ñ" :¨u°e¸VÕDr   N©r.   )r–   r—   r˜   rU   r'   r¦   r²   r¿   rÊ   rÎ   rÓ   r×   r­   rÚ   rÝ   rs   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Ú	queryNamer^   r   r¶   )r`   Úupper)r$   rb   rc   r^   s       r   rd   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¶   r9   )r¸   r€   r¦   )	r$   r5   rA   rb   rª   r»   r¼   r½   r¾   s	            r   r¿   z"EC2Serializer._serialize_type_list§  sH   € Ü# E¨1Ó-ò 	P‰JˆAˆwØ &˜x q¨¨˜_ˆNØ!ŸL™LˆMØ�O‰O˜J¨°ÀÕOñ	Pr   Nrß   )r–   r—   r˜   Ú__doc__rd   r¿   rs   r   r   rá   rá   �  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ÚjsonVersionr1   zapplication/x-amz-json-)zX-Amz-TargetrŸ   r2   r3   r£   )r|   r¥   r^   r6   r¤   ra   r4   r•   rš   ru   r¦   ÚjsonÚdumpsrh   ri   r…   )	r$   r*   r+   ÚtargetÚjson_versionr5   r3   ru   r£   s	            r   r'   z#JSONSerializer.serialize_to_request±  s  € Ø—‘Ø×$Ñ$ ^Ñ4Ø× Ñ ó
ˆð '×/Ñ/°Ñ>ˆØ×1Ñ1Ó3ˆ
Ø.×3Ñ3×7Ñ7Ø�d×)Ñ)ó 
ˆ
�8Ñð #Ø5°l°^ÐDñ!
ˆ
�9Ñð 	×+Ñ+¨O¸ZÔHà�}‰}‹ˆØ%×1Ñ1ˆØÐ"Ø�O‰O˜D *¨kÔ:Ü!ŸZ™Z¨Ó-×4Ñ4°T×5JÑ5JÓKˆ
�6Ñà×.Ñ.¨z¸?ÓKˆØÐ"Ø(3ˆJ�}Ñ%àÐr   Nc                 ób   — t        | d|j                  › �| j                  «      } |||||«       y ©Nr©   r«   ©r$   r5   rA   rb   r¯   r1   s         r   r¦   zJSONSerializer._serializeÍ  s7   € ÜØØ˜uŸ™Ð/Ð0Ø×#Ñ#ó
ˆñ
 	ˆz˜5 %¨Õ-r   c                 ó  — |j                   r|||<   y |�| j                  «       }|||<   |}|j                  }|j                  «       D ];  \  }}||   }	d|	j                  v r|	j                  d   }| j                  |||	|«       Œ= y r]   )Úis_document_typerš   rv   rw   r`   r¦   )
r$   r5   rA   rb   r¯   Únew_serializedrv   Ú
member_keyÚmember_valuer°   s
             r   r²   z(JSONSerializer._serialize_type_structureÕ  s”   € Ø×!Ò!Ø#ˆJ�sŠOàˆð "&§¡£�Ø"0�
˜3‘Ø+�
Ø—m‘mˆGØ,1¯K©K«Mò Ñ(�
˜LØ& zÑ2�Ø˜\×7Ñ7Ñ7Ø!-×!;Ñ!;¸FÑ!C�JØ—‘Ø ¨l¸Jõñ	r   c                 óš   — | j                  «       }|||<   |j                  «       D ]#  \  }}| j                  |||j                  |«       Œ% y rf   )rš   rw   r¦   rA   )r$   r5   rA   rb   r¯   Úmap_objÚsub_keyÚ	sub_values           r   rÊ   z"JSONSerializer._serialize_type_mapë  sH   € Ø—-‘-“/ˆØ!ˆ
�3‰Ø"'§+¡+£-ò 	FÑˆG�YØ�O‰O˜G Y°·±¸WÕEñ	Fr   c                 óˆ   — g }|||<   |D ]6  }i }| j                  |||j                  d«       |j                  |d   «       Œ8 y )NÚ__current__)r¦   r€   rz   )r$   r5   rA   rb   r¯   Úlist_objÚ	list_itemÚwrappers           r   r¿   z#JSONSerializer._serialize_type_listñ  sM   € ØˆØ"ˆ
�3‰Øò 	4ˆIØˆGð
 �O‰O˜G Y°·±¸mÔLØ�O‰O˜G MÑ2Õ3ñ	4r   c                 ó   — |||<   y rf   rs   ©r$   r5   rA   rb   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 rf   rÌ   r  s        r   rÎ   z#JSONSerializer._serialize_type_blob  s   € Ø×*Ñ*¨5Ó1ˆ
�3Šr   c                 óv   — t        |t        j                  «      rt        |«      }| j	                  |«      ||<   y rf   )rN   ÚdecimalÚDecimalr�   r�   rÍ   s        r   rÚ   z$JSONSerializer._serialize_type_float  s.   € Ü�eœWŸ_™_Ô-Ü˜%“LˆEØ!×/Ñ/°Ó6ˆ
�6Òr   c                 ó,   — | j                  ||||«       y rf   rÜ   rÍ   s        r   rÝ   z%JSONSerializer._serialize_type_double  rÞ   r   rf   rß   )r–   r—   r˜   rU   r'   r¦   r²   rÊ   r¿   r­   rÓ   rÎ   rÚ   rÝ   rs   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)rW   r¬   r"   ró   s         r   Ú_serialize_data_itemz#CBORSerializer._serialize_data_item  sS   € Ü˜Ð!1°%·/±/Ð1BÐCÓDˆØˆ>ÜØ)¨%¯/©/Ð):ð ;$ð %óð ñ 	ˆz˜5 %¨Õ-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$   r5   rA   rb   r¯   Ú
major_typeÚadditional_infoÚ	num_bytesÚinitial_bytes	            r   Ú_serialize_type_integerz&CBORSerializer._serialize_type_integer$  s‰   € Ø�AŠ:Ø×5Ñ5‰Jà×5Ñ5ˆJð ˜‘JˆEØ%)×%LÑ%LØó&
Ñ"ˆ˜ð ×-Ñ-¨j¸/ÓJˆØ˜Š>Ø×Ñ˜lÕ+à×Ñ˜l¨U¯^©^¸IÀuÓ-MÑMÕNr   c                 ó,   — | j                  ||||«       y rf   )r   r  s        r   Ú_serialize_type_longz#CBORSerializer._serialize_type_long6  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  )rN   rg   rh   ÚbytesÚ	bytearrayÚreadÚlenr  r  ÚBLOB_MAJOR_TYPEr  r  )	r$   r5   rA   rb   r¯   Úlengthr  r  r  s	            r   rÎ   z#CBORSerializer._serialize_type_blob9  s·   € Ü�eœSÔ!Ø—L‘L Ó)‰EÜ˜E¤E¬9Ð#5Ô6ð —J‘J“LˆEÜ�U“ˆØ%)×%LÑ%LØó&
Ñ"ˆ˜ð ×-Ñ-Ø× Ñ  /ó
ˆð ˜Š>Ø×Ñ˜lÕ+à×Ñ˜l¨V¯_©_¸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$  )rh   r(  r  r  ÚSTRING_MAJOR_TYPEr  r  )
r$   r5   rA   rb   r¯   Úencodedr*  r  r  r  s
             r   Ú_serialize_type_stringz%CBORSerializer._serialize_type_stringM  s�   € Ø—,‘,˜wÓ'ˆÜ�W“ˆØ%)×%LÑ%LØó&
Ñ"ˆ˜ð ×-Ñ-Ø×"Ñ" Oó
ˆð ˜Š>Ø×Ñ˜l¨WÑ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  r€   )
r$   r5   rA   rb   r¯   r*  r  r  r  Úitems
             r   r¿   z#CBORSerializer._serialize_type_list]  sœ   € Ü�U“ˆØ%)×%LÑ%LØó&
Ñ"ˆ˜ð ×-Ñ-Ø× Ñ  /ó
ˆð ˜Š>Ø×Ñ˜lÕ+à×Ñ˜l¨V¯_©_¸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 r0  )
r(  r  r  ÚMAP_MAJOR_TYPEr  r  rw   r  r¯   rA   )r$   r5   rA   rb   r¯   r*  r  r  r  Úkey_itemr2  s              r   rÊ   z"CBORSerializer._serialize_type_mapl  s¼   € Ü�U“ˆØ%)×%LÑ%LØó&
Ñ"ˆ˜ð ×-Ñ-Ø×Ñ ó
ˆð ˜Š>Ø×Ñ˜lÕ+à×Ñ˜l¨V¯_©_¸YÈÓ-NÑNÔOØ#Ÿk™k›mò 	E‰NˆH�dØ×%Ñ% j°(¸E¿I¹IÔ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  r^   )r  rÄ   rw   r(  r  r  r4  r  r  rv   r`   r.  )r$   r5   rA   rb   r¯   ÚkÚvÚ
map_lengthr  r  r  rv   r÷   rø   r°   s                  r   r²   z(CBORSerializer._serialize_type_structure|  s>  € Øˆ?à×%Ñ% j°#°u·±ÔGð #(§+¡+£-×A™$˜!˜Q°1±=��A‘ÐAˆÑAä˜“Zˆ
Ø%)×%LÑ%LØó&
Ñ"ˆ˜ð ×-Ñ-Ø×Ñ ó
ˆð ˜Š>Ø×Ñ˜lÕ+à×ÑØ˜z×2Ñ2°9¸eÓDÑDôð —-‘-ˆØ(-¯©«ò 	Ñ$ˆJ˜Ø" :Ñ.ˆLØ˜×3Ñ3Ñ3Ø)×7Ñ7¸Ñ?�
ØÑ'Ø×+Ñ+¨J¸
ÀDÈ$ÔOØ×)Ñ)Ø ¨lõñ	ùó# Bs
   ³
D-¾D-c                 óö   — | j                  |«      }d}| j                  | j                  |«      }|j                  |«       t	        |t
        «      r| j                  ||||«       y | j                  ||||«       y )Nr¶   )r[   r  ÚTAG_MAJOR_TYPEr  rN   r�   rÝ   r   )r$   r5   rA   rb   r¯   rJ   Útagr  s           r   rÓ   z(CBORSerializer._serialize_type_timestamp�  sq   € Ø×2Ñ2°5Ó9ˆ	ØˆØ×-Ñ-¨d×.AÑ.AÀ3ÓGˆØ×Ñ˜,Ô'ô �i¤Ô'Ø×'Ñ'¨
°I¸uÀcÕJà×(Ñ(¨°YÀÀsÕKr   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$   r5   rA   rb   r¯   r  s         r   rÚ   z$CBORSerializer._serialize_type_float©  ói   € Ø×"Ñ" 5Ô)Ø×ÑØ×3Ñ3°EÓ:õð  ×1Ñ1Ø×0Ñ0°"óˆLð ×Ñ˜l¬V¯[©[¸¸uÓ-EÑEÕFr   c                 óð   — | j                  |«      r!|j                  | j                  |«      «       y | j                  | j                  d«      }|j                  |t        j                  d|«      z   «       y )Né   z>dr?  rE  s         r   rÝ   z%CBORSerializer._serialize_type_double´  rF  r   c                 óf   — |rdnd}|j                  | j                  | j                  |«      «       y )Né   é   )r  r  rB  )r$   r5   rA   rb   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   é   )rM  r¶   i   )é   r  l        )r>  r  )rH  é   rs   rQ   s     r   r  z1CBORSerializer._get_additional_info_and_num_bytesÇ  s>   € ð �2Š:Ø˜!�8ˆOð �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�   rQ   s     r   r@  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 )NrO  rT  z>Hi |  rU  i ü  i ~  )r  rB  r�   rC  rD  rŽ   r�   )r$   rA   r  r  s       r   rA  z-CBORSerializer._get_bytes_for_special_numbersì  s�   € ØˆØ×-Ñ-Ø×,Ñ,¨oó
ˆð ”E˜%“LÒ Ø¤&§+¡+¨d°FÓ";Ñ;Ð;Ø”e˜F“mÒ#Ø¤&§+¡+¨d°FÓ";Ñ;Ð;Ü�Z‰Z˜ÔØ¤&§+¡+¨d°FÓ";Ñ;Ð;ð r   rf   )r–   r—   r˜   r  r  r)  r,  r1  r4  r;  rB  r  r   r"  rÎ   r.  r¿   rÊ   r²   rÓ   rÚ   rÝ   r×   r  r  r@  rA  rs   r   r   r  r    s‡   „ ØÐØÐØ€OØÐØ€OØ€NØ€NØ"#Ðó.òOò$Dò!ò(ò FòEò òB
Lò	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Úheaderr2   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 )Nr1   r£   Ú
requestUrir/   )Úuri_path_kwargsÚquery_string_kwargsÚbody_kwargsr2   r`  ÚauthPathÚ	auth_pathra  r0   r2   )r6   r¤   ra   r4   ru   r…   rv   rš   rw   Ú_partition_parametersÚ_render_uri_templateÚ_serialize_payloadÚ_serialize_content_type)
r$   r*   r+   r5   rb   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ˆØÐ"Ø(3ˆJ�}Ñ%àˆ=Ø%4×%9Ñ%9¸,Ñ%GˆJ�zÑ"ØÐØŸ™ˆð  $Ÿ}™}›Ø#'§=¡=£?ØŸ=™=›?Ø—}‘}“ñ	
ˆð (2×'7Ñ'7Ó'9ò 	Ñ#ˆJ˜ØÐ"àØ×&Ñ&Ø˜Z¨°mõð		ð "&×!:Ñ!:Ø× Ñ  Ñ.°Ð<MÑ0Nó"
ˆ
�:Ñð ˜×-Ñ-Ñ-Ø&*×&?Ñ&?Ø×$Ñ$ ZÑ0ØÐ-Ñ.ó'ˆJ�{Ñ#ð &1Ð1FÑ%Gˆ
�>Ñ"Ø�yÒ!Ø$/°	Ñ$:ˆJ�yÑ!Ø×ÑØ˜ 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/~)Úsafers   )ÚreÚfindallÚendswithr   r|   )r$   Úuri_templateÚparamsÚencoded_paramsÚtemplate_params        r   rf  z'BaseRestSerializer._render_uri_templateG  sƒ   € ð ˆÜ Ÿj™j¨°\Ó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   r3   rb  )r`   ra   Ú_has_streaming_payloadÚ_encode_payloadÚ_serialize_body_paramsÚ_serialize_empty_bodyÚ_requires_empty_body)	r$   rj  r*   r5   rb   ri  Úpayload_memberÚbody_payloadr§   s	            r   rg  z%BaseRestSerializer._serialize_payloadZ  sõ   € ð ×,Ñ,×0Ñ0°Ó;ˆØ×&Ñ& ~°}ÔEð &Ÿ>™>¨.¸#Ó>ˆLØ×/Ñ/°Ó=ˆLØ!-ˆJ�vÒØÐ'ð %Ÿ.™.¨Ó8ˆKØÐ&Ø%)×%@Ñ%@Ø ¨~Ñ!>ó&�
˜6Ò"ð &*×%?Ñ%?Ó%A�
˜6Ò"Ø˜Ò'Ø!%×!<Ñ!<Ø˜MÑ*¨Eó"ˆJ�vÒð ×&Ñ& uÔ-Ø!%×!;Ñ!;Ó!=ˆJ�vÒð .r   c                  ó   — y)Nr   rs   ©r$   s    r   r|  z(BaseRestSerializer._serialize_empty_bodyz  s   € Ør   c                  ó   — y)z¡
        Some protocols require varied Content-Type headers
        depending on user input. This allows subclasses to apply
        this conditionally.
        Nrs   )r$   r5   rb   ri  s       r   rh  z*BaseRestSerializer._serialize_content_type}  s   € ð 	r   c                  ó   — y)z“
        Some protocols require a specific body to represent an empty
        payload. This allows subclasses to apply this conditionally.
        Frs   rˆ   s     r   r}  z'BaseRestSerializer._requires_empty_body…  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$   rx  ri  s      r   ry  z)BaseRestSerializer._has_streaming_payloadŒ  s,   € à˜dÐ"ò 
 }°WÑ'=×'GÑ'Gð L
ð (
ð 	
r   c                 ó\   — t        |t        «      r|j                  | j                  «      S |S rf   )rN   rg   rh   ri   )r$   r3   s     r   rz  z"BaseRestSerializer._encode_payload“  s&   € Ü�dœCÔ Ø—;‘;˜t×4Ñ4Ó5Ð5Øˆr   c                 óˆ  — ||   }|j                   j                  d«      }|j                   j                  d|«      }|dk(  r| j                  ||«      }||d   |<   y |dk(  r�t        |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Úlocationr^   r[  r`  r\  ra  Úlistr]  r2   rb  )
r`   ra   Ú_get_uri_and_query_string_valuerN   r™   Úupdater¬   r€   Ú_convert_header_valueÚ_do_serialize_header_map)r$   rj  rk  rl  ri  r€   r‰  Úkey_nameÚuri_path_valuerA   Ú	new_paramrb   Úheader_prefixs                r   re  z(BaseRestSerializer._partition_parameters˜  s“  € ð ˜zÑ*ˆØ×'Ñ'×+Ñ+¨JÓ7ˆØ×'Ñ'×+Ñ+¨F°JÓ?ˆØ�uÒØ!×AÑAØ˜VóˆNð 8FˆKÐ)Ñ*¨8Ò4Ø˜Ò&Ü˜+¤tÔ,ØÐ1Ñ2×9Ñ9¸+ÕFØ×!Ñ! VÒ+ð "-öàð ×8Ñ8¸ÀÇÁÕNð�	ð ð @I�Ð1Ñ2°8Ò<à ×@Ñ@Ø ó�	ð @I�Ð1Ñ2°8Ò<Ø˜Ò!Ø! *Ñ-ˆ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ÚbooleanrJ   rÑ   ©r�   Údouble)r¬   rg   rV   r`   ra   ÚQUERY_STRING_TIMESTAMP_FORMATr[   r�   )r$   rl  r€   rC   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 rf   )rw   )r$   r’  r2   Ú
user_inputr¯   ÚvalÚfull_keys          r   rŽ  z+BaseRestSerializer._do_serialize_header_mapÙ  s2   € Ø"×(Ñ(Ó*ò 	$‰HˆC�Ø$ sÑ*ˆHØ #ˆG�HÒñ	$r   c                 ó   — t        d«      ‚©Nr{  r(   )r$   rt  rb   s      r   r{  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 )
NrJ   rÑ   rŠ  r†  ú,)r   ú:)Ú
separatorsr”  r•  )r¬   r
   rF   rG   Úutctimetupler`   ra   ÚHEADER_TIMESTAMP_FORMATrg   r[   r€   Ú_escape_header_list_stringr�  r{   r	   rn   rí   rî   rV   r�   )r$   rb   rA   rX   rJ   rC   r8  Úconverted_values           r   r�  z(BaseRestSerializer._convert_header_valueá  s‚  € Ø�?‰?˜kÒ)Ü2°5Ó9ˆLÜ Ÿ™¨×(AÑ(AÓ(CÓDˆIØ$×2Ñ2×6Ñ6Ø! 4×#?Ñ#?ó Ðô Ø×.Ñ.¨yÐ:JÓKóð ð �_‰_ Ò&Ø�|‰|×%Ñ%¨Ò1ð #ö#àØ�}ð ×3Ñ3°AÕ6ð#�ñ #ð #ö#àØ�}ð ×.Ñ.¨u¯|©|¸QÕ?ð#�ð #ð
 —8‘8˜OÓ,Ð,Ü! %Ô(ð ×#Ñ#¤D§J¡J¨uÀÔ$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\")ÚreplacerQ   s     r   r¥  z-BaseRestSerializer._escape_header_list_string  s1   € ð �%‰<˜3 %™<Ø˜Ÿ™ s¨EÓ2Ñ2°SÑ8Ð8àˆLr   N)r–   r—   r˜   ræ   r—  r¤  ÚKNOWN_LOCATIONSr'   rf  rg  r|  rh  r}  ry  rz  re  r‹  rŽ  r{  r�  r¥  rs   r   r   rY  rY  ù  sh   „ ñð %.Ð!Ø&Ðò B€Oò:òx5ò&>ò@òòò
òò
1Aòfò$ò
<ò!óFr   rY  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                  ||«      }|�||d<   | j                  ||«       |S )Nrë   z	/service/z/operation/r/   r£   )r6   r“   r¥   r^   ru   rg  r…   Ú_serialize_headers)r$   r*   r+   r5   Úservice_nameÚoperation_nameru   r£   s           r   r'   z(BaseRpcV2Serializer.serialize_to_request  s©   € Ø×1Ñ1Ó3ˆ
Ø&×4Ñ4×=Ñ=¸nÑMˆØ(×-Ñ-ˆà˜�~ [°Ð0@ÐAð 	�:Ñð &×1Ñ1ˆØÐ"Ø×#Ñ# J°
¸KÔHà×.Ñ.¨z¸?ÓKˆØÐ"Ø(3ˆJ�}Ñ%à×Ñ 
¨OÔ<àÐr   c                 ó2   — | j                  ||«      }||d<   y )Nr3   )r{  )r$   r*   r5   rb   r  s        r   rg  z&BaseRpcV2Serializer._serialize_payload-  s   € Ø×2Ñ2°:¸uÓEˆØ)ˆ
�6Òr   c                 ó   — t        d«      ‚)Nr®  r(   )r$   r5   r+   s      r   r®  z&BaseRpcV2Serializer._serialize_headers1  s   € Ü!Ð"6Ó7Ð7r   c                 ó   — t        d«      ‚r�  r(   )r$   r*   rb   s      r   r{  z*BaseRpcV2Serializer._serialize_body_params4  rž  r   N)r–   r—   r˜   ræ   r'   rg  r®  r{  rs   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   {}rs   r�  s    r   r|  z(RestJSONSerializer._serialize_empty_body9  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.
        r‰  TF)rv   rw   r`   )r$   rb   r€   rš  s       r   r}  z'RestJSONSerializer._requires_empty_body<  s:   € ð
 !Ÿ=™=×.Ñ.Ó0ò 	‰KˆF�CØ ×!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.rx  Nr3   r   rŸ   r2   zapplication/json)r`   ra   ry  r   )r$   r5   rb   ri  rx  Úhas_bodyÚhas_content_types          r   rh  z*RestJSONSerializer._serialize_content_typeF  sh   € à×%Ñ%×)Ñ)¨)Ó4ˆØ×&Ñ& w°Ô>àà˜fÑ%¨Ñ,ˆÜ% n°jÀÑ6KÓLÐÙÑ,Ø4FˆJ�yÑ! .Ò1ð -ˆ8r   c                 ó¤   — | j                  «       }| j                  |||«       t        j                  |«      j	                  | j
                  «      S rf   )rš   r¦   rí   rî   rh   ri   )r$   rt  rb   Úserialized_bodys       r   r{  z)RestJSONSerializer._serialize_body_paramsR  s=   € ØŸ-™-›/ˆØ�‰˜¨°Ô7Ü�z‰z˜/Ó*×1Ñ1°$×2GÑ2GÓHÐHr   N)r–   r—   r˜   r|  r}  rh  r{  rs   r   r   rµ  rµ  8  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 )Nr^   r.   r   )Úencoding)r`   r   ÚElementr¦   rŠ  Útostringri   )r$   rt  rb   Ú	root_nameÚpseudo_rootÚ	real_roots         r   r{  z(RestXMLSerializer._serialize_body_params[  s\   € Ø×'Ñ'¨Ñ/ˆ	Ü!×)Ñ)¨"Ó-ˆØ�‰˜˜v {°IÔ>Ü˜Ó% aÑ(ˆ	Ü×#Ñ# I¸×8MÑ8MÔNÐNr   c                 ób   — t        | d|j                  › �| j                  «      } |||||«       y rò   r«   )r$   rb   rt  Úxmlnoder^   r1   s         r   r¦   zRestXMLSerializer._serializeb  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 )Nr^   ÚxmlAttribute)	r   Ú
SubElementÚ_add_xml_namespacerw   rv   r`   ra   Úattribr¦   )r$   rÇ  rt  rb   r^   Ústructure_noder¯   rA   r°   Úmember_nameÚxml_attribute_names              r   r²   z+RestXMLSerializer._serialize_type_structurej  sº   € Ü$×/Ñ/°¸Ó>ˆà×Ñ  ~Ô6Ø Ÿ,™,›.ò 	N‰JˆC�Ø Ÿ=™=¨Ñ-ˆLØ&×4Ñ4×8Ñ8¸ÀÓEˆKð
 ˆ}áØ×)Ñ)×-Ñ-¨nÔ=à%1×%?Ñ%?ÀÑ%GÐ"Ø<A�×%Ñ%Ð&8Ñ9ØØ�O‰O˜L¨%°ÀÕMñ	Nr   c                 ó  — |j                   }|j                  j                  d«      r|}|}n2|j                  j                  dd«      }t        j                  ||«      }| j                  ||«       |D ]  }| j                  ||||«       Œ y )Nr‡   r^   r€   )r€   r`   ra   r   rÊ  rË  r¦   )	r$   rÇ  rt  rb   r^   r°   Úelement_nameÚ	list_noder2  s	            r   r¿   z&RestXMLSerializer._serialize_type_list  s†   € Ø—|‘|ˆØ×Ñ×"Ñ" ;Ô/ØˆLØ‰Ià'×5Ñ5×9Ñ9¸&À(ÓKˆLÜ#×.Ñ.¨w¸Ó=ˆIØ×Ñ  yÔ1Øò 	IˆDØ�O‰O˜L¨$°	¸<Õ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´   rA   )	r‰   r   rÊ  rË  rw   rd   r¯   rA   r¦   )r$   rÇ  rt  rb   r^   Únoder¯   rA   Úsub_noder�  Úval_names              r   rÊ   z%RestXMLSerializer._serialize_type_map‹  sí   € ð ×'Ñ'¨Ô.Ü×)Ñ)¨'°4Ó8ˆDØ×#Ñ# E¨4Ô0à Ÿ,™,›.ò 	D‰JˆC�ð ×+Ñ+¨EÔ2ô ×&Ñ& w°Ô5ä ×+Ñ+¨D°'Ó:ð ð
 ×0Ñ0°·±ÈÐ0ÓOˆHØ×0Ñ0Ø—‘¨'ð 1ó ˆHð �O‰O˜EŸI™I s¨H°hÔ?Ø�O‰O˜EŸK™K¨°¸(ÕCñ	Dr   c                 óp   — t        j                  ||«      }|rd}nd}||_        | j                  ||«       y rÕ   )r   rÊ  ÚtextrË  )r$   rÇ  rt  rb   r^   rÕ  Ú	str_values          r   r×   z)RestXMLSerializer._serialize_type_boolean¥  s:   € ô ×%Ñ% g¨tÓ4ˆÙØ‰IàˆIØˆŒ	Ø×Ñ  tÕ,r   c                 ó€   — t        j                  ||«      }| j                  |«      |_        | j	                  ||«       y rf   )r   rÊ  rn   rÙ  rË  ©r$   rÇ  rt  rb   r^   rÕ  s         r   rÎ   z&RestXMLSerializer._serialize_type_blob±  s6   € Ü×%Ñ% g¨tÓ4ˆØ×$Ñ$ VÓ,ˆŒ	Ø×Ñ  tÕ,r   c                 óÆ   — t        j                  ||«      }t        | j                  ||j                  j                  d«      «      «      |_        | j                  ||«       y rÐ   )r   rÊ  rg   r[   r`   ra   rÙ  rË  rÜ  s         r   rÓ   z+RestXMLSerializer._serialize_type_timestamp¶  sW   € Ü×%Ñ% g¨tÓ4ˆÜØ×*Ñ*Ø˜×+Ñ+×/Ñ/Ð0AÓBóó
ˆŒ	ð
 	×Ñ  tÕ,r   c                 ó’   — t        j                  ||«      }t        | j                  |«      «      |_        | j                  ||«       y rf   )r   rÊ  rg   r�   rÙ  rË  rÜ  s         r   rÚ   z'RestXMLSerializer._serialize_type_float¿  s;   € Ü×%Ñ% g¨tÓ4ˆÜ˜×*Ñ*¨6Ó2Ó3ˆŒ	Ø×Ñ  tÕ,r   c                 ó,   — | j                  ||||«       y rf   rÜ   )r$   rÇ  rt  rb   r^   s        r   rÝ   z(RestXMLSerializer._serialize_type_doubleÄ  s   € Ø×"Ñ" 7¨F°E¸4Õ@r   c                 ót   — t        j                  ||«      }t        |«      |_        | j	                  ||«       y rf   )r   rÊ  rg   rÙ  rË  rÜ  s         r   r­   z$RestXMLSerializer._default_serializeÇ  s/   € Ü×%Ñ% g¨tÓ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¡  r[  )r`   rN   r™   ra   rÌ  rg   )r$   rb   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ÑH�NØ8JØñ9�×%Ñ% nÒ5ô Ð.´Ô4Ø8J�×%Ñ% nÒ5ð 5ð 1r   N)r–   r—   r˜   rU   r{  r¦   r²   r¿   rÊ   r×   rÎ   rÓ   rÚ   rÝ   r­   rË  rs   r   r   r¾  r¾  X  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 rf   )r&  r  r%  )r$   r*   ru   r3   s       r   r{  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-cborr2   zsmithy-protocolz"application/vnd.amazon.eventstreamzapplication/cborr3   r   rŸ   ÚAccept)Úhas_event_stream_outputr•   r   )r$   r5   r+   Ú
header_valr¹  rº  s         r   r®  z&RpcV2CBORSerializer._serialize_headersæ  s�   € Ø3@ˆ
�9ÑÐ/Ñ0à×2Ò2Ø=‰Jà+ˆJØ×+Ñ+¨O¸ZÔHà˜fÑ%¨Ñ,ˆÜ% n°jÀÑ6KÓLÐà*4ˆ
�9Ñ˜hÑ'Ù¡HØ4>ˆJ�yÑ! .Ò1ð %-Ðr   )r–   r—   r˜   rU   r'   r{  r®  Ú__classcell__)rë  s   @r   rç  rç  Ú  s   ø„ Ø&ÐôIòö
?r   rç  )Úec2Úqueryrí   z	rest-jsonzrest-xmlzsmithy-rpc-v2-cbor)-ræ   rj   rF   rO   r  rí   rŽ   rp  rC  Ú	xml.etreer   Úbotocorer   Úbotocore.compatr   Úbotocore.exceptionsr   Úbotocore.useragentr   Úbotocore.utilsr   r	   r
   r   ÚDEFAULT_TIMESTAMP_FORMATr@   r?   Úcompilerx   r›   r<   rI   r!   r   r   r�   rá   rè   r  rY  r¬  rµ  r¾  rç  r   rs   r   r   ú<module>rü     sH  ðñó8 Û Û Û Û Û Û 	Û Ý !å Ý &Ý 4Ý 2÷ó ð %Ð Ø
€à'€Ø�—‘Ð1Ó2€à'Ð Ø"/Ð Ø%Ð àØ#ØðÐ ð Ø3ó÷:r@ñ r@ôjlE�jô lEô^P�Oô Pô<`E�Zô `EôFe<�Zô e<ôPQ˜ô Qôh(<˜*ô (<ôVIÐ+¨^ô Iô@KÐ*ô KôD?Ð-¨~ô ?ð< ØØØ#Ø!Ø-ñ�r   