o
    i                     @   s  d Z ddlZddl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 ddlmZ ddlZddlZddlmZ ddlZddlmZmZ d	d
lmZmZmZmZmZ dd Zejdddd Zejdddd Z ejdddd Z!ejdddd Z"ejdddd Z#dS )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              	   C   s   t dD ]?}|  durtdtj|r>zt|}t|W  d   W   S 1 s.w   Y  W n	 t	y=   Y nw t
d qtd|)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f r   ^/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/nbclassic/tests/end_to_end/conftest.py_wait_for_server   s   
*
r!   function)scopec                  c   s0   i } t  v}t|d }| d< tt|dd tt|dd t|dt|dt|d	d
| d< tj }|| d  tjdddd|dg}t	d| t
|||d }| d< t|dd|jdd}| t|| t	d|  | V  W d    n1 sw   Y  tjt| d ddd| d  id d S )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%   r/   commandr   r   r   r   r    notebook_server(   s:   




rD   c                 c   s    t j  }t j  | jdk r>ztjddkr| j }n| j }W n t	y3   t
d Y nw t j  | jdk st	d|V  |  d S )N   JUPYTER_TEST_BROWSERchromeg?zECould not open browser! Did you `playwright install` on this machine?)datetimenowsecondsr   r8   getchromiumlaunchfirefox	Exceptionr   r   close)
playwrightstartbrowserr   r   r    playwright_browserM   s   

rT   c                 C   sH   | }|  }||_| }|djdi | t|t|t|t|i}|S )N{url}?token={token}r   )	new_contextjupyter_server_infonew_pagegotoformatr   r   r   r   )rT   rD   browser_objbrowser_context	tree_pageauth_browser_datar   r   r    authenticated_browser_dataf   s   r_   c                 c   s    t | V  d S )N)r
   new_notebook_frontend)r_   r   r   r    notebook_frontendx   s   ra   c                    s    |     fdd}|S )Nc                    s   dd | D } t | d}td dd\}}t|ddd	}t|| W d    n1 s.w   Y  tj|} _ 	 }|
d
jdi  t t|tti}tj||dS )Nc                 S   s"   g | ]}t |trt|n|qS r   )
isinstancestrr   ).0cr   r   r    
<listcomp>   s    z3prefill_notebook.<locals>.inner.<locals>.<listcomp>)cellsr%   z.ipynb)dirsuffixwzutf-8)encodingrU   )existing_file_namer   )r   r   r   nbformatwriter   r   basenamerW   rX   rY   rZ   r   r   r   r   r
   r`   )rg   nbfdr   r   fnamer]   r^   r\   r[   rD   r   r    inner   s$   
zprefill_notebook.<locals>.inner)rV   )rT   rD   rt   r   rs   r    prefill_notebook}   s   #ru   )$__doc__rH   r   r   r;   r   os.pathr   r6   
subprocessr   tempfiler   urllib.parser   pytestr?   testpath.tempdirr   rm   nbformat.v4r   r   utilsr
   r   r   r   r   r!   fixturerD   rT   r_   ra   ru   r   r   r   r    <module>   s6    


$





