o
    ܀cU+                     @   s   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 )    )
xform_name)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  ZS )ResourceDocumenterc                    s   t  | || _d S N)super__init___botocore_session)selfresourcebotocore_session	__class__ >/usr/local/lib/python3.10/dist-packages/boto3/docs/resource.pyr   #   s   
zResourceDocumenter.__init__c                 C   sr   |  | | | |d}| | | | | | | | | | | | | 	| | 
| d S )Nzmember-overview)
_add_title
_add_introadd_new_section_add_identifiers_add_attributes_add_references_add_actions_add_sub_resources_add_collections_add_waiters_add_overview_of_members)r   sectionoverview_sectionr   r   r   document_resource'   s   









z$ResourceDocumenter.document_resourcec                 C   s   |j | j d S r   )styleh2_resource_namer   r'   r   r   r   r   4   s   zResourceDocumenter._add_titlec                 C   s   g }| j jr| j jD ]}||j q
t|}|jj| j d| dd |d}| 	| |d}| 
|| |d}| || d S )N())
class_namedescriptionexampleparams)_resource_modelidentifiersappendnamer   r*   start_sphinx_py_classr0   r   _add_description_add_example_add_params_description)r   r'   identifier_names
identifier
class_argsdescription_sectionexample_sectionparam_sectionr   r   r   r   7   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'   official_service_namer   r   r   r9   P   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_linerC   rD   _service_namer   r   r,   end_codeblock)r   r'   r<   example_valuesr   r   r   r:   X   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*   rI   )r   r'   r<   identifier_namer1   r   r   r   r;   o   s   
z*ResourceDocumenter._add_params_descriptionc                 C   sx   | j D ]6}|j  |d| d |j  | j | D ]}|dv r.|jd| d q|jd| d qqd S )Nz#These are the resource's available :)
attributescollectionsr5   
referencesz
:py:attr:``z
:py:meth:`z()`)
member_mapr*   rI   rC   li)r   r'   resource_member_typememberr   r   r   r&   y   s   



z+ResourceDocumenter._add_overview_of_membersc                 C   sn   | j jjj}|d}g }|r|| jd< t|dddd |D ]}||j}||j t	|| j
|d qd S )Nr5   IdentifierszYIdentifiers are properties of a resource that are set upon instantiation of the resource.identifiers_attributes_intror'   resource_typer1   
intro_link)r'   resource_nameidentifier_model)	_resourcemetaresource_modelr5   r   rS   r   r7   r6   r   r,   )r   r'   r5   member_listr=   identifier_sectionr   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 }|r6t	|dddd || j
d< t|D ]#}|| \}}||}	|| t|	| j| j|| j jjjj|d q:d S )NrO   
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.rX   rY   )r'   service_namer\   	attr_nameevent_emitter
attr_model)r^   r_   clientservice_modelr`   shape	shape_forget_attributesr   r   rS   sortedr6   r   rJ   r,   events)
r   r'   ri   rO   rj   attribute_listre   _
attr_shapeattribute_sectionr   r   r   r       s@   





z"ResourceDocumenter._add_attributesc                 C   sj   | d}| jjjj}g }|rt|dddd || jd< |D ]}| |j}||j t	||d qd S )NrQ   
ReferenceszNReferences are related resource instances that have a belongs-to relationship.references_introrY   )r'   reference_model)
r   r^   r_   r`   rQ   r   rS   r7   r6   r   )r   r'   rQ   reference_list	referencereference_sectionr   r   r   r!      s$   

	z"ResourceDocumenter._add_referencesc                 C   >   | d}| jjjj}|rt| j}| j|_|| d S d S )Nactions)r   r^   r_   r`   rz   r   rS   document_actions)r   r'   rz   
documenterr   r   r   r"         

zResourceDocumenter._add_actionsc                 C   ry   )Nzsub-resources)r   r^   r_   r`   subresourcesr
   rS   document_sub_resources)r   r'   sub_resourcesr|   r   r   r   r#      r}   z%ResourceDocumenter._add_sub_resourcesc                 C   ry   )NrP   )r   r^   r_   r`   rP   r	   rS   document_collections)r   r'   rP   r|   r   r   r   r$      r}   z#ResourceDocumenter._add_collectionsc                 C   sN   | d}| jjjj}|r%| j| j}t| j|}| j	|_	|
| d S d S )Nwaiters)r   r^   r_   r`   r   r   get_waiter_modelrJ   r   rS   document_resource_waiters)r   r'   r   service_waiter_modelr|   r   r   r   r%      s   
zResourceDocumenter._add_waiters)__name__
__module____qualname__r   r)   r   r   r9   r:   r;   r&   r   r    r!   r"   r#   r$   r%   __classcell__r   r   r   r   r   "   s     
&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   r0     s   z$ServiceResourceDocumenter.class_namec                 C   s   |j d d S )NzService Resource)r*   r+   r-   r   r   r   r   
  s   z$ServiceResourceDocumenter._add_titlec                 C   s   t | j}|d|  d S )NzA resource representing )r   rB   rC   rE   r   r   r   r9     s   
z*ServiceResourceDocumenter._add_descriptionc                 C   sZ   |j   |j   |d |j   |j   || j d| j d |j   d S )NrG   z = boto3.resource('z'))r*   rH   rI   rC   rJ   rK   )r   r'   r<   r   r   r   r:     s   




z&ServiceResourceDocumenter._add_exampleN)r   r   r   propertyr0   r   r9   r:   r   r   r   r   r     s    
r   N)botocorer   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    d