o
    tf
                     @  s0  U 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mZ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ad
ed< daded< d ad7ddZed8ddZd9ddZd:d"d#Zejd$d%d;d)d*Zejd$d%d<d-d.Z ej!d/e d0d=d1d2Z"ej!d>d3d4Z#ej!d?d5d6Z$dS )@    )annotations)Iterator)	ExitStackcontextmanager)isasyncgenfunctioniscoroutinefunction)AnyDictTuplecastN   )get_all_backendsget_async_backend)
TestRunnerz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
   r	   r   	TypeError)r    r   \/var/www/html/software/conda/envs/catlas/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   
r.   configr   Nonec                 C  s   |  dd d S )NmarkerszManyio: mark the (coroutine function) test to be run asynchronously via anyio.)Zaddinivalue_line)r/   r   r   r   pytest_configure;   s   r2   
fixturedefrequestc                   s`    fdd}| j  t st r,d|jv r*d| jv || _ s.|  jd7  _d S d S d S d S )Nc                 ?  s    t | \}}r| |d< t||&}t r!| |E d H  n| |V  W d    d S W d    d S 1 s;w   Y  d S )Nanyio_backend)r   r.   r   Zrun_asyncgen_fixtureZrun_fixture)r5   argskwargsr    r!   runnerfuncZhas_backend_argr   r   wrapperD   s   "z%pytest_fixture_setup.<locals>.wrapperr5   r5   )r:   r   r   Zfixturenamesargnames)r3   r4   r;   r   r9   r   pytest_fixture_setupC   s   

r>   T)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 )rC   N)r@   ).0markerr   r   r   	<genexpr>a   s    z,pytest_pycollect_makeitem.<locals>.<genexpr>r5   )ZistestfunctionhasattrrB   
inner_testr   Zget_closest_markergetattranypytestmarkZusefixtures)r?   r@   rA   Z
inner_funcrE   Zown_markersr   r   r   pytest_pycollect_makeitemZ   s   
rM   
pyfuncitembool | Nonec                   s   d fdd}| j d}|ret|\ t| jdr3| jjjj|jkr1tr1|| jj_d S t| jre| j fd	d
| j	j
D }t }|| j| W d    dS 1 s^w   Y  dS d S )Nr7   r   r   r0   c                    s<   t  }||  W d    d S 1 sw   Y  d S N)r.   run_test)r7   r8   )r    r!   original_funcr   r   run_with_hypothesisg   s   "z/pytest_pyfunc_call.<locals>.run_with_hypothesisr5   rB   c                   s   i | ]}| | qS r   r   )rD   arg)funcargsr   r   
<dictcomp>z   s    z&pytest_pyfunc_call.<locals>.<dictcomp>T)r7   r   r   r0   )rU   r&   r   rG   rA   rB   rH   __qualname__r   Z_fixtureinfor=   r.   rQ   )rN   rS   r   Ztestargsr8   r   )r    r!   rU   rR   r   pytest_pyfunc_calle   s(   



rX   module)scopeparamsc                 C  s   | j S rP   )param)r4   r   r   r   r5      s   r5   c                 C  s   t | tr| S | d S )Nr   r   r   r<   r   r   r   anyio_backend_name      
r^   c                 C  s   t | tri S | d S r$   r]   r<   r   r   r   anyio_backend_options   r_   r`   )r   r   r   r   )r    r   r!   r"   r   r#   )r/   r   r   r0   )r3   r   r4   r   r   r0   )r?   r   r@   r   rA   r   r   r0   )rN   r   r   rO   )r4   r   r   r   )r5   r   r   r   )r5   r   r   r"   )%
__future__r   collections.abcr   
contextlibr   r   inspectr   r   typingr   r	   r
   r   rK   r%   Z_core._eventloopr   r   abcr   r   __annotations__r   r+   r   r.   r2   r>   ZhookimplrM   rX   Zfixturer5   r^   r`   r   r   r   r   <module>   s6    






