o
    tf                     @  sT  d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZmZ ddlZddlZddlmZmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZmZ ddlmZ e	eje ! Z"e#e"d d d ddZ$e%e$d d Z&W d   n1 sw   Y  G dd dZ'G dd dZ(d)ddZ)d*ddZ*	d+d,d'd(Z+dS )-zTesting utils.    )annotationsN)SimpleCookie)Path)parse_qsurlparse)V30RequestValidatorV30ResponseValidator)Spec)RequestParameters)HTTPRequestHTTPResponse)HeadersImmutableMultiDict)get_openapi_specZ	test_datazapp-settingszoverrides.jsonzutf-8)encodingz$@jupyterlab/unicode-extension:plugincommentc                   @  sn   e Zd ZdZdddZedd
dZedddZedddZedddZ	edddZ
edddZdS )TornadoOpenAPIRequestz6
    Converts a torando request to an OpenAPI one
    requestr   specr	   c           
      C  s   || _ || _|jdu rd}t|t|j| _t }||j	dd i }|
 D ]	\}}|j||< q*t|j}i }	ttt|jt|jt||	d| _dS )zInitialize the request.NzRequest URL is missingz
Set-Cookie )queryheadercookiepath)r   r   urlRuntimeErrorr   Z_url_parsedr   loadheadersgetitemsvaluer
   r   r   r   dict
parameters)
selfr   r   msgr   cookieskeymorselor    r)   e/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/jupyterlab_server/test_utils.py__init__#   s&   

zTornadoOpenAPIRequest.__init__returnstrc                 C     dS Napplication/jsonr)   r#   r)   r)   r*   content_type?      z"TornadoOpenAPIRequest.content_typec                 C  s   | j j}|d |d S )Nz/lab)r   r   index)r#   r   r)   r)   r*   host_urlC   s   zTornadoOpenAPIRequest.host_urlc                 C  s   d }t | jj}| jd D ]C}|rqd|v }|r!|d |d n|}||jv rP|j|j|d  }|s?t|t|kr?|}|rP|dsP|d t| d }q|d u r_d|j }t||S )Npaths{/Zfooz$Could not find matching pattern for )	r   r   r   r   r4   r   lenendswith
ValueError)r#   r   r(   Zpath_Zhas_argr   ur$   r)   r)   r*   r   H   s$   
zTornadoOpenAPIRequest.pathc                 C  s   | j j}|r
| pdS )Nr   )r   methodlower)r#   r=   r)   r)   r*   r=   `   s   zTornadoOpenAPIRequest.methodbytes | Nonec                 C  s2   | j jd u rd S t| j jtsd}t|| j jS )NzRequest body is invalid)r   body
isinstancebytesAssertionErrorr#   r$   r)   r)   r*   r@   e   s   zTornadoOpenAPIRequest.bodyc                 C  s"   | j }|jdp|jdpdS )NContent-TypeAcceptr0   )r   r   r   )r#   r   r)   r)   r*   mimetypen   s   
zTornadoOpenAPIRequest.mimetypeN)r   r   r   r	   r,   r-   r,   r?   )__name__
__module____qualname____doc__r+   propertyr2   r5   r   r=   r@   rG   r)   r)   r)   r*   r      s    
r   c                   @  s`   e Zd ZdZdddZeddd	ZedddZedddZedddZ	edddZ
dS )TornadoOpenAPIResponsezA tornado open API response.responser   c                 C  s
   || _ dS )zInitialize the response.N)rP   )r#   rP   r)   r)   r*   r+   }   s   
zTornadoOpenAPIResponse.__init__r,   r?   c                 C  s"   t | jjtsd}t|| jjS )NzResponse body is invalid)rA   rP   r@   rB   rC   rD   r)   r)   r*   data   s   zTornadoOpenAPIResponse.dataintc                 C  s   t | jjS N)rR   rP   coder1   r)   r)   r*   status_code   s   z"TornadoOpenAPIResponse.status_coder-   c                 C  r.   r/   r)   r1   r)   r)   r*   r2      r3   z#TornadoOpenAPIResponse.content_typec                 C  s   t | jjddS )NrE   r0   )r-   rP   r   r   r1   r)   r)   r*   rG      s   zTornadoOpenAPIResponse.mimetyper   c                 C  s   t t| jjS rS   )r   r!   rP   r   r1   r)   r)   r*   r      s   zTornadoOpenAPIResponse.headersN)rP   r   rI   )r,   rR   rH   )r,   r   )rJ   rK   rL   rM   r+   rN   rQ   rU   r2   rG   r   r)   r)   r)   r*   rO   z   s    
rO   rP   r   r,   Nonec                 C  s<   t  }t| j|}t|| t| }t||| dS )zValidate an API requestN)r   r   r   r   validaterO   r   )rP   Zopenapi_specr   Ztorn_responser)   r)   r*   validate_request   s
   rX   c                  C  s   t jdr;tjdk r=t jdkr?z
ddlm} m} W n
 ty$   Y dS w ddlm	}m
} t| | u rA||  dS dS dS dS dS )z)a windows 3.8+ patch for the asyncio loopwin)      )      r   )WindowsProactorEventLoopPolicyWindowsSelectorEventLoopPolicy)get_event_loop_policyset_event_loop_policyN)sysplatform
startswithtornadoversion_infoasyncior^   r_   ImportErrorr`   ra   type)r^   r_   r`   ra   r)   r)   r*   maybe_patch_ioloop   s    



rj   error	Exceptionexpected_coderR   expected_message
str | Noneboolc                 C  s   | j }t|tjjr||jkrdS |dur|t|krdS dS tt|tjj	t|tjjgrK||j
kr6dS |rIt|jj d }||krIdS dS dS )z7Check that the error matches the expected output error.FNTmessage)r    rA   re   Zweb	HTTPErrorrU   r-   anyZ
httpclientZHTTPClientErrorrT   jsonloadsrP   r@   decode)rk   rm   rn   erq   r)   r)   r*   expected_http_error   s(   

rx   )rP   r   r,   rV   )r,   rV   rS   )rk   rl   rm   rR   rn   ro   r,   rp   ),rM   
__future__r   rt   osrb   http.cookiesr   pathlibr   urllib.parser   r   Ztornado.httpclientre   Ztornado.webZopenapi_corer   r   Zopenapi_core.spec.pathsr	   Z)openapi_core.validation.request.datatypesr
   r   r   Zwerkzeug.datastructuresr   r   Zjupyterlab_server.specr   r   dirname__file__resolveZHEREopenfidr   Zbig_unicode_stringr   rO   rX   rj   rx   r)   r)   r)   r*   <module>   s4   \

