o
     h                  
   @  s"  d Z ddlm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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 )$z2Establish constraint and index naming conventions.    )annotationsN   )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   H/var/www/html/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  sp   | j rz| jj| }W n
 ty   Y dS w t|j|S t| jj}z|| }W n
 ty2   Y dS w t||S )N )r   r   elements
IndexErrorgetattrparentlistcolumns)r   idxattrnamefkcolscolr   r   r   	_column_X)   s   
zConventionDict._column_Xc                 C  s2   | j d tfv 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   InvalidRequestErrorr   r   r   r   r   r   r   r   _key_constraint_name:   s   z#ConventionDict._key_constraint_namec                 C     |  |dS )Nkeyr-   r   r(   r   r   r   _key_column_X_keyE   s   z ConventionDict._key_column_X_keyc                 C  r0   )Nr   r2   r3   r   r   r   _key_column_X_nameK      z!ConventionDict._key_column_X_namec                 C  r0   )N
_ddl_labelr2   r3   r   r   r   _key_column_X_labelN   r6   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_nameQ   s   
z'ConventionDict._key_referred_table_namec                 C  s   | j j| }|jjS r   )r   r"   columnr   )r   r(   r*   r   r   r   _key_referred_column_X_nameZ   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   r   hasattrr$   rematchgroupr   r"   r&   r'   	enumeratereplaceappendAttributeErrorKeyError
startswithjoinint)
r   r1   col_templater(   	multipleselemstokenselemattrsepr   r   r   __getitem__a   s6   





zConventionDict.__getitem__N)__name__
__module____qualname__r   r    r-   r/   r4   r5   r8   rB   rD   r\   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_r1   super_r   r   r   _get_convention   s   
rh   c                 C  s~   |j }t|jt| }t| jtr| jS |d ur7t| jts7| jd u s,d|v s,| jtu r7t|t| ||j S |tu r=d S d S )Nconstraint_name)	metadatarh   naming_conventiontyper   r   r   r   r   )r   r   rj   r   r   r   r   _constraint_name_for_table   s$   


rm   '_sa_event_column_added_to_pk_constraintc                 C  s2   | j r| j}d | _t| |}|r|| _d S d S d S r   )_implicit_generatedr   r   rm   )pk_constraintr,   r   newnamer   r   r   _column_added_to_pk_constraint   s   

rr   after_parent_attachc                   sh   t |trt|d fdd d S t |tr0t  jts" jtu r$d S t |}|r2| _d S d S d S )Nrs   c                   s
   t  |S r   )_constraint_name)r,   r   r   r   r   <lambda>   s   
 z"_constraint_name.<locals>.<lambda>)	r   r   r   listenr   r   r   r   rm   )r   r   rq   r   ru   r   rt      s   




rt   )__doc__
__future__r   rJ   r!   r   baser   r"   r   schemar   r   r	   r
   r   r   r   r   r   r   r   re   rh   rm   listens_forrr   rt   r   r   r   r   <module>   s@   e	



