
    Xh                       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<                  j?                  e             jC                         Z" e#e"dz  dz  dz  d      5 Z$ ejJ                  e$      d   d   Z&ddd        G d d      Z' G d d      Z(ddZ)ddZ*	 d	 	 	 	 	 	 	 ddZ+y# 1 sw Y   3xY w)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                      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	edd       Z
edd       Zy	)TornadoOpenAPIRequestz6
    Converts a torando request to an OpenAPI one
    c                   || _         || _        |j                  d}t        |      t	        |j                        | _        t               }|j                  |j                  j                  dd             i }|j                         D ]  \  }}|j                  ||<    t	        |j                        }i }	t        t        t        |j                              t!        |j                        t        |      |	      | _        y)zInitialize the request.NzRequest URL is missingz
Set-Cookie )queryheadercookiepath)requestspecurlRuntimeErrorr   _url_parsedr   loadheadersgetitemsvaluer   r   r   r   dict
parameters)
selfr   r   msgr   cookieskeymorselor   s
             P/var/www/html/myenv/lib/python3.12/site-packages/jupyterlab_server/test_utils.py__init__zTornadoOpenAPIRequest.__init__#   s    	;;*Cs###GKK0+~GOO''b9:!<<> 	(KC!<<GCL	( W[[! +$Xagg%67(%g.	
    c                     yNapplication/json r(   s    r.   content_typez"TornadoOpenAPIRequest.content_type?       !r0   c                V    | j                   j                  }|d |j                  d       S )Nz/lab)r   r   index)r(   r   s     r.   host_urlzTornadoOpenAPIRequest.host_urlC   s(    ll&SYYv&''r0   c                   d }t        | j                  j                        }| j                  d   D ]  }|rd|v }|r|d |j	                  d       n|}||j
                  v s1|j
                  |j
                  j	                  |      d  }|st        |      t        |      k(  r|}|sw|j                  d      r|d t        |       dz   } |d|j
                   }t        |      |S )Npaths{/fooz$Could not find matching pattern for )	r   r   r   r   r9   r   lenendswith
ValueError)r(   r   r-   path_has_argr   ur)   s           r.   r   zTornadoOpenAPIRequest.pathH   s    
 T\\%%&YYw' 
	2EUlG075+5;;s+,UDqvv~FF166<<-/03q6SY#6C1::c?Kc$i.61C
	2 ;8ACS/!
r0   c                ^    | j                   j                  }|xr |j                         xs dS )Nr   )r   methodlower)r(   rG   s     r.   rG   zTornadoOpenAPIRequest.method`   s'    $$(&,,..B.r0   c                    | j                   j                  y t        | j                   j                  t              sd}t	        |      | j                   j                  S )NzRequest body is invalid)r   body
isinstancebytesAssertionErrorr(   r)   s     r.   rJ   zTornadoOpenAPIRequest.bodye   sI    <<$$,,++U3+C %%||   r0   c                    | j                   }|j                  j                  d      xs |j                  j                  d      xs dS )NContent-TypeAcceptr3   )r   r"   r#   )r(   r   s     r.   mimetypezTornadoOpenAPIRequest.mimetypen   sC     ,,OO/ """8,"!	
r0   N)r   r   r   r
   returnstrrT   zbytes | None)__name__
__module____qualname____doc__r/   propertyr6   r:   r   rG   rJ   rR   r4   r0   r.   r   r      s    
8 " " ( (  . / / ! ! 
 
r0   r   c                  r    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	edd       Z
y)TornadoOpenAPIResponsezA tornado open API response.c                    || _         y)zInitialize the response.N)response)r(   r_   s     r.   r/   zTornadoOpenAPIResponse.__init__}   s	     r0   c                    t        | j                  j                  t              sd}t	        |      | j                  j                  S )NzResponse body is invalid)rK   r_   rJ   rL   rM   rN   s     r.   datazTornadoOpenAPIResponse.data   s6    $--,,e4,C %%}}!!!r0   c                @    t        | j                  j                        S N)intr_   coder5   s    r.   status_codez"TornadoOpenAPIResponse.status_code   s    4==%%&&r0   c                     yr2   r4   r5   s    r.   r6   z#TornadoOpenAPIResponse.content_type   r7   r0   c                `    t        | j                  j                  j                  dd            S )NrP   r3   )rU   r_   r"   r#   r5   s    r.   rR   zTornadoOpenAPIResponse.mimetype   s%    4==((,,^=OPQQr0   c                R    t        t        | j                  j                              S rc   )r   r&   r_   r"   r5   s    r.   r"   zTornadoOpenAPIResponse.headers   s    tDMM11233r0   N)r_   r   rV   )rT   rd   rS   )rT   r   )rW   rX   rY   rZ   r/   r[   ra   rf   r6   rR   r"   r4   r0   r.   r]   r]   z   sp    &! " " ' ' " " R R 4 4r0   r]   c                    t               }t        | j                  |      }t        |      j	                  |       t        |       }t        |      j	                  ||       y)zValidate an API requestN)r   r   r   r   validater]   r	   )r_   openapi_specr   torn_responses       r.   validate_requestrn      sN    #%L#H$4$4lCG%..w7*84M&//Gr0   c                    t         j                  j                  d      rZt        j                  dk  rFt         j                  dk\  r2	 ddlm} m} ddlm}m	} t         |             | u r | |              yyyyy# t        $ r Y yw xY w)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asyncioru   rv   rw   rx   typeImportError)ru   rv   rw   rx   s       r.   maybe_patch_ioloopr      s     	&  6)&	H^
 M)+,0NN &&D&FG O ' * 	'  		s   A; ;	BBc                   | j                   }t        |t        j                  j                        r"||j
                  k7  ry||t        |      k7  ryyt        t        |t        j                  j                        t        |t        j                  j                        g      rS||j                  k7  ry|r@t        j                  |j                  j                  j                               d   }||k7  ryyy)z7Check that the error matches the expected output error.FTmessage)r%   rK   r|   web	HTTPErrorrf   rU   any
httpclientHTTPClientErrorre   jsonloadsr_   rJ   decode)errorexpected_codeexpected_messageer   s        r.   expected_http_errorr      s     	A!W[[**+AMM)',<A,F
q',,<<=q',,667	
 AFF"jj!7!7!9:9EG7*r0   )r_   r   rT   None)rT   r   rc   )r   	Exceptionr   rd   r   z
str | NonerT   bool),rZ   
__future__r   r   osry   http.cookiesr   pathlibr   urllib.parser   r   tornado.httpclientr|   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   r]   rn   r   r   r4   r0   r.   <module>r      s     "  	 
 %  +   B ( G 8 ? 3BGGOOH%&..0	$
~
-0@
@7S [WZ"3(NOPYZ[Y
 Y
x4 4>HH, JN%(<F	[ [s   C((C1