o
    èã¤gÊ  ã                
   @  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 )$z5Establish 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   úW/var/www/html/ecg_monitoring/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_keyH   s   z ConventionDict._key_column_X_keyc                 C  r0   )Nr   r2   r3   r   r   r   Ú_key_column_X_nameN   ó   z!ConventionDict._key_column_X_namec                 C  r0   )NÚ
_ddl_labelr2   r3   r   r   r   Ú_key_column_X_labelQ   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_nameT   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_name]   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| |ƒr’t| |ƒ|ƒ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__d   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û	
ÿ


