o
    [h                  
   @   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   |/home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/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   Z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(   Z
_ddl_labelr-   r   r   r   _key_column_X_labelE   r0   z"ConventionDict._key_column_X_labelc                 C   s>   | j jd }|jd}t|dkr|\}}}|S |\}}|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 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   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	multiplesZelemstokenselemattrsepr   r   r   __getitem__X   s6   





zConventionDict.__getitem__N)__name__
__module____qualname__r   r    r(   r*   r.   r/   r1   r7   r9   rO   r   r   r   r   r      s    	r   ZixpkZckZuqr'   c                 C   sH   |j D ]}|tv rt| | v r| t|    S || v 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 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 )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                    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 )NrY   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   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>   s8   [	

