o
    .ѹg8                     @  s~  U d dl mZ d dlZd dlmZmZ d dlmZmZ d dl	m
Z
mZmZ d dlmZm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mZ d	dlmZ ejdk r`d dlmZ da de!d< da"de!d< d a#d>ddZ$ed?ddZ%d@d#d$Z&ej'd%d&dAd*d+Z(ej'd%d,dBd0d1Z)ej'd%d,dCd4d5Z*ej+d6e d7dDd8d9Z,ej+dEd:d;Z-ej+dFd<d=Z.dS )G    )annotationsN)	GeneratorIterator)	ExitStackcontextmanager)isasyncgenfunctioniscoroutinefunctionismethod)Anycast)
SubRequest)Exit   )get_all_backendsget_async_backend)iterate_exceptions)
TestRunner)      )ExceptionGroupzTestRunner | None_current_runnerzExitStack | None_runner_stackbackendobjectreturntuple[str, dict[str, Any]]c                 C  sf   t | tr	| i fS t | tr/t| dkr/t | d tr/t | d tr/ttttttf f | S td)N   r   r   z@anyio_backend must be either a string or tuple of (string, dict))
isinstancestrtuplelendictr   r
   	TypeError)r    r#   W/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/site-packages/anyio/pytest_plugin.pyextract_backend_and_options   s   
r%   backend_namer   backend_optionsdict[str, Any]Iterator[TestRunner]c                 c  s    t d u r.t| }t atjd d u r"tj| }ttjj	| |p%i }t
||a td7 azt V  W td8 atsMtd usCJ t  d  aa d S d S td8 atsctd us[J t  d  aa w Nr   )r   r   r   r   sniffioZcurrent_async_library_cvargetsetcallbackresetenter_contextZcreate_test_runner_runner_leasesclose)r&   r'   Zasynclibtokenr#   r#   r$   
get_runner$   s2   
r4   configr
   Nonec                 C  s   |  dd d S )NmarkerszManyio: mark the (coroutine function) test to be run asynchronously via anyio.)Zaddinivalue_line)r5   r#   r#   r$   pytest_configureB   s   r8   T)Zhookwrapper
fixturedefrequestGenerator[Any]c                 #  s    d fdd	}| j  t st rNd|jv rN|| _ | j}d| jv  s.|  jd
7  _d| jv  s<|  jd7  _z
d V W  | _ || _S  | _ || _w d V S )Nargsr
   anyio_backendr:   r   kwargsr   c                 ?  s    |j rt rt jt|j u r j|j }n }t| \}}r(| |d< r.||d< t||&}t|rB|	||E d H  n|
||V  W d    d S W d    d S 1 s\w   Y  d S )Nr=   r:   )instancer	   type__self____func____get__r%   r4   r   Zrun_asyncgen_fixtureZrun_fixture)r=   r:   r<   r>   Z
local_funcr&   r'   runnerfuncZhas_backend_argZhas_request_argr#   r$   wrapperL   s*   "z%pytest_fixture_setup.<locals>.wrapperr=   r:   )
r<   r
   r=   r
   r:   r   r>   r
   r   r
   )rF   r   r   Zfixturenamesargnames)r9   r:   rG   Zoriginal_argnamer#   rE   r$   pytest_fixture_setupJ   s$   
rK   )Ztryfirst	collectornameobjc                 C  sv   |  ||r5t|dr|jjn|}t|r7| d}t|dd}|s+tdd |D r9tj	
d| d S d S d S d S )N
hypothesisanyioZ
pytestmarkr#   c                 s  s    | ]}|j d kV  qdS )rP   N)rM   ).0markerr#   r#   r$   	<genexpr>   s    z,pytest_pycollect_makeitem.<locals>.<genexpr>r=   )ZistestfunctionhasattrrO   
inner_testr   Zget_closest_markergetattranypytestmarkZusefixtures)rL   rM   rN   Z
inner_funcrR   Zown_markersr#   r#   r$   pytest_pycollect_makeitem}   s   
rZ   
pyfuncitembool | Nonec                   s  d fdd}| j d}|rt|\ t| jdr3| jjjj|jkr1tr1|| jj_d S t| jr| j fd	d
| j	j
D }t 2}z	|| j| W n tyt } zt|D ]}t|tttfrn||qa d }~ww W d    dS 1 sw   Y  dS d S )Nr>   r
   r   r6   c                    s<   t  }||  W d    d S 1 sw   Y  d S N)r4   run_test)r>   rD   )r&   r'   original_funcr#   r$   run_with_hypothesis   s   "z/pytest_pyfunc_call.<locals>.run_with_hypothesisr=   rO   c                   s   i | ]}| | qS r#   r#   )rQ   arg)funcargsr#   r$   
<dictcomp>   s    z&pytest_pyfunc_call.<locals>.<dictcomp>T)r>   r
   r   r6   )rb   r,   r%   rT   rN   rO   rU   __qualname__r   Z_fixtureinforJ   r4   r^   r   r   r   r   KeyboardInterrupt
SystemExit)r[   r`   r   ZtestargsrD   Zexcgrpexcr#   )r&   r'   rb   r_   r$   pytest_pyfunc_call   s<   





rh   module)Zscopeparamsc                 C  s   | j S r]   )paramrI   r#   r#   r$   r=      s   r=   c                 C  s   t | tr| S | d S )Nr   r   r   rH   r#   r#   r$   anyio_backend_name      
rm   c                 C  s   t | tri S | d S r*   rl   rH   r#   r#   r$   anyio_backend_options   rn   ro   )r   r   r   r   )r&   r   r'   r(   r   r)   )r5   r
   r   r6   )r9   r
   r:   r
   r   r;   )rL   r
   rM   r
   rN   r
   r   r6   )r[   r
   r   r\   )r:   r
   r   r
   )r=   r
   r   r   )r=   r
   r   r(   )/
__future__r   syscollections.abcr   r   
contextlibr   r   inspectr   r   r	   typingr
   r   rX   r+   Z_pytest.fixturesr   Z_pytest.outcomesr   Z_core._eventloopr   r   Z_core._exceptionsr   abcr   version_infoZexceptiongroupr   r   __annotations__r   r1   r%   r4   r8   ZhookimplrK   rZ   rh   Zfixturer=   rm   ro   r#   r#   r#   r$   <module>   sD    





2

$