
    jr                    .   d dl mZ d dlZd dlZd dlm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d Zd'd	Zd
a ej0                  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a&d Z' ejP                  d      d        Z)d Z*da+d Z, ej0                  d       d!        Z- ej0                  d"       d#        Z.d$ Z/ G d% d&ej`                        Z1y# e$ r	 ddlmZ Y w xY w))    )annotationsN)update_wrapper)wraps)TYPE_CHECKING   )plugin_basec                \    | j                  d      fd}t        j                  |       y )N
sqlalchemyc                    |j                  dd       r  G fddt        j                        }||d<   |j                  dd       r  G fddt        j                        }||d<    j                  | fi | y )Ncallbackc                      e Zd Z	 d fd	Zy)=pytest_addoption.<locals>.make_option.<locals>.CallableActionNc                     |||       y N )selfparser	namespacevaluesoption_string	callback_s        M/tmp/pip-target-jj7clzyk/lib/python/sqlalchemy/testing/plugin/pytestplugin.py__call__zFpytest_addoption.<locals>.make_option.<locals>.CallableAction.__call__+   s     mVV<    r   )__name__
__module____qualname__r   )r   s   r   CallableActionr   *   s    CG=r   r   actionzeroarg_callbackc                  6     e Zd Z	 	 	 d fd	Z	 dfd	Z xZS )r   c           	     2    t         |   ||dd|||       y )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__6   s,     G$'5!" '!)! % r   c                     |||       y r   r   )r   r   r   r   r   r    s        r   r   zFpytest_addoption.<locals>.make_option.<locals>.CallableAction.__call__H   s     %]FFCr   )FFNr   )r   r   r   r+   r   __classcell__)r,   r    s   @r   r   z=pytest_addoption.<locals>.make_option.<locals>.CallableAction5   s&    
 ""& DHD Dr   )popargparseAction	addoption)namekwr   r   r    groups      @@r   make_optionz%pytest_addoption.<locals>.make_option&   sv    FF:t,	= = *BxL66"4d;D D0 *BxL##r   )getgroupr   setup_options)r   r6   r5   s     @r   pytest_addoptionr9   #   s'    OOL)E)$V k*r   c           	        t        j                  | j                         t         j                  st         j                  rdj                  t        t         j                        t         j                  D cg c]  }d| 	 c}z         }| j                  j                  r#| j                  xj                  d| z  c_        n|| j                  _        | j                  j                  d      r#| j                  j                  t                      t        | d      rBt        j                  | j                         t        j                   | j                  d          nr| j                  j"                  r\t$        j&                  j)                  | j                  j"                        r)t%        j*                  | j                  j"                         t        j,                  | j                         t        j.                  t1        t3        | j                  dd                   t        j4                  t6               | j                  j8                  rday y c c}w )	Nz and znot 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_configr<   configure_followerwrite_identsospathexistsremove	pre_beginset_coverage_flagboolgetattrset_fixture_functionsPytestFixtureFunctionsdump_pyannotateDUMP_PYANNOTATE)configtagnew_exprs      r   pytest_configurer^   T   s   FOO,;#;#;<<))*'2'?'?@cU|@A

 ==!!MM""hZ&88"%-FMM"%%g.%%jl3v}%55f6H6HI&&v'9'9:J'KL==%%"''..MM&&+
 IIfmm001&--(!!WV]]L%89 %%&<=}}$$ %9 As   5I
FT)autousec               #  z   K   t         rddlm}  | j                          d  t         r j	                          y y w)Nr   collect_types)rZ   pyannotate_runtimerb   startstopra   s    r   collect_types_fixturerf   }   s/     4	 s   9;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} |j                  d|j                   d       n|j                  d|        | j                  j                  j                  d      }	|	r+|	j!                  d|       |D ]  }
|	j#                  |
        y t%        d|d       |D ]  }
t%        |
        y )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
   rh   sqlalchemy.utilri   sqlalchemy.util._has_cyrj   sysflagsno_user_site__file__sqlalchemy.cyextensionrl   appendr[   rG   
get_plugin	write_sep
write_lineprint)sessionr
   rh   ri   rj   greetsitemsgsrl   pmms              r   _log_sqlalchemy_infor      s    &08%E YY33>9KD
k]"TF!,
$$%&D
 /7aHI67G6HIJ		%	%	0	01C	DB	
S%  	AMM!	 	hx( 	A!H	r   c                d    ddl m} t        |        |j                  t        j
                         y Nr   asyncio)sqlalchemy.testingr   r   _assume_asyncr   
post_begin)r|   r   s     r   pytest_sessionstartr      s!    *!+001r   c                    ddl m} |j                  t        j                         | j
                  j                  j                  r6ddlm	} |j                  | j
                  j                  j                         y y )Nr   r   ra   )r   r   _maybe_async_provisioningr   final_process_cleanupr[   rE   rY   rc   rb   
dump_stats)r|   r   rb   s      r   pytest_sessionfinishr      sR    *%%k&G&GH~~,,4  !6!6!F!FG -r   c                0    ddl m} |j                          y r   )r   r   	_shutdown)r[   r   s     r   pytest_unconfigurer      s    *r   c                    | j                   j                  j                  r=ddlm} t
        j                  j                  d      fd}|j                  |       y y )Nr   ra   lib/sqlalchemyc                    t         j                  j                  t         j                  j                  |             } dt         j                  j	                  | g      vry d| v ry | S )Nr   testing)rO   rP   normpathabspath
commonpath)filenamelib_sqlalchemys    r   _filterz)pytest_collection_finish.<locals>._filter   sZ    ww''(ABHrww'9'9>*(  H$Or   )filter_filename)	r[   rE   rY   rc   rb   rO   rP   r   init_types_collection)r|   rb   r   r   s      @r   pytest_collection_finishr      sI    ~~,,4)9:		 	++G+D! -r   c                      e Zd Zd Zd Zy)rJ   c                   ddl m} ddl m} t        j                  |j
                         dt        j                         j                  dd z  |j
                  d<   |j                  |j                  |j
                  d          y )Nr   	provisionr   ztest_%s   r=   )r   r   r   r   !memoize_important_follower_configr<   uuiduuid4hexr   create_follower_db)r   noder   r   s       r   pytest_configure_nodez XDistHooks.pytest_configure_node   sl    0.
 	55d6F6FG-69I9I!B9O-O)*))(($*:*:;K*L	
r   c                n    ddl m} ddl m} |j                  |j                  |j
                  d          y )Nr   r   r   r=   )r   r   r   r   drop_follower_dbr<   )r   r   errorr   r   s        r   pytest_testnodedownzXDistHooks.pytest_testnodedown   s-    0.))&&(8(89I(J	
r   N)r   r   r   r   r   r   r   r   rJ   rJ      s    

r   rJ   c                x  	
 ddl m} t        j                  d       	|D cg c][  }|j	                  t
        j                        :|j	                  t
        j                        j                  j                  d      s|] c}|d d  |D ch c]!  }|j	                  t
        j                        # c}
fd	
fd}|j                  |       g }|D ]E  }|j                  }|	v r"|j                  	|   |j                            5|j                  |       G t        |d       |d d  y c c}w c c}w )	Nr   r   c                 4    t        j                  t              S r   )collectionsdefaultdictrD   r   r   r   <lambda>z/pytest_collection_modifyitems.<locals>.<lambda>   s    ''- r   _c              3     K   | j                         D ]1  }t        |t        j                        r |      E d {    .| 3 y 7 wr   )collect
isinstancepytest	Collector)element
inst_or_fnr   s     r   r   z.pytest_collection_modifyitems.<locals>.collect  sD     !//+ 	!J*f&6&67":...  		!.s   9AA	Ac                    D ]  } t        | j                  dd      st        | j                  dd      rdh}nBt        | j                  dd      rddh}n&t        | j                  dd      rddh}n
t               }| j                         D ch c]  }|j                   }}||z
  }|j                  |      }|D ]  }| j                  |        t        t        j                  | j                  | j                  |            }|s| j                      |D ]  }|| j                  us| j                     }| j                  t        j                        }	t        j                  j                  |j                   |		      }
|D ]  }|
j                  |         |
      D ]   }||j                     j#                  |       "   y c c}w )
N__backend__F__only_on__backend__sparse_backend__sparse_backend__sparse_driver_backend__sparse_driver_backendr3   parent)rV   cls	frozensetiter_markersr3   union
add_markerrD   r   generate_sub_testsmodule	getparentr   ModuleClassfrom_parentr   rw   )
test_classadd_markersmarkexisting_markersall_markersmarker	sub_testssub_clsper_cls_dictr   new_clsfnr   rebuilt_itemstest_classess               r   setup_test_classesz9pytest_collection_modifyitems.<locals>.setup_test_classes  s   & ,	9J z~~}e<uA  )k)=uE/;)DeL6	B'k '1&=&=&? "		    &(88K*00=K% .%%f-. ..NNJ$5$5{I
 jnn-$ 9*..0#0#@L'11&--@F$ll66$--f 7 G #. 3**623 &g. 9$RWW-44R899?,	9 s   Gc                    | j                  t        j                        j                  | j                  t        j                        j                  | j                  fS r   )r   r   r   r3   r   )items    r   r   z/pytest_collection_modifyitems.<locals>.<lambda>M  s<    NN6==)..NN6<<(--II
 r   )key)r   r   r   r   r   r   r   r3   
startswithr   r   extendrw   sorted)r|   r[   itemsr   r   r   newitemscls_r   r   r   s           @@@r   pytest_collection_modifyitemsr      s    +++-M >>&,,'3v||,11<<SA 	E!H >CCTDNN6<<0CL!-9b %%&89H "xx= OOM$/		:;OOD!" 
E!H[ Ds   A D2&D7c                   t        j                  |      rt        j                  ||      rjddlm} |j                  rt        |      }t        | j                  |      D cg c]-  }t        j                  j                  |j                  |       / c}S t        j                  |      r-| j                  !t        j                   | j                  |      ry g S c c}w )Nr   r[   r   )inspectisclassr   
want_classr   r[   	any_async_apply_maybe_async_parametrize_clsr   r   r   r   r   
isfunctionr   want_method)	collectorr3   objr[   parametrize_clss        r   pytest_pycollect_makeitemr   U  s    s 6 6tS A-$S)C $4I4D4Dc#J	
   LL$$$--i % 
 	
 	3MM%##IMM37  	!
s   !2Cc                v    t        | d      r| j                  } t        | d      rt        j                  |       S )N__wrapped__)rK   r   r   iscoroutinefunction)r   s    r   _is_wrapped_coroutine_functionr   o  s4    
"m
$^^ "m
$ &&r**r   c                   ddl m t        |       j                         D ]  \  }}t	        |      st        |t              s"t        |dd      r0|j                  d      sBt        |      rNd}t        |t              r|j                  }d}t        fd       } ||      }|rt        |      }d|_        t        | ||        |r.| j                         dd  D ]  }|t        k7  st!        |d        | S )	Nr   r   _maybe_async_appliedFtest_Tc                0     j                   | g|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   classmethodrV   r   r   __func___pytest_fn_decoratorr   setattrmroobjectr   )	r   recurser3   valueis_classmethodr  do_asyncr   r   s	           @r   r   r   v  s    *Cy( )ee_
5+ >E#95A)259"N%-!%!A "A "%(H&x0,0H)Cx(+), 779QR= 	/Cf}"3.	/ Jr   c                P   d|j                   vr|gS |j                  }g }t        j                  |D cg c]  \  }}|	 c}} D ]  }i }t	        |D cg c]  }|d   	 c}|      D ]K  \  }}	|st        d      t        j                  d|      }
t	        |
|	j                        D ]
  \  }}|||<    M dj                  d |D              }|j                  d|}t        j                  t        ||f|      }t        | ||       |j                  |        |S c c}}w c c}w )z6implement a class-based version of pytest parametrize._sa_parametrizer   z*need argnames for class-based combinationsz,\s*r   c              3     K   | ];  }|j                   j                  d       D ]  }t        j                  dd|        = yw)-z\W N)idsplitresub).0paramtokens      r   	<genexpr>z#_parametrize_cls.<locals>.<genexpr>  sG      %
,%
  FF5"e$%
$%
s   AA)__dict__r  	itertoolsproductzip	TypeErrorr  r  r   rC   r   type__new__r
  rw   )r   r   r  classesargnameparamsfull_param_setcls_variables	_sa_paramr  argname_splitargvalparametrized_namer3   newclss                   r   r   r     s=    ,u))OG#++(7	8_Wf&	8  !+:;iYq\;^
 	)NGU  LMMHHWg6Mu||< )S%(c")	)  HH %
'%
 

 ,,(9:dD3&-@f%v+, N+ 
9
 <s   D
D#
c                   ddl m} t        | t        j                        rt
        |j                  t        j                  | j                         | j                  t        j                        at        t
        j                  d      rZdd l}|j                         at        j!                          t
        j                  j"                  D ]  }|j%                  d|        y y y y )Nr   r   __warnings__ignore)r   r   r   r   Function_current_classr   r   !start_test_class_outside_fixturesr   r   r   rK   warningscatch_warnings_current_warning_context	__enter__r1  filterwarnings)r   r   r6  warning_messages       r   pytest_runtest_setupr<    s    * $(^-C))99HH	
 5>%%~6'/'>'>'@$$..0#1#5#5#B#B C''/BC 7 .D(r   )hookwrapperc              #  "  K   ddl m} |j                  t        j                  |        d  t
        w|%|j                  t        j                        t
        urOt        t        j                  d d d        d a	d a	 |j                  t        j                  | j                         d ay y y # t        $ r}t        j                   r|j"                  sdt        j$                  z   f|_         |j"                  d   rat'        |j"                  d   t(              rDt+        |j"                        }|dxx   dt        j$                  z   z  cc<   t-        |      |_         |xj"                  dt        j$                  fz  c_         d }~ww xY w# d aw xY ww)Nr   r   z__Original test failure__:
z
__Original test failure__:
z__Original test failure__)r   r   r   r   
after_testr4  r   r   r   r8  __exit__r    stop_test_class_outside_fixturesr   	Exception_current_reportfailedr  longreprtextr   strrD   tuple)r   nextitemr   er  s        r   pytest_runtest_teardownrK    so    
 +//6	 !fll+>A $/$--dD$?'+$	#--<<dhh4 #OI B "   	 %%vv6)667AF   VVBZJqvvbz3$?<DH8)667H #4[AF 	 FF3'44 F +	. #Os7   A9F<*B+ &F+	F4CF  FF FFc                    ddl m} |j                  t        j                  | | j
                  j                  | j                  | j                         y r   )	r   r   r   r   before_testr   r   r   r3   )r   r   s     r   pytest_runtest_callrN    s<     +		r   c                (    | j                   dk(  r| ay y )Ncall)whenrD  )reports    r   pytest_runtest_logreportrS  %  s    {{f  r   class)scopec              #    K   ddl m} | j                  }t        |d      r|j	                  |j
                         d  t        |d      r|j	                  |j                         |j	                  t        j                  |       y w)Nr   r   setup_test_classteardown_test_class)	r   r   r   rK   r   rW  rX  r   stop_test_class)requestr   r   s      r   setup_class_methodsr[  +  si     *
++Cs&'S112	s)*S44544c:s   BBfunctionc              #    K   ddl m} | j                  }t        |d      r|j	                  |j
                         t        |d      r|j	                  |j                         d  |j	                  t        j                  |       t        |d      r|j	                  |j                         t        |d      r|j	                  |j                         y y w)Nr   r   
setup_testsetUptearDownteardown_test)r   r   instancerK   r   r^  r_  r   after_test_fixturesr`  ra  )rZ  r   r   s      r   setup_test_methodsrd  <  s     * D t\"T__-
 tWTZZ( 
 88$? tZ T]]+t_%T//0 &s   CC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                $    t        | |       ||   S r   )exec)codeenvfn_names      r   _exec_code_in_envz/_pytest_fn_decorator.<locals>._exec_code_in_env  s    
 	T37|r   c                    |       }|r|j                   j                  |       t        dd| j                        }|j	                   |d             d|z  } |	| d| j                        }|s/t        | d|       j                  |_        | |_        t        ||       S | j                  |_	        | j                  |_        t        | d	      r| j                  |_        |S )
N__target_fn	__orig_fn)ro  rp  r3   F)groupedzVdef %(name)s%(grouped_args)s:
    return %(__target_fn)s(%(__orig_fn)s, %(apply_kw)s)
)ro  rp  r  
pytestmark)r  r   dictr   updaterV   __defaults__r   r   r   rK   rr  )
r   add_positional_parametersspecmetadatarj  	decoratedrm  rf  rg  targets
         r   decoratez&_pytest_fn_decorator.<locals>.decorate  s    %b)$II67%2;;
 	+D%@A  &&r:BKK
	 )%,RR%@%M%MI"$&I!!)R00
 $&==I !#Ir<(')}}	$r   )r   )sqlalchemy.util.langhelpersrf  sqlalchemy.util.compatrg  )rz  r{  rm  rf  rg  s   ` @@@r   r	  r	  {  s"     @= < Or   c                  ^    e Zd 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y)rX   c                    t         j                  dk\  rt              S t        j                        rt              fd       }|S t              fd       }|S )zya conditional `@classmethod` decorator that we use only on py3.10
        on forward, for compatibility with pytest 9.1+.)	   r   c              ?  N   K    | j                   g|i |E d {    y 7 wr   r,   r   r  r4   r   s      r   wrapz8PytestFixtureFunctions.fixture_classmethod.<locals>.wrap  s#     !$..>4>2>>>s   %#%c                0     | j                   g|i |S r   r  r  s      r   r  z8PytestFixtureFunctions.fixture_classmethod.<locals>.wrap  s    dnn:t:r::r   )r   version_tupler  r   isgeneratorfunctionr   )r   r   r  s    ` r   fixture_classmethodz*PytestFixtureFunctions.fixture_classmethod  sg     6)r?"**2.r? ? K	 r; ; Kr   c                @    t        j                  j                  |i |S r   )r   skiprC  )r   r,  r4   s      r   skip_test_exceptionz*PytestFixtureFunctions.skip_test_exception  s    {{$$c0R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                  j                  dd      S )Nr[  rd  )r   r   usefixturesr  s    r   mark_base_test_classz+PytestFixtureFunctions.mark_base_test_class  s    {{&&! 
 	
r   c                    | S r   r   r   s    r   r   zPytestFixtureFunctions.<lambda>  s     r   c                \    t        | d      r| j                  S t        |       j                  S )Nr   )rK   r   r#  r  s    r   r   zPytestFixtureFunctions.<lambda>  s)    #C4CLL :>s):L:L r   )irsnc           	        ddl m t        |      dk(  rt        |d   d      rt	        |d         }|j                  dd      fd}|j                  dd      }g }d	|r| j                  }t        j                  dgt        |      D cg c]  \  }}|d
v r| c}} }	t        |      D cg c]#  \  }}||v rt        j                  |      ||   f% }
}}|D ][  t        t              sf |      \  }} |	|      dd }|rd|j                  ||dj                  fd|
D              f       ] n=|D ]8  t        t              sf |      \  }}|rd|j                  ||df       : g |D ]4  \  }}}r||fz  }t        j                  |d|i}j                  |       6 fd}|S c c}}w c c}}w )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 ];  }t        |j                        r|j                  |       +|j                  |       = ||fS r   )r   compoundrw   )r  resultgathered_exclusionsar  s       r   _filter_exclusionsz?PytestFixtureFunctions.combinations.<locals>._filter_exclusions  sU    F"$ %a!4!45'..q1MM!$	% ...r   id_F)r  r  r  r  Tr  c              3  @   K   | ]  \  }} | |              y wr   r   )r  gettercomb_fnr,  s      r   r  z6PytestFixtureFunctions.combinations.<locals>.<genexpr>  s#      !5DVWGF3K0!s   r  c                   t        j                  |       rArt        d      d| j                  vrg | _        | j                  j                  	f       | S t        j                  |       j                  dd  }|}nt        j                  d      }r6t        d |D              }d| }||gz  }t        fd       } || |f      } t        j                  j                  |	      |       S )	Nz5exclusions not supported for class level combinationsr  r   z, *c              3  D   K   | ]  }|j                  d       sd  yw)_exclusionsr   N)r   )r  r  s     r   r  zHPytestFixtureFunctions.combinations.<locals>.decorate.<locals>.<genexpr>G  s       '1<<3N's     _exclusions_c                r    |d   }|r% j                         j                  | } ||       }  | |d d i |S )Nr?  )r  add)r   r  r4   r  exlur  s        r   check_exclusionszOPytestFixtureFunctions.combinations.<locals>.decorate.<locals>.check_exclusionsM  sI    &*2h&#<:#6#6#8#<#<k#JD!%bB!49333r   )rv  )r   r   NotImplementedErrorr  r  rw   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>.decorate5  s
   r"!-O  %BKK7)+B&""))8]*CD	&55b9>>qrB# ,I " :I!#& '#/' $L 0<L>-J*"8!99I)4 *4 *7M6OB {{..y-HLLr   )r   r  lenrK   rD   r/   _combination_id_fnsoperator
itemgetter	enumerater   rH  rw   rC   r   r  )r   arg_setsr4   r  r  tobuild_pytest_paramsr  idxchar_arg_getterfns	fn_paramsparam_exclusions
parametersr  r{  r,  r  r  r  r  s                   @@@@@r   combinationsz#PytestFixtureFunctions.combinations  s2    	2x=A'(1+z"BHQK(H66*d+		/ ffUD! ""&":":
 #-- &/s^!T33 K "+3C.. $$S)+>t+DEC    !#u-&C.@.E+	+(3AB7
#%)N%,,"( !HK! ,   !#u-&C.@.E+	+#%)N%,, 0$7 1F 	(-J(#/11
LL*55E  '	($	ML {s   G6(G
c                <    |d   }t        j                  |dd  d|iS )Nr   r   r  )r   r  )r   r  idents      r   param_identz"PytestFixtureFunctions.param_ident]  s%    1||Z^666r   c                    ddl m ddl m t        |      dkD  rt	        |d         r|d   }|dd  }nd }t        j                  |i |fd}|r ||      S |S )Nr   r   r   r   c                    t        | t              }|r| j                  } j                  rj	                  |       } |rt        |       }  |       } | S r   )r   r  r  r   _maybe_async_wrapper)r   r  r   r[   fixtures     r   r  z,PytestFixtureFunctions.fixture.<locals>.wrapw  sR    'K8N[[11"5  _ BIr   )r   r[   r   r  r  r   r  )r   r,  r4   r   r  r   r[   r  s        @@@r   r  zPytestFixtureFunctions.fixturea  si    -. s8a<HSV,QBab'C B ..#,,	" 8OKr   c                @    t         j                  j                  d      S )NPYTEST_CURRENT_TEST)rO   environgetr  s    r   get_current_test_namez,PytestFixtureFunctions.get_current_test_name  s    zz~~344r   c                <    ddl m t        fd       } ||      S )Nr   r   c                2     j                   | g|i | y 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  s&    .		A 
	A |r   N)r   r   r   r  r  propertyr  r  reprrG  r  r  r  r  r  r  r   r   r   rX   rX     sY    *1  
 
	DL7*X5r   rX   )r[   zpytest.Config)T)2
__future__r   r0   r   	functoolsr   r   r   r  r  rO   r  rr   typingr   r   r   sqla_plugin_baser   ImportErrorr  r9   r^   rZ   r  rf   r   r   r   r   r   rJ   r   r   r   r   r   r4  r8  r<  hookimplrK  rN  rD  rS  r[  rd  r	  FixtureFunctionsrX   r   r   r   <module>r     sc   #   $     	 	 
    ..+b#L   @2HE(
 
2eP4+@B  C6 T"8# #8#v ! g; ;  j!51 "51|,^m[99 mY  s   D DD