§
    ZøÁi  ã                  ób   — d dl mZ d dlZd dlmZ d dlmZ ddlmZ d„ Z	d„ Z
dd
„Zdd„Zdd„ZdS )é    )ÚannotationsN)ÚUnion)Úinspect_getfullargspecé   )Úsqla_2c                 óþ   ‡— ddl m} t          ¦   «         Š| D ]}‰                     |¦  «         Œt	          ‰¦  «        Š |j        ˆfd„| D ¦   «         ddt          ‰¦  «        z  z   d                     ‰¦  «        dœŽS )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   ©Úconfigc                óŽ   •‡— g | ]@Šd                       ˆfd„‰D ¦   «         ¦  «        ft          ˆfd„‰D ¦   «         ¦  «        z   ‘ŒAS )Ú_c              3  óH   •K  — | ]}‰                      |d ¦  «        ¯|V — ŒdS ©FN©Úget©Ú.0ÚkÚds     €ú^/var/www/html/jarvis.com/web/backend/venv/lib/python3.11/site-packages/alembic/testing/util.pyú	<genexpr>z/flag_combinations.<locals>.<listcomp>.<genexpr>9   s4   øè è € Ð9Ð9˜A¨¯ª¨q°%©¬Ð9�aÐ9Ð9Ð9Ð9Ð9Ð9ó    c              3  óD   •K  — | ]}‰                      |d ¦  «        V — ŒdS r   r   r   s     €r   r   z/flag_combinations.<locals>.<listcomp>.<genexpr>:   s/   øè è € Ð2Ð2¨�A—E’E˜!˜U‘O”OÐ2Ð2Ð2Ð2Ð2Ð2r   )ÚjoinÚtuple)r   r   Úkeyss    @€r   ú
<listcomp>z%flag_combinations.<locals>.<listcomp>8   su   øø€ ð 

ð 

ð 

ð ð �XŠXÐ9Ð9Ð9Ð9 Ð9Ñ9Ô9Ñ9Ô9Ð;ÝÐ2Ð2Ð2Ð2¨TÐ2Ñ2Ô2Ñ2Ô2ñ3ð

ð 

ð 

r   ÚiÚaú,)Úid_Úargnames)Úsqlalchemy.testingr
   ÚsetÚupdateÚsortedÚcombinationsÚlenr   )r&   r
   r   r   s      @r   Úflag_combinationsr(      s°   ø€ ð: *Ð)Ð)Ð)Ð)Ð)å‰5Œ5€Dàð ð ˆØ�Š�A‰Œˆˆå�$‰<Œ<€Dàˆ6Ôð

ð 

ð 

ð 

ð "ð

ñ 

ô 

ð
 �3�˜T™œ‘?Ñ#Ø—’˜$‘”ðð ð ð r   c                óà   ‡— t          | ¦  «        d         }ˆfd„|D ¦   «         }t          | j        ¦  «        }|                     ‰¦  «         t	          j        | j        |¦  «        } |di |¤ŽS )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   c                ó<   •— i | ]}|‰                      |¦  «        “ŒS © )Úpop)r   ÚargÚkws     €r   ú
<dictcomp>z"resolve_lambda.<locals>.<dictcomp>L   s%   ø€ Ð:Ð:Ð:¨#�S˜"Ÿ&š& ™+œ+Ð:Ð:Ð:r   r+   )r   ÚdictÚ__globals__r$   ÚtypesÚFunctionTypeÚ__code__)Ú__fnr.   Úpos_argsÚpass_pos_argsÚglbÚnew_fns    `    r   Úresolve_lambdar:   B   sy   ø€ õ & dÑ+Ô+¨AÔ.€HØ:Ð:Ð:Ð:°Ð:Ñ:Ô:€MÝ
ˆtÔÑ
 Ô
 €CØ‡J‚Jˆr�N„N€NÝÔ ¤¨sÑ3Ô3€FØˆ6Ð"Ð"�MÐ"Ð"Ð"r   Úfunctionc                ó2   ‡ ‡‡— ddl mŠ ddlmŠ ˆˆ ˆfd„}|S )z&Provide MetaData for a pytest fixture.r   r	   é   )Úfixture_functionsc                óP   •‡ — ˆˆ fd„} ‰                      ‰¬¦  «        |¦  «        S )Nc              3  ó  •K  — ddl m} |                     ¦   «         x}| _        	  ‰| |¦  «        }|                     ‰j        ¦  «         |V — |                     ‰j        ¦  «         d S # |                     ‰j        ¦  «         w xY w)Nr   )Úschema)Ú
sqlalchemyrA   ÚMetaDataÚmetadataÚ
create_allÚdbÚdrop_all)ÚselfrA   rD   Úresultr
   Úfns       €€r   Úrun_ddlz3metadata_fixture.<locals>.decorate.<locals>.run_ddlZ   sž   øè è € Ø)Ð)Ð)Ð)Ð)Ð)à'-§¢Ñ'8Ô'8Ð8ˆH�t”}ð-Ø˜˜D (Ñ+Ô+�Ø×#Ò# F¤IÑ.Ô.Ð.ð ���à×!Ò! &¤)Ñ,Ô,Ð,Ð,Ð,ø�×!Ò! &¤)Ñ,Ô,Ð,Ð,øøøs   ¦*A, Á,B)Úscope)Úfixture)rJ   rK   r
   Úddlr>   s   ` €€€r   Údecoratez"metadata_fixture.<locals>.decorateY   sF   øø€ ð	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 4Ð ×(Ò(¨sÐ(Ñ3Ô3°GÑ<Ô<Ð<r   )r"   r
   Ú r>   )rN   rO   r
   r>   s   ` @@r   Úmetadata_fixturerQ   S   sU   øøø€ ð *Ð)Ð)Ð)Ð)Ð)Ø#Ð#Ð#Ð#Ð#Ð#ð=ð =ð =ð =ð =ð =ð =ð  €Or   ÚvalueÚstrÚreturnúUnion[int, str]c                ó4   — 	 t          | ¦  «        S #  | cY S xY w)N)Úint)rR   s    r   Ú	_safe_intrX   l   s%   € ðÝ�5‰zŒzÐøðØˆˆˆøøøs   ‚ ‘Fc                óŒ   — ddl m} ddlm} |st	          |j        j        dd¦  «        }t          s	|rd|ini }ni } || |fi |¤ŽS )Nr   r	   )Útesting_engineÚfuture_engineFÚfuture)r"   r
   Úsqlalchemy.testing.enginesrZ   ÚgetattrÚ_currentÚoptionsr   )Úurlr`   r\   r
   rZ   r.   s         r   rZ   rZ   s   s‚   € Ø)Ð)Ð)Ð)Ð)Ð)Ø9Ð9Ð9Ð9Ð9Ð9àð JÝ˜œÔ0°/À5ÑIÔIˆåð Ø#)Ð1ˆh˜ÐÐ¨rˆˆàˆØˆ>˜#˜wÐ-Ð-¨"Ð-Ð-Ð-r   )r;   )rR   rS   rT   rU   )NNF)Ú
__future__r   r2   Útypingr   Úsqlalchemy.utilr   Úutilr   r(   r:   rQ   rX   rZ   r+   r   r   ú<module>rf      s½   ðð #Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð à 2Ð 2Ð 2Ð 2Ð 2Ð 2à Ð Ð Ð Ð Ð ð.ð .ð .ðb#ð #ð #ð"ð ð ð ð2ð ð ð ð.ð .ð .ð .ð .ð .r   