o
    h                     @   s   d dl Z d dlmZ d dlmZ d dlmZmZmZm	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S )    N)OrderedDict)urlparse)
get_methodget_encodingget_locationget_links_from_documentc                 C   s~   t  | j}t }d|d< t |d< | j|d d< | j|d d< d|d d< |jr.|j|d< |jr7|jg|d	< t| |d
< |S )z-
    Generates root of the Swagger spec.
    z2.0swaggerinfotitledescription versionhostschemespaths)r   urlr   r
   r   netlocscheme_get_paths_object)document
parsed_urlr    r   \/var/www/html/magazine_api/magazine_env/lib/python3.10/site-packages/openapi_codec/encode.pygenerate_swagger_object   s   

r   c                 C   s(   | \}}}|r|d d | }|||fS )Nr   _r   )itemoperation_idlinktagsr   r   r   _add_tag_prefix   s   

r   c                 C   s   g }t | D ]'\}}t|dkrd|dd }|d g}n|d }g }||||f qdd |D }tt|t|k}|sHdd |D S |S )z7
    Return a list of (operation_id, link, [tags])
       r   Nr   c                 S   s   g | ]}|d  qS )r   r   .0r   r   r   r   
<listcomp>6       z_get_links.<locals>.<listcomp>c                 S   s   g | ]}t |qS r   )r   r!   r   r   r   r#   ;   r$   )r   lenjoinappendset)r   linkskeysr   r   r   Zoperation_idsuniquer   r   r   
_get_links&   s   r,   c                 C   s`   t  }t| }|D ]$\}}}|j|vrt  ||j< t|}t|||}||j ||i q	|S )N)r   r,   r   r   _get_operationupdate)r   r   r)   r   r   r   method	operationr   r   r   r   @   s   
r   c                 C   sr   t |}|j }|r| d nd }| t|t||d}|r$||d< |r*||d< |r1|g|d< |r7||d< |S )Nr   )ZoperationId	responses
parametersr   summaryZconsumesr   )r   r   strip
splitlines_get_responses_get_parameters)r   r   r   encodingr   r3   r0   r   r   r   r-   P   s    

r-   c                 C   s,   t | dd d ur| jS | jd u rdS | jjS )Nr   r   )getattrr   schemafieldr   r   r   _get_field_descriptionf   s
   
r=   c                 C   sX   t | dd d ur| jS | jd u rdS tjdtjdtjdtjdtjdtj	di
| jjdS )Ntypestringintegernumberbooleanarrayobject)r9   r>   r:   
coreschemaStringIntegerNumberBooleanZArrayZObjectget	__class__r;   r   r   r   _get_field_typeq   s   
rL   c                 C   s\  g }i }g }| j D ]}t| |}t|}t|}|dkrX|dv r:|j|jd||d}	|dkr4ddi|	d< ||	 q	||d	}
|dkrIddi|
d< |
||j< |jrW||j q	|d
krx|dkrfddd}ni }|j|j|||d}	||	 q	|j|j|||pdd}	|dkrddi|	d< ||	 q	|rdd
d|dd}	|r||	d d< ||	 |S )z2
    Generates Swagger Parameter Item object.
    form)zmultipart/form-dataz!application/x-www-form-urlencodedZformData)namerequiredinr   r>   rC   r>   r?   items)r   r>   bodyzapplication/octet-streambinary)r>   format)rN   rO   rP   r   r:   datarD   )r>   
properties)rN   rP   r:   r:   rO   )fieldsr   r=   rL   rN   rO   r'   )r   r8   r2   rV   rO   r<   locationZfield_descriptionZ
field_typeZ	parameterZschema_propertyr:   r   r   r   r7      st   



r7   c                 C   s<   ddi}| j  dkrd|iS | j  dkrd|iS d|iS )zZ
    Returns minimally acceptable responses object based
    on action / method type.
    r   r   postZ201deleteZ204Z200)actionlower)r   templater   r   r   r6      s   r6   )rE   collectionsr   Zcoreapi.compatr   Zopenapi_codec.utilsr   r   r   r   r   r   r,   r   r-   r=   rL   r7   r6   r   r   r   r   <module>   s    P