
     )Me
                       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z  dz  dz  d          5 Z$ ej%        e$          d         d         Z&ddd           n# 1 swxY w Y    G d d          Z' G d d          Z(d&dZ)d'dZ*	 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.json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
dS )TornadoOpenAPIRequestz6
    Converts a torando request to an OpenAPI one
    requestr   specr
   c                    || _         || _        |j        d}t          |          t	          |j                  | _        t                      }|                    |j        	                    dd                     i }|
                                D ]\  }}|j        ||<   t	          |j                  }i }	t          t          t          |j                            t!          |j                  t          |          |	          | _        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   s
             <lib/python3.11/site-packages/jupyterlab_server/test_utils.py__init__zTornadoOpenAPIRequest.__init__#   s    	;*Cs####GK00+~~GO''b99:::!<<>> 	( 	(KC!<GCLL W[!! +$Xag%6%677((%g..	
 
 
    returnstrc                T    | j         j        }|d |                    d                   S )Nz/lab)r   r   index)r)   r   s     r/   host_urlzTornadoOpenAPIRequest.host_url?   s)    l&SYYv&&&''r1   c                   d }t          | j        j                  }| j        d         D ]}|rd|v }|r|d |                    d                   n|}||j        v r||j        |j                            |          d          }|s"t          |          t          |          k    r|}|r/|                    d          s|d t          |                   dz   }|d|j         }t          |          |S )Npaths{/fooz$Could not find matching pattern for )	r   r   r   r   r5   r   lenendswith
ValueError)r)   r   r.   path_has_argr   ur*   s           r/   r   zTornadoOpenAPIRequest.pathD   s   
 T\%&&Yw' 
	2 
	2E UlG07B5+5;;s+++,,UDqv~~F16<<--//0 3q66SYY#6#6C 21::c?? 2Kc$iiK.61C;AAACS//!
r1   c                J    | j         j        }|r|                                pdS )Nr   )r   methodlower)r)   rC   s     r/   rC   zTornadoOpenAPIRequest.method\   s$    $(&,,...B.r1   
str | Nonec                    | j         j        d S t          | j         j        t                    sd}t	          |          | j         j                            d          S )NzRequest body is invalidr   )r   body
isinstancebytesAssertionErrordecoder)   r*   s     r/   rG   zTornadoOpenAPIRequest.bodya   sU    <$4$,+U33 	&+C %%%| ''000r1   c                |    | j         }|j                            d          p|j                            d          pdS )NContent-TypeAcceptapplication/json)r   r#   r$   )r)   r   s     r/   mimetypezTornadoOpenAPIRequest.mimetypej   sC     ,O// """8,,"!	
r1   N)r   r   r   r
   r2   r3   )r2   rE   )__name__
__module____qualname____doc__r0   propertyr6   r   rC   rG   rQ    r1   r/   r   r      s         
 
 
 
8 ( ( ( X(    X. / / / X/ 1 1 1 X1 
 
 
 X
 
 
r1   r   c                  z    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S )TornadoOpenAPIResponsezA tornado open API response.responser   c                    || _         dS )zInitialize the response.N)r[   )r)   r[   s     r/   r0   zTornadoOpenAPIResponse.__init__y   s     r1   r2   r3   c                    t          | j        j        t                    sd}t	          |          | j        j                            d          S )NzResponse body is invalidr   )rH   r[   rG   rI   rJ   rK   rL   s     r/   datazTornadoOpenAPIResponse.data}   sE    $-,e44 	&,C %%%}!((111r1   intc                4    t          | j        j                  S N)r_   r[   coder)   s    r/   status_codez"TornadoOpenAPIResponse.status_code   s    4=%&&&r1   c                \    t          | j        j                            dd                    S )NrN   rP   )r3   r[   r#   r$   rc   s    r/   rQ   zTornadoOpenAPIResponse.mimetype   s&    4=(,,^=OPPQQQr1   r   c                N    t          t          | j        j                            S ra   )r   r'   r[   r#   rc   s    r/   r#   zTornadoOpenAPIResponse.headers   s    tDM122333r1   N)r[   r   rR   )r2   r_   )r2   r   )
rS   rT   rU   rV   r0   rW   r^   rd   rQ   r#   rX   r1   r/   rZ   rZ   v   s        &&! ! ! ! 2 2 2 X2 ' ' ' X' R R R XR 4 4 4 X4 4 4r1   rZ   r[   r   r2   Nonec                    t                      }t          | j        |          }t          |                              |           t          |           }t          |                              ||           dS )zValidate an API requestN)r   r   r   r   validaterZ   r	   )r[   openapi_specr   torn_responses       r/   validate_requestrl      sl    #%%L#H$4lCCG%%..w777*844M&&//GGGGGr1   c                 0   t           j                            d          rrt          j        dk     rdt           j        dk    rV	 ddlm} m} ddlm}m	} t           |                      | u r | |                       dS dS # t          $ r Y dS w xY w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asynciors   rt   ru   rv   typeImportError)rs   rt   ru   rv   s       r/   maybe_patch_ioloopr      s     	&&H 6))&&	H^^^^^^^^
 MLLLLLLL))++,,0NNN &%&D&D&F&FGGGGG ON  	 	 	DD	H H))&&s   B 
BBerror	Exceptionexpected_coder_   expected_messagerE   boolc                   | j         }t          |t          j        j                  r&||j        k    rdS ||t          |          k    rdS dS t          t          |t          j        j	                  t          |t          j        j                  g          rO||j
        k    rdS |r>t          j        |j        j                                                  d         }||k    rdS dS dS )z7Check that the error matches the expected output error.FNTmessage)r&   rH   rz   web	HTTPErrorrd   r3   any
httpclientHTTPClientErrorrb   jsonloadsr[   rG   rK   )r   r   r   er   s        r/   expected_http_errorr      s     	A!W[*++ AM))5',<A,F,F5t	q',<==q',677	

 
  AF""5 	j!7!7!9!9::9EG7**ut5r1   )r[   r   r2   rg   )r2   rg   ra   )r   r   r   r_   r   rE   r2   r   ),rV   
__future__r   r   osrw   http.cookiesr   pathlibr   urllib.parser   r   tornado.httpclientrz   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   rZ   rl   r   r   rX   r1   r/   <module>r      s     " " " " " "  				 



 % % % % % %       + + + + + + + +         B B B B B B B B ( ( ( ( ( ( G G G G G G 8 8 8 8 8 8 8 8 ? ? ? ? ? ? ? ? 3 3 3 3 3 3tBGOOH%%&&..00	T$
~
-0@
@7SSS [WZ"3(NOPYZ[ [ [ [ [ [ [ [ [ [ [ [ [ [ [U
 U
 U
 U
 U
 U
 U
 U
p4 4 4 4 4 4 4 46H H H HH H H H, JN      s   &CCC