o
    ܀cJ                     @   sp   d dl Z d dlmZ d dlmZ d dlmZ d dlZd dl	m
Z
 d dlmZmZ d dlmZ G dd	 d	eZdS )
    N)DocumentStructure)ServiceDocumenter)DataNotFoundError)Boto3ClientDocumenter)ResourceDocumenterServiceResourceDocumenter)ServiceContextc                       sd   e Zd ZejejejdZ	 fddZ
dd Zdd Zdd	 Zd
d Zdd Zdd Z  ZS )r   examplesc                    sX   t  j||jd || _| j|| _d | _| j| j v r%| j	|| _g d| _
d S )N)service_namesession)titletable-of-contentsclient
paginatorswaitersservice-resource	resourcesr	   )super__init___session_boto3_sessionr   _client_service_resource_service_nameget_available_resourcesresourcesections)selfr
   r   	__class__ =/usr/local/lib/python3.10/dist-packages/boto3/docs/service.pyr      s   zServiceDocumenter.__init__c                 C   s   t | j| jdd}| |d | |d | |d | |d | |d | j	rD| 
|d | |d	 | |d
 | S )ziDocuments an entire service.

        :returns: The reStructured text of the documented service.
        html)section_namestargetr   r   r   r   r   r   r   r	   )r   r   r   r   get_sectiontable_of_contents
client_apipaginator_api
waiter_apir   _document_service_resource_document_resources_document_examplesflush_structure)r   doc_structurer    r    r!   document_service4   s   
z"ServiceDocumenter.document_servicec                 C   s>   d }z|  | j}W n	 ty   Y nw t| j|| d S N)get_examplesr   r   r   r   document_client)r   sectionr	   r    r    r!   r'   J   s   zServiceDocumenter.client_apic                 C   s   t | j| j| d S r0   )r   r   r   document_resource)r   r3   r    r    r!   r*   S   s   z,ServiceDocumenter._document_service_resourcec              
   C   s   d}| j d}|| jd}| jjjjj}|d D ]C}|d | }| jj	j
||t| j|d |d dd}|jjj}	g }
|	D ]}|
| q>||
d| ji}t|| j ||jjj qd S )Nfoodata_loaderzresources-1r   )r
   resource_json_definitionsservice_modelservice_waiter_model)resource_namesingle_resource_json_definitionservice_contextr   )r   get_componentload_service_modelr   r   metar   r8   r   resource_factoryload_from_definitionr   resource_modelidentifiersappendr   r   r4   add_new_sectionname)r   r3   temp_identifier_valueloaderjson_resource_modelr8   r:   rB   resource_clsrC   args_r   r    r    r!   r+   X   s<   
z%ServiceDocumenter._document_resourcesc                 C   s   t jt j| j| jd S )Nz.rst)ospathrealpathjoinEXAMPLE_PATHr   )r   r    r    r!   _get_example_filex   s   z#ServiceDocumenter._get_example_filec                 C   s   |   }tj|rB|jd |j  |d |j  |j  t|}||	  W d    d S 1 s;w   Y  d S d S )NExamplesz'.. contents::
    :local:
    :depth: 1)
rR   rM   rN   isfilestyleh2new_linewriteopenread)r   r3   examples_filefr    r    r!   r,   }   s   




"z$ServiceDocumenter._document_examples)__name__
__module____qualname__rM   rN   rP   dirnameboto3__file__rQ   r   r/   r'   r*   r+   rR   r,   __classcell__r    r    r   r!   r      s    	 r   )rM   botocore.docs.bcdoc.restdocr   botocore.docs.servicer   BaseServiceDocumenterbotocore.exceptionsr   ra   boto3.docs.clientr   boto3.docs.resourcer   r   boto3.utilsr   r    r    r    r!   <module>   s   