
    Mh                       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.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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
             \/var/www/html/test/jupyter/venv/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                    dS Napplication/json r(   s    r.   content_typez"TornadoOpenAPIRequest.content_type?       !!r0   c                T    | j         j        }|d |                    d                   S )Nz/lab)r   r   index)r(   r   s     r.   host_urlzTornadoOpenAPIRequest.host_urlC   s)    l&SYYv&&&''r0   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   r;   r   lenendswith
ValueError)r(   r   r-   path_has_argr   ur)   s           r.   r   zTornadoOpenAPIRequest.pathH   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//!
r0   c                J    | j         j        }|r|                                pdS )Nr   )r   methodlower)r(   rI   s     r.   rI   zTornadoOpenAPIRequest.method`   s$    $(&,,...B.r0   bytes | Nonec                    | j         j        d S t          | j         j        t                    sd}t	          |          | j         j        S )NzRequest body is invalid)r   body
isinstancebytesAssertionErrorr(   r)   s     r.   rM   zTornadoOpenAPIRequest.bodye   sG    <$4$,+U33 	&+C %%%|  r0   c                |    | j         }|j                            d          p|j                            d          pdS )NContent-TypeAcceptr5   )r   r"   r#   )r(   r   s     r.   mimetypezTornadoOpenAPIRequest.mimetypen   sC     ,O// """8,,"!	
r0   N)r   r   r   r
   r1   r2   r1   rK   )__name__
__module____qualname____doc__r/   propertyr8   r<   r   rI   rM   rU   r6   r0   r.   r   r      s         
 
 
 
8 " " " X" ( ( ( X(    X. / / / X/ ! ! ! X! 
 
 
 X
 
 
r0   r   c                      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 )TornadoOpenAPIResponsezA tornado open API response.responser   c                    || _         dS )zInitialize the response.N)r_   )r(   r_   s     r.   r/   zTornadoOpenAPIResponse.__init__}   s     r0   r1   rK   c                z    t          | j        j        t                    sd}t	          |          | j        j        S )NzResponse body is invalid)rN   r_   rM   rO   rP   rQ   s     r.   datazTornadoOpenAPIResponse.data   s7    $-,e44 	&,C %%%}!!r0   intc                4    t          | j        j                  S N)rc   r_   coder7   s    r.   status_codez"TornadoOpenAPIResponse.status_code   s    4=%&&&r0   r2   c                    dS r4   r6   r7   s    r.   r8   z#TornadoOpenAPIResponse.content_type   r9   r0   c                \    t          | j        j                            dd                    S )NrS   r5   )r2   r_   r"   r#   r7   s    r.   rU   zTornadoOpenAPIResponse.mimetype   s&    4=(,,^=OPPQQQr0   r   c                N    t          t          | j        j                            S re   )r   r&   r_   r"   r7   s    r.   r"   zTornadoOpenAPIResponse.headers   s    tDM122333r0   N)r_   r   rW   )r1   rc   rV   )r1   r   )rX   rY   rZ   r[   r/   r\   rb   rg   r8   rU   r"   r6   r0   r.   r^   r^   z   s        &&! ! ! ! " " " X" ' ' ' X' " " " X" R R R XR 4 4 4 X4 4 4r0   r^   r_   r   r1   Nonec                    t                      }t          | j        |          }t          |                              |           t          |           }t          |                              ||           dS )zValidate an API requestN)r   r   r   r   validater^   r	   )r_   openapi_specr   torn_responses       r.   validate_requestrp      sl    #%%L#H$4lCCG%%..w777*844M&&//GGGGGr0   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asynciorw   rx   ry   rz   typeImportError)rw   rx   ry   rz   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_coderc   expected_message
str | None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%   rN   r~   web	HTTPErrorrg   r2   any
httpclientHTTPClientErrorrf   jsonloadsr_   rM   decode)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5r0   )r_   r   r1   rk   )r1   rk   re   )r   r   r   rc   r   r   r1   r   ),r[   
__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   r^   rp   r   r   r6   r0   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[ [ [ [ [ [ [ [ [ [ [ [ [ [ [Y
 Y
 Y
 Y
 Y
 Y
 Y
 Y
x4 4 4 4 4 4 4 4>H H H HH H H H, JN      s   &CCC