ó
    úÞ j÷  ã                  óZ   • S SK Jr  S SKrS SKJr  SSKJr  S rS rSS jr	SS	 jr
SS
 jrg)é    )ÚannotationsN)Úinspect_getfullargspecé   )Úsqla_2c            
     ó\  ^• SSK Jn  [        5       nU  H  mUR                  T5        M     [	        U5      nUR
                  " U  V^s/ sH5  mSR                  U4S jU 5       5      4[        U4S jU 5       5      -   PM7     snSS[        U5      -  -   SR                  U5      S	.6$ s  snf )
a»  A facade around @testing.combinations() oriented towards boolean
keyword-based arguments.

Basically generates a nice looking identifier based on the keywords
and also sets up the argument names.

E.g.::

    @testing.flag_combinations(
        dict(lazy=False, passive=False),
        dict(lazy=True, passive=False),
        dict(lazy=False, passive=True),
        dict(lazy=False, passive=True, raiseload=True),
    )


would result in::

    @testing.combinations(
        ('', False, False, False),
        ('lazy', True, False, False),
        ('lazy_passive', True, True, False),
        ('lazy_passive', True, True, True),
        id_='iaaa',
        argnames='lazy,passive,raiseload'
    )

r   ©ÚconfigÚ_c              3  óX   >#   • U H   nTR                  US 5      (       d  M  Uv •  M"     g7f©FN©Úget©Ú.0ÚkÚds     €ÚN/var/www/html/gaurav/venv/lib/python3.13/site-packages/alembic/testing/util.pyÚ	<genexpr>Ú$flag_combinations.<locals>.<genexpr>8   s   øé € Ð9¡˜A¨¯©¨q°%¯—a‘a¢ùs   ƒ*¡	*c              3  óF   >#   • U H  nTR                  US 5      v •  M     g7fr   r   r   s     €r   r   r   9   s   øé € Ð2©T¨�A—E‘E˜!˜U—O�OªTùs   ƒ!ÚiÚaÚ,)Úid_Úargnames)	Úsqlalchemy.testingr	   ÚsetÚupdateÚsortedÚcombinationsÚjoinÚtupleÚlen)r    r	   Úkeysr   s      `r   Úflag_combinationsr%      s¨   ø€ õ: *ä‹5€DãˆØ�‰�AŽñ ô �$‹<€Dà×Òñ "ô

ñ "�ð �X‰XÔ9¡Ó9Ó9Ð;ÜÔ2©TÓ2Ó2ô3á!ñ

ð
 �3œ˜T›‘?Ñ#Ø—‘˜$“òð ùò

s   Á;B)c                ó  • [        U 5      S   nU Vs0 sH  o3UR                  U5      _M     nn[        U R                  5      nUR	                  U5        [
        R                  " U R                  U5      nU" S0 UD6$ s  snf )zÍGiven a no-arg lambda and a namespace, return a new lambda that
has all the values filled in.

This is used so that we can have module-level fixtures that
refer to instance-level variables using lambdas.

r   © )r   ÚpopÚdictÚ__globals__r   ÚtypesÚFunctionTypeÚ__code__)Ú__fnÚkwÚpos_argsÚargÚpass_pos_argsÚglbÚnew_fns          r   Úresolve_lambdar5   A   sv   € ô & dÓ+¨AÑ.€HÙ19Ó:±¨#˜"Ÿ&™& ›+Ò%±€MÐ:Ü
ˆt×ÑÓ
 €CØ‡J�Jˆr„NÜ×Ò §¡¨sÓ3€FÙÑ"�MÑ"Ð"ùò	 ;s   “A>c                ó4   ^ ^^• SSK Jm  SSKJm  UU U4S jnU$ )z&Provide MetaData for a pytest fixture.r   r   é   )Úfixture_functionsc                ó>   >^ • UU 4S jnTR                  TS9" U5      $ )Nc              3  ó  >#   • SSK Jn  UR                  5       =o l         T" X5      nUR	                  TR
                  5        Uv •  UR                  TR
                  5        g ! UR                  TR
                  5        f = f7f)Nr   )Úschema)Ú
sqlalchemyr;   ÚMetaDataÚmetadataÚ
create_allÚdbÚdrop_all)Úselfr;   r>   Úresultr	   Úfns       €€r   Úrun_ddlÚ3metadata_fixture.<locals>.decorate.<locals>.run_ddlY   sf   øé € Ý)à'-§¡Ó'8Ð8ˆH”}ð-Ù˜DÓ+�Ø×#Ñ# F§I¡IÔ.ð ’à×!Ñ! &§)¡)Õ,ø�×!Ñ! &§)¡)Õ,üs   ƒB¡'A$ ÁBÁ$BÂB)Úscope)Úfixture)rD   rE   r	   Úddlr8   s   ` €€€r   ÚdecorateÚ"metadata_fixture.<locals>.decorateX   s#   ù€ ö	-ð !×(Ñ(¨sÐ(Ñ3°GÓ<Ð<ó    )r   r	   Ú r8   )rI   rJ   r	   r8   s   ` @@r   Úmetadata_fixturerN   R   s   ú€ õ *Ý#÷=ð  €OrL   c                ó,   •  [        U 5      $ !   U s $ = f)N)Úint)Úvalues    r   Ú	_safe_intrR   k   s   € ðÜ�5‹zÐøðØŠús   ‚
 �c                ó²   • SSK Jn  SSKJn  U(       d!  [	        UR
                  R                  SS5      n[        (       d  U(       a  SU0O0 nO0 nU" X40 UD6$ )Nr   r   )Útesting_engineÚfuture_engineFÚfuture)r   r	   Úsqlalchemy.testing.enginesrT   ÚgetattrÚ_currentÚoptionsr   )ÚurlrZ   rV   r	   rT   r/   s         r   rT   rT   r   sK   € Ý)Ý9æÜ˜Ÿ™×0Ñ0°/À5ÓIˆçŠ6Þ#)ˆh˜Ñ¨r‰àˆÙ˜#Ñ-¨"Ñ-Ð-rL   )Úfunction)rQ   ÚstrÚreturnz	int | str)NNF)Ú
__future__r   r+   Úsqlalchemy.utilr   Úutilr   r%   r5   rN   rR   rT   r'   rL   r   Ú<module>rb      s-   ðõ #ã å 2å ò.òb#ô"ô2õ.rL   