o
    ¾­§i;  ã                   @   s¸   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
mZ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 dlmZ G dd„ deƒZG dd„ deƒZdS )é    N)Ú
xform_name)ÚDocumentStructure)Úget_official_service_name)ÚActionDocumenter)Údocument_attributeÚdocument_identifierÚdocument_reference)ÚBaseDocumenter)ÚCollectionDocumenter)ÚSubResourceDocumenter)Úadd_resource_type_overviewÚ!get_identifier_args_for_signatureÚget_identifier_descriptionÚ!get_identifier_values_for_example)ÚWaiterResourceDocumenterc                       s”   e Zd Z‡ f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d „ Z‡  ZS )!ÚResourceDocumenterc                    s>   t ƒ  |¡ || _|| _| j ¡ | _| j| jkrd| _d S d S )Nzservice-resource)ÚsuperÚ__init__Ú_botocore_sessionÚ_root_docs_pathÚ_resource_nameÚlowerÚ_resource_sub_pathÚ_service_name)ÚselfÚresourceZbotocore_sessionZroot_docs_path©Ú	__class__© úJ/home/app/Keep/.python/lib/python3.10/site-packages/boto3/docs/resource.pyr   &   s   
ÿzResourceDocumenter.__init__c                 C   sh   |   |¡ |  |¡ |  |¡ |  |¡ |  |¡ |  |¡ |  |¡ |  |¡ |  |¡ |  	|¡ d S )N)
Ú
_add_titleÚ_add_resource_noteÚ
_add_introÚ_add_identifiersÚ_add_attributesÚ_add_referencesÚ_add_actionsÚ_add_sub_resourcesÚ_add_collectionsÚ_add_waiters©r   Úsectionr   r   r   Údocument_resource.   s   








z$ResourceDocumenter.document_resourcec                 C   s   |  d¡}|j | j¡ d S )NÚtitle)Úadd_new_sectionÚstyleÚh2r   ©r   r+   Ztitle_sectionr   r   r   r    :   s   
zResourceDocumenter._add_titlec           
      C   s¬   g }| j jr| j jD ]}| |j¡ q
t|ƒ}| d¡}|jj| j› d|› dd | d¡}|  	|¡ | d¡}|  
||¡ | d¡}|  ||¡ | d¡}	|	j ¡  d S )	NÚstart_classú(ú))Ú
class_nameÚdescriptionZexampleÚparamsÚ	end_class)Z_resource_modelÚidentifiersÚappendÚnamer   r.   r/   Zstart_sphinx_py_classr5   Ú_add_descriptionÚ_add_exampleÚ_add_params_descriptionZend_sphinx_py_class)
r   r+   Úidentifier_namesÚ
identifierZ
class_argsr2   Zdescription_sectionZexample_sectionZparam_sectionr8   r   r   r   r"   >   s"   
ÿ




zResourceDocumenter._add_introc                 C   s&   t | jƒ}| d|› d| j› ¡ d S )NzA resource representing an ú )r   Ú_service_modelÚwriter   ©r   r+   Zofficial_service_namer   r   r   r<   [   s   
ÿz#ResourceDocumenter._add_descriptionc              
   C   s˜   |j  ¡  |j  ¡  | d¡ |j  ¡  |j  ¡  | | j› d| j› d¡ |j  ¡  t|ƒ}| t| jƒ› d| j› d| j› d|› d¡ |j  ¡  d S )Núimport boto3ú = boto3.resource('ú')z = Ú.r3   r4   )	r/   Ústart_codeblockÚnew_linerC   r   r   r   r   Úend_codeblock)r   r+   r?   Zexample_valuesr   r   r   r=   a   s   




ÿ
$ÿzResourceDocumenter._add_examplec                 C   sV   |D ]&}t | j|ƒ}| d|› d¡ |j ¡  | d|› d|› ¡ |j ¡  qd S )Nz:type z: stringz:param z: )r   r   rC   r/   rJ   )r   r+   r?   Zidentifier_namer6   r   r   r   r>   q   s   ÿ
ùz*ResourceDocumenter._add_params_descriptionc                 C   sR   |j  ¡  | d|› d¡ |j  ¡  |j  ¡  | j| D ]	}|j  |› ¡ qd S )Nz#These are the resource's available ú:)r/   rJ   rC   ZtoctreeÚ
member_mapZtocitem)r   r+   Zresource_member_typeÚmemberr   r   r   Ú_add_overview_of_member_type{   s   

ÿ

ÿz/ResourceDocumenter._add_overview_of_member_typec           	      C   s   | j jjj}| d¡}g }|r|| jd< t|dddd |D ]U}| |j¡ t	|jdd}| d¡}|j
 | jd	¡ | d
|j› ¡ | |j¡ |j|jd| j› did}t|| j|d tj | j| j› | j› ¡}| ||j¡ q|r~|  |d¡ d S d S )Nr9   ZIdentifierszYIdentifiers are properties of a resource that are set upon instantiation of the resource.Úidentifiers_attributes_intro©r+   Zresource_typer6   Z
intro_linkÚhtml©ÚtargetÚ
breadcrumbÚindexz / Identifier / Ú	qualifierrH   ©Úcontext)r+   Úresource_nameZidentifier_model)Ú	_resourceÚmetaÚresource_modelr9   r.   rM   r   r:   r;   r   r/   ÚrefÚ_resource_class_namerC   Úadd_title_sectionr5   r   r   ÚosÚpathÚjoinr   r   r   Úwrite_to_filerO   )	r   r+   r9   Zmember_listr@   Zidentifier_docÚbreadcrumb_sectionZidentifier_sectionZidentifiers_dir_pathr   r   r   r#   …   sH   

ù	
þýýÿz#ResourceDocumenter._add_identifiersc              	   C   sJ  | j jjjj}i }| j jjjr | | j jjj¡}| j jj |¡}| d¡}g }|r6t	|dddd || j
d< t|ƒD ]^}|| \}}| |¡ t|dd}	|	 d¡}
|
j | jd	¡ |
 d
|› ¡ |	 |¡ |	j|d| j› did}t|| j| j|| j jjjj|d tj | j| j› | j› ¡}|	 ||¡ q:|r£|  |d¡ d S d S )NÚ
attributesÚ
Attributesz”Attributes provide access to the properties of a resource. Attributes are lazy-loaded the first time one is accessed via the :py:meth:`load` method.rP   rQ   rR   rS   rU   rV   z / Attribute / rW   rH   rX   )r+   Zservice_namerZ   Ú	attr_nameZevent_emitterZ
attr_model)r[   r\   ÚclientÚservice_modelr]   ÚshapeZ	shape_forZget_attributesr.   r   rM   Úsortedr:   r   r/   r^   r_   rC   r`   r5   r   r   r   Úeventsra   rb   rc   r   r   rd   rO   )r   r+   rj   rf   rk   Zattribute_listrh   Ú_Z
attr_shapeZattribute_docre   Zattribute_sectionZattributes_dir_pathr   r   r   r$   ±   s`   
ÿ
ÿ
÷



þú
ýÿz"ResourceDocumenter._add_attributesc           	      C   sü   |  d¡}| jjjj}g }|rt|dddd || jd< |D ]S}| |j¡ t	|jdd}|  d¡}|j
 | jd	¡ | d
|j› ¡ | |j¡ |j |jd| j› did}t||d tj | j| j› | j› ¡}| ||j¡ q|r||  |d¡ d S d S )NÚ
referencesZ
ReferenceszNReferences are related resource instances that have a belongs-to relationship.Zreferences_introrQ   rR   rS   rU   rV   z / Reference / rW   rH   rX   )r+   Zreference_model)r.   r[   r\   r]   ro   r   rM   r:   r;   r   r/   r^   r_   rC   r`   r5   r   ra   rb   rc   r   r   r   rd   rO   )	r   r+   ro   Zreference_listÚ	referenceZreference_docre   Zreference_sectionZreferences_dir_pathr   r   r   r%   ê   sF   
ù
	
þþýÿz"ResourceDocumenter._add_referencesc                 C   óN   |  d¡}| jjjj}|r%t| j| jƒ}| j|_| |¡ |  	|d¡ d S d S )NÚactions)
r.   r[   r\   r]   rr   r   r   rM   Zdocument_actionsrO   )r   r+   rr   Ú
documenterr   r   r   r&     s   

üzResourceDocumenter._add_actionsc                 C   rq   )Nzsub-resources)
r.   r[   r\   r]   Zsubresourcesr   r   rM   Zdocument_sub_resourcesrO   )r   r+   Zsub_resourcesrs   r   r   r   r'     ó   
ÿ
úz%ResourceDocumenter._add_sub_resourcesc                 C   rq   )NÚcollections)
r.   r[   r\   r]   ru   r
   r   rM   Zdocument_collectionsrO   )r   r+   ru   rs   r   r   r   r(   (  rt   z#ResourceDocumenter._add_collectionsc                 C   s^   |  d¡}| jjjj}|r-| j | j¡}t| j|| j	ƒ}| j
|_
| |¡ |  |d¡ d S d S )NÚwaiters)r.   r[   r\   r]   rv   r   Zget_waiter_modelr   r   r   rM   Zdocument_resource_waitersrO   )r   r+   rv   Zservice_waiter_modelrs   r   r   r   r)   3  s   
ÿ
ÿ
÷zResourceDocumenter._add_waitersc                 C   s,   |  d¡}|j ¡  | d¡ |j ¡  d S )Nzfeature-freezez¢Before using anything on this page, please refer to the resources :doc:`user guide <../../../../guide/resources>` for the most recent guidance on using resources.)r.   r/   Z
start_noterC   Zend_noter*   r   r   r   r!   A  s   

ÿz%ResourceDocumenter._add_resource_note)Ú__name__Ú
__module__Ú__qualname__r   r,   r    r"   r<   r=   r>   rO   r#   r$   r%   r&   r'   r(   r)   r!   Ú__classcell__r   r   r   r   r   %   s"    

,9*	r   c                   @   s0   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	S )
ÚServiceResourceDocumenterc                 C   s   | j › dS )Nz.ServiceResource)Z_service_docs_name)r   r   r   r   r5   M  s   z$ServiceResourceDocumenter.class_namec                 C   s   |  d¡}|j d¡ d S )Nr-   zService Resource)r.   r/   r0   r1   r   r   r   r    Q  s   
z$ServiceResourceDocumenter._add_titlec                 C   s   t | jƒ}| d|› ¡ d S )NzA resource representing )r   rB   rC   rD   r   r   r   r<   U  s   
z*ServiceResourceDocumenter._add_descriptionc                 C   sZ   |j  ¡  |j  ¡  | d¡ |j  ¡  |j  ¡  | | j› d| j› d¡ |j  ¡  d S )NrE   rF   rG   )r/   rI   rJ   rC   r   rK   )r   r+   r?   r   r   r   r=   Y  s   




ÿz&ServiceResourceDocumenter._add_exampleN)rw   rx   ry   Úpropertyr5   r    r<   r=   r   r   r   r   r{   L  s    
r{   )ra   Zbotocorer   Zbotocore.docs.bcdoc.restdocr   Zbotocore.docs.utilsr   Zboto3.docs.actionr   Zboto3.docs.attrr   r   r   Zboto3.docs.baser	   Zboto3.docs.collectionr
   Zboto3.docs.subresourcer   Zboto3.docs.utilsr   r   r   r   Zboto3.docs.waiterr   r   r{   r   r   r   r   Ú<module>   s     )