o
    h                     @  s  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	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
< d3ddZed4ddZd5ddZd6dd Zejd!d"d7d&d'Zejd!d"d8d*d+Zeje d,d9d-d.Zejd:d/d0Zejd;d1d2Z dS )<    )annotations)contextmanager)isasyncgenfunctioniscoroutinefunction)AnyDict	GeneratorTuplecastN   )get_all_backendsget_asynclib)
TestRunnerzTestRunner | None_current_runner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   I/var/www/html/ai/venv/lib/python3.10/site-packages/anyio/pytest_plugin.pyextract_backend_and_options   s   
r   backend_namer   backend_optionsdict[str, Any]#Generator[TestRunner, object, None]c              	   c  s    t rt V  d S t| }d }tjd d u rtj| }z0|p i }|jdi |}|a |V  W d    n1 s9w   Y  W d a |rKtj| d S d S d a |rXtj| w w )Nr   )r   r   sniffiocurrent_async_library_cvargetsetr   reset)r   r   asynclibtokenrunnerr   r   r   
get_runner   s.   r*   configr   Nonec                 C  s   |  dd d S )NmarkerszManyio: mark the (coroutine function) test to be run asynchronously via anyio.)addinivalue_line)r+   r   r   r   pytest_configure4   s   r/   
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   run_asyncgen_fixturerun_fixture)r2   argskwargsr   r   r)   funchas_backend_argr   r   wrapper=   s   "z%pytest_fixture_setup.<locals>.wrapperr2   r2   )r8   r   r   fixturenamesargnames)r0   r1   r:   r   r7   r   pytest_fixture_setup<   s   

r>   T)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anyio
pytestmarkr   c                 s  s    | ]}|j d kV  qdS )rD   N)rA   ).0markerr   r   r   	<genexpr>Z   s    z,pytest_pycollect_makeitem.<locals>.<genexpr>r2   )istestfunctionhasattrrC   
inner_testr   get_closest_markergetattranypytestmarkusefixtures)r@   rA   rB   
inner_funcrG   own_markersr   r   r   pytest_pycollect_makeitemS   s   
rT   
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 )Nr6   r   r   r,   c                    s<   t  }||  W d    d S 1 sw   Y  d S N)r*   run_test)r6   r)   )r   r   original_funcr   r   run_with_hypothesis`   s   "z/pytest_pyfunc_call.<locals>.run_with_hypothesisr2   rC   c                   s   i | ]}| | qS r   r   )rF   arg)funcargsr   r   
<dictcomp>s   s    z&pytest_pyfunc_call.<locals>.<dictcomp>T)r6   r   r   r,   )r\   r$   r   rJ   rB   rC   rK   __qualname__r   _fixtureinfor=   r*   rX   )rU   rZ   r   testargsr)   r   )r   r   r\   rY   r   pytest_pyfunc_call^   s(   



ra   )paramsc                 C  s   | j S rW   )param)r1   r   r   r   r2   |   s   r2   c                 C  s   t | tr| S | d S )Nr   r   r   r;   r   r   r   anyio_backend_name      
re   c                 C  s   t | tri S | d S )Nr   rd   r;   r   r   r   anyio_backend_options   rf   rg   )r   r   r   r   )r   r   r   r    r   r!   )r+   r   r   r,   )r0   r   r1   r   r   r,   )r@   r   rA   r   rB   r   r   r,   )rU   r   r   rV   )r1   r   r   r   )r2   r   r   r   )r2   r   r   r    )!
__future__r   
contextlibr   inspectr   r   typingr   r   r   r	   r
   rO   r"   _core._eventloopr   r   abcr   r   __annotations__r   r*   r/   r>   hookimplrT   ra   fixturer2   re   rg   r   r   r   r   <module>   s0    






