
    [hl                    ,   d dl mZ d dlZd dlZd dlmZ d dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZ d dlZd dlZ	 esd dlZn# e$ r	 ddlmZ Y nw xY wd Zd(d
Zda ej        d          d             Zd Zd Zd Zd Zd Z G d d          Zd Zd Z d Z!d)dZ"d Z#da$d Z% ej&        d          d             Z'd Z(da)d Z* ej        d !          d"             Z+ ej        d#!          d$             Z,d% Z- G d& d'ej.                  Z/dS )*    )annotationsN)update_wrapper)TYPE_CHECKING   )plugin_basec                d    |                      d          fd}t          j        |           d S )N
sqlalchemyc                   |                     dd           r G fddt          j                  }||d<   |                     dd           r G fddt          j                  }||d<    j        | fi | d S )Ncallbackc                      e Zd Z	 d fd	ZdS )=pytest_addoption.<locals>.make_option.<locals>.CallableActionNc                "     |||           d S N )selfparser	namespacevaluesoption_string	callback_s        u/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/testing/plugin/pytestplugin.py__call__zFpytest_addoption.<locals>.make_option.<locals>.CallableAction.__call__*   s     ImVV<<<<<    r   )__name__
__module____qualname__r   )r   s   r   CallableActionr   )   s6        CG= = = = = = = =r   r   actionzeroarg_callbackc                  6     e Zd Z	 	 	 d fd	Z	 dfd	Z xZS )r   FNc           	     X    t                                          ||dd|||           d S )Nr   T)option_stringsdestnargsconstdefaultrequiredhelp)super__init__)r   r"   r#   r&   r'   r(   	__class__s         r   r*   zFpytest_addoption.<locals>.make_option.<locals>.CallableAction.__init__5   sE     GG$$'5!" '!)! %     r   c                "     |||           d S r   r   )r   r   r   r   r   r   s        r   r   zFpytest_addoption.<locals>.make_option.<locals>.CallableAction.__call__G   s      %$]FFCCCCCr   )FFNr   )r   r   r   r*   r   __classcell__)r+   r   s   @r   r   z=pytest_addoption.<locals>.make_option.<locals>.CallableAction4   sx        
 ""     & DHD D D D D D D D D Dr   )popargparseAction	addoption)namekwr   r   r   groups      @@r   make_optionz%pytest_addoption.<locals>.make_option%   s    FF:t,,	 	*= = = = = = = = = = *BxL66"4d;; 	*D D D D D D D D D D0 *BxL#######r   )getgroupr   setup_options)r   r5   r4   s     @r   pytest_addoptionr8   "   sG    OOL))E)$ )$ )$ )$ )$V k*****r   configpytest.Configc           	        t          j        | j                   t           j        st           j        rtd                    t          t           j                  d t           j        D             z             }| j        j        r| j        xj        d| z  c_        n|| j        _        | j	        
                    d          r&| j	                            t                                 t          | d          r9t          j        | j                   t          j        | j        d                    nS| j        j        rGt$          j                            | j        j                  rt%          j        | j        j                   t          j        | j                   t          j        t1          t3          | j        dd                               t          j        t6                     | j        j        rdad S d S )	Nz and c                    g | ]}d | S )znot r   ).0tags     r   
<listcomp>z$pytest_configure.<locals>.<listcomp>X   s    @@@|c||@@@r   xdistworkerinputfollower_ident
cov_sourceFT)r   read_configrootpathexclude_tagsinclude_tagsjoinlistoptionmarkexprpluginmanager	haspluginregister
XDistHookshasattr!restore_important_follower_configrA   configure_followerwrite_identsospathexistsremove	pre_beginset_coverage_flagboolgetattrset_fixture_functionsPytestFixtureFunctionsdump_pyannotateDUMP_PYANNOTATE)r9   new_exprs     r   pytest_configurera   S   s   FO,,, 	.;#; 	.<<)**@@{'?@@@A
 

 =! 	.M""&8h&8&88"""%-FM"%%g.. 4%%jll333v}%% 25f6HIII&v'9:J'KLLLL=% 	2"'..M&+
 +
 	2 Ifm0111&-(((!WV]L%8899   %&<===}$  r   FT)autousec               #     K   t           rddlm}  |                                  d V  t           r|                                  d S d S )Nr   collect_types)r_   pyannotate_runtimere   startstoprd   s    r   collect_types_fixtureri   |   se       444444	EEE  r   c                   dd l }ddl m} ddlm} ddlm} d}t          j        j        rdnd}d| d	| d
d|j	         g} |            r%ddl
m} |                    d|j	         d           n|                    d|            | j        j                            d          }	|	r2|	                    d|           |D ]}
|	                    |
           d S t%          d|d           |D ]}
t%          |
           d S )Nr   )__version__)has_compiled_ext)_CYEXTENSION_MSGzsqlalchemy installationzno user sitezuser site loadedzSQLAlchemy z ()zPath: )utilz!compiled extension enabled, e.g.  z compiled extension not enabled; terminalreporter=z=========================)r	   rk   sqlalchemy.utilrl   sqlalchemy.util._has_cyrm   sysflagsno_user_site__file__sqlalchemy.cyextensionro   appendr9   rL   
get_plugin	write_sep
write_lineprint)sessionr	   rk   rl   rm   greetsitemsgsro   pmms              r   _log_sqlalchemy_infor      s   &&&&&&000000888888%E Y3K>>9KD,k,,T,,,&$&&D
  K//////HHHHIIIII7GIIJJJ		%	0	01C	D	DB	 
S%    	 	AMM!	 	 	hx((( 	 	A!HHHH	 	r   c                n    ddl m} t          |            |                    t          j                   d S Nr   asyncio)sqlalchemy.testingr   r   _assume_asyncr   
post_begin)r   r   s     r   pytest_sessionstartr      s?    ******!!!+011111r   c                    ddl m} |                    t          j                   | j        j        j        r,ddlm	} |
                    | j        j        j                   d S d S )Nr   r   rd   )r   r   _maybe_async_provisioningr   final_process_cleanupr9   rJ   r^   rf   re   
dump_stats)r   r   re   s      r   pytest_sessionfinishr      s|    ******%%k&GHHH~, H444444  !6!FGGGGGH Hr   c                :    ddl m} |                                 d S r   )r   r   	_shutdown)r9   r   s     r   pytest_unconfigurer      s,    ******r   c                    | j         j        j        rBddlm} t
          j                            d          fd}|                    |           d S d S )Nr   rd   lib/sqlalchemyc                    t           j                            t           j                            |                     } dt           j                            | g          vrd S d| v rd S | S )Nr   testing)rT   rU   normpathabspath
commonpath)filenamelib_sqlalchemys    r   _filterz)pytest_collection_finish.<locals>._filter   sk    w''(A(ABBHrw'9'9>*( (   tH$$tOr   )filter_filename)	r9   rJ   r^   rf   re   rT   rU   r   init_types_collection)r   re   r   r   s      @r   pytest_collection_finishr      s~    ~, E444444)9::		 		 		 		 		 	++G+DDDDD!E Er   c                      e Zd Zd Zd ZdS )rO   c                    ddl m} ddl m} t          j        |j                   dt          j                    j        dd         z  |j        d<   |	                    |j
        |j        d                    d S )Nr   	provisionr   ztest_%s   rB   )r   r   r   r   !memoize_important_follower_configrA   uuiduuid4hexr   create_follower_db)r   noder   r   s       r   pytest_configure_nodez XDistHooks.pytest_configure_node   s    000000......
 	5d6FGGG-69I!B$9O-O)*))($*:;K*L	
 	
 	
 	
 	
r   c                j    ddl m} ddl m} |                    |j        |j        d                    d S )Nr   r   r   rB   )r   r   r   r   drop_follower_dbrA   )r   r   errorr   r   s        r   pytest_testnodedownzXDistHooks.pytest_testnodedown   sY    000000......))&(89I(J	
 	
 	
 	
 	
r   N)r   r   r   r   r   r   r   r   rO   rO      s2        
 
 

 
 
 
 
r   rO   c                  	
 ddl m} t          j        d           	d |D             |d d <   d |D             
fd	
fd}|                    |           g }|D ]I}|j        }|	v r'|                    	|         |j                            4|                    |           Jt          |d 	          |d d <   d S )
Nr   r   c                 4    t          j        t                    S r   )collectionsdefaultdictrI   r   r   r   <lambda>z/pytest_collection_modifyitems.<locals>.<lambda>   s    '-- r   c                    g | ]Z}|                     t          j                  !|                     t          j                  j                            d          X|[S )N_)	getparentpytestClassr2   
startswithr=   items     r   r?   z1pytest_collection_modifyitems.<locals>.<listcomp>   s]       >>&,''3v|,,1<<SAA 4 	333r   c                L    h | ]!}|                     t          j                  "S r   )r   r   r   r   s     r   	<setcomp>z0pytest_collection_modifyitems.<locals>.<setcomp>  s&    CCCTDNN6<00CCCr   c              3     K   |                                  D ]2}t          |t          j                  r |          E d {V  .|V  3d S r   )collect
isinstancer   	Collector)element
inst_or_fnr   s     r   r   z.pytest_collection_modifyitems.<locals>.collect  ss      !//++ 	! 	!J*f&677 !"7:..........     		! 	!r   c                    D ]} t                      }t          | j        dd          st          | j        dd          rdh}n(t          | j        dd          rdh}nt                      }d |                                 D             }||z
  }|                    |          }|D ]}|                     |           t          j        | j        | j	        |          D ]}|| j        ur| j                 }| 
                    t          j                  }t          j                            |j        |          }|D ]}|                    |            
|          D ]"}	||	j                                     |	           #d S )	N__backend__F__only_on__backend__sparse_backend__sparse_backendc                    h | ]	}|j         
S r   )r2   )r=   marks     r   r   zLpytest_collection_modifyitems.<locals>.setup_test_classes.<locals>.<setcomp>  s'          "	     r   r2   parent)setr[   cls	frozensetiter_markersunion
add_markerr   generate_sub_testsmoduler   r   Moduler   from_parentr   r2   rz   )
test_classadd_markersexisting_markersall_markersmarkersub_clsper_cls_dictr   new_clsfnr   rebuilt_itemstest_classess             r   setup_test_classesz9pytest_collection_modifyitems.<locals>.setup_test_classes  s   & %	9 %	9J %%Kz~}e<< *uA A *  )k)=uEE */0'kk   &0&=&=&?&?      &(88K*00==K% . .%%f----&9
 1;  9 9 *.00#0#@L'11&-@@F$l66$-f 7  G #. 3 3**62222%gg.. 9 9$RW-44R88889-%	9 %	9r   c                    |                      t          j                  j        |                      t          j                  j        | j        fS r   )r   r   r   r2   r   )r   s    r   r   z/pytest_collection_modifyitems.<locals>.<lambda>E  s6    NN6=)).NN6<((-I
 r   )key)
r   r   r   r   r   r   extendr2   rz   sorted)r   r9   itemsr   r   newitemsr   cls_r   r   r   s           @@@r   pytest_collection_modifyitemsr      sL    +*****+-- M   E!!!H DCUCCCL! ! ! ! !&9 &9 &9 &9 &9 &9 &9T %%&8999H " "x=  OOM$/	:;;;;OOD!!!! 
 
  E!!!HHHr   c                B    t          j        |          rRt          j        ||          r=ddlm} |j        rt          |          } fdt           j	        |          D             S t          j
        |          r# j        t          j         j        |          rd S g S )Nr   r9   c                \    g | ](}t           j                            |j                   )S )r   )r   r   r   r   )r=   parametrize_cls	collectors     r   r?   z-pytest_pycollect_makeitem.<locals>.<listcomp>T  sJ     
 
 
   L$$$-i %  
 
 
r   )inspectisclassr   
want_classr   r9   	any_async_apply_maybe_async_parametrize_clsr   
isfunctionr   want_method)r   r2   objr9   s   `   r   pytest_pycollect_makeitemr   M  s    s  6tS A A ------ 	*$S))C
 
 
 
 $4I4Dc#J#J	
 
 
 	
 	3
M%#IM377 &
 t 	r   c                x    t          | d          r| j        } t          | d          t          j        |           S )N__wrapped__)rP   r   r   iscoroutinefunction)r   s    r   _is_wrapped_coroutine_functionr  g  sB    
"m
$
$ ^ "m
$
$  &r***r   c                X   ddl m t          |                                           D ]\  }}t	          |          st          |t                    rt          |dd          s|                    d          rut          |          sfd}t          |t                    r	|j
        }d}t          fd            } ||          }|rt          |          }d|_        t          | ||           |r:|                                 dd          D ]}|t          k    rt!          |d           | S )	Nr   r   _maybe_async_appliedFtest_Tc                &     j         | g|R i |S r   )_maybe_asyncr   argskwargsr   s      r   
make_asyncz&_apply_maybe_async.<locals>.make_async}  s&    +w+B@@@@@@@r   r   )r   r   varsr   callabler   classmethodr[   r   r  __func___pytest_fn_decoratorr  setattrmroobjectr   )	r   recurser2   valueis_classmethodr  do_asyncr   r   s	           @r   r   r   n  sj   ******Cyy(( ) )ee__	) *5+ > >	)E#95AA	) ))	) 3599		) #N%-- &!%!A A A A "!A "z%((H 1&x00,0H)Cx((( /7799QRR= 	/ 	/Cf}}"3...Jr   c                   d|j         vr|gS |j        }g }t          j        d |D              D ]}i }t	          d |D             |          D ]K\  }}|st          d          t          j        d|          }t	          ||j                  D ]
\  }	}
|
||	<   Ld	                    d |D                       }|j
        d|}t                              t          ||f|          }t          | ||           |                    |           |S )z6implement a class-based version of pytest parametrize._sa_parametrizec                    g | ]\  }}|S r   r   )r=   argnameparamss      r   r?   z$_parametrize_cls.<locals>.<listcomp>  s    	8	8	8_Wf&	8	8	8r   c                    g | ]
}|d          S )r   r   )r=   	_sa_params     r   r?   z$_parametrize_cls.<locals>.<listcomp>  s    ;;;iYq\;;;r   z*need argnames for class-based combinationsz,\s*r   c              3  |   K   | ]7}|j                             d           D ]}t          j        dd|          V  8dS )-z\W N)idsplitresub)r=   paramtokens      r   	<genexpr>z#_parametrize_cls.<locals>.<genexpr>  si       %
 %
,,%
 %
  F5"e$$%
 %
 %
 %
 %
 %
 %
r   )__dict__r  	itertoolsproductzip	TypeErrorr$  r#  r   rH   r   type__new__r  rz   )r   r   r  classesfull_param_setcls_variablesr  r&  argname_splitargvalparametrized_namer2   newclss                 r   r   r     sk    ,,u)OG#+	8	8	8	8	8   !;;?;;;^
 
 	) 	)NGU  N LMMMHWg66Mu|<< ) )S%(c"")HH %
 %
'%
 %
 %
 
 

 ,,,(9(9:dD3&-@@f%%%vNr   c                    ddl m} t          | t          j                  rMt
          H|                    t          j        | j	                   | 
                    t          j                  ad S d S d S r   )r   r   r   r   Function_current_classr   r   !start_test_class_outside_fixturesr   r   r   r   r   s     r   pytest_runtest_setupr=    s{    ****** $(( 6^-C))9H	
 	
 	
 556 6-C-Cr   )hookwrapperc              #    K   ddl m} |                    t          j        |            d V  t
          )|'|                    t          j                  t
          urd a	 |	                    t          j
        | j                   n# t          $ r}t          j        r|j        sdt          j        z   f|_        n|j        d         rft#          |j        d         t$                    rFt'          |j                  }|dxx         dt          j        z   z  cc<   t)          |          |_        n|xj        dt          j        fz  c_         d }~ww xY w	 d ad S # d aw xY wd S d S )Nr   r   z__Original test failure__:
z
__Original test failure__:
z__Original test failure__)r   r   r  r   
after_testr:  r   r   r   r    stop_test_class_outside_fixturesr   	Exception_current_reportfailedr	  longreprtextr   strrI   tuple)r   nextitemr   er	  s        r   pytest_runtest_teardownrK    s     
 +*****/666	EEE !fl++>AA	#--<dh     	 	 	 % v 6)67AFF VBZ Jqvbz3$?$? <<DHHH8)67HHH #4[[AFFFF3'4 FF +	4 #OOOdO""""E "! BAs+   !%B E 
EB9E

EE Ec                    ddl m} |                    t          j        | | j        j        | j        | j                   d S r   )	r   r   r  r   before_testr   r   r   r2   r<  s     r   pytest_runtest_callrN    sS     +*****	    r   c                $    | j         dk    r| ad S d S )Ncall)whenrD  )reports    r   pytest_runtest_logreportrS    s     {f  r   class)scopec              #    K   ddl m} | j        }t          |d          r|                    |j                   d V  t          |d          r|                    |j                   |                    t          j        |           d S )Nr   r   setup_test_classteardown_test_class)	r   r   r   rP   r  rW  rX  r   stop_test_class)requestr   r   s      r   setup_class_methodsr[    s      ******
+Cs&'' 3S1222	EEEs)** 6S45554c:::::r   functionc              #    K   ddl m} | j        }t          |d          r|                    |j                   t          |d          r|                    |j                   d V  |                    t          j        |           t          |d          r|                    |j	                   t          |d          r|                    |j
                   d S d S )Nr   r   
setup_testsetUptearDownteardown_test)r   r   instancerP   r  r^  r_  r   after_test_fixturesr`  ra  )rZ  r   r   s      r   setup_test_methodsrd  $  s      ****** D t\"" .T_---
 tW )TZ((( 
EEE 8$??? tZ   ,T]+++t_%% 1T/000001 1r   c                >     ddl m ddlm d d fd	}|S )z:Port of langhelpers.decorator with pytest-specific tricks.r   )format_argspec_plus)inspect_getfullargspecc                2    t          | |           ||         S r   )exec)codeenvfn_names      r   _exec_code_in_envz/_pytest_fn_decorator.<locals>._exec_code_in_envi  s    
 	T37|r   r   c                    |           }|r|j                             |           t          dd| j                  }|                     |d                     d|z  } |	| d| j                  }|s2t          | d|           j        |_        | |_        t          ||           S | j	        |_	        | j        |_        t          | d	          r| j        |_        |S )
N__target_fn	__orig_fn)ro  rp  r2   F)groupedzVdef %(name)s%(grouped_args)s:
    return %(__target_fn)s(%(__orig_fn)s, %(apply_kw)s)
)ro  rp  r  
pytestmark)r	  r   dictr   updater[   __defaults__r   r   r   rP   rr  )
r   add_positional_parametersspecmetadatarj  	decoratedrm  rf  rg  targets
         r   decoratez&_pytest_fn_decorator.<locals>.decorateq  s   %%b))$ 	8I6777%2;
 
 
 	++D%@@@AAA 	 	 &%&r::BK
 
	 ) 	%,RR%@%@%MI"$&I!!)R000
 $&=I !#Ir<(( 5')}	$r   )r   )sqlalchemy.util.langhelpersrf  sqlalchemy.util.compatrg  )rz  r{  rm  rf  rg  s   ` @@@r   r  r  c  sq     @?????======          B Or   c                  `    e Zd Zd Zed             Zd Zd eed dZ	d Z
d Zd	 Zd
 Zd ZdS )r]   c                .    t          j        j        |i |S r   )r   skiprC  )r   r4  r3   s      r   skip_test_exceptionz*PytestFixtureFunctions.skip_test_exception  s    {$c0R000r   c                    t           j        S r   )r   r   r   s    r   add_to_markerz$PytestFixtureFunctions.add_to_marker  s
    {r   c                B    t           j                            dd          S )Nr[  rd  )r   r   usefixturesr  s    r   mark_base_test_classz+PytestFixtureFunctions.mark_base_test_class  s"    {&&!#7
 
 	
r   c                    | S r   r   r   s    r   r   zPytestFixtureFunctions.<lambda>  s     r   c                X    t          | d          r| j        nt          |           j        S )Nr   )rP   r   r.  r  s    r   r   zPytestFixtureFunctions.<lambda>  s(    #C44LCLL$s)):L r   )irsnc           	        ddl m t          |          dk    r+t          |d         d          rt	          |d                   }|                    dd          fd}|                    dd          }g }d	|r| j        t          j        dgd
 t          |          D             R  }fdt          |          D             }|D ]vt          t                    sf |          \  }}	 ||          dd         }
|	rd|                    |
|	d                    fd|D                       f           wnG|D ]Dt          t                    sf |          \  }}	|	rd|                    ||	df           Eg |D ]4\  }
}	}r|
|	fz  }
t          j        |
d|i}                    |           5fd}|S )a  Facade for pytest.mark.parametrize.

        Automatically derives argument names from the callable which in our
        case is always a method on a class with positional arguments.

        ids for parameter sets are derived using an optional template.

        r   )
exclusionsr   __next__argnamesNc                    g }g }| D ]B}t          |j                  r|                    |           -|                    |           C||fS r   )r   compoundrz   )r	  resultgathered_exclusionsar  s       r   _filter_exclusionsz?PytestFixtureFunctions.combinations.<locals>._filter_exclusions  sj    F"$ % %a!455 %'..q1111MM!$$$$...r   id_Fc                     g | ]\  }}|d v 	|S ))r  r  r  r  r   )r=   idxchars      r   r?   z7PytestFixtureFunctions.combinations.<locals>.<listcomp>  s2       !T333 333r   c                V    g | ]%\  }}|v 	t          j        |          |         f&S r   )operator
itemgetter)r=   r  r  _combination_id_fnss      r   r?   z7PytestFixtureFunctions.combinations.<locals>.<listcomp>  sI       C... $S))+>t+DE...r   Tr   c              3  F   K   | ]\  }} | |                    V  d S r   r   )r=   gettercomb_fnr4  s      r   r(  z6PytestFixtureFunctions.combinations.<locals>.<genexpr>  sJ       ! !5DVWGGFF3KK00! ! ! ! ! !r   r"  c                   t          j        |           r?rt          d          d| j        vrg | _        | j                            	f           | S t          j        |           j        dd          }|}nt          j	        d          }rDt          d |D                       }d| }||gz  }t          fd            } || |f          } t          j                            |	          |           S )	Nz5exclusions not supported for class level combinationsr  r   z, *c              3  D   K   | ]}|                     d           dV  dS )_exclusionsr   N)r   )r=   r  s     r   r(  zHPytestFixtureFunctions.combinations.<locals>.decorate.<locals>.<genexpr>  sG       ' '1<<3N3N'' ' ' ' ' 'r   _exclusions_c                    |d         }|r'                                  j        | } ||           }  | |d d         i |S )Nr@  )r  add)r   r	  r3   r  exlur  s        r   check_exclusionszOPytestFixtureFunctions.combinations.<locals>.decorate.<locals>.check_exclusions!  sY    &*2h& *#<:#6#6#8#8#<k#JD!%bB!r493333r   )rv  )r   r   NotImplementedErrorr)  r  rz   getfullargspecr	  r$  r#  sumr  r   r   parametrize)
r   _fn_argnames	_argnamesexisting_exlcurrent_exclusion_namer  r  r  has_exclusionspytest_paramss
         r   r{  z5PytestFixtureFunctions.combinations.<locals>.decorate	  s_   r"" #M! -O   %BK77)+B&"))8]*CDDD	&5b99>qrrB# ,II " : :I! #& ' '#/' ' ' $ $L .KL-J-J*"8!99I)4 4 4 4 *)4 *)7M6O  B {..y-HHLLLr   )r   r  lenrP   rI   r.   r  r  r  	enumerater   rH  rz   rH   r   r&  )r   arg_setsr3   r  r  tobuild_pytest_params_arg_getterfns	fn_paramsparam_exclusions
parametersr&  r{  r  r4  r  r  r  r  s                @@@@@@r   combinationsz#PytestFixtureFunctions.combinations  s    	211111x==A'(1+z"B"BHQK((H66*d++		/ 		/ 		/ 		/ 		/ ffUD!! " 5	"&":
 #- %.s^^    K   !*3  C    !#u-- !&C.@.@.E.E+	+([33ABB7
# *%)N%,,"( ! ! ! !HK! ! !     ,    !#u-- !&C.@.@.E.E+	+# *%)N%,, 0$7    1F 	( 	(-J(# 2/11
L*555E  ''''$	M $	M $	M $	M $	M $	M $	M $	ML r   c                D    |d         }t          j        |dd          d|iS )Nr   r   r"  )r   r&  )r   r  idents      r   param_identz"PytestFixtureFunctions.param_ident1  s(    1|Z^6666r   c                    ddl m ddl m t          |          dk    r(t	          |d                   r|d         }|dd          }nd }t          j        |i |fd}|r ||          S |S )Nr   r   r   r   c                V    j         r                    |           }  |           } | S r   )r   _maybe_async_wrapper)r   r   r9   fixtures    r   wrapz,PytestFixtureFunctions.fixture.<locals>.wrapK  s5     611"55 BIr   )r   r9   r   r  r  r   r  )r   r4  r3   r   r  r   r9   r  s        @@@r   r  zPytestFixtureFunctions.fixture5  s    ------...... s88a<<HSV,,<QBabb'CC B .#,,,	 	 	 	 	 	 	  	488OKr   c                @    t           j                            d          S )NPYTEST_CURRENT_TEST)rT   environgetr  s    r   get_current_test_namez,PytestFixtureFunctions.get_current_test_nameZ  s    z~~3444r   c                J    ddl m t          fd            } ||          S )Nr   r   c                *     j         | g|R i | d S r   )_run_coroutine_functionr  s      r   r{  z3PytestFixtureFunctions.async_test.<locals>.decorate`  s,    +G+B@@@@@@@@@r   )r   r   r  )r   r   r{  r   s      @r   
async_testz!PytestFixtureFunctions.async_test]  sN    ......		A 	A 	A 	A 
		A x||r   N)r   r   r   r  propertyr  r  reprrG  r  r  r  r  r  r  r   r   r   r]   r]     s        1 1 1   X
 
 
 _
 
	 D D DL7 7 7# # #J5 5 5    r   r]   )r9   r:   )T)0
__future__r   r/   r   	functoolsr   r   r*  r  rT   r$  ru   typingr   r   r   sqla_plugin_baser   ImportErrorr!  r8   ra   r_   r  ri   r   r   r   r   r   rO   r   r   r  r   r   r:  r=  hookimplrK  rN  rD  rS  r[  rd  r  FixtureFunctionsr]   r   r   r   <module>r     s    # " " " " "      $ $ $ $ $ $       				 				 



               /....   
.+ .+ .+b# # # #L      @2 2 2H H H  E E E(
 
 
 
 
 
 
 
2^ ^ ^B  4+ + +   @  B 6 6 6& T"""2# 2# #"2#j   ! ! ! g; ; ;  j!!!51 51 "!51|/ / /dO O O O O[9 O O O O Os   A AA