
    ^h                       S r SSKJr  SSKrSSKrSSKrSSKJr  SSKJ	r	  SSK
JrJr  SSKrSSKrSSKJrJr  SSKJr  SS	KJr  SS
KJrJr  SSKJrJr  SSKJr  \	" \R<                  R?                  \ 5      5      RC                  5       r"\#" \"S-  S-  S-  SS9 r$\RJ                  " \$5      S   S   r&SSS5         " S S5      r' " S S5      r(SS jr)SS jr* S       SS jjr+g! , (       d  f       N<= f)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                      \ rS rSrSrSS jr\SS j5       r\SS j5       r\SS j5       r	\SS j5       r
\SS j5       r\SS	 j5       rS
rg)TornadoOpenAPIRequest   z.
Converts a torando request to an OpenAPI one
c                    Xl         X l        UR                  c  Sn[        U5      e[	        UR                  5      U l        [        5       nUR                  UR                  R                  SS5      5        0 nUR                  5        H  u  pgUR                  XV'   M     [	        UR                  5      n0 n	[        [        [        UR                  5      5      [!        UR                  5      [        U5      U	S9U l        g)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
             V/home/james-whalen/.local/lib/python3.13/site-packages/jupyterlab_server/test_utils.py__init__TornadoOpenAPIRequest.__init__#   s    	;;*Cs###GKK0+~GOO''b9:!<<>KC!<<GL * W[[! +$Xagg%67(%g.	
    c                    gNapplication/json r)   s    r/   content_type"TornadoOpenAPIRequest.content_type?       !r2   c                V    U R                   R                  nUS UR                  S5       $ )Nz/lab)r   r   index)r)   r   s     r/   host_urlTornadoOpenAPIRequest.host_urlC   s(    ll&SYYv&''r2   c                   S n[        U R                  R                  5      nU R                  S    H  nU(       a  M  SU;   nU(       a  US UR	                  S5       OUnXRR
                  ;   d  M?  UR
                  UR
                  R	                  U5      S  nU(       d  [        U5      [        U5      :X  a  UnU(       d  M  UR                  S5      (       a  M  US [        U5       S-   nM     Uc  SUR
                   3n[        U5      eU$ )Npaths{/fooz$Could not find matching pattern for )	r   r   r   r   r<   r   lenendswith
ValueError)r)   r   r.   path_has_argr   ur*   s           r/   r   TornadoOpenAPIRequest.pathH   s    
 T\\%%&YYw'EUlG075+5;;s+,UDvv~FF166<<-/03q6SY#6C71::c??Kc$i.61C ( ;8ACS/!
r2   c                r    U R                   R                  nU=(       a    UR                  5       =(       d    S$ )Nr   )r   methodlower)r)   rL   s     r/   rL   TornadoOpenAPIRequest.method`   s'    $$(&,,..B.r2   c                    U R                   R                  c  g [        U R                   R                  [        5      (       d  Sn[	        U5      eU R                   R                  $ )NzRequest body is invalid)r   body
isinstancebytesAssertionErrorr)   r*   s     r/   rP   TornadoOpenAPIRequest.bodye   sL    <<$$,,++U33+C %%||   r2   c                    U R                   nUR                  R                  S5      =(       d$    UR                  R                  S5      =(       d    S$ )NContent-TypeAcceptr5   )r   r#   r$   )r)   r   s     r/   mimetypeTornadoOpenAPIRequest.mimetypen   sC     ,,OO/ """8,"!	
r2   )r!   r(   r   r   N)r   r   r   r
   returnstrr\   zbytes | None)__name__
__module____qualname____firstlineno____doc__r0   propertyr8   r=   r   rL   rP   rY   __static_attributes__r6   r2   r/   r   r      s    
8 " " ( (  . / / ! ! 
 
r2   r   c                      \ rS rSrSrSS jr\SS j5       r\SS j5       r\SS j5       r	\SS j5       r
\SS j5       rS	rg
)TornadoOpenAPIResponsez   zA tornado open API response.c                    Xl         g)zInitialize the response.Nresponse)r)   rk   s     r/   r0   TornadoOpenAPIResponse.__init__}   s     r2   c                    [        U R                  R                  [        5      (       d  Sn[	        U5      eU R                  R                  $ )NzResponse body is invalid)rQ   rk   rP   rR   rS   rT   s     r/   dataTornadoOpenAPIResponse.data   s9    $--,,e44,C %%}}!!!r2   c                @    [        U R                  R                  5      $ N)intrk   coder7   s    r/   status_code"TornadoOpenAPIResponse.status_code   s    4==%%&&r2   c                    gr4   r6   r7   s    r/   r8   #TornadoOpenAPIResponse.content_type   r:   r2   c                `    [        U R                  R                  R                  SS5      5      $ )NrW   r5   )r]   rk   r#   r$   r7   s    r/   rY   TornadoOpenAPIResponse.mimetype   s%    4==((,,^=OPQQr2   c                R    [        [        U R                  R                  5      5      $ rq   )r   r'   rk   r#   r7   s    r/   r#   TornadoOpenAPIResponse.headers   s    tDMM11233r2   rj   N)rk   r   r^   )r\   rr   r[   )r\   r   )r_   r`   ra   rb   rc   r0   rd   rn   rt   r8   rY   r#   re   r6   r2   r/   rg   rg   z   sp    &! " " ' ' " " R R 4 4r2   rg   c                    [        5       n[        U R                  U5      n[        U5      R	                  U5        [        U 5      n[        U5      R	                  X#5        g)zValidate an API requestN)r   r   r   r   validaterg   r	   )rk   openapi_specr   torn_responses       r/   validate_requestr      sL    #%L#H$4$4lCG%..w7*84M&//Gr2   c                 &   [         R                  R                  S5      (       a]  [        R                  S:  aH  [         R                  S:  a3   SSKJn Jn  SSKJnJ	n  [        U" 5       5      U L a  U" U" 5       5        ggggg! [         a     gf = f)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   r   r   typeImportError)r   r   r   r   s       r/   maybe_patch_ioloopr      s     	&&  6)&	H^
 M)+,0NN &&D&FG O ' * 	'  		s   B 
BBc                   U R                   n[        U[        R                  R                  5      (       a$  XR
                  :w  a  gUb  U[        U5      :w  a  gg[        [        U[        R                  R                  5      [        U[        R                  R                  5      /5      (       aY  XR                  :w  a  gU(       aA  [        R                  " UR                  R                  R                  5       5      S   nX$:w  a  ggg)z7Check that the error matches the expected output error.FTmessage)r&   rQ   r   web	HTTPErrorrt   r]   any
httpclientHTTPClientErrorrs   jsonloadsrk   rP   decode)errorexpected_codeexpected_messageer   s        r/   expected_http_errorr      s     	A!W[[**++MM)',<A,F
q',,<<=q',,667	
  FF"jj!7!7!9:9EG*r2   )rk   r   r\   None)r\   r   rq   )r   	Exceptionr   rr   r   z
str | Noner\   bool),rc   
__future__r   r   osr   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   rg   r   r   r   r6   r2   r/   <module>r      s     "  	 
 %  +   B ( G 8 ? 3BGGOOH%&..0	$
~
-0@
@7SWZ3(NOPYZ TY
 Y
x4 4>HH, JN%(<F	 TSs   C))
C7