o
    i                  
   @   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   P/var/www/edux/Edux_v2/venv/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(   keyr   r&   r   r   r   _key_column_X_key<   s   z ConventionDict._key_column_X_keyc                 C   r,   r   )r(   r   r.   r   r   r   _key_column_X_nameB      z!ConventionDict._key_column_X_namec                 C   r,   r   )r(   
_ddl_labelr.   r   r   r   _key_column_X_labelE   r1   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_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 v r| j | | j| jS t| d| rt| d|  S td|}|r|d}|d}|rz| jr:| jj	}nt
| jj}g }t|D ]%\}}d|d| d }z|t| || W qF tyk   t|w |drsdnd	}	|	|S d||d }t|}t| |rt| ||S t|)
Nz_key_%sz.*_?column_(\d+)(_?N)?_.+r   r   _key_0X_ )r   r   r   hasattrgetattrrematchgroupr   r!   r#   r$   	enumeratereplaceappendAttributeErrorKeyError
startswithjoinint)
r   r-   col_templater&   	multipleselemstokenselemattrsepr   r   r   __getitem__X   s6   





zConventionDict.__getitem__N)__name__
__module____qualname__r   r    r(   r+   r/   r0   r3   r=   r?   rY   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_r-   super_r   r   r   _get_convention   s   
re   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)
metadatare   naming_conventionr)   r   r   r   r   r   r   )r   r   rg   r   r   r   r   _constraint_name_for_table   s&   



ri   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 )Nrj   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   ri   )r   r   newnamer   rm   r   rk      s   




rk   )__doc__rG   r!   r   r   r   schemar   r   r   r	   r
   r   r   r   rD   r   r   r   objectr   rb   re   ri   listens_forrk   r   r   r   r   <module>   s8   [	

