o
    ‹ågü$  ã                   @  sf  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 d dlmZ ddlmZ ddlmZ e	rª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&d S )!é    )Úannotations)ÚAny)ÚDict)ÚList)ÚOptional)ÚSequence)ÚTuple)ÚTYPE_CHECKING)ÚUnion©Úschema)ÚColumn)Ú
Constraint)ÚIndex)ÚInteger)ÚNULLTYPEé   )Úutil)Úsqla_compat)ÚColumnElement)Ú
TextClause)ÚCheckConstraint)Ú
ForeignKey)ÚForeignKeyConstraint)ÚMetaData)ÚPrimaryKeyConstraint)ÚTable)ÚUniqueConstraint)Ú
TypeEngine)ÚMigrationContextc                   @  s¬   e Zd Z	dHdIdd„Z	dHdJdd„Z							dKdLd!d"„Z	dHdMd$d%„Z	dHdNd)d*„Z	dHdOd-d.„ZdPd0d1„Z	dQd3d4„Z
dRd7d8„Z	dHdSd=d>„ZdTdAdB„ZdUdFdG„ZdS )VÚSchemaObjectsNÚmigration_contextúOptional[MigrationContext]ÚreturnÚNonec                 C  s
   || _ d S ©N)r!   )Úselfr!   © r'   úX/var/www/html/flaskapp/venv/lib/python3.10/site-packages/alembic/operations/schemaobj.pyÚ__init__)   s   
zSchemaObjects.__init__Únameú,Optional[sqla_compat._ConstraintNameDefined]Ú
table_nameÚstrÚcolsúSequence[str]r   úOptional[str]r   c           	        sV   |   ¡ }dd„ |D ƒ}tj||g|¢R d|iŽ‰ tj‡ fdd„|D ƒd|i|¤Ž}|S )Nc                 S  ó   g | ]}t  |t¡‘qS r'   ©Ú	sa_schemar   r   ©Ú.0Únr'   r'   r(   Ú
<listcomp>7   ó    z8SchemaObjects.primary_key_constraint.<locals>.<listcomp>r   c                   ó   g | ]}ˆ j | ‘qS r'   ©Úcr4   ©Útr'   r(   r7   <   ó    r*   )Úmetadatar3   r   r   )	r&   r*   r,   r.   r   Ú
dialect_kwÚmÚcolumnsÚpr'   r<   r(   Úprimary_key_constraint.   s   ÿÿÿz$SchemaObjects.primary_key_constraintÚsourceÚreferentÚ
local_colsú	List[str]Úremote_colsÚonupdateÚondeleteÚ
deferrableúOptional[bool]Úsource_schemaÚreferent_schemaÚ	initiallyÚmatchr   c                   sÌ   |   ¡ }||kr|	|
kr|| }n|}tj||gdd„ |D ƒ¢R d|
iŽ tj||gdd„ t |¡D ƒ¢R d|	iŽ}|
rBd|
|f n|‰ ||d< tj|‡ fdd„|D ƒf|||||dœ|¤Ž}| |¡ |S )	Nc                 S  r1   r'   r2   r4   r'   r'   r(   r7   X   r8   z8SchemaObjects.foreign_key_constraint.<locals>.<listcomp>r   c                 S  r1   r'   r2   r4   r'   r'   r(   r7   _   s    
ÿÿú%s.%srQ   c                   s   g | ]}d ˆ |f ‘qS )rR   r'   r4   ©Útnamer'   r(   r7   p   r8   )r*   rJ   rK   rL   rP   )r?   r3   r   r   Úunique_listr   Úappend_constraint)r&   r*   rE   rF   rG   rI   rJ   rK   rL   rN   rO   rP   rQ   r@   rA   Út1_colsÚt1Úfr'   rS   r(   Úforeign_key_constraint@   sR   
þýüþþýùÿýþùø

z$SchemaObjects.foreign_key_constraintr   c                   s\   t j||  ¡ gdd„ |D ƒ¢R d|iŽ‰ ||d< t j‡ fdd„|D ƒi |¤Ž}ˆ  |¡ |S )Nc                 S  r1   r'   r2   r4   r'   r'   r(   r7   ‡   r8   z3SchemaObjects.unique_constraint.<locals>.<listcomp>r   r*   c                   r9   r'   r:   r4   r<   r'   r(   r7   ‹   r>   )r3   r   r?   r   rV   )r&   r*   rE   rG   r   ÚkwÚuqr'   r<   r(   Úunique_constraint|   s   þýü
zSchemaObjects.unique_constraintÚ	conditionú*Union[str, TextClause, ColumnElement[Any]]úUnion[CheckConstraint]c                 K  sB   t j||  ¡ t  dt¡|d�}t j|fd|i|¤Ž}| |¡ |S )NÚxr   r*   )r3   r   r?   r   r   r   rV   )r&   r*   rE   r^   r   r[   r=   Úckr'   r'   r(   Úcheck_constraint‘   s   
ü
zSchemaObjects.check_constraintÚtype_r   c           
   
   K  sŒ   | j ||d�}dd„ tjtjdd„ tjdœ}z|| }W n ty9 }	 ztdd tdd	„ |D ƒƒ¡ ƒ|	‚d }	~	ww ||d
�}| 	|¡ |S )Nr   c                 S  s   t jg g | d�S )N©r*   )r3   r   re   r'   r'   r(   Ú<lambda>­   s    ÿz2SchemaObjects.generic_constraint.<locals>.<lambda>c                 S  s   t jd| d�S )NÚ re   )r3   r   re   r'   r'   r(   rf   ²   s    )Ú
foreignkeyÚprimaryÚuniqueÚcheckNz'type' can be one of %sz, c                 s  s   � | ]}t |ƒV  qd S r%   )Úrepr)r5   ra   r'   r'   r(   Ú	<genexpr>º   s   € z3SchemaObjects.generic_constraint.<locals>.<genexpr>re   )
Útabler3   r   r   r   ÚKeyErrorÚ	TypeErrorÚjoinÚsortedrV   )
r&   r*   r,   rd   r   r[   r=   ÚtypesÚconstÚker'   r'   r(   Úgeneric_constraint£   s,   ù	ÿÿý€ÿ

z SchemaObjects.generic_constraintr   c                 C  sJ   i }| j d urd| j jv r| j jd }t|dƒr|j|d< tjdi |¤ŽS )NÚtarget_metadataÚnaming_conventionr'   )r!   ÚoptsÚhasattrrx   r3   r   )r&   r[   Úmtr'   r'   r(   r?   Á   s   


zSchemaObjects.metadatar   c                   s˜   |   ¡ }dd„ |D ƒ}| dd¡}|r|D ]}d |_|_qtj||g|¢R i |¤Ž‰ ‡ fdd„|D ƒ}|D ]}	ˆ  |	¡ q6ˆ jD ]}
|  ||
¡ qAˆ S )Nc                 S  s.   g | ]}t |tƒr|jd urt |¡n|‘qS r%   )Ú
isinstancer   rn   r   Ú_copy)r5   r;   r'   r'   r(   r7   Ï   s    ýÿz'SchemaObjects.table.<locals>.<listcomp>Ú_constraints_includedFc                   sL   g | ]"}t |ttfƒrt|d dƒˆ ur"t|d dƒdur"tj|ˆ d�n|‘qS )ÚparentN)Útarget_table)r|   r   r   Úgetattrr   r}   )r5   Úelemr<   r'   r(   r7   á   s    øþû)	r?   Úpoprj   Úindexr3   r   rV   Úforeign_keysÚ_ensure_table_for_fk)r&   r*   rB   r[   rA   r.   r~   r;   Úconstraintsrt   rY   r'   r<   r(   rn   Ì   s"   þ
ù
zSchemaObjects.tabler   r   c                 K  s   t j||fi |¤ŽS r%   )r3   r   )r&   r*   rd   r[   r'   r'   r(   Úcolumnó   s   zSchemaObjects.columnÚ	tablenamerB   ú4Sequence[Union[str, TextClause, ColumnElement[Any]]]r   c                   sJ   t j|pd|  ¡ |d�‰ ˆ |d< t j|g‡ fdd„|D ƒ¢R i |¤Ž}|S )NÚno_tabler   Ú_tablec                   s   g | ]	}t j ˆ |¡‘qS r'   )r   r   Ú_textual_index_columnr4   r<   r'   r(   r7     s    z'SchemaObjects.index.<locals>.<listcomp>)r3   r   r?   r   )r&   r*   r‰   rB   r   r[   Úidxr'   r<   r(   r„   ö   s   ýÿþýzSchemaObjects.indexÚ	table_keyúTuple[Optional[str], str]c                 C  sD   d|v r|  d¡}d |dd… ¡}|d }||fS |}d }||fS )NÚ.r   éÿÿÿÿ)Úsplitrq   )r&   r�   ÚtokensÚsnamerT   r'   r'   r(   Ú_parse_table_key  s   
þzSchemaObjects._parse_table_keyr?   Úfkr   c                 C  sz   t |jtƒr9|j dd¡\}}|  |¡\}}||jvr$tj|||d�}n|j| }||jvr;| 	t 
|t¡¡ dS dS dS )zUcreate a placeholder Table object for the referent of a
        ForeignKey.

        r‘   é   r   N)r|   Ú_colspecr-   Úrsplitr–   Útablesr3   r   r;   Úappend_columnr   r   )r&   r?   r—   r�   Úcnamer•   rT   Úrel_tr'   r'   r(   r†     s   


øz"SchemaObjects._ensure_table_for_fkr%   )r!   r"   r#   r$   )
r*   r+   r,   r-   r.   r/   r   r0   r#   r   )NNNNNNN)r*   r+   rE   r-   rF   r-   rG   rH   rI   rH   rJ   r0   rK   r0   rL   rM   rN   r0   rO   r0   rP   r0   rQ   r0   r#   r   )
r*   r+   rE   r-   rG   r/   r   r0   r#   r   )
r*   r+   rE   r-   r^   r_   r   r0   r#   r`   )
r*   r+   r,   r-   rd   r0   r   r0   r#   r   )r#   r   )r*   r-   r#   r   )r*   r-   rd   r   r#   r   )
r*   r0   r‰   r0   rB   rŠ   r   r0   r#   r   )r�   r-   r#   r�   )r?   r   r—   r   r#   r$   )Ú__name__Ú
__module__Ú__qualname__r)   rD   rZ   r]   rc   rv   r?   rn   rˆ   r„   r–   r†   r'   r'   r'   r(   r    (   s4    ÿ
ûóAûûû


'û

r    N)'Ú
__future__r   Útypingr   r   r   r   r   r   r	   r
   Ú
sqlalchemyr   r3   Úsqlalchemy.sql.schemar   r   r   Úsqlalchemy.typesr   r   rg   r   r   Úsqlalchemy.sql.elementsr   r   r   r   r   r   r   r   r   Úsqlalchemy.sql.type_apir   Úruntime.migrationr   r    r'   r'   r'   r(   Ú<module>   s<   