U
    d	                     @   sp   d dl m Z  d dlmZmZ d dlmZ dd Zdd d dZG dd	 d	eZ	G d
d deZ
G dd deZdS )    )time)uuid5NAMESPACE_URL)	urlencodec                 C   s   t dd |  D S )z#Remove all keys where value is Nonec                 s   s"   | ]\}}|d k	r||fV  qd S N ).0kvr   r   7/tmp/pip-unpacked-wheel-dt_sn2ih/flask_restx/postman.py	<genexpr>
   s      zclean.<locals>.<genexpr>)dictitems)datar   r   r   clean   s    r    )stringintegernumberc                   @   s\   e Zd ZdZdd Zedd Zedd Zedd	 Zed
d Z	dddZ
dddZdS )Requestz0Wraps a Swagger operation into a Postman Requestc                 C   s&   || _ || _|| _| | _|| _d S r   )
collectionpathparamsuppermethod	operation)selfr   r   r   r   r   r   r   r   __init__   s
    
zRequest.__init__c                 C   s(   t d| j| jf}t t| jj|S )N )strjoinr   urlr   r   uuid)r   seedr   r   r   id   s    z
Request.idc                 C   s   | j jjd| j S )N/)r   apibase_urlrstripr   r   r   r   r   r!   #   s    zRequest.urlc                 C   s
  i }| j dkrB| jjjdg }| jd|}t|rB|d |d< | jdg D ]$}|d dkrP|dd	||d
 < qP| jjjdg D ]*}| jj D ]\}}||krd	||< qq| jdg D ]*}| jj D ]\}}||krd	||< qqdd | D }d	|S )NGETconsumeszContent-Type
parametersinheaderdefaultr   namesecurityc                 S   s   g | ]}d  |qS ):)r    )r   liner   r   r   
<listcomp>@   s     z#Request.headers.<locals>.<listcomp>
)
r   r   r&   
__schema__getr   lenapikeysr   r    )r   headersr+   paramr2   keyr/   linesr   r   r   r;   '   s&    
zRequest.headersc                 C   sT   d| j kst| j d dkr d S | j d d }| jjD ]}|j|kr6|j  S q6d S )Ntagsr   )r   r9   r   folderstagr$   )r   rA   folderr   r   r   rB   C   s    
zRequest.folderFc                 C   sL   |  |\}}t| j| j| jd | jd|| j| jj| j|t	t
 d
S )NoperationIdsummary)
r$   r   r1   descriptionr!   r;   collectionIdrB   ZpathVariablesr   )process_urlr   r$   r   r   r8   r;   r   rB   intr   )r   urlvarsr!   	variablesr   r   r   as_dictL   s    
zRequest.as_dictc           	      C   s   | j }i }i }tdd | jD }|tdd | jdg D  |sP|d fS | D ]n\}}|d dkr|d| d| }t|d	 d
||< qX|d dkrX|rXt|d	 d
}|d|||< qX|rd	|t
|f}||fS )Nc                 s   s   | ]}|d  |fV  qdS r1   Nr   r   pr   r   r   r   a   s     z&Request.process_url.<locals>.<genexpr>c                 s   s   | ]}|d  |fV  qdS rL   r   rM   r   r   r   r   c   s     r-   r.   r   z{%s}z:%styper   queryr0   ?)r!   r   r   updater   r8   r   replaceDEFAULT_VARSr    r   )	r   rI   r!   Z	path_varsZurl_varsr   r1   r<   r0   r   r   r   rG   ]   s&    zRequest.process_urlN)F)F)__name__
__module____qualname____doc__r   propertyr$   r!   r;   rB   rK   rG   r   r   r   r   r      s   




r   c                   @   s4   e Zd Zdd Zedd Zedd Zdd Zd	S )
Folderc                 C   s   || _ |d | _|d | _d S )Nr1   rE   )r   rA   rE   )r   r   rA   r   r   r   r   t   s    
zFolder.__init__c                 C   s   t t| jjt | jS r   )r   r   r   r"   rA   r)   r   r   r   r$   y   s    z	Folder.idc                    s    fdd j jD S )Nc                    s   g | ]}|j  jkr|jqS r   rB   r$   r   rr)   r   r   r5      s      z Folder.order.<locals>.<listcomp>)r   requestsr)   r   r)   r   order}   s    zFolder.orderc                 C   s    t | j| j| j| j| jjdS )N)r$   r1   rE   r_   rF   )r   r$   rA   rE   r_   r   r)   r   r   r   rK      s    zFolder.as_dictN)rU   rV   rW   r   rY   r$   r_   rK   r   r   r   r   rZ   s   s   

rZ   c                   @   s`   e Zd ZdZdddZedd Zedd Zed	d
 Zedd Z	edd Z
dddZdS )PostmanCollectionV1z)Postman Collection (V1 format) serializerFc                 C   s   || _ || _d S r   )r&   swagger)r   r&   ra   r   r   r   r      s    zPostmanCollectionV1.__init__c                 C   s   t t| jjS r   )r   r   r&   r'   r)   r   r   r   r"      s    zPostmanCollectionV1.uuidc                 C   s
   t | jS r   )r   r"   r)   r   r   r   r$      s    zPostmanCollectionV1.idc                 c   st   | j rt| di ddddV  | jjd  D ]@\}}|dg }| D ]"\}}|dkrJt| ||||V  qJq.d S )Nz/swagger.jsonr8   zSwagger specificationsz&The API Swagger specifications as JSON)rC   rD   pathsr-   )ra   r   r&   r7   r   r8   )r   r   
operationsZpath_paramsr   r   r   r   r   r^      s    zPostmanCollectionV1.requestsc                 c   s"   | j jd D ]}t| |V  qd S )Nr?   )r&   r7   rZ   )r   rA   r   r   r   r@      s    zPostmanCollectionV1.foldersc                 C   s    t dd | jjd D S )Nc                 s   s:   | ]2\}}| d dkr| ddkr||d fV  qdS )r.   r/   rO   ZapiKeyr1   N)r8   )r   r1   Zsecdefr   r   r   r      s    z.PostmanCollectionV1.apikeys.<locals>.<genexpr>ZsecurityDefinitions)r   r&   r7   r8   r   r)   r   r   r   r:      s    zPostmanCollectionV1.apikeysc              	      s^   t | jd| jj| jjf| jjdd | jD  fdd| jD dd | jD t	t
 dS )Nr   c                 S   s   g | ]}|j s|jqS r   r[   r\   r   r   r   r5      s      z/PostmanCollectionV1.as_dict.<locals>.<listcomp>c                    s   g | ]}|j  d qS )rI   rK   r\   rd   r   r   r5      s     c                 S   s   g | ]}|  qS r   re   )r   fr   r   r   r5      s     )r$   r1   rE   r_   r^   r@   	timestamp)r   r$   r    r&   titleversionrE   r^   r@   rH   r   )r   rI   r   rd   r   rK      s    zPostmanCollectionV1.as_dictN)F)F)rU   rV   rW   rX   r   rY   r"   r$   r^   r@   r:   rK   r   r   r   r   r`      s   





r`   N)r   r"   r   r   urllib.parser   r   rT   objectr   rZ   r`   r   r   r   r   <module>   s   _