o
    .&ßaü  ã                   @   s    d dl mZ G dd„ deƒZdS )é    )Úis_json_value_headerc                   @   sB   e Zd ZdZ	ddd„Z		ddd„Zdd	„ Zd
d„ Zdd„ ZdS )ÚShapeDocumenterÚ Nc                 C   s2   || _ || _|| _|| _|d u rdi i| _d S d S )NÚspecial_shape_types)Ú_service_nameÚ_operation_nameÚ_event_emitterÚ_context)ÚselfÚservice_nameÚoperation_nameÚevent_emitterÚcontext© r   ú5/usr/lib/python3/dist-packages/botocore/docs/shape.pyÚ__init__   s   
ÿÿzShapeDocumenter.__init__Fc              
   C   sî   |j }t|di ƒ d¡rd}|j|v r| j|||d� dS | |j¡ t|ƒdk}	t|dƒr3|jr3d}t| d| | j	ƒ|||||||	|d	� |	rY| j
jd
| j| j| j|f |d� t|ƒdk}
|
rq| j
jd| j| j| jf |d� | ¡  dS )aÿ  Traverses and documents a shape

        Will take a self class and call its appropriate methods as a shape
        is traversed.

        :param section: The section to document.

        :param history: A list of the names of the shapes that have been
            traversed.

        :type include: Dictionary where keys are parameter names and
            values are the shapes of the parameter names.
        :param include: The parameter shapes to include in the documentation.

        :type exclude: List of the names of the parameters to exclude.
        :param exclude: The names of the parameters to exclude from
            documentation.

        :param name: The name of the shape.

        :param is_required: If the shape is a required member.
        ÚserializationÚeventstreamÚevent_stream)Únameé   Úis_document_typeÚdocumentzdocument_shape_type_%s)Úhistoryr   ÚincludeÚexcludeÚis_top_level_paramÚis_requiredzdocs.%s.%s.%s.%s)Úsectioné   zdocs.%s.%s.%s.complete-sectionN)Ú	type_nameÚgetattrÚgetr   Údocument_recursive_shapeÚappendÚlenÚhasattrr   Údocument_shape_defaultr   ÚemitÚ
EVENT_NAMEr   r   Úpop)r
   r   Úshaper   r   r   r   r   Ú
param_typer   Úat_overlying_method_sectionr   r   r   Útraverse_and_document_shape$   sH   

ÿûýûþüz+ShapeDocumenter.traverse_and_document_shapec                 C   s   ddddddœ}|   ||¡S )Nz({...}|[...]|123|123.4|'string'|True|Nonezb'bytes'|filezStreamingBody()zEventStream()©Údocument_typeÚjsonvalue_headerÚstreaming_input_shapeÚstreaming_output_shapeÚeventstream_output_shape©Ú_get_value_for_special_type)r
   r+   Úspecial_defaultsr   r   r   Ú_get_special_py_default]   ó   ûz'ShapeDocumenter._get_special_py_defaultc                 C   s   ddddddœ}|   ||¡S )Nz:ref:`document<document>`zJSON serializablez"bytes or seekable file-like objectz:class:`.StreamingBody`z:class:`.EventStream`r/   r5   )r
   r+   Úspecial_type_namesr   r   r   Ú_get_special_py_type_nameg   r9   z)ShapeDocumenter._get_special_py_type_namec                 C   s`   t |ƒr|d S t|dƒr|jr|d S | jd  ¡ D ]\}}||v r-||kr-||   S qd S )Nr1   r   r0   r   )r   r&   r   r	   Úitems)r
   r+   Úspecial_type_mapÚspecial_typeÚmarked_shaper   r   r   r6   q   s   ÿ
ÿ€z+ShapeDocumenter._get_value_for_special_type)N)NNNF)	Ú__name__Ú
__module__Ú__qualname__r)   r   r.   r8   r;   r6   r   r   r   r   r      s    
ÿ
þ9

r   N)Úbotocore.utilsr   Úobjectr   r   r   r   r   Ú<module>   s   