o
    ^i                     @  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_spec	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   _url_parsedr   loadheadersgetitemsvaluer
   r   r   r   dict
parameters)
selfr   r   msgr   cookieskeymorselor    r+   W/home/ubuntu/hpml_nyu/venv/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{/fooz$Could not find matching pattern for )	r   r   r   r   r6   r   lenendswith
ValueError)r%   r   r*   path_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%   rB   r+   r+   r,   rB   `   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,   rE   e   s   zTornadoOpenAPIRequest.bodyc                 C  s"   | j }|jdp|jdpdS )NContent-TypeAcceptr2   )r   r   r    )r%   r   r+   r+   r,   mimetypen   s   
zTornadoOpenAPIRequest.mimetypeN)r   r   r   r	   r.   r/   r.   rD   )__name__
__module____qualname____doc__r-   propertyr4   r7   r   rB   rE   rL   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)rU   )r%   rU   r+   r+   r,   r-   }   s   
zTornadoOpenAPIResponse.__init__r.   rD   c                 C  s"   t | jjtsd}t|| jjS )NzResponse body is invalid)rF   rU   rE   rG   rH   rI   r+   r+   r,   data   s   zTornadoOpenAPIResponse.dataintc                 C  s   t | jjS N)rW   rU   coder3   r+   r+   r,   status_code   s   z"TornadoOpenAPIResponse.status_coder/   c                 C  r0   r1   r+   r3   r+   r+   r,   r4      r5   z#TornadoOpenAPIResponse.content_typec                 C  s   t | jjddS )NrJ   r2   )r/   rU   r   r    r3   r+   r+   r,   rL      s   zTornadoOpenAPIResponse.mimetyper   c                 C  s   t t| jjS rX   )r   r#   rU   r   r3   r+   r+   r,   r      s   zTornadoOpenAPIResponse.headersN)rU   r   rN   )r.   rW   rM   )r.   r   )rO   rP   rQ   rR   r-   rS   rV   rZ   r4   rL   r   r+   r+   r+   r,   rT   z   s    
rT   rU   r   r.   Nonec                 C  s<   t  }t| j|}t|| t| }t||| dS )zValidate an API requestN)r   r   r   r   validaterT   r   )rU   openapi_specr   torn_responser+   r+   r,   validate_request   s
   r_   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asynciore   rf   ImportErrorrg   rh   type)re   rf   rg   rh   r+   r+   r,   maybe_patch_ioloop   s    



rq   error	Exceptionexpected_coderW   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"   rF   rl   web	HTTPErrorrZ   r/   any
httpclientHTTPClientErrorrY   jsonloadsrU   rE   decode)rr   rt   ru   erx   r+   r+   r,   expected_http_error   s(   

r   )rU   r   r.   r[   )r.   r[   rX   )rr   rs   rt   rW   ru   rv   r.   rw   ),rR   
__future__r   r~   osri   http.cookiesr   pathlibr   urllib.parser   r   tornado.httpclientrl   tornado.webopenapi_corer   r   openapi_core.spec.pathsr	   )openapi_core.validation.request.datatypesr
   r   r   werkzeug.datastructuresr   r   jupyterlab_server.specr   r   dirname__file__resolveHEREopenfidr   big_unicode_stringr   rT   r_   rq   r   r+   r+   r+   r,   <module>   s4   \

