o
    y¬´\Þ  ã                
   @   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                   @   sT   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S )ÚConventionDictc                 C   s*   || _ t|tƒ| _|| _|| _|j| _d S ©N)ÚconstÚ
isinstancer	   Ú_is_fkÚtableÚ
conventionÚnameÚ_const_name)Úselfr   r   r   © r   úG/var/www/html/env/lib/python3.10/site-packages/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 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ƒsd | j_| jS )NzcNaming convention including %(constraint_name)s token requires that constraint is explicitly named.)	r   r   Útyper   r   ÚInvalidRequestErrorr   r   r   r   r   r   r   Ú_key_constraint_name1   s   ÿz#ConventionDict._key_constraint_namec                 C   ó   |   |¡jS r   )r'   r   ©r   r%   r   r   r   Ú_key_column_X_name<   ó   z!ConventionDict._key_column_X_namec                 C   r+   r   )r'   Ú_labelr,   r   r   r   Ú_key_column_X_label?   r.   z"ConventionDict._key_column_X_labelc                 C   s>   | j jd }|j d¡}t|ƒdkr|\}}}|S |\}}|S )Nr   Ú.é   ©r   r!   Útarget_fullnameÚsplitÚlen)r   r&   ÚrefsÚ	refschemaÚreftableÚrefcolr   r   r   Ú_key_referred_table_nameB   ó   
ÿz'ConventionDict._key_referred_table_namec                 C   s>   | j j| }|j d¡}t|ƒdkr|\}}}|S |\}}|S )Nr1   r2   r3   )r   r%   r&   r7   r8   r9   r:   r   r   r   Ú_key_referred_column_X_nameK   r<   z*ConventionDict._key_referred_column_X_namec                 C   sŽ   || j v r| j | | j| jƒS t| d| ƒrt| d| ƒƒ S t d|¡}|rC| d¡}d| |d¡ }t	|ƒ}t| |ƒrCt| |ƒ|ƒS t
|ƒ‚)Nz_key_%sz.*_?column_(\d+)_.+r   Ú_key_ÚX)r   r   r   ÚhasattrÚgetattrÚreÚmatchÚgroupÚreplaceÚintÚKeyError)r   ÚkeyÚcol_templater%   Úattrr   r   r   Ú__getitem__T   s   


zConventionDict.__getitem__N)Ú__name__Ú
__module__Ú__qualname__r   r    r'   r*   r-   r0   r;   r=   rK   r   r   r   r   r      s    		r   ÚixÚpkÚckÚuqr&   c                 C   sH   |j D ]}|tv rt| | v r| t|    S || v r!| |   S qd S r   )Ú__mro__Ú_prefix_dict)Údict_rH   Úsuper_r   r   r   Ú_get_conventionm   s   
ÿrW   c                 C   s‚   |j }t|jt| ƒƒ}t| jtƒr| jS |d ur8t| jtƒs8| jd u s-d|v s-t| jtƒr8t|t| ||jƒ ƒS t|t	ƒr?d S d S )NÚconstraint_name)
ÚmetadatarW   Únaming_conventionr(   r   r   r   r   r   r   )r   r   rY   r   r   r   r   Ú_constraint_name_for_tablex   s&   
ÿ

ÿÿÿ
ÿr[   Úafter_parent_attachc                    sf   t |tƒrt |d‡ fdd„¡ d S t |tƒr/t ˆ jttfƒr!d S tˆ |ƒ}|d ur1|ˆ _d S d S d S )Nr\   c                    s
   t ˆ |ƒS r   )Ú_constraint_name)Úcolr   ©r   r   r   Ú<lambda>™   s   
 z"_constraint_name.<locals>.<lambda>)	r   r   r   Úlistenr   r   r   r   r[   )r   r   Únewnamer   r_   r   r]   �   s   

ý


úr]   )Ú__doc__rB   r!   r   r   r   Úschemar   r   r   r	   r
   r   r   r   Ú r   r   r   Úobjectr   rT   rW   r[   Úlistens_forr]   r   r   r   r   Ú<module>   s8   Fû	

