B
    KLc                 @   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        	         sR   fddt  D } t ttjdrjd krd krd krd|ksVd|kr`d	 d< qd
 d< nHttjdrd krd krd krd|ksd|krd	 d< nd
 d< ttjdrF| d }tjjj	j
}dd | D }x`|D ]X}|j}t|tjr|jj}n||d }||kr|jdkr2d|_|jdkrd|_qW tj|  S )z8A schema.Table wrapper/hook for dialect-specific tweaks.c                s"   i | ]}| d r ||qS )test_)
startswithpop).0k)kw 8lib/python3.7/site-packages/sqlalchemy/testing/schema.py
<dictcomp>   s    zTable.<locals>.<dictcomp>Z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_nameZunpackZfksr   refr"   r   )r   r   r
      s@    







c                 s    fddt  D }tjjts2dd | D } tj|  }|ddr ddr|jdkrp|j	dkrpd	|_
d	|jd< ttjd
drdd }tj|d|d	d |S )z9A schema.Column wrapper/hook for dialect-specific tweaks.c                s"   i | ]}| d r ||qS )r   )r   r   )r   r   )r   r   r   r   X   s    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)Zoptional)Z_init_itemsr   Sequence_truncate_namer   r   r    r"   )cZtblr   r   r   add_seql   s
    zColumn.<locals>.add_seqZafter_parent_attach)Z	propagate)r   r   ZrequirementsZforeign_key_ddlZenabled_for_configr   r   getdefaultZserver_defaultZautoincrementinfor   r   r   r   Zlisten)r#   r   r$   r   r+   r   )r   r   r   U   s    

c               @   s(   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)selfr1   r   r   r   __init__   s    zeq_type_affinity.__init__c             C   s   | j j|jkS )N)r1   _type_affinity)r2   otherr   r   r   __eq__   s    zeq_type_affinity.__eq__c             C   s   | j j|jk	S )N)r1   r4   )r2   r5   r   r   r   __ne__   s    zeq_type_affinity.__ne__N)__name__
__module____qualname____doc__r3   r6   r7   r   r   r   r   r/   z   s   r/   c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	eq_clause_elementz3Helper to compare SQL structures based on compare()c             C   s
   || _ d S )N)r1   )r2   r1   r   r   r   r3      s    zeq_clause_element.__init__c             C   s   | j |S )N)r1   compare)r2   r5   r   r   r   r6      s    zeq_clause_element.__eq__c             C   s   | j | S )N)r1   r=   )r2   r5   r   r   r   r7      s    zeq_clause_element.__ne__N)r8   r9   r:   r;   r3   r6   r7   r   r   r   r   r<      s   r<   c             C   sJ   t || jkrB|dt| jd d d tt|d dd   S |S d S )Nr      r'   @   r   )lenZmax_identifier_lengthmaxhexhash)r    r"   r   r   r   r)      s    4r)   c          	      s   t  }d	 fdd	}i  t fdd}t| tf|||d}ytdjdd}W n tt	fk
rn   Y nX |d k	r~||_
|S )
Nc                sL   || _ || _| | j|< |  |< t| j||  |rH| | j|< t| j||  d S )N)r"   value__members__setattr	__class__)r2   r"   rD   alias)value_to_memberr   r   r3      s    

zpep435_enum.<locals>.__init__c                s    | S )Nr   )clsrD   )rI   r   r   r,      s    zpep435_enum.<locals>.get)rE   r3   r,   r   r8   __main__)N)r	   classmethodtypeobjectsys	_getframe	f_globalsr,   AttributeError
ValueErrorr9   )r"   rE   r3   r,   Zsomeenummoduler   )rI   r   pep435_enum   s    
rU   )rO    r   r   r   r   r   r0   utilr	   __all__r   r
   r   rN   r/   r<   r)   rU   r   r   r   r   <module>   s   >%%