B
    .`              
   @   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   D/home/dcms/DCMS/lib/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   s,   | j r| jj| }|jS t| jj| S d S )N)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 )N)r%   key)r   r#   r   r   r   _key_column_X_key<   s    z ConventionDict._key_column_X_keyc             C   s   |  |jS )N)r%   r   )r   r#   r   r   r   _key_column_X_nameB   s    z!ConventionDict._key_column_X_namec             C   s   |  |jS )N)r%   Z
_ddl_label)r   r#   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 )N)r   r   columnr   )r   r#   r$   r   r   r   _key_referred_column_X_nameQ   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   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+   r1   r3   rJ   r   r   r   r   r      s   	r   ix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    rR   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)
metadatarR   Znaming_conventionr&   r   r   r   r   r   r   )r   r   rS   r   r   r   r   _constraint_name_for_table   s    

rT   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 )NrU   c                s
   t  |S )N)_constraint_name)colr   )r   r   r   <lambda>       z"_constraint_name.<locals>.<lambda>)	r   r   r   listenr   r   r   r   rT   )r   r   Znewnamer   )r   r   rV      s    


rV   )__doc__r:   r   r   r   r   Zschemar   r   r   r	   r
   r   r   r   r7   r   r   r   objectr   rQ   rR   rT   Zlistens_forrV   r   r   r   r   <module>   s2   [
