o
    Rcj                     @   s   d dl Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lm	Z	 d
dgZ
i Zdd
 Zdd ZG dd deZG dd deZdd Zdd ZdS )    N   )config)
exclusions   )event)schema)types)OrderedDictTableColumnc            	         sL   fddt  D } t ttjdr5d vr4d vr4d vr4d|v s+d|v r0d	 d< n)d
 d< n$ttjdrYd vrYd vrYd vrYd|v sPd|v rUd	 d< nd
 d< ttjdr| d }tjjj	j
}dd | D }|D ]*}|j}t|tjr|jj}n||d }||kr|jdu rd|_|jdu rd|_qstj| i  S )z8A schema.Table wrapper/hook for dialect-specific tweaks.c                    "   i | ]}| d r| |qS Ztest_
startswithpop.0kkw ;D:\Flask\env\Lib\site-packages\sqlalchemy/testing/schema.py
<dictcomp>      " zTable.<locals>.<dictcomp>mysqlZmysql_engineZ
mysql_typeZautoload_withZtest_needs_fkZtest_needs_acidZInnoDBZMyISAMZmariadbZmariadb_engineZmariadb_typefirebirdr   c                 S   s(   g | ]}t |tjr|jD ]}|qqS r   )
isinstancer   r   Zforeign_keys)r   colfkr   r   r   
<listcomp>;   s    
zTable.<locals>.<listcomp>NZCASCADE)listupdatetable_optionsr   againstr   _currentdbdialectZidentifier_preparerZunformat_identifiersZ_colspecr   r   r   tablenameZondeleteZonupdater
   )	argsr   	test_optsZ
table_nameunpackZfksr   refr(   r   r   r   r
      sR   





c                     s    fddt  D }tjjtsdd | D } tj| i  }|ddrT ddrT|jdu r:|j	du r:d	|_
d	|jd< ttjd
drTdd }tj|d|d	d |S )z9A schema.Column wrapper/hook for dialect-specific tweaks.c                    r   r   r   r   r   r   r   r   X   r   zColumn.<locals>.<dictcomp>c                 S   s   g | ]
}t |tjs|qS r   )r   r   Z
ForeignKey)r   argr   r   r   r   [   s    zColumn.<locals>.<listcomp>Ztest_needs_autoincrementFZprimary_keyNTr   Zoraclec                 S   s2   |  tjttjj|jd | j d dd d S )N_Z_seqT)optional)Z_init_itemsr   Sequence_truncate_namer   r%   r&   r(   )ctblr   r   r   add_seql   s   zColumn.<locals>.add_seqZafter_parent_attach)	propagate)r    r   requirementsZforeign_key_ddlZenabled_for_configr   r   getdefaultZserver_defaultZautoincrementinfor   r#   r$   r   listen)r)   r   r*   r   r4   r   r   r   r   U   s   

c                   @   (   e Zd ZdZdd Zdd Zdd ZdS )	eq_type_affinitya  Helper to compare types inside of datastructures based on affinity.

    E.g.::

        eq_(
            inspect(connection).get_columns("foo"),
            [
                {
                    "name": "id",
                    "type": testing.eq_type_affinity(sqltypes.INTEGER),
                    "nullable": False,
                    "default": None,
                    "autoincrement": False,
                },
                {
                    "name": "data",
                    "type": testing.eq_type_affinity(sqltypes.NullType),
                    "nullable": True,
                    "default": None,
                    "autoincrement": False,
                },
            ],
        )

    c                 C   s   t || _d S N)sqltypesZto_instancetargetselfr?   r   r   r   __init__   s   zeq_type_affinity.__init__c                 C   s   | j j|ju S r=   r?   Z_type_affinityrA   otherr   r   r   __eq__      zeq_type_affinity.__eq__c                 C   s   | j j|juS r=   rC   rD   r   r   r   __ne__   rG   zeq_type_affinity.__ne__N__name__
__module____qualname____doc__rB   rF   rH   r   r   r   r   r<   z   s
    r<   c                   @   r;   )	eq_clause_elementz3Helper to compare SQL structures based on compare()c                 C   s
   || _ d S r=   )r?   r@   r   r   r   rB      s   
zeq_clause_element.__init__c                 C   s   | j |S r=   r?   comparerD   r   r   r   rF      s   zeq_clause_element.__eq__c                 C   s   | j | S r=   rO   rD   r   r   r   rH      rG   zeq_clause_element.__ne__NrI   r   r   r   r   rN      s
    rN   c                 C   sF   t || jkr!|dt| jd d d tt|d dd   S |S )Nr      r.   @   r   )lenZmax_identifier_lengthmaxhexhash)r&   r(   r   r   r   r1      s   r1   c              	      s   t  }d	 fdd	}i  t fdd}t| tf|||d}ztdjdd}W n tt	fy6   Y nw |d ur>||_
|S )
Nc                    sP   || _ || _| | j|< |  |< t| j||  |r&| | j|< t| j||  d S d S r=   )r(   value__members__setattr	__class__)rA   r(   rW   aliasZvalue_to_memberr   r   rB      s   

zpep435_enum.<locals>.__init__c                    s    | S r=   r   )clsrW   r\   r   r   r7      s   zpep435_enum.<locals>.get)rX   rB   r7   r   rJ   __main__r=   )r	   classmethodtypeobjectsys	_getframe	f_globalsr7   AttributeError
ValueErrorrK   )r(   rX   rB   r7   Zsomeenummoduler   r\   r   pep435_enum   s$   

rh   )rb    r   r   r   r   r   r>   utilr	   __all__r"   r
   r   ra   r<   rN   r1   rh   r   r   r   r   <module>   s   >%%