
    ZeIi                    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     Y/var/www/html/MCyber-Diagnostic/venv/lib/python3.11/site-packages/alembic/testing/util.py	<genexpr>z/flag_combinations.<locals>.<listcomp>.<genexpr>9   s4      99Aq%9a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AEE!UOO222222r   )jointuple)r   r   keyss    @r   
<listcomp>z%flag_combinations.<locals>.<listcomp>8   su     

 

 

  XX999999999;2222T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    : *)))))55D  A$<<D6

 

 

 

 "

 

 


 3T?#$   r   c                    t          |           d         }fd|D             }t          | j                  }|                               t	          j        | j        |          } |di |S )zGiven 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JJrNNNs33F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8Ht}-D(++##FI... !!&),,,,,!!&),,,,s   *A, ,B)scope)fixture)rJ   rK   r
   ddlr>   s   ` r   decoratez"metadata_fixture.<locals>.decorateY   sF    	- 	- 	- 	- 	- 	- 4 ((s(33G<<<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%    5zz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 #)1h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   