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}|s�d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r”ddi|
d< |
||j< |jr°| |j¡ q|d
krò|dkrÎd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