o
    ?Hh;                     @   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resourcebotocore_sessionroot_docs_path	__class__ S/home/air/sanwanet/gpt-api/venv/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-   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)_resource_modelidentifiersappendnamer   r0   r1   start_sphinx_py_classr8   _add_description_add_example_add_params_descriptionend_sphinx_py_class)
r   r-   identifier_names
identifier
class_argsr5   description_sectionexample_sectionparam_sectionr<   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-   official_service_namer    r    r!   rB   [   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 = .r6   r7   )	r1   start_codeblocknew_linerN   r   r   r   r   end_codeblock)r   r-   rF   example_valuesr    r    r!   rC   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   rN   r1   rV   )r   r-   rF   identifier_namer9   r    r    r!   rD   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 :)r1   rV   rN   toctree
member_maptocitem)r   r-   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 )Nr>   IdentifierszYIdentifiers are properties of a resource that are set upon instantiation of the resource.identifiers_attributes_intror-   resource_typer9   
intro_linkhtmltarget
breadcrumbindexz / Identifier / 	qualifierrT   context)r-   resource_nameidentifier_model)	_resourcemetaresource_modelr>   r0   r\   r   r?   r@   r   r1   ref_resource_class_namerN   add_title_sectionr8   r   r   ospathjoinr   r   r   write_to_filer`   )	r   r-   r>   member_listrG   identifier_docbreadcrumb_sectionidentifier_section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
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.rb   rc   rf   rg   ri   rj   z / Attribute / rk   rT   rl   )r-   service_namern   	attr_nameevent_emitter
attr_model)rp   rq   clientservice_modelrr   shape	shape_forget_attributesr0   r   r\   sortedr?   r   r1   rs   rt   rN   ru   r8   r   r   r   eventsrv   rw   rx   r   r   ry   r`   )r   r-   r   r   r   attribute_listr   _
attr_shapeattribute_docr|   attribute_section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
references
ReferenceszNReferences are related resource instances that have a belongs-to relationship.references_introrc   rf   rg   ri   rj   z / Reference / rk   rT   rl   )r-   reference_model)r0   rp   rq   rr   r   r   r\   r?   r@   r   r1   rs   rt   rN   ru   r8   r   rv   rw   rx   r   r   r   ry   r`   )	r   r-   r   reference_list	referencereference_docr|   reference_section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)
r0   rp   rq   rr   r   r   r   r\   document_actionsr`   )r   r-   r   
documenterr    r    r!   r(     s   

zResourceDocumenter._add_actionsc                 C   r   )Nzsub-resources)
r0   rp   rq   rr   subresourcesr   r   r\   document_sub_resourcesr`   )r   r-   sub_resourcesr   r    r    r!   r)        

z%ResourceDocumenter._add_sub_resourcesc                 C   r   )Ncollections)
r0   rp   rq   rr   r   r
   r   r\   document_collectionsr`   )r   r-   r   r   r    r    r!   r*   (  r   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)r0   rp   rq   rr   r   r   get_waiter_modelr   r   r   r\   document_resource_waitersr`   )r   r-   r   service_waiter_modelr   r    r    r!   r+   3  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.)r0   r1   
start_noterN   end_noter,   r    r    r!   r#   A  s   

z%ResourceDocumenter._add_resource_note)__name__
__module____qualname__r   r.   r"   r$   rB   rC   rD   r`   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)_service_docs_name)r   r    r    r!   r8   M  s   z$ServiceResourceDocumenter.class_namec                 C   s   | d}|jd d S )Nr/   zService Resource)r0   r1   r2   r3   r    r    r!   r"   Q  s   
z$ServiceResourceDocumenter._add_titlec                 C   s   t | j}|d|  d S )NzA resource representing )r   rM   rN   rO   r    r    r!   rB   U  s   
z*ServiceResourceDocumenter._add_descriptionc                 C   sZ   |j   |j   |d |j   |j   || j d| j d |j   d S )NrQ   rR   rS   )r1   rU   rV   rN   r   rW   )r   r-   rF   r    r    r!   rC   Y  s   




z&ServiceResourceDocumenter._add_exampleN)r   r   r   propertyr8   r"   rB   rC   r    r    r    r!   r   L  s    
r   )rv   botocorer   botocore.docs.bcdoc.restdocr   botocore.docs.utilsr   boto3.docs.actionr   boto3.docs.attrr   r   r   boto3.docs.baser	   boto3.docs.collectionr
   boto3.docs.subresourcer   boto3.docs.utilsr   r   r   r   boto3.docs.waiterr   r   r   r    r    r    r!   <module>   s     )