U
    x^                  
   @   s  d Z 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
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lmZ ddlmZ G dd deZedededede
diZdd Zdd Zee	deeddd  ZdS )!z5Establish constraint and index naming conventions.


    N   )_defer_name)_defer_none_name)conv)CheckConstraint)Column)
Constraint)ForeignKeyConstraint)Index)PrimaryKeyConstraint)Table)UniqueConstraint   )event)events)excc                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )ConventionDictc                 C   s*   || _ t|t| _|| _|| _|j| _d S N)const
isinstancer	   _is_fktable
conventionname_const_name)selfr   r   r    r   =/tmp/pip-install-dq5v43_d/SQLAlchemy/sqlalchemy/sql/naming.py__init__    s
    zConventionDict.__init__c                 C   s   | j jS r   )r   r   r   r   r   r   _key_table_name'   s    zConventionDict._key_table_namec                 C   s,   | j r| jj| }|jS t| jj| S d S r   )r   r   elementsparentlistcolumnsr   idxfkr   r   r   	_column_X*   s    zConventionDict._column_Xc                 C   s8   t | jtd tfrtdt | jts2d | j_| jS )NzcNaming convention including %(constraint_name)s token requires that constraint is explicitly named.)	r   r   typer   r   ZInvalidRequestErrorr   r   r   r   r   r   r   _key_constraint_name1   s    z#ConventionDict._key_constraint_namec                 C   s   |  |jS r   )r(   keyr   r&   r   r   r   _key_column_X_key<   s    z ConventionDict._key_column_X_keyc                 C   s   |  |jS r   )r(   r   r,   r   r   r   _key_column_X_nameB   s    z!ConventionDict._key_column_X_namec                 C   s   |  |jS r   )r(   Z
_ddl_labelr,   r   r   r   _key_column_X_labelE   s    z"ConventionDict._key_column_X_labelc                 C   s<   | j jd }|jd}t|dkr0|\}}}n|\}}|S )Nr   .   )r   r!   Ztarget_fullnamesplitlen)r   r'   refsZ	refschemaZreftableZrefcolr   r   r   _key_referred_table_nameH   s    z'ConventionDict._key_referred_table_namec                 C   s   | j j| }|jjS r   )r   r!   columnr   r%   r   r   r   _key_referred_column_X_nameQ   s    z*ConventionDict._key_referred_column_X_namec           
   	   C   s>  || j kr| j | | j| jS t| d| r<t| d|  S td|}|r2|d}|d}|r | jrx| jj	}nt
| jj}g }t|D ]R\}}d|d| d }z|t| || W q tk
r   t|Y qX q|drdnd	}	|	|S d||d }t|}t| |r2t| ||S t|d S )
Nz_key_%sz.*_?column_(\d+)(_?N)?_.+r   r   Z_key_0X_ )r   r   r   hasattrgetattrrematchgroupr   r!   r#   r$   	enumeratereplaceappendAttributeErrorKeyError
startswithjoinint)
r   r+   Zcol_templater&   Z	multipleselemstokenselemattrsepr   r   r   __getitem__X   s4    




zConventionDict.__getitem__N)__name__
__module____qualname__r   r    r(   r*   r-   r.   r/   r5   r7   rN   r   r   r   r   r      s   	r   ixpkZckZuqr'   c                 C   sH   |j D ]<}|tkr.t| | kr.| t|    S || kr| |   S qd S r   )__mro___prefix_dict)Zdict_r+   Zsuper_r   r   r   _get_convention   s    
rV   c                 C   s   |j }t|jt| }t| jtr(| jS |d k	rpt| jtsp| jd ksZd|ksZt| jtrpt|t| ||j S t|t	r~d S d S )NZconstraint_name)
metadatarV   Znaming_conventionr)   r   r   r   r   r   r   )r   r   rW   r   r   r   r   _constraint_name_for_table   s*    

	
rX   after_parent_attachc                    s\   t |tr"t|d fdd n6t |trXt  jttfr@d S t |}|d k	rX| _d S )NrY   c                    s
   t  |S r   )_constraint_name)colr   r   r   r   <lambda>       z"_constraint_name.<locals>.<lambda>)	r   r   r   listenr   r   r   r   rX   )r   r   Znewnamer   r\   r   rZ      s    



rZ   )__doc__r>   r!   r   r   r   Zschemar   r   r   r	   r
   r   r   r   r;   r   r   r   objectr   rU   rV   rX   Zlistens_forrZ   r   r   r   r   <module>   s@   [     	

