o
    `^h                     @  s^  U d dl mZ d dl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 d dlZd dl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 rVd 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"d>d&d'Z#ej$d(d)d?d-d.Z%ej$d(d)d@d1d2Z&ej'd3e d4dAd5d6Z(ej'dBd7d8Z)ej'dCd9d:Z*dS )D    )annotationsN)Iterator)	ExitStackcontextmanager)isasyncgenfunctioniscoroutinefunction)Anycast)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    Q/home/air/shanriGPT/back/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   
r4   configr   Nonec                 C  s   |  dd d S )NmarkerszManyio: mark the (coroutine function) test to be run asynchronously via anyio.)addinivalue_line)r5   r    r    r!   pytest_configureA   s   r9   
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"   r4   r   run_asyncgen_fixturerun_fixture)r<   argskwargsr#   r$   runnerfunchas_backend_argr    r!   wrapperJ   s   "z%pytest_fixture_setup.<locals>.wrapperr<   r<   )rC   r   r   fixturenamesargnames)r:   r;   rE   r    rB   r!   pytest_fixture_setupI   s   

rI   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 )rO   N)rL   ).0markerr    r    r!   	<genexpr>g   s    z,pytest_pycollect_makeitem.<locals>.<genexpr>r<   )istestfunctionhasattrrN   
inner_testr   get_closest_markergetattranypytestmarkusefixtures)rK   rL   rM   
inner_funcrR   own_markersr    r    r!   pytest_pycollect_makeitem`   s   
r_   
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@   rA   )r#   r$   original_funcr    r!   run_with_hypothesism   s   "z/pytest_pyfunc_call.<locals>.run_with_hypothesisr<   rN   c                   s   i | ]}| | qS r    r    )rQ   arg)funcargsr    r!   
<dictcomp>   s    z&pytest_pyfunc_call.<locals>.<dictcomp>T)r@   r   r   r6   )rg   r*   r"   rU   rM   rN   rV   __qualname__r   _fixtureinforH   r4   rc   r   r   r   r
   KeyboardInterrupt
SystemExit)r`   re   r   testargsrA   excgrpexcr    )r#   r$   rg   rd   r!   pytest_pyfunc_callk   s<   





rp   module)scopeparamsc                 C  s   | j S rb   )param)r;   r    r    r!   r<      s   r<   c                 C  s   t | tr| S | d S )Nr   r   r   rF   r    r    r!   anyio_backend_name      
rv   c                 C  s   t | tri S | d S r'   ru   rF   r    r    r!   anyio_backend_options   rw   rx   )r   r   r   r   )r#   r   r$   r%   r   r&   )r5   r   r   r6   )r:   r   r;   r   r   r6   )rK   r   rL   r   rM   r   r   r6   )r`   r   r   ra   )r;   r   r   r   )r<   r   r   r   )r<   r   r   r%   )+
__future__r   syscollections.abcr   
contextlibr   r   inspectr   r   typingr   r	   rZ   r(   _pytest.outcomesr
   _core._eventloopr   r   _core._exceptionsr   abcr   version_infoexceptiongroupr   r   __annotations__r   r0   r"   r4   r9   rI   hookimplr_   rp   fixturer<   rv   rx   r    r    r    r!   <module>   s@    







$