Ë
    ðmxipo  ã                  ó"  — 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a%d„ Z& ejN                  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^                  «      Z0y# 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        €ú]/home/htdocs/ttos/venv/lib/python3.12/site-packages/sqlalchemy/testing/plugin/pytestplugin.pyÚ__call__zFpytest_addoption.<locals>.make_option.<locals>.CallableAction.__call__*   s   ø€ ñ ˜m¨V°VÕ<ó    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   ø€ ñ % ]°F¸FÕ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   ú€ Ø—F‘F˜: tÓ,ˆ	Ùö=¤§¡ô =ð *ˆBˆx‰LàŸ6™6Ð"4°dÓ;ÐÙöD¤§¡ô Dð0 *ˆBˆx‰Làˆ�‰˜Ñ# Ó#r   )Úgetgroupr   Úsetup_options)r   r5   r4   s     @r   Úpytest_addoptionr8   "   s'   ø€ Ø�O‰O˜LÓ)€Eô)$ôV ×Ñ˜kÕ*r   c           	     ó¸  — t        j                  | j                  «       t         j                  st         j                  r”d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ž  € Ü×Ñ˜FŸO™OÔ,Ü×Ò¤;×#;Ò#;Ø—<‘<Ü”×)Ñ)Ó*Ü'2×'?Ñ'?Ö@ ��c�UŠ|Ò@ñAó
ˆð
 �=‰=×!Ò!Ø�M‰M×"Ò"¨¨h¨ZÐ&8Ñ8Ö"à%-ˆF�M‰MÔ"à×Ñ×%Ñ% gÔ.Ø×Ñ×%Ñ%¤j£lÔ3äˆv�}Ô%Ü×5Ñ5°f×6HÑ6HÔIÜ×&Ñ& v×'9Ñ'9Ð:JÑ'KÕLà�=‰=×%Ò%¬"¯'©'¯.©.Ø�M‰M×&Ñ&ô+
ô �I‰I�f—m‘m×0Ñ0Ô1ä×Ñ˜&Ÿ-™-Ô(ä×!Ñ!ÜŒW�V—]‘] 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Ü ŸY™Y×3Ò3‰>Ð9K€Dà
�k�] " T F¨!Ð,Ø
�×$Ñ$Ð%Ð&ð€Dñ
 ÔÝ/à�‰Ð7¸¿¹°ÀaÐHÕIà�‰Ð6Ð7GÐ6HÐIÔJà	�‰×	%Ñ	%×	0Ñ	0Ð1CÓ	D€BÙ	Ø
�‰�S˜%Ô Øò 	ˆAØ�M‰M˜!Õñ	ô 	ˆ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   ø€ Ü—w‘w×'Ñ'¬¯©¯©¸Ó(AÓBˆHØ¤r§w¡w×'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Ñ5°d×6FÑ6FÔGà-6¼¿¹»×9IÑ9IÈ!ÈBÐ9OÑ-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Ñ(8Ð9IÑ(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 �]Ã  } 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©r2   Úparent)rU   ÚclsÚ	frozensetÚiter_markersr2   ÚunionÚ
add_markerrC   r   Úgenerate_sub_testsÚmoduleÚ	getparentr¸   ÚModuleÚClassÚfrom_parentr   rv   )Ú
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Ï  ø€ Ø&ó ,	9ˆJô �z—~‘~ }°eÔ<ÄØ—‘ ¨uôAð  )˜k‘Ü˜Ÿ™Ð)=¸uÔEØ/°Ð;‘Ü˜Ÿ™Ð)DÀeÔLØ6¸	ÐB‘ä'›k�ð '1×&=Ñ&=Ó&?ö Ø"�—	“	ð Ðð  ð &Ð(8Ñ8ˆKØ*×0Ñ0°Ó=ˆKà%ò .�Ø×%Ñ% fÕ-ð.ô Ü×.Ñ.Ø—N‘N J×$5Ñ$5°{óóˆIñ
 Ø˜jŸn™nÒ-à$ò 9�Ø *§.¡.Ò0Ø#0°·±Ñ#@�Là'×1Ñ1´&·-±-Ó@�Fä$Ÿl™l×6Ñ6Ø$×-Ñ-°fð 7ó �Gð #.ò 3˜Ø×*Ñ*¨6Õ2ð3ñ & gÓ.ò 9˜Ø$ R§W¡WÑ-×4Ñ4°RÕ8ñ9ò9ñ?,	9ùò s   ÂG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>L  s<   € Ø�N‰Nœ6Ÿ=™=Ó)×.Ñ.Ø�N‰Nœ6Ÿ<™<Ó(×-Ñ-Ø�I‰Ið
€ 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ÖC°T�D—N‘N¤6§<¡<Õ0ÒC€Lô!ö-9ðb ×%Ñ%Ð&8Ô9à€HØò "ˆØ�x‰xˆØ�=Ñ Ø�O‰O˜M¨$Ñ/°·	±	Ñ:Õ;à�O‰O˜DÕ!ð"ô Øñ
ô€E‰!�Hùò[ùò Ds   ¤A D2Â&D7c                ó¾  — t        j                  |«      r€t        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ö   T  s½   € Ü‡��sÔ¤× 6Ñ 6°t¸SÔ AÝ-à×ÒÜ$ SÓ)ˆCô $4°I×4DÑ4DÀcÓ#Jö	
ð  ô �L‰L×$Ñ$Ø$×-Ñ-°ið %õ ò
ð 	
ô 	×Ñ˜3ÔØ�M‰MÐ%Ü×#Ñ# I§M¡M°3Ô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ú   n  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ï   u  së   ø€ Ý*ä˜C“y—‘Ó(ò )‰ˆˆeä�eŒ_¤
¨5´+Õ >Ü˜EÐ#9¸5ÕAØ—‘ Õ)Ü2°5Õ9à"ˆNÜ˜%¤Ô-ØŸ™�Ø!%�ä!óAó "ðAñ " %Ó(ˆHÙÜ& xÓ0�Ø,0ˆHÔ)ä�C˜˜xÕ(ð+)ñ, Ø—7‘7“9˜Q˜R�=ò 	/ˆ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   è ø€ ò %
àØŸ™Ÿ™¨Ó,ò%
ð ô �F‰F�5˜"˜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‘_�W˜fŠ&Ó	8ðò ˆð ˆä!Ø+:Ö;˜iˆY�q‹\Ò;¸^ó
ò 	)‰NˆG�Uñ ÜÐ LÓMÐMÜŸH™H W¨gÓ6ˆMÜ ¨u¯|©|Ó<ò )‘��SØ%(�˜cÒ"ñ)ð	)ð  ŸH™Hñ %
à'ô%
ó 
Ðð
 Ÿ,›,Ñ(9Ð:ˆÜ—‘œd D¨3¨&°-Ó@ˆÜ�˜˜fÔ%Ø�‰�vÕð+ð, €Nùó+ 
9ùò
 <s   ´D
ÁD#
c                óÎ  — ddl m} t        | t        j                  «      rÅt
        €¾|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Ï   rJ   ÚwarningsÚcatch_warningsÚ_current_warning_contextÚ	__enter__r0  Úfilterwarnings)rà   r…   r5  Úwarning_messages       r   Úpytest_runtest_setupr;  »  sµ   € Ý*ô �$œŸ™Ô(¬^Ð-CØ×)Ñ)Ü×9Ñ9Ø�H‰Hô	
ð Ÿ™¬¯©Ó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_testr3  rÍ   r¸   rÏ   r7  Ú__exit__r‹   Ú stop_test_class_outside_fixturesrÆ   Ú	ExceptionÚ_current_reportÚfailedr  Úlongreprtextr·   ÚstrrC   Útuple)rà   Únextitemr…   Úer  s        r   Úpytest_runtest_teardownrJ  Ö  so  è ø€ õ
 +à×Ñœ×/Ñ/°Ô6ã	ô Ð!àÐØ×ÑœfŸl™lÓ+´>ÑAô $Ð/Ü$×-Ñ-¨d°D¸$Ô?Ø'+Ð$àˆð	#Ø×-Ñ-Ü×<Ñ<¸d¿h¹hôð4 #‰OðI Bð "øô  ò 	ô ×%Ò%Ø—v’và6Ü)×6Ñ6ñ7ð�A”Fð  ð —V‘V˜B’Z¤J¨q¯v©v°b©z¼3Ô$?Ü §¡›<�DØ˜“HØ8Ü)×6Ñ6ñ7ñ“Hô # 4›[�A”Fð ð	 —F’FØ3Ü'×4Ñ4ðñ •Fð ûð+	ûð. #‰Oüs7   ‚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Æ   r2   )rà   r…   s     r   Úpytest_runtest_callrM    s<   € õ +à×ÑÜ×ÑØØ�‰×ÑØ�‰Ø�	‰	õr   c                ó(   — | j                   dk(  r| ay y )NÚcall)ÚwhenrC  )Úreports    r   Úpytest_runtest_logreportrR  $  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ÿ   rV  rW  r   Ústop_test_class)Úrequestr…   rÆ   s      r   Úsetup_class_methodsrZ  *  si   è ø€ å*à
�+‰+€CäˆsÐ&Ô'Ø×Ñ˜S×1Ñ1Ô2ã	äˆsÐ)Ô*Ø×Ñ˜S×4Ñ4Ô5à×Ñœ×4Ñ4°cÕ:ù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ÿ   r]  r^  r   Úafter_test_fixturesr_  r`  )rY  r…   r   s      r   Úsetup_test_methodsrc  ;  s°   è ø€ å*ð ×Ñ€Dô ˆt�\Ô"Ø×Ñ˜TŸ_™_Ô-ô
 ˆt�WÔØ×Ñ˜TŸZ™ZÔ(ó 
ð ×Ñœ×8Ñ8¸$Ô?ô ˆt�ZÔ Ø×Ñ˜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   € ô
 	ˆT�3ŒØ�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)rn  ro  r2   F)ÚgroupedzVdef %(name)s%(grouped_args)s:
    return %(__target_fn)s(%(__orig_fn)s, %(apply_kw)s)
)rn  ro  r  Ú
pytestmark)r  rã   Údictr   ÚupdaterU   Ú__defaults__rø   r   r   rJ   rq  )
rÛ   Úadd_positional_parametersÚspecÚmetadatari  Ú	decoratedrl  re  rf  Útargets
         €€€€r   Údecoratez&_pytest_fn_decorator.<locals>.decorateˆ  så   ø€ Ù% bÓ)ˆÙ$Ø�I‰I×ÑÐ6Ô7äØ%°À2Ç;Á;ô
ˆð 	�‰Ñ+¨D¸%Ô@ÔAðð ñ	ð 	ñ &Ø &°rÑ:¸B¿K¹Kó
ˆ	ñ )Ü%,¨R°¸RÓ%@×%MÑ%MˆIÔ"Ø$&ˆIÔ!Ü! )¨RÓ0Ð0ð
 $&§=¡=ˆIÔ Ø!#§¡ˆIÔÜ�r˜<Ô(Ø')§}¡}�	Ô$ØÐr   )r   )Úsqlalchemy.util.langhelpersre  Úsqlalchemy.util.compatrf  )ry  rz  rl  re  rf  s   ` @@@r   r  r  z  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¸   ÚskiprB  )r   r+  r3   s      r   Úskip_test_exceptionz*PytestFixtureFunctions.skip_test_exception­  s   € Ü�{‰{×$Ñ$ cÐ0¨RÑ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 )NrZ  rc  )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   )rJ   r   r"  rˆ  s    r   r³   zPytestFixtureFunctions.<lambda>¾  s)   € Ü# C¨Ô4ˆC�L‰Lð Ü:>¸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à—M‘M !Õ$ð	%ð Ð.Ð.Ð.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#   øè ø€ ò !Ù5D°V¸W™G¡F¨3£K×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>3  s    è ø€ ò 'Ø°1·<±<ÀÕ3Nœñ'ùs   ‚ ™ Ú_exclusions_c                ór   •— |d   }|r% ‰j                  «       j                  |Ž } || «      }  | |d d i |¤ŽS )Nr>  )r“  Úadd)rÛ   r  r3   rž  Úexlur�  s        €r   Úcheck_exclusionszOPytestFixtureFunctions.combinations.<locals>.decorate.<locals>.check_exclusions9  sI   ø€ à&*¨2¡h˜Ù&Ø#< :×#6Ñ#6Ó#8×#<Ñ#<¸kÐ#J˜DÙ!% b£˜BÙ! 4¨¨ 9Ð3°Ñ3Ð3r   )ru  )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   rz  z5PytestFixtureFunctions.combinations.<locals>.decorate!  s
  ø€ Ü�‰˜rÔ"Ù!Ü-ØOóð ð %¨B¯K©KÑ7Ø)+�BÔ&Ø×"Ñ"×)Ñ)¨8°]Ð*CÔDØ�	ä&×5Ñ5°bÓ9×>Ñ>¸q¸rÐB�ØÐ#Ø ,‘Iä "§¡¨°Ó :�Iá!Ü#&ñ 'Ø#/ô'ó $�Lð 0<¸L¸>Ð-JÐ*ØÐ"8Ð!9Ñ9�Iä)ó4ó *ð4ñ *ØÐ7MÐ6Oô�Bô —{‘{×.Ñ.¨y¸-ÓHÈÓLÐLr   )r†   r�  ÚlenrJ   rC   r.   Ú_combination_id_fnsÚoperatorÚ
itemgetterÚ	enumerater·   rG  rv   rB   r¸   r  )r   Úarg_setsr3   r—  r˜  Útobuild_pytest_paramsr¯  ÚidxÚcharÚ_arg_getterÚfnsÚ	fn_paramsÚparam_exclusionsÚ
parametersr  rz  r+  r‘  r�  r¬  r­  s                   @@@@@r   Úcombinationsz#PytestFixtureFunctions.combinationsÃ  s2  ü€ õ 	2äˆx‹=˜AÒ¤'¨(°1©+°zÔ"BÜ˜H Q™KÓ(ˆHà—6‘6˜* dÓ+ˆô		/ð �f‰f�U˜DÓ!ˆà "ÐØˆÙØ"&×":Ñ":Ðô
 #×-Ñ-Øðô &/¨s£^÷á!˜˜TØÐ3Ñ3ò óòˆKô "+¨3£÷á�C˜ØÐ.Ñ.ô ×$Ñ$ SÓ)Ð+>¸tÑ+DÒEðˆCñ ð  ò �Ü! #¤uÔ-Ø˜&�Cá.@ÀÓ.EÑ+�	Ð+á(¨Ó3°A°BÐ7�
á#Ø%)�Nà%×,Ñ,à"Ø(ØŸ™ó !ØHKô!ó ðõñð,  ò �Ü! #¤uÔ-Ø˜&�Cá.@ÀÓ.EÑ+�	Ð+á#Ø%)�Nà%×,Ñ,ØÐ 0°$Ð7õðð ˆØ1Fò 	(Ñ-ˆJÐ(¨#ÙØÐ/Ð1Ñ1�
ä—L‘L *Ð5°Ñ5ˆEØ× Ñ  Õ'ð	(÷$	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_identI  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>.wrapc  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.fixtureM  si   ú€ Ý-Ý.ô ˆs‹8�aŠ<œH S¨¡VÔ,à�Q‘ˆBØ�a�b�'‰Cð ˆBô —.‘. #Ð,¨Ñ,ˆö	ñ Ù˜“8ˆOàˆKr   c                ó@   — t         j                  j                  d«      S )NÚPYTEST_CURRENT_TEST)rN   ÚenvironÚgetr‚  s    r   Úget_current_test_namez,PytestFixtureFunctions.get_current_test_namer  s   € Ü�z‰z�~‰~Ð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   rz  z3PytestFixtureFunctions.async_test.<locals>.decoratex  s   ø€ à+ˆG×+Ñ+¨BÐ@°Ò@¸Ó@r   )r†   r…   r  )r   rÛ   rz  r…   s      @r   Ú
async_testz!PytestFixtureFunctions.async_testu  s&   ø€ Ý.ä	ó	Aó 
ð	Añ ˜‹|Ðr   N)r   r   r   r€  Úpropertyrƒ  r†  ÚreprrF  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)1Ú
__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ð   r3  r7  r;  ÚhookimplrJ  rM  rC  rR  rZ  rc  r  ÚFixtureFunctionsrW   r   r   r   ú<module>r×     s`  ðõ #ã Û Ý $Û Û Û Û 	Û 	Û 
Ý  Û ã ðáÛ.ò.+ób#ðL €ð €‡�˜Ôñó ðòò@2òHòòE÷(
ñ 
ò2eòPò4+óò@ðB €àÐ òCð6 €‡�˜TÔ"ñ8#ó #ð8#òvð €ò!ð €‡��gÔñ;ó ð;ð  €‡��jÔ!ñ51ó "ð51ò|/ôdP˜[×9Ñ9õ Pøð_ ò çðús   ¼D  Ä DÄD