o
    :_Wc3                     @   s|   d dl mZ d dlmZ d dlmZmZmZ d dlm	Z	 d dl
mZ d dlmZmZ dd ZG d	d
 d
ZG dd dZdS )    )OrderedDict)ResponseExampleDocumenter)document_custom_methoddocument_model_driven_methodget_instance_public_methods)ResponseParamsDocumenter)document_shared_examples)DocumentedShapeget_official_service_namec                 K   s   | dkrd S |dv S )NZgenerate_presigned_url)Zs3 )method_nameservice_namekwargsr   r   6D:\Flask\env\Lib\site-packages\botocore/docs/client.py!_allowlist_generate_presigned_url   s   r   c                   @   s   e Zd ZegZd 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dd Zdd Zdd Zdd Zdd ZdS )!ClientDocumenterNc                 C   s.   || _ || _| jd u ri | _| j jjj| _d S N)_client_shared_examplesmetaservice_modelr   _service_name)selfclientshared_examplesr   r   r   __init__$   s
   
zClientDocumenter.__init__c                 C   s8   |  | | | |  }| || | || dS )z]Documents a client and its methods

        :param section: The section to write to.
        N)
_add_title_add_class_signature_get_client_methods_add_client_intro_add_client_methods)r   sectionclient_methodsr   r   r   document_client+   s
   

z ClientDocumenter.document_clientc                 C   s   t | j}| |S r   )r   r   _filter_client_methods)r   r"   r   r   r   r   6   s   

z$ClientDocumenter._get_client_methodsc                 C   s8   i }|  D ]\}}| j||| jd}|r|||< q|S )N)methodr   r   )items_filter_client_methodr   )r   r"   Zfiltered_methodsr   r%   includer   r   r   r$   :   s   z'ClientDocumenter._filter_client_methodsc                 K   s.   | j D ]}|di |}|d ur|  S qdS )NTr   )_CLIENT_METHODS_FILTERS)r   r   filterZfilter_includer   r   r   r'   F   s   
z&ClientDocumenter._filter_client_methodc                 C      |j d d S )NZClientstyleh2r   r!   r   r   r   r   P      zClientDocumenter._add_titlec                 C   s   | d}t| jjj}|d|  |j  || jjjj	 | 
| |j  |d |j  | jjj}t|D ]}|jd| d| d q?d S )NZintroz A low-level client representing z These are the available methods:z:py:meth:`~z.Client.`)add_new_sectionr
   r   r   r   writer-   new_lineinclude_doc_stringdocumentation_add_client_creation_example	__class____name__sortedli)r   r!   r"   Zofficial_service_name
class_namer   r   r   r   r   S   s&   







z"ClientDocumenter._add_client_introc                 C   s   |j j| jjj dd d S )Nz.Clientr<   )r-   start_sphinx_py_classr   r8   r9   r/   r   r   r   r   l   s   
z%ClientDocumenter._add_class_signaturec                 C   s6   |j   |j   |dj| jd |j   d S )Nz+client = session.create_client('{service}'))Zservice)r-   start_codeblockr4   r3   formatr   end_codeblockr/   r   r   r   r7   q   s   

z-ClientDocumenter._add_client_creation_examplec                 C   s.   | d}t|D ]}| ||||  q	d S )Nmethods)r2   r:   _add_client_method)r   r!   r"   r   r   r   r   r    {   s   

z$ClientDocumenter._add_client_methodsc                 C   s6   | |}| |r| ||| d S | || d S r   )r2   _is_custom_method_add_custom_method_add_model_driven_methodr   r!   r   r%   r   r   r   rC      s   

z#ClientDocumenter._add_client_methodc                 C   s   || j jjvS r   )r   r   method_to_api_mapping)r   r   r   r   r   rD      s   z"ClientDocumenter._is_custom_methodc                 C   s   t ||| d S r   )r   rG   r   r   r   rE      r0   z#ClientDocumenter._add_custom_methodc                 C   sd   | d}|j  |jd |j  | jjj}|jD ]}| d|j }|j	d|  qd S )N
exceptionsZ
Exceptions.Client.exceptions.:py:class:`%s`)
r2   r-   r4   boldr   r8   r9   error_shapesnamer;   )r   r!   operation_modelZerror_sectionZclient_nameerrorr<   r   r   r   _add_method_exceptions_list   s   




z,ClientDocumenter._add_method_exceptions_listc                 C   s~   | j jj}| j jj| }||}d| }t|||| j jj|j|d |jr,| 	|| | j
|}|r=t|||| d S d S )Nzresponse = client.%s)event_emitterZmethod_descriptionexample_prefix)r   r   r   rH   rO   r   eventsr6   rM   rQ   r   getr   )r   r!   r   r   operation_namerO   rS   r   r   r   r   rF      s(   


z)ClientDocumenter._add_model_driven_methodr   )r9   
__module____qualname__r   r)   r   r#   r   r$   r'   r   r   r   r7   r    rC   rD   rE   rQ   rF   r   r   r   r   r      s$    



r   c                   @   s   e Zd ZdZedddededdddfd	ed	dd
dfg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d d! Zd"d# Zd$d% Zd&d' Zd(S ))ClientExceptionsDocumenterzQhttps://boto3.amazonaws.com/v1/documentation/api/latest/guide/error-handling.htmlErrorZ	structurez1Normalized access to common exception attributes.ZCodestringz,An identifier specifying the exception type.)rN   	type_namer6   Messagez;A descriptive message explaining why the exception occured.)rN   r\   r6   membersc                 C   s   || _ | j jjj| _d S r   )r   r   r   r   r   )r   r   r   r   r   r      s   z#ClientExceptionsDocumenter.__init__c                 C   s,   |  | | | | | | | d S r   )r   _add_overview_add_exceptions_list_add_exception_classesr/   r   r   r   document_exceptions   s   


z.ClientExceptionsDocumenter.document_exceptionsc                 C   r+   )NzClient Exceptionsr,   r/   r   r   r   r      r0   z%ClientExceptionsDocumenter._add_titlec                 C   s>   |j   |d |j jd| jd |d |j   d S )NzClient exceptions are available on a client instance via the ``exceptions`` property. For more detailed instructions and examples on the exact usage of client exceptions, see the error handling z
user guide)titlelink.)r-   r4   r3   Zexternal_link_USER_GUIDE_LINKr/   r   r   r   r_      s   

z(ClientExceptionsDocumenter._add_overviewc                 C   s   | j jj}| d|j S )NrJ   )r   r8   r9   rN   )r   shapecls_namer   r   r   _exception_class_name   s   
z0ClientExceptionsDocumenter._exception_class_namec                 C   sx   | j jjj}|s|j  |d |j  d S |j  |d |j  |D ]}| |}|jd|  q*d S )Nz-This client has no modeled exception classes.z$The available client exceptions are:rK   )	r   r   r   rM   r-   r4   r3   ri   r;   )r   r!   rM   rg   r<   r   r   r   r`      s   






z/ClientExceptionsDocumenter._add_exceptions_listc                 C   s"   | j jjjD ]}| || qd S r   )r   r   r   rM   _add_exception_classr   r!   rg   r   r   r   ra     s   z1ClientExceptionsDocumenter._add_exception_classesc                 C   sV   | |j}| |}|jj|d | || | || | || |j  d S )Nr=   )	r2   rN   ri   r-   r>   _add_top_level_documentation_add_exception_catch_example_add_response_attrZend_sphinx_py_class)r   r!   rg   Zclass_sectionr<   r   r   r   rj   
  s   
z/ClientExceptionsDocumenter._add_exception_classc                 C   s.   |j r|j  ||j  |j  d S d S r   )r6   r-   r4   r5   rk   r   r   r   rl     s
   
z7ClientExceptionsDocumenter._add_top_level_documentationc                 C   s   |j   |j d |j   |d |j   |j   |d |j   |j   |d|j  |j   |j   |d |j   |j   d S )NZExampleztry:z...z!except client.exceptions.%s as e:zprint(e.response))	r-   r4   rL   r?   r3   indentdedentrN   rA   rk   r   r   r   rm     s   











z7ClientExceptionsDocumenter._add_exception_catch_examplec                 C   sF   | d}|jd | | | || | || |j  d S )Nresponse)r2   r-   Zstart_sphinx_py_attr_add_response_attr_description_add_response_example_add_response_paramsZend_sphinx_py_attr)r   r!   rg   Zresponse_sectionr   r   r   rn   *  s   

z-ClientExceptionsDocumenter._add_response_attrc                 C   s"   |j   |d |j   d S )NzThe parsed error response. All exceptions have a top level ``Error`` key that provides normalized access to common exception atrributes. All other keys are specific to this service or exception class.)r-   r4   r5   r/   r   r   r   rr   2  s
   
z9ClientExceptionsDocumenter._add_response_attr_descriptionc                 C   sX   | d}|j  |jd |j  t| jd | jjj	d}|j
||| jgd d S )NsyntaxSyntaxr   rV   rR   r(   )r2   r-   r4   rL   new_paragraphr   r   r   r   rT   Zdocument_example_GENERIC_ERROR_SHAPE)r   r!   rg   Zexample_section
documenterr   r   r   rs   <     



z0ClientExceptionsDocumenter._add_response_examplec                 C   sX   | d}|j  |jd |j  t| jd | jjj	d}|j
||| jgd d S )N	Structurerw   rx   )r2   r-   r4   rL   ry   r   r   r   r   rT   Zdocument_paramsrz   )r   r!   rg   Zparams_sectionr{   r   r   r   rt   L  r|   z/ClientExceptionsDocumenter._add_response_paramsN)r9   rW   rX   rf   r	   r   rz   r   rb   r   r_   ri   r`   ra   rj   rl   rm   rn   rr   rs   rt   r   r   r   r   rY      sN    	
rY   N)Zbotocore.compatr   Zbotocore.docs.exampler   Zbotocore.docs.methodr   r   r   Zbotocore.docs.paramsr   Zbotocore.docs.sharedexampler   Zbotocore.docs.utilsr	   r
   r   r   rY   r   r   r   r   <module>   s    