
    ^h                        S r SSKrSSK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  SSKJr  SSKrSSKrSSKJr  SSKrSSKJrJr  S	S
KJrJrJrJrJr  S r\R<                  " SS9S 5       r\R<                  " SS9S 5       r \R<                  " SS9S 5       r!\R<                  " SS9S 5       r"\R<                  " SS9S 5       r#g)z0Fixtures for pytest/playwright end_to_end tests.    N)join)Popen)mkstemp)urljoin)TemporaryDirectory)new_notebooknew_code_cell   )NotebookFrontendBROWSER_CONTEXTBROWSER_OBJ	TREE_PAGESERVER_INFOc                    [        S5       H  nU R                  5       b  [        S5      e[        R                  R                  U5      (       a.   [        U5       n[        R                  " U5      sSSS5        s  $ [        R                  " S5        M     [        SU5      e! , (       d  f       N4= f! [         a     NCf = f)z0Wait 30 seconds for the notebook server to starti,  NzNotebook server failed to startg?zDidn't find %s in 30 seconds)rangepollRuntimeErrorospathexistsopenjsonload
ValueErrortimesleep)procinfo_file_pathifs       ]/home/james-whalen/.local/lib/python3.13/site-packages/nbclassic/tests/end_to_end/conftest.py_wait_for_serverr"      s    3Z99;"@AA77>>.)).)Q99Q< *) 	

3  5~
FF *)  s0   B4B#1	B4#
B1	-B41B44
C Cfunction)scopec               #     #    0 n [        5        n[        US5      =o S'   [        R                  " [        USS5      5        [        R                  " [        USS5      5        [        US5      [        US5      [        US	5      S
.U S'   [        R                  R                  5       nUR                  U S   5        [        R                  SSSSUS/n[        SU5        [        XBUS9=oPS'   [        USSUR                  S S35      nU R                  [        XV5      5        [        SU 5        U v   S S S 5        [        R                  " [        U S   S5      SSU S   -   0S9  g ! , (       d  f       N9= f7f)N	notebooksnbdiru
   sub ∂ir1u   sub ∂ir 1au
   sub ∂ir2u   sub ∂ir 1bjupyter_configjupyter_runtimeipython)JUPYTER_CONFIG_DIRJUPYTER_RUNTIME_DIR
IPYTHONDIR	extra_envz-m	nbclassicz--no-browserz--notebook-dirz--ServerApp.base_url=/a@b/zcommand=)cwdenvpopenz	jpserver-dz.jsonzNotebook server info:urlzapi/shutdownAuthorizationztoken token)headers)r   pjoinr   makedirsenvironcopyupdatesys
executableprintr   pidr"   requestspostr   )infotdr'   r1   commandr   r   s          r!   notebook_serverrF   (   s[    D		 %b+ 66W
E%~>?
E%~>? #(,<"=#(->#?I.
[
 jjoo

4$%>>4!#U 0 	j'"$WSAAG}r#4!*488A,e<>$T:;%t,
7 
< MM'$u+~6*HT'],BCE= 
	s   E6D#E%23E6%
E3/E6c              #   H  #    [         R                   R                  5       n[         R                   R                  5       U-
  R                  S:  aZ   [        R                  R                  S5      S:X  a  U R                  R                  5       nOU R                  R                  5       nO[        S5      eUv   UR                  5         g ! [         a    [        R                  " S5         Of = f[         R                   R                  5       U-
  R                  S:  a  M  Nx7f)N   JUPYTER_TEST_BROWSERchromeg?zECould not open browser! Did you `playwright install` on this machine?)datetimenowsecondsr   r:   getchromiumlaunchfirefox	Exceptionr   r   close)
playwrightstartbrowsers      r!   playwright_browserrW   M   s     !!#E  "U*
3
3b
8	zz~~45A$--446$,,335 _``
M MMO  	JJrN	   "U*
3
3b
8s+   AD"AC
 )!D"
 C-*D",C--2D"c                     U nUR                  5       nXl        UR                  5       nUR                  SR                  " S0 UD65        [
        U[        U[        U[        U0nU$ )N{url}?token={token} )	new_contextjupyter_server_infonew_pagegotoformatr   r   r   r   )rW   rF   browser_objbrowser_context	tree_pageauth_browser_datas         r!   authenticated_browser_datard   f   sj    $K!--/O*9'((*INN(//B/BC 	9_[	     c              #   <   #    [         R                  " U 5      v   g 7f)N)r   new_notebook_frontend)rd   s    r!   notebook_frontendrh   x   s     

0
01K
LLs   c                 @   ^^^ U mTR                  5       mUUU4S jnU$ )Nc                 "  > U  Vs/ s H%  n[        U[        5      (       a  [        U5      OUPM'     n n[        U S9n[	        TS   SS9u  p4[        USSS9 n[        R                  " X%5        S S S 5        [        R                  R                  U5      nTT	l        T	R                  5       nUR                  SR                  " S
0 TD65        [        T	[         U["        T[$        T
0n[&        R(                  " XS	9$ s  snf ! , (       d  f       N= f)N)cellsr'   z.ipynb)dirsuffixwzutf-8)encodingrY   )existing_file_namerZ   )
isinstancestrr	   r   r   r   nbformatwriter   r   basenamer\   r]   r^   r_   r   r   r   r   r   rg   )rk   cnbfdr   r    fnamerb   rc   ra   r`   rF   s            r!   innerprefill_notebook.<locals>.inner   s   !Q &03%7%7q!Q> 	 ! & w7I "cG,NN2! -   & />+#,,.	 	,33FoFG _y	
  556Gbb?! -,s   ,C;D  
D)r[   )rW   rF   rz   ra   r`   s    ` @@r!   prefill_notebookr|   }   s$    $K!--/O
 cF Lre   )$__doc__rK   r   r   r=   r   os.pathr   r8   
subprocessr   tempfiler   urllib.parser   pytestrA   testpath.tempdirr   rs   nbformat.v4r   r	   utilsr   r   r   r   r   r"   fixturerF   rW   rd   rh   r|   rZ   re   r!   <module>r      s    6  	  
  !       /  3 Y YG" j!!E "!EH j! "0 j! "" j!M "M j!* "*re   