B
    KLc              
   @   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 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dd Zee
d eed d!d" ZdS )#z5Establish constraint and index naming conventions.


    N   )events)
_NONE_NAME)conv)CheckConstraint)Column)
Constraint)ForeignKeyConstraint)Index)PrimaryKeyConstraint)Table)UniqueConstraint   )event)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   4lib/python3.7/site-packages/sqlalchemy/sql/naming.py__init__   s
    zConventionDict.__init__c             C   s   | j jS )N)r   r   )r   r   r   r   _key_table_name&   s    zConventionDict._key_table_namec             C   sv   | j r:y| jj| }W n tk
r*   dS X t|j|S n8t| jj}y|| }W n tk
rf   dS X t||S d S )N )r   r   elements
IndexErrorgetattrparentlistcolumns)r   idxZattrnamefkZcolscolr   r   r   	_column_X)   s    zConventionDict._column_Xc             C   s2   | j d tfkrtdt| j ts,d | j_| j S )NzcNaming convention including %(constraint_name)s token requires that constraint is explicitly named.)r   r   r   ZInvalidRequestErrorr   r   r   r   )r   r   r   r   _key_constraint_name:   s    z#ConventionDict._key_constraint_namec             C   s   |  |dS )Nkey)r(   )r   r%   r   r   r   _key_column_X_keyE   s    z ConventionDict._key_column_X_keyc             C   s   |  |dS )Nr   )r(   )r   r%   r   r   r   _key_column_X_nameK   s    z!ConventionDict._key_column_X_namec             C   s   |  |dS )NZ
_ddl_label)r(   )r   r%   r   r   r   _key_column_X_labelN   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&   ZrefsZ	refschemaZreftableZrefcolr   r   r   _key_referred_table_nameQ   s    z'ConventionDict._key_referred_table_namec             C   s   | j j| }|jjS )N)r   r   columnr   )r   r%   r&   r   r   r   _key_referred_column_X_nameZ   s    z*ConventionDict._key_referred_column_X_namec       
   	   C   sB  || j kr| j | | j| jS t| d| r<t| d|  S td|}|r6|d}|d}|r| jrx| jj	}nt
| jj}g }x^t|D ]R\}}d|d| d }y|t| || W q tk
r   t|Y qX qW |drdnd	}	|	|S d||d }t|}t| |r6t| ||S t|d S )
Nz_key_%sz.*_?column_(\d+)(_?N)?_.+r   r   Z_key_0X_r   )r   r   r   hasattrr!   rematchgroupr   r   r#   r$   	enumeratereplaceappendAttributeErrorKeyError
startswithjoinint)
r   r*   Zcol_templater%   Z	multiplesZelemstokenselemattrsepr   r   r   __getitem__a   s4    




zConventionDict.__getitem__N)__name__
__module____qualname__r   r   r(   r)   r+   r,   r-   r2   r4   rH   r   r   r   r   r      s   	r   ZixZpkZckZuqr&   c             C   sH   xB|j D ]4}|tkr,t| | kr,| t|  S || kr| | S qW d S d S )N)__mro___prefix_dict)Zdict_r*   Zsuper_r   r   r   _get_convention   s    rN   c             C   s~   |j }t|jt| }t| jtr(| jS |d k	rnt| jtsn| jd ksXd|ksX| jtkrnt|t| ||j S |tkrzd S d S )NZconstraint_name)	metadatarN   Znaming_conventiontyper   r   r   r   r   )r   r   rO   r   r   r   r   _constraint_name_for_table   s    

rQ   Z'_sa_event_column_added_to_pk_constraintc             C   s*   | j r&| j}d | _t| |}|r&|| _d S )N)Z_implicit_generatedr   r   rQ   )Zpk_constraintr'   r   newnamer   r   r   _column_added_to_pk_constraint   s    
rS   after_parent_attachc                s^   t |tr"t|d fdd n8t |trZt  jtsB jtkrFd S t |}|rZ| _d S )NrT   c                s
   t  |S )N)_constraint_name)r'   r   )r   r   r   <lambda>       z"_constraint_name.<locals>.<lambda>)	r   r   r   Zlistenr   r   r   r   rQ   )r   r   rR   r   )r   r   rU      s    


rU   )__doc__r9   r   r   r   r   r   Zschemar   r   r   r	   r
   r   r   r   r   r   objectr   rM   rN   rQ   Zlistens_forrS   rU   r   r   r   r   <module>   s4   e
