a
    ތxd<                     @   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__ K/var/www/html/Ranjet/env/lib/python3.9/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|| j d S )Nz A resource representing an {} {})r   _service_modelwriteformatr   r   r+   Zofficial_service_namer   r   r   r<   [   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_linerB   rC   r   r   r   r   end_codeblock)r   r+   r?   Zexample_valuesr   r   r   r=   c   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   rB   r/   rG   )r   r+   r?   Zidentifier_namer6   r   r   r   r>   z   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/   rG   rB   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 )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 / 	qualifier.context)r+   resource_nameZidentifier_model)	_resourcemetaresource_modelr9   r.   rJ   r   r:   r;   r   r/   ref_resource_class_namerB   add_title_sectionr5   r   r   ospathjoinr   r   r   write_to_filerL   )	r   r+   r9   Zmember_listr@   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
attributes
AttributeszAttributes provide access to the properties of a resource. Attributes are lazy-loaded the first time one is accessed via the :py:meth:`load` method.rM   rN   rO   rP   rR   rS   z / Attribute / rT   rU   rV   )r+   service_namerX   	attr_nameZevent_emitterZ
attr_model)rY   rZ   clientservice_modelr[   shapeZ	shape_forZget_attributesr.   r   rJ   sortedr:   r   r/   r\   r]   rB   r^   r5   r   r   r   eventsr_   r`   ra   r   r   rb   rL   )r   r+   ri   rd   rj   Zattribute_listrg   _Z
attr_shapeZattribute_docrc   Zattribute_sectionZattributes_dir_pathr   r   r   r$      s^    







z"ResourceDocumenter._add_attributesc           	      C   s  | d}| jjjj}g }|rDt|dddd || jd< | |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	 qH|r| |d d S )N
referencesZ
ReferenceszNReferences are related resource instances that have a belongs-to relationship.Zreferences_introrN   rO   rP   rR   rS   z / Reference / rT   rU   rV   )r+   Zreference_model)r.   rY   rZ   r[   rn   r   rJ   rL   r:   r;   r   r/   r\   r]   rB   r^   r5   r   r_   r`   ra   r   r   r   rb   )	r   r+   rn   Zreference_list	referenceZreference_docrc   Zreference_sectionZreferences_dir_pathr   r   r   r%      sF    
	

z"ResourceDocumenter._add_referencesc                 C   sJ   | d}| jjjj}|rFt| j| j}| j|_|| | 	|d d S )Nactions)
r.   rY   rZ   r[   rp   r   r   rJ   Zdocument_actionsrL   )r   r+   rp   
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.   rY   rZ   r[   Zsubresourcesr   r   rJ   Zdocument_sub_resourcesrL   )r   r+   Zsub_resourcesrq   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.   rY   rZ   r[   rr   r
   r   rJ   Zdocument_collectionsrL   )r   r+   rr   rq   r   r   r   r(   2  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.   rY   rZ   r[   rs   r   Zget_waiter_modelr   r   r   rJ   Zdocument_resource_waitersrL   )r   r+   rs   Zservice_waiter_modelrq   r   r   r   r)   =  s    


zResourceDocumenter._add_waitersc                 C   s,   | d}|j  |d |j  d S )Nzfeature-freezezBefore 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_noterB   Zend_noter*   r   r   r   r!   K  s    

z%ResourceDocumenter._add_resource_note)__name__
__module____qualname__r   r,   r    r"   r<   r=   r>   rL   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   W  s    z$ServiceResourceDocumenter.class_namec                 C   s   | d}|jd d S )Nr-   zService Resource)r.   r/   r0   r1   r   r   r   r    [  s    
z$ServiceResourceDocumenter._add_titlec                 C   s   t | j}|d|  d S )NzA resource representing )r   rA   rB   rD   r   r   r   r<   _  s    
z*ServiceResourceDocumenter._add_descriptionc                 C   sZ   |j   |j   |d |j   |j   || j d| j d |j   d S )NrE   z = boto3.resource('z'))r/   rF   rG   rB   r   rH   )r   r+   r?   r   r   r   r=   c  s    




z&ServiceResourceDocumenter._add_exampleN)rt   ru   rv   propertyr5   r    r<   r=   r   r   r   r   rx   V  s
   
rx   )r_   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   rx   r   r   r   r   <module>   s     3