
    g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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jL                  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/y# e$ r	 ddlmZ Y w xY w)(    )annotationsN)update_wrapper)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        e/var/www/html/AdoubleTech/venv/lib/python3.12/site-packages/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__5   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__G   s     %]FFCr   )FFNr   )r   r   r   r*   r   __classcell__)r+   r   s   @r   r   z=pytest_addoption.<locals>.make_option.<locals>.CallableAction4   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   r5   r4   s     @r   pytest_addoptionr8   "   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]   S   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)rY   pyannotate_runtimera   startstopr`   s    r   collect_types_fixturere   |   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	   rg   sqlalchemy.utilrh   sqlalchemy.util._has_cyri   sysflagsno_user_site__file__sqlalchemy.cyextensionrk   appendrZ   rF   
get_plugin	write_sep
write_lineprint)sessionr	   rg   rh   ri   greetsitemsgsrk   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   r`   )r   r   _maybe_async_provisioningr   final_process_cleanuprZ   rD   rX   rb   ra   
dump_stats)r{   r   ra   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)rZ   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   r`   lib/sqlalchemyc                    t         j                  j                  t         j                  j                  |             } dt         j                  j	                  | g      vry d| v ry | S )Nr   testing)rN   rO   normpathabspath
commonpath)filenamelib_sqlalchemys    r   _filterz)pytest_collection_finish.<locals>._filter   sZ    ww''(ABHrww'9'9>*(  H$Or   )filter_filename)	rZ   rD   rX   rb   ra   rN   rO   r   init_types_collection)r{   ra   r   r   s      @r   pytest_collection_finishr      sI    ~~,,4)9:		 	++G+D! -r   c                      e Zd Zd Zd Zy)rI   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   rI   rI      s    

r   rI   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defaultdictrC   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   D ]  } t               }t        | j                  dd      st        | j                  dd      rdh}n%t        | j                  dd      rdh}n
t               }| j	                         D ch c]  }|j
                   }}||z
  }|j                  |      }|D ]  }| j                  |        t        j                  | j                  | 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r2   parent)setrU   cls	frozensetiter_markersr2   union
add_markerr   generate_sub_testsmodule	getparentr   ModuleClassfrom_parentr   rv   )
test_classadd_markersmark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   & %	9J %Kz~~}e<uA  )k)=uE/0'k '1&=&=&? "		    &(88K*00=K% .%%f-. '99
 1 1; 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   ;Fc                    | j                  t        j                        j                  | j                  t        j                        j                  | j                  fS r   )r   r   r   r2   r   )items    r   r   z/pytest_collection_modifyitems.<locals>.<lambda>E  s<    NN6==)..NN6<<(--II
 r   )key)r   r   r   r   r   r   r   r2   
startswithr   r   extendrv   sorted)r{   rZ   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!&9T %%&89H "xx= OOM$/		:;OOD!" 
E!HM 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   rZ   r   )inspectisclassr   
want_classr   rZ   	any_async_apply_maybe_async_parametrize_clsr   r   r   r   r   
isfunctionr   want_method)	collectorr2   objrZ   parametrize_clss        r   pytest_pycollect_makeitemr   M  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__)rJ   r   r   iscoroutinefunction)r   s    r   _is_wrapped_coroutine_functionr   g  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   classmethodrU   r   r   __func___pytest_fn_decoratorr   setattrmroobjectr   )	r   recurser2   valueis_classmethodr  do_asyncr   r   s	           @r   r   r   n  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   rB   r   type__new__r  rv   )r   r   r  classesargnameparamsfull_param_setcls_variables	_sa_paramr  argname_splitargvalparametrized_namer2   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                        rQt
        J|j                  t        j                  | j                         | j                  t        j                        ay y y r   )r   r   r   r   Function_current_classr   r   !start_test_class_outside_fixturesr   r   r   r   r   s     r   pytest_runtest_setupr2    sU    * $(^-C))99HH	
 5 .D(r   )hookwrapperc              #    K   ddl m} |j                  t        j                  |        d  t
        X|%|j                  t        j                        t
        ur0d 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_testr/  r   r   r   r    stop_test_class_outside_fixturesr   	Exception_current_reportfailedr   longreprtextr   strrC   tuple)r   nextitemr   er   s        r   pytest_runtest_teardownr@    sN    
 +//6	 !fll+>A	#--<<dhh4 #O? B "  	 %%vv6)667AF   VVBZJqvvbz3$?<DH8)667H #4[AF 	 FF3'44 F +	. #Os7   AE0*B E0	E&CE!!E&&E) )E--E0c                    ddl m} |j                  t        j                  | | j
                  j                  | j                  | j                         y r   )	r   r   r   r   before_testr   r   r   r2   r1  s     r   pytest_runtest_callrC    s<     +		r   c                (    | j                   dk(  r| ay y )Ncall)whenr9  )reports    r   pytest_runtest_logreportrH    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   rJ   r   rL  rM  r   stop_test_class)requestr   r   s      r   setup_class_methodsrP    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   instancerJ   r   rS  rT  r   after_test_fixturesrU  rV  )rO  r   r   s      r   setup_test_methodsrY  $  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_envi  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)rd  re  r2   F)groupedzVdef %(name)s%(grouped_args)s:
    return %(__target_fn)s(%(__orig_fn)s, %(apply_kw)s)
)rd  re  r  
pytestmark)r   r   dictr   updaterU   __defaults__r   r   r   rJ   rg  )
r   add_positional_parametersspecmetadatar_  	decoratedrb  r[  r\  targets
         r   decoratez&_pytest_fn_decorator.<locals>.decorateq  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.langhelpersr[  sqlalchemy.util.compatr\  )ro  rp  rb  r[  r\  s   ` @@@r   r  r  c  s#     @= B Or   c                  X    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y)rW   c                @    t        j                  j                  |i |S r   )r   skipr8  )r   r)  r3   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 )NrP  rY  )r   r   usefixturesrx  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                \    t        | d      r| j                  S t        |       j                  S )Nr   )rJ   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   compoundrv   )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>  s       '1<<3N's     _exclusions_c                r    |d   }|r% j                         j                  | } ||       }  | |d d i |S )Nr5  )r  add)r   r   r3   r  exlur  s        r   check_exclusionszOPytestFixtureFunctions.combinations.<locals>.decorate.<locals>.check_exclusions!  sI    &*2h&#<:#6#6#8#<#<k#JD!%bB!49333r   )rk  )r   r   NotImplementedErrorr  r  rv   getfullargspecr   r  r  sumr  r   r   parametrize)
r   _fn_argnames	_argnamesexisting_exlcurrent_exclusion_namer  r  r  has_exclusionspytest_paramss
         r   rp  z5PytestFixtureFunctions.combinations.<locals>.decorate	  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  lenrJ   rC   r.   _combination_id_fnsoperator
itemgetter	enumerater   r=  rv   rB   r   r  )r   arg_setsr3   r  r  tobuild_pytest_paramsr  idxchar_arg_getterfns	fn_paramsparam_exclusions
parametersr  rp  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_ident1  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                R    j                   rj                  |       }  |       } | S r   )r   _maybe_async_wrapper)r   r   rZ   fixtures    r   wrapz,PytestFixtureFunctions.fixture.<locals>.wrapK  s,    11"5 BIr   )r   rZ   r   r  r  r   r  )r   r)  r3   r   r  r   rZ   r  s        @@@r   r  zPytestFixtureFunctions.fixture5  si    -. s8a<HSV,QBab'C B ..#,,	 8OKr   c                @    t         j                  j                  d      S )NPYTEST_CURRENT_TEST)rN   environgetrx  s    r   get_current_test_namez,PytestFixtureFunctions.get_current_test_nameZ  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   rp  z3PytestFixtureFunctions.async_test.<locals>.decorate`  s    +G++B@@@r   )r   r   r  )r   r   rp  r   s      @r   
async_testz!PytestFixtureFunctions.async_test]  s&    .		A 
	A |r   N)r   r   r   rv  propertyry  r|  reprr<  r  r  r  r  r  r  r   r   r   rW   rW     sT    1  
 
	DL7#J5r   rW   )rZ   zpytest.Config)T)0
__future__r   r/   r   	functoolsr   r   r  r  rN   r  rq   typingr   r   r   sqla_plugin_baser   ImportErrorr  r8   r]   rY   r  re   r   r   r   r   r   rI   r   r   r   r   r   r/  r2  hookimplr@  rC  r9  rH  rP  rY  r  FixtureFunctionsrW   r   r   r   <module>r     sY   #   $    	 	 
    ..+b#L   @2HE(
 
2^B4+@B 6& T"2# #2#j ! g; ;  j!51 "51|/dO[99 Oq  s   C> >DD