https://t.me/RX1948
Server : nginx/1.24.0
System : Linux ip-172-31-33-48 6.14.0-1011-aws #11~24.04.1-Ubuntu SMP Fri Aug 1 02:07:25 UTC 2025 x86_64
User : www-data ( 33)
PHP Version : 8.3.6
Disable Function : NONE
Directory :  /lib/python3/dist-packages/botocore/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //lib/python3/dist-packages/botocore/__pycache__/model.cpython-312.pyc
�

P��e�w���dZddlmZddlmZmZddlmZddlm	Z	m
Z
ddlmZm
Z
mZe�ZGd�de�ZGd	�d
e�ZGd�de�ZGd
�de�ZGd�de�ZGd�d�ZGd�de�ZGd�de�ZGd�de�ZGd�de�ZGd�de�ZGd�de�ZGd�d e�ZGd!�d"�Z Gd#�d$�Z!Gd%�d&�Z"Gd'�d(�Z#Gd)�d*�Z$Gd+�d,�Z%y-).z-Abstractions to interact with service models.�)�defaultdict)�
NamedTuple�Union)�OrderedDict)�MissingServiceIdError�UndefinedModelAttributeError)�CachedProperty�hyphenize_service_id�instance_cachec��eZdZy)�NoShapeFoundErrorN��__name__�
__module__�__qualname__���0/usr/lib/python3/dist-packages/botocore/model.pyr
r
���rr
c��eZdZy)�InvalidShapeErrorNrrrrrrrrrc��eZdZy)�OperationNotFoundErrorNrrrrrr#rrrc��eZdZy)�InvalidShapeReferenceErrorNrrrrrr'rrrc��eZdZd�Zy)�	ServiceIdc��t|�S�N)r
��selfs r�	hyphenizezServiceId.hyphenize,s
��#�D�)�)rN)rrrr"rrrrr+s��*rrc�x�eZdZdZgd�Zgd�ZeZdd�Ze	d��Z
e	d��Ze	d��Zd	�Z
d
�Zed��Zy)
�Shapez3Object representing a shape from the service model.)�locationName�	queryName�	flattened�location�payload�	streaming�timestampFormat�xmlNamespace�
resultWrapper�xmlAttribute�eventstream�event�eventheader�eventpayload�	jsonvaluer+�	hostLabel)�required�min�max�pattern�	sensitive�enum�idempotencyToken�error�	exception�endpointdiscoveryid�	retryable�document�union�contextParam�clientContextParams�requiresLengthNc��||_|d|_|jdd�|_||_|�
t�}||_i|_y)a


        :type shape_name: string
        :param shape_name: The name of the shape.

        :type shape_model: dict
        :param shape_model: The shape model.  This would be the value
            associated with the key in the "shapes" dict of the
            service model (i.e ``model['shapes'][shape_name]``)

        :type shape_resolver: botocore.model.ShapeResolver
        :param shape_resolver: A shape resolver object.  This is used to
            resolve references to other shapes.  For scalar shape types
            (string, integer, boolean, etc.), this argument is not
            required.  If a shape_resolver is not provided for a complex
            type, then a ``ValueError`` will be raised when an attempt
            to resolve a shape is made.

        �type�
documentation�N)�name�	type_name�getrG�_shape_model�UnresolvableShapeMap�_shape_resolver�_cache)r!�
shape_name�shape_model�shape_resolvers    r�__init__zShape.__init__^sQ��(��	�$�V�,���(�_�_�_�b�A���'����!�2�3�N�-�����rc��|j}i}|jD]}||jvs�||||<�d|vr|jd�|d<|S)aSerialization information about the shape.

        This contains information that may be needed for input serialization
        or response parsing.  This can include:

            * name
            * queryName
            * flattened
            * location
            * payload
            * streaming
            * xmlNamespace
            * resultWrapper
            * xmlAttribute
            * jsonvalue
            * timestampFormat

        :rtype: dict
        :return: Serialization information about the shape.

        r%rI)rL�SERIALIZED_ATTRS�pop)r!�model�
serialization�attrs    rrXzShape.serialization�sj��.�!�!���
��)�)�	2�D��t�(�(�(�&+�D�k�
�d�#�	2��]�*�$1�$5�$5�n�$E�M�&�!��rc�r�|j}i}|jD]}||jvs�||||<�|S)a�Metadata about the shape.

        This requires optional information about the shape, including:

            * min
            * max
            * pattern
            * enum
            * sensitive
            * required
            * idempotencyToken
            * document
            * union
            * contextParam
            * clientContextParams
            * requiresLength

        :rtype: dict
        :return: Metadata about the shape.

        )rL�METADATA_ATTRS)r!rW�metadatarYs    rr\zShape.metadata�sK��.�!�!�����'�'�	-�D��t�(�(�(�!&�t�����	-��rc�:�|jjdg�S)z�A list of members that are required.

        A structure shape can define members that are required.
        This value will return a list of required members.  If there
        are no required members an empty list is returned.

        r5�r\rKr s r�required_memberszShape.required_members�s���}�}� � ��R�0�0rc�8�|jj|�Sr�rN�resolve_shape_ref�r!�	shape_refs  r�_resolve_shape_refzShape._resolve_shape_ref�����#�#�5�5�i�@�@rc�P�d|jj�d|j�d�S)N�<�(z)>��	__class__rrIr s r�__repr__zShape.__repr__�s&���4�>�>�*�*�+�1�T�Y�Y�K�r�:�:rc��yrrr s r�event_stream_namezShape.event_stream_name�s��rr)rrr�__doc__rUr[r�MAP_TYPErSr	rXr\r_rerl�propertyrnrrrr$r$0s}��=���&�N�$�H� �D����@����:�1��1�A�;����rr$c�\�eZdZed��Zed��Zed��Zed��Zed��Zy)�StructureShapec���|jjd|j��}|j�}|j�D]\}}|j	|�||<�|S)N�members)rLrKrp�itemsre)r!ru�
shape_membersrIrds     rruzStructureShape.members�sc���#�#�'�'�	�4�=�=�?�C���
�
��
�&�}�}��	E�O�D�)�"&�"9�"9�)�"D�M�$��	E��rc��|jj�D]$\}}|jjd�s�"|cSy)Nr/)rurvrXrK)r!�member_name�members   rrnz StructureShape.event_stream_name�sB��#'�<�<�#5�#5�#7�	#��K���#�#�'�'�
�6�"�"�	#�rc��|jjdd�sy|jjdi�}|jd�}|r|S|jS)Nr=Fr<�code)r\rKrI)r!�error_metadatar|s   r�
error_codezStructureShape.error_code�sQ���}�}� � ��e�4�����*�*�7�B�7���!�!�&�)����K��y�y�rc�:�|jjdd�S)Nr@Fr^r s r�is_document_typezStructureShape.is_document_type�s���}�}� � ��U�3�3rc�:�|jjdd�S)NrAFr^r s r�is_tagged_unionzStructureShape.is_tagged_union�s���}�}� � ��%�0�0rN)	rrrr	rurnr~r�r�rrrrsrs�sd���������������4��4��1��1rrsc��eZdZed��Zy)�	ListShapec�>�|j|jd�S)Nrz�rerLr s rrzzListShape.members���&�&�t�'8�'8��'B�C�CrN)rrrr	rzrrrr�r��s���D��Drr�c�,�eZdZed��Zed��Zy)�MapShapec�>�|j|jd�S)N�keyr�r s rr�zMapShape.keys���&�&�t�'8�'8��'?�@�@rc�>�|j|jd�S)N�valuer�r s rr�zMapShape.value
s���&�&�t�'8�'8��'A�B�BrN)rrrr	r�r�rrrr�r�s,���A��A��C��Crr�c��eZdZed��Zy)�StringShapec�:�|jjdg�S)Nr:r^r s rr:zStringShape.enums���}�}� � ���,�,rN)rrrr	r:rrrr�r�s���-��-rr�c�,�eZdZUeed<eeefed<y)�StaticContextParameterrIr�N)rrr�str�__annotations__r�boolrrrr�r�s��

�I���s���rr�c�"�eZdZUeed<eed<y)�ContextParameterrIryN�rrrr�r�rrrr�r�s
��

�I��rr�c�,�eZdZUeed<eed<eed<y)�ClientContextParameterrIrFrGNr�rrrr�r�s��

�I�

�I��rr�c�\�eZdZdZdd�Zdd�Zd�Zed��Zd�Z	ed��Z
ed	��Zed
��Z
ed��Zed��Zed
��Zed��Zed��Zed��Zed��Zed��Zed��Zed��Zed��Zd�Zed��Zej8d��Zd�Zy)�ServiceModelzQ

    :ivar service_description: The parsed service description dictionary.

    Nc��||_|jdi�|_t|jdi��|_t
|_||_i|_y)a�

        :type service_description: dict
        :param service_description: The service description model.  This value
            is obtained from a botocore.loader.Loader, or from directly loading
            the file yourself::

                service_description = json.load(
                    open('/path/to/service-description-model.json'))
                model = ServiceModel(service_description)

        :type service_name: str
        :param service_name: The name of the service.  Normally this is
            the endpoint prefix defined in the service_description.  However,
            you can override this value to provide a more convenient name.
            This is done in a few places in botocore (ses instead of email,
            emr instead of elasticmapreduce).  If this value is not provided,
            it will default to the endpointPrefix defined in the model.

        r\�shapesN)	�_service_descriptionrKr\�
ShapeResolverrN�NOT_SET�_signature_version�
_service_name�_instance_cache)r!�service_description�service_names   rrSzServiceModel.__init__,sW��*%8��!�+�/�/�
�B�?��
�,��#�#�H�b�1� 
���#*���)���!��rc�:�|jj||�Sr)rN�get_shape_by_name�r!rP�
member_traitss   r�	shape_forzServiceModel.shape_forKs ���#�#�5�5��
�
�	
rc�:�|jj|d�Sr)�_error_code_cacherK)r!r~s  r�shape_for_error_codez!ServiceModel.shape_for_error_codePs���%�%�)�)�*�d�;�;rc�N�i}|jD]}|j}|||<�|Sr)�error_shapesr~)r!�error_code_cache�error_shaper|s    rr�zServiceModel._error_code_cacheSs;�����,�,�	1�K��)�)�D�%0��T�"�	1� �rc�8�|jj|�Srrarcs  rrbzServiceModel.resolve_shape_ref[rfrc�L�t|jjdi��S)Nr���listr�rKr s r�shape_nameszServiceModel.shape_names^s ���D�-�-�1�1�(�B�?�@�@rc��g}|jD]A}|j|�}|jjdd�s�1|j	|��C|S)Nr=F)r�r�r\rK�append)r!r�rPr�s    rr�zServiceModel.error_shapesbsV�����*�*�	1�J��.�.��4�K��#�#�'�'��U�;��#�#�K�0�	1��rc�r�	|jd|}t|||�S#t$rt|��wxYw�N�
operations)r��KeyErrorr�OperationModel)r!�operation_namerWs   r�operation_modelzServiceModel.operation_modelksI��	9��-�-�l�;�N�K�E��e�T�>�:�:���	9�(��8�8�	9�s�!�6c�:�|jjdd�S�NrGrH)r�rKr s rrGzServiceModel.documentationss���(�(�,�,�_�b�A�Arc�L�t|jjdg��Sr�r�r s r�operation_nameszServiceModel.operation_namesws ���D�-�-�1�1�,��C�D�Drc�J�|j�|jS|jS)a�The name of the service.

        This defaults to the endpointPrefix defined in the service model.
        However, this value can be overriden when a ``ServiceModel`` is
        created.  If a service_name was not provided when the ``ServiceModel``
        was created and if there is no endpointPrefix defined in the
        service model, then an ``UndefinedModelAttributeError`` exception
        will be raised.

        )r��endpoint_prefixr s rr�zServiceModel.service_name{s(�����)��%�%�%��'�'�'rc�~�	t|jd��S#t$rt|j���wxYw)N�	serviceId)r�)r�_get_metadata_propertyrrr�r s r�
service_idzServiceModel.service_id�s@��	I��T�8�8��E�F�F��+�	I�'�T�5G�5G�H�H�	I�s�� <c�X�|jjd�}|�|j}|S)z�The name to use when computing signatures.

        If the model does not define a signing name, this
        value will be the endpoint prefix defined in the model.
        �signingName)r\rKr�)r!�signing_names  rr�zServiceModel.signing_name�s/���}�}�(�(��7�����/�/�L��rc�$�|jd�S)N�
apiVersion�r�r s r�api_versionzServiceModel.api_version�s���*�*�<�8�8rc�$�|jd�S)N�protocolr�r s rr�zServiceModel.protocol�s���*�*�:�6�6rc�$�|jd�S)N�endpointPrefixr�r s rr�zServiceModel.endpoint_prefix�s���*�*�+;�<�<rc�h�|jD]#}|j|�}|js�!|cSyr)r�r��is_endpoint_discovery_operation�r!�	operationrWs   r�endpoint_discovery_operationz)ServiceModel.endpoint_discovery_operation�s5���-�-�	�I��(�(��3�E��4�4���	rc��|jD]=}|j|�}|j��!|jjd�s�=yy)Nr5TF)r�r��endpoint_discoveryrKr�s   r�endpoint_discovery_requiredz(ServiceModel.endpoint_discovery_required�sO���-�-�	�I��(�(��3�E��(�(�4��,�,�0�0��<��
	�rc
��|jjdi�}|j�D��cgc]\}}t||d|d����c}}Scc}}w)NrCrFrG)rIrFrG)r�rKrvr�)r!�params�
param_name�	param_vals    r�client_context_parametersz&ServiceModel.client_context_parameters�sa���*�*�.�.�/D�b�I��*0����

�&�
�I�
#���v�&�'��8�
�
�	
��
s�Ac�^�	|j|S#t$rtd|�d|����wxYw)N�"z," not defined in the metadata of the model: )r\r�r�r!rIs  rr�z#ServiceModel._get_metadata_property�sC��	��=�=��&�&���	�.��D�6�E�d�V�L��
�	�s��,c��|jtur"|jjd�}||_|jS)N�signatureVersion)r�r�r\rK)r!�signature_versions  rr�zServiceModel.signature_version�s:���"�"�g�-� $�
�
� 1� 1�2D� E��&7�D�#��&�&�&rc��||_yr)r�)r!r�s  rr�zServiceModel.signature_version�s
��"'��rc�N�|jj�d|j�d�S)Nri�))rkrr�r s rrlzServiceModel.__repr__�s'���.�.�)�)�*�!�D�,=�,=�+>�a�@�@rr)rrrrorSr�r�r	r�rbr�r�rr�rGr�r�r�r�r�r�r�r�r�r�r�rqr��setterrlrrrr�r�%s����"�>
�
<�� �� �A��A��A������;��;��B��B��E��E��(��(� �I��I��	��	��9��9��7��7��=��=����������	
��	
���'��'����(��(�Arr�c��eZdZd d�Zed��Zed��Zed��Zed��Z	ed��Z
ed��Zed	��Zed
��Z
ed��Zed��Zed
��Zed��Zed��Zed��Zed��Zed��Zed��Zed��Zed��Zed��Zd�Zd�Zd�Zed��Zed��Zd�Zd�Z d�Z!d�Z"y)!r�Nc��||_||_||_|jd�|_|j
|_|jdi�|_y)a�

        :type operation_model: dict
        :param operation_model: The operation model.  This comes from the
            service model, and is the value associated with the operation
            name in the service model (i.e ``model['operations'][op_name]``).

        :type service_model: botocore.model.ServiceModel
        :param service_model: The service model associated with the operation.

        :type name: string
        :param name: The operation name.  This is the operation name exposed to
            the users of this model.  This can potentially be different from
            the "wire_name", which is the operation name that *must* by
            provided over the wire.  For example, given::

               "CreateCloudFrontOriginAccessIdentity":{
                 "name":"CreateCloudFrontOriginAccessIdentity2014_11_06",
                  ...
              }

           The ``name`` would be ``CreateCloudFrontOriginAccessIdentity``,
           but the ``self.wire_name`` would be
           ``CreateCloudFrontOriginAccessIdentity2014_11_06``, which is the
           value we must send in the corresponding HTTP request.

        rI�httpN)�_operation_model�_service_model�	_api_namerK�
_wire_namer\r�)r!r��
service_modelrIs    rrSzOperationModel.__init__�sP��8!0���+������*�-�-�f�5���%�.�.��
�#�'�'���3��	rc�J�|j�|jS|jSr)r��	wire_namer s rrIzOperationModel.name	s ���>�>�%��>�>�!��>�>�!rc�8�|jjd�S)aRThe wire name of the operation.

        In many situations this is the same value as the
        ``name``, value, but in some services, the operation name
        exposed to the user is different from the operation name
        we send across the wire (e.g cloudfront).

        Any serialization code should use ``wire_name``.

        rI�r�rKr s rr�zOperationModel.wire_names���$�$�(�(��0�0rc��|jSr)r�r s rr�zOperationModel.service_models���"�"�"rc�:�|jjdd�Sr�r�r s rrGzOperationModel.documentation"s���$�$�(�(��"�=�=rc�:�|jjdd�S)N�
deprecatedFr�r s rr�zOperationModel.deprecated&s���$�$�(�(��u�=�=rc�:�|jjdd�S)N�endpointdiscoveryr�r s rr�z!OperationModel.endpoint_discovery*s���$�$�(�(�)<�d�C�Crc�:�|jjdd�S)N�endpointoperationFr�r s rr�z.OperationModel.is_endpoint_discovery_operation0s���$�$�(�(�)<�e�D�Drc�p�d|jvry|jj|jd�S)N�input�r�r�rbr s r�input_shapezOperationModel.input_shape4s<���$�/�/�/���"�"�4�4��!�!�'�*�
�	
rc�p�d|jvry|jj|jd�S)N�outputrr s r�output_shapezOperationModel.output_shape>s<���4�0�0�0���"�"�4�4��!�!�(�+�
�	
rc���|j}|sgS|jj�D��cgc]$\}}d|jvr|jdr|��&c}}Scc}}w)Nr;)rrurvr\)r!rrI�shapes    r�idempotent_membersz!OperationModel.idempotent_membersIsc���&�&����I�"-�!4�!4�!:�!:�!<�
���u�!�U�^�^�3����1�2�
�
�	
��
s�)Ac
��|jjdi�}|j�D��cgc]!\}}t||jd�����#c}}Scc}}w)N�staticContextParamsr�)rIr�)r�rKrvr�)r!r�rI�propss    r�static_context_parametersz(OperationModel.static_context_parametersVsW���&�&�*�*�+@�"�E�� &�|�|�~�
���e�
#��E�I�I�g�4F�G�
�	
��
s�&Ac��|jsgS|jjj�D��cgc]A\}}d|jvr.d|jdvrt	|jdd|����Cc}}Scc}}w)NrBrI)rIry)rrurvr\r�)r!rIrs   r�context_parametersz!OperationModel.context_parameters^s�������I� $�/�/�7�7�=�=�?�
�
��e�����/��%�.�.��8�8�

��^�^�N�3�F�;� �
�
�	
��
s�ABc�8�|jjd�S)N�requestcompressionr�r s r�request_compressionz"OperationModel.request_compressionms���$�$�(�(�)=�>�>rc�8�|jjd�S)N�authtyper�r s r�	auth_typezOperationModel.auth_typeq����$�$�(�(��4�4rc�d���jjdg�}t�fd�|D��S)N�errorsc3�T�K�|]}�jj|����!y�wr)r�rb)�.0�sr!s  �r�	<genexpr>z.OperationModel.error_shapes.<locals>.<genexpr>xs"�����M��D�'�'�9�9�!�<�M�s�%()r�rKr�)r!r�s` rr�zOperationModel.error_shapesus,����&�&�*�*�8�R�8���M�f�M�M�Mrc�8�|jjd�S)N�endpointr�r s rrzOperationModel.endpointzrrc�:�|jjdd�S)N�httpChecksumRequiredFr�r s r�http_checksum_requiredz%OperationModel.http_checksum_required~s���$�$�(�(�)?��G�Grc�:�|jjdi�S)N�httpChecksumr�r s r�
http_checksumzOperationModel.http_checksum�s���$�$�(�(���<�<rc�&�|j�duSr)�get_event_stream_inputr s r�has_event_stream_inputz%OperationModel.has_event_stream_input�s���*�*�,�D�8�8rc�&�|j�duSr)�get_event_stream_outputr s r�has_event_stream_outputz&OperationModel.has_event_stream_output�s���+�+�-�T�9�9rc�8�|j|j�Sr)�_get_event_streamrr s rr&z%OperationModel.get_event_stream_input�s���%�%�d�&6�&6�7�7rc�8�|j|j�Sr)r,rr s rr)z&OperationModel.get_event_stream_output�s���%�%�d�&7�&7�8�8rc�D�|�y|j}|r|j|Sy)zAReturns the event stream member's shape if any or None otherwise.N)rnru)r!r�
event_names   rr,z OperationModel._get_event_stream�s*���=���,�,�
���=�=��,�,�rc�&�|j�duSr)�get_streaming_inputr s r�has_streaming_inputz"OperationModel.has_streaming_input�s���'�'�)��5�5rc�&�|j�duSr)�get_streaming_outputr s r�has_streaming_outputz#OperationModel.has_streaming_output�s���(�(�*�$�6�6rc�8�|j|j�Sr)�_get_streaming_bodyrr s rr1z"OperationModel.get_streaming_input�s���'�'��(8�(8�9�9rc�8�|j|j�Sr)r7rr s rr4z#OperationModel.get_streaming_output�s���'�'��(9�(9�:�:rc��|�y|jjd�}|� |j|}|jdk(r|Sy)z?Returns the streaming member's shape if any; or None otherwise.Nr)�blob)rXrKrurJ)r!rr)�
payload_shapes    rr7z"OperationModel._get_streaming_body�sK���=���%�%�)�)�)�4����!�M�M�'�2�M��&�&�&�0�$�$�rc�N�|jj�d|j�d�S)Nz(name=r�rjr s rrlzOperationModel.__repr__�s$���.�.�)�)�*�&�����1�=�=rr)#rrrrSr	rIrqr�r�rGr�r�r�rrr	r
rrrr�rr!r$r'r*r&r)r,r2r5r1r4r7rlrrrr�r��s���#4�J�"��"��1��1��#��#��>��>��>��>��D��D�
�E��E��
��
��
��
��

��

��
��
��
��
��?��?��5��5��N��N��5��5��H��H��=��=��9��9��:��:�8�9���6��6��7��7�:�;�	�>rr�c�2�eZdZdZeeeed�Zd�Z	dd�Z
d�Zy)r�zResolves shape references.)�	structurer��map�stringc� �||_i|_yr)�
_shape_map�_shape_cache)r!�	shape_maps  rrSzShapeResolver.__init__�s��#�����rNc�.�	|j|}	|jj	|dt
�}|r!|j�}|j|�||||�}|S#t$rt|��wxYw#t$rt
d|����wxYw)NrFz&Shape is missing required key 'type': )	rBr�r
�
SHAPE_CLASSESrKr$r�copy�update)r!rPr�rQ�	shape_cls�results      rr�zShapeResolver.get_shape_by_name�s���	0��/�/�*�5�K�	��*�*�.�.�{�6�/B�E�J�I�
�%�*�*�,�K����}�-��:�{�D�9���
���	0�#�J�/�/�	0���	�#�8��
�F��
�	�s�A$�#A<�$A9�<Bc���t|�dk(rd|vr|j|d�S|j�}	|jd�}|j||�S#t$rtd|����wxYw)N�rz(Invalid model, missing shape reference: )�lenr�rGrVr�r)r!rdr�rPs    rrbzShapeResolver.resolve_shape_ref�s����y�>�Q��7�i�#7��)�)�)�G�*<�=�=�%�N�N�,�M�
�*�.�.�w�7�
�
�)�)�*�m�D�D��	�
�0�>�y�k�J���
�s�A�A3r)rrrrorsr�r�r�rFrSr�rbrrrr�r��s*��$�$����	�M���"Err�c��eZdZdZdd�Zd�Zy)rMzEA ShapeResolver that will throw ValueErrors when shapes are resolved.Nc� �td|�d���)NzAttempted to lookup shape '�!', but no shape map was provided.��
ValueErrorr�s   rr�z&UnresolvableShapeMap.get_shape_by_name�s���)�*��5V�W�
�	
rc� �td|�d���)NzAttempted to resolve shape 'rPrQrcs  rrbz&UnresolvableShapeMap.resolve_shape_ref�s ���*�9�+�6 �
!�
�	
rr)rrrror�rbrrrrMrM�s��O�
�

rrMc�R�eZdZdZdZdd�Zd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zy)�DenormalizedStructureBuildera�Build a StructureShape from a denormalized model.

    This is a convenience builder class that makes it easy to construct
    ``StructureShape``s based on a denormalized model.

    It will handle the details of creating unique shape names and creating
    the appropriate shape map needed by the ``StructureShape`` class.

    Example usage::

        builder = DenormalizedStructureBuilder()
        shape = builder.with_members({
            'A': {
                'type': 'structure',
                'members': {
                    'B': {
                        'type': 'structure',
                        'members': {
                            'C': {
                                'type': 'string',
                            }
                        }
                    }
                }
            }
        }).build_model()
        # ``shape`` is now an instance of botocore.model.StructureShape

    :type dict_type: class
    :param dict_type: The dictionary type to use, allowing you to opt-in
                      to using OrderedDict or another dict type. This can
                      be particularly useful for testing when order
                      matters, such as for documentation.

    )	r@�integer�booleanr:�float�	timestamp�long�double�charNc��t�|_t�|_|�!|jj	d�|_yy)Nr>)rru�ShapeNameGenerator�_name_generator�new_shape_namerIr�s  rrSz%DenormalizedStructureBuilder.__init__0s8��"�}���1�3����<��,�,�;�;�K�H�D�I�rc��||_|S)zp

        :type members: dict
        :param members: The denormalized members.

        :return: self

        )�_members)r!rus  r�with_membersz)DenormalizedStructureBuilder.with_members6s�� ��
��rc���t�}d|jd�}|j|||j�t	|��}t|j||j|��S)z�Build the model based on the provided members.

        :rtype: botocore.model.StructureShape
        :return: The built StructureShape object.

        r>)rFru)rD)rPrQrR)rrb�_build_modelrIr�rs)r!r��denormalized�resolvers    r�build_modelz(DenormalizedStructureBuilder.build_modelBsa�������}�}�
��	
���,���	�	�:� �6�2����y�y��t�y�y�)�#�
�	
rc�$�|ddk(r|j||�||<y|ddk(r|j||�||<y|ddk(r|j||�||<y|d|jvr|j	|�||<ytd|d����)NrFr>r�r?zUnknown shape type: )�_build_structure�_build_list�
_build_map�SCALAR_TYPES�
_build_scalarr)r!rWr�rPs    rrez)DenormalizedStructureBuilder._build_modelVs�����=�K�'�!%�!6�!6�u�f�!E�F�:��
�6�]�f�
$�!%�!1�!1�%��!@�F�:��
�6�]�e�
#�!%�����!?�F�:��
�6�]�d�/�/�
/�!%�!3�!3�E�!:�F�:��#�&:�5��=�/�$J�K�Krc��t�}|j|�}||d<|jdt��j�D]0\}}|j	|�}d|i||<|j|||��2|S)Nrur)r�_build_initial_shaperKrv�_get_shape_namere)r!rWr�rurrI�member_model�member_shape_names        rrjz-DenormalizedStructureBuilder._build_structurebs����-���)�)�%�0��"��i��"'�)�)�I�{�}�"E�"K�"K�"M�	G��D�,� $� 4� 4�\� B��$�&7�8�G�D�M����l�F�4E�F�	G��rc��|j|�}|j|�}d|i|d<|j|d||�|S)Nrrz�rqrpre)r!rWr�rsrs     rrkz(DenormalizedStructureBuilder._build_listmsN�� �0�0��7���)�)�%�0��"�$5�6��h�����%��/�6�3D�E��rc���|j|d�}|j|d�}|j|�}d|i|d<d|i|d<|j|d||�|j|d||�|S)Nr�r�rru)r!rWr��key_shape_name�value_shape_namers      rrlz'DenormalizedStructureBuilder._build_mapts����-�-�e�E�l�;���/�/��g��?���)�)�%�0����0��e��!�#3�4��g�����%��,���?����%��.�&�2B�C��rc�p�d|di}d|vr|d|d<tjD]}||vs�||||<�|S)NrFrG)r$r[)r!rWrrYs    rrpz1DenormalizedStructureBuilder._build_initial_shape~s[���E�&�M�
���e�#�%*�?�%;�E�/�"��(�(�	*�D��u�}�#�D�k��d��	*��rc�$�|j|�Sr)rp�r!rWs  rrnz*DenormalizedStructureBuilder._build_scalar�s���(�(��/�/rc�P�d|vr|dS|jj|d�S)NrPrF)r_r`r{s  rrqz,DenormalizedStructureBuilder._get_shape_name�s0���5� ���&�&��'�'�6�6�u�V�}�E�Err)rrrrormrSrcrhrerjrkrlrprnrqrrrrUrU�sD��"�H
�L�I�
�
�(
L�	���	�0�FrrUc��eZdZdZd�Zd�Zy)r^z�Generate unique shape names for a type.

    This class can be used in conjunction with the DenormalizedStructureBuilder
    to generate unique shape names for a given type.

    c�,�tt�|_yr)r�int�_name_cacher s rrSzShapeNameGenerator.__init__�s��&�s�+��rc�x�|j|xxdz
cc<|j|}|j��d|��S)a�Generate a unique shape name.

        This method will guarantee a unique shape name each time it is
        called with the same type.

        ::

            >>> s = ShapeNameGenerator()
            >>> s.new_shape_name('structure')
            'StructureType1'
            >>> s.new_shape_name('structure')
            'StructureType2'
            >>> s.new_shape_name('list')
            'ListType1'
            >>> s.new_shape_name('list')
            'ListType2'


        :type type_name: string
        :param type_name: The type name (structure, list, map, string, etc.)

        :rtype: string
        :return: A unique shape name for the given type

        rL�Type)r��
capitalize)r!rJ�
current_indexs   rr`z!ShapeNameGenerator.new_shape_name�sE��4	
����#�q�(�#��(�(��3�
��&�&�(�)��m�_�=�=rN)rrrrorSr`rrrr^r^�s���,�>rr^N)&ro�collectionsr�typingrr�botocore.compatr�botocore.exceptionsrr�botocore.utilsr	r
r�objectr��	Exceptionr
rrrr�rr$rsr�r�r�r�r�r�r�r�r�rMrUr^rrr�<module>r�s��4�#�$�'��P�O�
�(��	�	�	�	�	�	�	�Y�	�	��	�*��*�
b�b�J'1�U�'1�TD��D�C�u�C�-�%�-��Z��
�z��
�Z��{A�{A�|T>�T>�n3E�3E�l
�
�QF�QF�h'>�'>r

https://t.me/RX1948 - 2025