U
    øEZh;  ã                   @   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r6d| _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__© úZ/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/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ÚdescriptionÚ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_sectionr9   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_linerD   r   r   r   r   Úend_codeblock)r   r+   r@   Zexample_valuesr   r   r   r>   a   s    




ÿ
$ÿzResourceDocumenter._add_examplec                 C   sV   |D ]L}t | j|ƒ}| d|› d¡ |j ¡  | d|› d|› ¡ |j ¡  qd S )Nz:type z: stringz:param z: )r   r   rD   r/   rK   )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/   rK   rD   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 }|r8|| jd< t|dddd |D ]ª}| |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 )Nr:   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 / Ú	qualifierrI   ©Úcontext)r+   Úresource_nameZidentifier_model)Ú	_resourceÚmetaÚresource_modelr:   r.   rN   r   r;   r<   r   r/   ÚrefÚ_resource_class_namerD   Úadd_title_sectionr5   r   r   ÚosÚpathÚjoinr   r   r   Úwrite_to_filerP   )	r   r+   r:   Zmember_listrA   Zidentifier_docÚbreadcrumb_sectionZidentifier_sectionZidentifiers_dir_pathr   r   r   r#   …   sF    

ù	
þýýz#ResourceDocumenter._add_identifiersc              	   C   sH  | j jjjj}i }| j jjjr@| | j jjj¡}| j jj |¡}| d¡}g }|rlt	|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› ¡}|	 ||¡ qt|rD|  |d¡ d S )NÚ
attributesZ
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.rQ   rR   rS   rT   rV   rW   z / Attribute / rX   rI   rY   )r+   Úservice_namer[   Ú	attr_nameZevent_emitterZ
attr_model)r\   r]   ÚclientÚservice_modelr^   ÚshapeZ	shape_forZget_attributesr.   r   rN   Úsortedr;   r   r/   r_   r`   rD   ra   r5   r   r   r   Úeventsrb   rc   rd   r   r   re   rP   )r   r+   rk   rg   rl   Zattribute_listri   Ú_Z
attr_shapeZattribute_docrf   Zattribute_sectionZattributes_dir_pathr   r   r   r$   ±   s^    
ÿ
ÿ
÷



þú
ýz"ResourceDocumenter._add_attributesc           	      C   sø   |  d¡}| jjjj}g }|r8t|dddd || jd< |D ]¦}| |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 )NÚ
referencesZ
ReferenceszNReferences are related resource instances that have a belongs-to relationship.Zreferences_introrR   rS   rT   rV   rW   z / Reference / rX   rI   rY   )r+   Zreference_model)r.   r\   r]   r^   rp   r   rN   r;   r<   r   r/   r_   r`   rD   ra   r5   r   rb   rc   rd   r   r   r   re   rP   )	r   r+   rp   Zreference_listÚ	referenceZreference_docrf   Zreference_sectionZreferences_dir_pathr   r   r   r%   ê   sD    
ù	

þþýz"ResourceDocumenter._add_referencesc                 C   sJ   |  d¡}| jjjj}|rFt| j| jƒ}| j|_| |¡ |  	|d¡ d S )NÚactions)
r.   r\   r]   r^   rr   r   r   rN   Zdocument_actionsrP   )r   r+   rr   Ú
documenterr   r   r   r&     s    

zResourceDocumenter._add_actionsc                 C   sJ   |  d¡}| jjjj}|rFt| j| jƒ}| j|_| |¡ |  	|d¡ d S )Nzsub-resources)
r.   r\   r]   r^   Zsubresourcesr   r   rN   Zdocument_sub_resourcesrP   )r   r+   Zsub_resourcesrs   r   r   r   r'     s    
 ÿ
z%ResourceDocumenter._add_sub_resourcesc                 C   sJ   |  d¡}| jjjj}|rFt| j| jƒ}| j|_| |¡ |  	|d¡ d S )NÚcollections)
r.   r\   r]   r^   rt   r
   r   rN   Zdocument_collectionsrP   )r   r+   rt   rs   r   r   r   r(   (  s    
 ÿ
z#ResourceDocumenter._add_collectionsc                 C   sZ   |  d¡}| jjjj}|rV| j | j¡}t| j|| j	ƒ}| j
|_
| |¡ |  |d¡ d S )NÚwaiters)r.   r\   r]   r^   ru   r   Zget_waiter_modelr   r   r   rN   Zdocument_resource_waitersrP   )r   r+   ru   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_noterD   Zend_noter*   r   r   r   r!   A  s    

ÿz%ResourceDocumenter._add_resource_note)Ú__name__Ú
__module__Ú__qualname__r   r,   r    r"   r=   r>   r?   rP   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   rC   rD   rE   r   r   r   r=   U  s    
z*ServiceResourceDocumenter._add_descriptionc                 C   sZ   |j  ¡  |j  ¡  | d¡ |j  ¡  |j  ¡  | | j› d| j› d¡ |j  ¡  d S )NrF   rG   rH   )r/   rJ   rK   rD   r   rL   )r   r+   r@   r   r   r   r>   Y  s    




ÿz&ServiceResourceDocumenter._add_exampleN)rv   rw   rx   Úpropertyr5   r    r=   r>   r   r   r   r   rz   L  s
   
rz   )rb   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   rz   r   r   r   r   Ú<module>   s     )