U
    Y¨+dá7  ã                   @   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__© ú7/tmp/pip-unpacked-wheel-9vn2nznc/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   |j  | j¡ d S r    )ÚstyleÚh2r   r+   r   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   Úadd_new_sectionr.   Zstart_sphinx_py_classr3   Ú_add_descriptionÚ_add_exampleÚ_add_params_descriptionZend_sphinx_py_class)
r   r,   Úidentifier_namesÚ
identifierZ
class_argsr0   Zdescription_sectionZexample_sectionZparam_sectionr6   r   r   r   r#   =   s"    
ÿ




zResourceDocumenter._add_introc                 C   s"   t | jƒ}| d || j¡¡ d S )Nz A resource representing an {} {})r   Ú_service_modelÚwriteÚformatr   ©r   r,   Zofficial_service_namer   r   r   r;   Z   s    
 ÿÿz#ResourceDocumenter._add_descriptionc                 C   sˆ   |j  ¡  |j  ¡  | d¡ |j  ¡  |j  ¡  | d | j| j¡¡ |j  ¡  t|ƒ}| d t| jƒ| j| j|¡¡ |j  	¡  d S )Núimport boto3z{} = boto3.resource('{}')z{} = {}.{}({}))
r.   Ústart_codeblockÚnew_linerA   rB   r   r   r   r   Úend_codeblock)r   r,   r>   Zexample_valuesr   r   r   r<   b   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   rA   r.   rF   )r   r,   r>   Zidentifier_namer4   r   r   r   r=   y   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.   rF   rA   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 ]n}| |j¡ t	|jdd}| 
|j¡ | |j¡}t|| j|d tj | j| j› | j› ¡}| ||j¡ q<|r¼|  |d¡ d S )	Nr7   ZIdentifierszYIdentifiers are properties of a resource that are set upon instantiation of the resource.Úidentifiers_attributes_intro©r,   Zresource_typer4   Z
intro_linkÚhtml©Útarget)r,   Úresource_nameZidentifier_model)Ú	_resourceÚmetaÚresource_modelr7   r:   rI   r   r8   r9   r   Úadd_title_sectionr   r   ÚosÚpathÚjoinr   r   r   Úwrite_to_filerK   )r   r,   r7   Zmember_listr?   Zidentifier_docZidentifier_sectionZidentifiers_dir_pathr   r   r   r$      s>    

ù	ÿýýz#ResourceDocumenter._add_identifiersc              	   C   s  | 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}	|	 |¡ |	 |¡}
t|
| j| j|| j jjjj|d tj | j| j› | j› ¡}|	 ||¡ qt|r
|  |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.rL   rM   rN   rO   )r,   Zservice_namerQ   Ú	attr_nameZevent_emitterZ
attr_model)rR   rS   ÚclientÚservice_modelrT   ÚshapeZ	shape_forZget_attributesr:   r   rI   Úsortedr8   r   rU   r   r   r   ÚeventsrV   rW   rX   r   r   rY   rK   )r   r,   r]   rZ   r^   Zattribute_listr[   Ú_Z
attr_shapeZattribute_docZattribute_sectionZattributes_dir_pathr   r   r   r%   µ   sR    
ÿ
ÿ
÷



ú
ýz"ResourceDocumenter._add_attributesc                 C   sÈ   |  d¡}| jjjj}g }|rDt|dddd || jd< |  |d¡ |D ]j}| |j	¡ t
|j	dd}| |j	¡ |  |j	¡}t||d tj | j| j› | j› ¡}| ||j	¡ qH|rÄ|  |d¡ d S )	NÚ
referencesZ
ReferenceszNReferences are related resource instances that have a belongs-to relationship.Zreferences_introrM   rN   rO   )r,   Zreference_model)r:   rR   rS   rT   rb   r   rI   rK   r8   r9   r   rU   r   rV   rW   rX   r   r   r   rY   )r   r,   rb   Zreference_listÚ	referenceZreference_docZreference_sectionZreferences_dir_pathr   r   r   r&   è   s:    
ù	
 ÿýz"ResourceDocumenter._add_referencesc                 C   sJ   |  d¡}| jjjj}|rFt| j| jƒ}| j|_| |¡ |  	|d¡ d S )NÚactions)
r:   rR   rS   rT   rd   r   r   rI   Zdocument_actionsrK   )r   r,   rd   Ú
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:   rR   rS   rT   Zsubresourcesr   r   rI   Zdocument_sub_resourcesrK   )r   r,   Zsub_resourcesre   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:   rR   rS   rT   rf   r
   r   rI   Zdocument_collectionsrK   )r   r,   rf   re   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:   rR   rS   rT   rg   r   Zget_waiter_modelr   r   r   rI   Zdocument_resource_waitersrK   )r   r,   rg   Zservice_waiter_modelre   r   r   r   r*   +  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_noterA   Zend_noter+   r   r   r   r"   9  s    

ÿz%ResourceDocumenter._add_resource_note)Ú__name__Ú
__module__Ú__qualname__r   r-   r!   r#   r;   r<   r=   rK   r$   r%   r&   r'   r(   r)   r*   r"   Ú__classcell__r   r   r   r   r   %   s    

(3$	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   r3   E  s    z$ServiceResourceDocumenter.class_namec                 C   s   |j  d¡ d S )NzService Resource)r.   r/   r+   r   r   r   r!   I  s    z$ServiceResourceDocumenter._add_titlec                 C   s   t | jƒ}| d|› ¡ d S )NzA resource representing )r   r@   rA   rC   r   r   r   r;   L  s    
z*ServiceResourceDocumenter._add_descriptionc                 C   sZ   |j  ¡  |j  ¡  | d¡ |j  ¡  |j  ¡  | | j› d| j› d¡ |j  ¡  d S )NrD   z = boto3.resource('z'))r.   rE   rF   rA   r   rG   )r   r,   r>   r   r   r   r<   P  s    




ÿz&ServiceResourceDocumenter._add_exampleN)rh   ri   rj   Úpropertyr3   r!   r;   r<   r   r   r   r   rl   D  s
   
rl   )rV   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   rl   r   r   r   r   Ú<module>   s     !