U
    ƽb                     @   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rn|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   8/tmp/pip-unpacked-wheel-ai6_e3q7/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 ]N\}}t|dkr>d|dd }|d g}n|d }g }||||f qdd |D }tt|t|k}|sd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   s     z_get_links.<locals>.<listcomp>c                 S   s   g | ]}t |qS r   )r   r!   r   r   r   r#   ;   s     )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 ]H\}}}|j|kr2t  ||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}|rH||d< |rT||d< |rb|g|d< |rn||d< |S )Nr   )ZoperationId	responses
parametersr   summaryZconsumesr   )r   r   strip
splitlines_get_responses_get_parameters)r   r   r   encodingr   r2   r/   r   r   r   r,   P   s     

r,   c                 C   s,   t | dd d k	r| jS | jd k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 k	r| jS | jd k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)r8   r=   r9   
coreschemaStringZIntegerNumberBooleanArrayZObjectget	__class__r:   r   r   r   _get_field_typeq   s(    
       rK   c                 C   sf  g }i }g }| j D ]}t| |}t|}t|}|dkr|dkrv|j|jd||d}	|dkrjddi|	d< ||	 n:||d	}
|dkrddi|
d< |
||j< |jr||j q|d
kr|dkrddd}ni }|j|j|||d}	||	 q|j|j|||pdd}	|dkr"ddi|	d< ||	 q|rbdd
d|dd}	|rX||	d d< ||	 |S )z2
    Generates Swagger Parameter Item object.
    form)zmultipart/form-dataz!application/x-www-form-urlencodedZformData)namerequiredinr   r=   rB   r=   r>   items)r   r=   bodyzapplication/octet-streambinary)r=   format)rM   rN   rO   r   r9   datarC   )r=   
properties)rM   rO   r9   r9   rN   )fieldsr   r<   rK   rM   rN   r&   )r   r7   r1   rU   rN   r;   locationZfield_descriptionZ
field_typeZ	parameterZschema_propertyr9   r   r   r   r6      sr    



r6   c                 C   s<   ddi}| j  dkrd|iS | j  dkr4d|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   r5      s    r5   )rD   collectionsr   Zcoreapi.compatr   Zopenapi_codec.utilsr   r   r   r   r   r   r+   r   r,   r<   rK   r6   r5   r   r   r   r   <module>   s   P