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#   J/var/www/visachat/venv/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   sniffiocurrent_async_library_cvargetsetcallbackresetenter_contextcreate_test_runner_runner_leasesclose)r&   r'   asynclibtokenr#   r#   r$   
get_runner$   s2   
r7   configr
   Nonec                 C  s   |  dd d S )NmarkerszManyio: mark the (coroutine function) test to be run asynchronously via anyio.)addinivalue_line)r8   r#   r#   r$   pytest_configureB   s   r<   T)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 )NrB   r?   )instancer	   type__self____func____get__r%   r7   r   run_asyncgen_fixturerun_fixture)rB   r?   rA   rC   
local_funcr&   r'   runnerfunchas_backend_arghas_request_argr#   r$   wrapperL   s(   "z%pytest_fixture_setup.<locals>.wrapperrB   r?   )
rA   r
   rB   r
   r?   r   rC   r
   r   r
   )rN   r   r   fixturenamesargnames)r>   r?   rQ   original_argnamer#   rM   r$   pytest_fixture_setupJ   s$   
rW   )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 )r]   N)rZ   ).0markerr#   r#   r$   	<genexpr>   s    z,pytest_pycollect_makeitem.<locals>.<genexpr>rB   )istestfunctionhasattrr\   
inner_testr   get_closest_markergetattranypytestmarkusefixtures)rY   rZ   r[   
inner_funcr`   own_markersr#   r#   r$   pytest_pycollect_makeitem}   s   
rm   
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 )NrC   r
   r   r9   c                    s<   t  }||  W d    d S 1 sw   Y  d S N)r7   run_test)rC   rL   )r&   r'   original_funcr#   r$   run_with_hypothesis   s   "z/pytest_pyfunc_call.<locals>.run_with_hypothesisrB   r\   c                   s   i | ]}| | qS r#   r#   )r_   arg)funcargsr#   r$   
<dictcomp>   s    z&pytest_pyfunc_call.<locals>.<dictcomp>T)rC   r
   r   r9   )ru   r-   r%   rc   r[   r\   rd   __qualname__r   _fixtureinforU   r7   rq   r   r   r   r   KeyboardInterrupt
SystemExit)rn   rs   r   testargsrL   excgrpexcr#   )r&   r'   ru   rr   r$   pytest_pyfunc_call   s<   





r~   module)scopeparamsc                 C  s   | j S rp   )paramrS   r#   r#   r$   rB      s   rB   c                 C  s   t | tr| S | d S )Nr   r   r   rR   r#   r#   r$   anyio_backend_name      
r   c                 C  s   t | tri S | d S r*   r   rR   r#   r#   r$   anyio_backend_options   r   r   )r   r   r   r   )r&   r   r'   r(   r   r)   )r8   r
   r   r9   )r>   r
   r?   r
   r   r@   )rY   r
   rZ   r
   r[   r
   r   r9   )rn   r
   r   ro   )r?   r
   r   r
   )rB   r
   r   r   )rB   r
   r   r(   )/
__future__r   syscollections.abcr   r   
contextlibr   r   inspectr   r   r	   typingr
   r   rh   r+   _pytest.fixturesr   _pytest.outcomesr   _core._eventloopr   r   _core._exceptionsr   abcr   version_infoexceptiongroupr   r   __annotations__r   r3   r%   r7   r<   hookimplrW   rm   r~   fixturerB   r   r   r#   r#   r#   r$   <module>   sD    





2

$