o
    ‹ågŸ€  ã                   @   sÊ   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eƒZG dd„ deeƒZG dd„ deeƒZdS )é    )ÚColumn)ÚForeignKeyConstraint)ÚInteger)ÚMetaData)ÚString)ÚTableé   )ÚAutogenFixtureTesté   )Úcombinations)Úconfig©Úeq_)Úmock)ÚTestBasec                   @   sd   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
ejjdd„ ƒZdd„ Zdd„ ZdS )ÚAutogenerateForeignKeysTestT)Ú!foreign_key_constraint_reflectionc              
   C   s   t ƒ }t ƒ }td|tdtdƒdd�ƒ td|tdtdd�tdtd	ƒd
d�tdtdƒdd�tdtdƒƒtdgdgƒƒ td|tdtdƒdd�ƒ td|tdtdd�tdtd	ƒd
d�tdtdƒdd�tdtdƒƒƒ |  ||¡}| j|d dddgddgdd� d S )NÚ
some_tableÚtesté
   T©Úprimary_keyÚuserÚidÚnameé2   F©ÚnullableÚa1Úx©Úserver_defaultÚtest2úsome_table.testr   Ú	remove_fkÚservergenerated©Úconditional_name©r   r   r   r   r   r   Ú_fixtureÚ_assert_fk_diff©ÚselfÚm1Úm2Údiffs© r0   úb/var/www/html/flaskapp/venv/lib/python3.10/site-packages/alembic/testing/suite/test_autogen_fks.pyÚtest_remove_fk   sN   ýù
ýú	
ùz*AutogenerateForeignKeysTest.test_remove_fkc              
   C   s  t ƒ }t ƒ }td|tdtdd�tdtdƒƒƒ td|tdtdd�tdtd	ƒd
d�tdtdƒdd�tdtdƒƒƒ td|tdtdd�tdtdƒƒƒ td|tdtdd�tdtd	ƒd
d�tdtdƒdd�tdtdƒƒtdgdgƒƒ |  ||¡}|  |d dddgddg¡ d S )Nr   r   Tr   r   r   r   r   r   Fr   r   r   r    r"   r#   r   Úadd_fk)r   r   r   r   r   r   r)   r*   r+   r0   r0   r1   Útest_add_fkC   sF   üú	üù
ÿz'AutogenerateForeignKeysTest.test_add_fkc              
   C   sþ   t ƒ }t ƒ }td|tdtdd�tdtdƒƒƒ td|tdtdd�tdtd	ƒd
d�tdtdƒdd�tdtƒtdgdgƒƒ td|tdtdd�tdtdƒƒƒ td|tdtdd�tdtd	ƒd
d�tdtdƒdd�tdtƒtdgdgƒƒ |  ||¡}t|g ƒ d S )Nr   r   Tr   r   r   r   r   r   Fr   r   r   r    r"   úsome_table.id)r   r   r   r   r   r   r)   r   r+   r0   r0   r1   Útest_no_changen   sD   üù
üù
z*AutogenerateForeignKeysTest.test_no_changec                 C   s6  t ƒ }t ƒ }td|tdtdƒdd�tdtdƒdd�ƒ td|tdtdd�td	td
ƒdd�tdtdƒdd�tdtdƒƒtdtdƒƒtddgddgƒƒ td|tdtdƒdd�tdtdƒdd�ƒ td|tdtdd�td	td
ƒdd�tdtdƒdd�tdtdƒƒtdtdƒƒtddgddgƒƒ |  ||¡}t|g ƒ d S )Nr   Úid_1r   Tr   Úid_2r   r   r   r   Fr   r   r   r    Ú
other_id_1Ú
other_id_2úsome_table.id_1úsome_table.id_2©r   r   r   r   r   r   r)   r   r+   r0   r0   r1   Útest_no_change_composite_fk˜   sT   üþøüþøz7AutogenerateForeignKeysTest.test_no_change_composite_fkc                 C   sB  t ƒ }t ƒ }td|tdtdƒdd�ƒ td|tdtdd�tdtd	ƒd
d�tdtdƒdd�tdtdƒƒtdgdgdd�ƒ td|tdtdƒdd�ƒ td|tdtdd�tdtd	ƒd
d�tdtdƒdd�tdtdƒƒtdgdgdd�ƒ |  ||¡}| j|d dddgddgtj	j
jr‹dnd d� | j|d dddgddgdd� d S )Nr   r   r   Tr   r   r   r   r   Fr   r   r   r    r"   r#   ÚMyFK©r   Úmyfkr   r$   r   r3   )r   r   r   r   r   r   r)   r*   r   ÚrequirementsÚfk_namesÚenabledr+   r0   r0   r1   Ú1test_casing_convention_changed_so_put_drops_firstÊ   sb   ýù
ý	ù
ù

ùzMAutogenerateForeignKeysTest.test_casing_convention_changed_so_put_drops_firstc                 C   sD  t ƒ }t ƒ }td|tdtdƒdd�tdtdƒdd�ƒ td|tdtdd�td	td
ƒdd�tdtdƒdd�tdtdƒƒtdtdƒƒƒ td|tdtdƒdd�tdtdƒdd�ƒ td|tdtdd�td	td
ƒdd�tdtdƒdd�tdtdƒƒtdtdƒƒtddgddgdd�ƒ |  ||¡}| j|d ddddgdddgdd� d S )Nr   r7   r   Tr   r8   r   r   r   r   Fr   r   r   r    r9   r:   r;   r<   Úfk_test_namer@   r   r3   r(   r+   r0   r0   r1   Útest_add_composite_fk_with_name  s^   üù
üýø
ùz;AutogenerateForeignKeysTest.test_add_composite_fk_with_namec                 C   sD  t ƒ }t ƒ }td|tdtdƒdd�tdtdƒdd�ƒ td|tdtdd�td	td
ƒdd�tdtdƒdd�tdtdƒƒtdtdƒƒtddgddgdd�ƒ td|tdtdƒdd�tdtdƒdd�ƒ td|tdtdd�td	td
ƒdd�tdtdƒdd�tdtdƒƒtdtdƒƒƒ |  ||¡}| j|d ddddgdddgdd� d S )Nr   r7   r   Tr   r8   r   r   r   r   Fr   r   r   r    r9   r:   r;   r<   rF   r@   r   r$   r&   r(   r+   r0   r0   r1   Útest_remove_composite_fk=  s^   üýøüù

ùz4AutogenerateForeignKeysTest.test_remove_composite_fkc                 C   s  t ƒ }t ƒ }td|tdtdƒdd�tdtdƒdd�ƒ td|tdtdd�td	tdƒƒtd
tdƒƒƒ td|tdtdƒddd�tdtdƒddd�ƒ td|tdtdd�td	tdƒdd�td
tdƒdd�tddgddgdd�ƒ |  ||¡}| j|d ddd	d
gdddgdd� d S )Nr   r7   r   Tr   r8   r   r   r9   r:   Útid1©Úkeyr   Útid2Úoid1©rK   Úoid2úsome_table.tid1úsome_table.tid2rF   r@   r   r3   r(   r+   r0   r0   r1   Útest_add_fk_colkeysu  sV   üûüýú
ùz/AutogenerateForeignKeysTest.test_add_fk_colkeysc              
   C   s  t ƒ }t ƒ }td|tdtdƒdd�tdtdƒdd�ƒ td|tdtdd�td	tdƒƒtd
tdƒƒtd	d
gddgƒƒ td|tdtdƒddd�tdtdƒddd�ƒ td|tdtdd�td	tdƒdd�td
tdƒdd�tddgddgƒƒ |  ||¡}t|g ƒ d S )Nr   r7   r   Tr   r8   r   r   r9   r:   r;   r<   rI   rJ   rL   rM   rN   rO   rP   rQ   r=   r+   r0   r0   r1   Útest_no_change_colkeys¨  sJ   üþúüÿúz2AutogenerateForeignKeysTest.test_no_change_colkeysN)Ú__name__Ú
__module__Ú__qualname__Ú__backend__Ú__requires__r2   r4   r6   r>   rE   rG   r   rB   Úno_name_normalizerH   rR   rS   r0   r0   r0   r1   r      s    /+*2=6
73r   c                   @   sP   e Zd ZdZdZeddƒejjdd„ ƒƒZ	dd„ Z
eddƒejjd	d
„ ƒƒZdS )ÚIncludeHooksTestT)rC   )Úobjectr@   c           	   	   C   s   t ƒ }t ƒ }td|tdtdd�ƒ}td|tdtƒtdtƒƒ}| t|jjg|jjgdd	�¡ | t|jj	g|jjgd
d	�¡ td|tdtdd�ƒ}td|tdtƒtdtƒƒ |dkrgdd„ }| j
|||d�}n|dkrwdd„ }| j
|||d�}| j|d dddgddgd
d� tt|ƒdƒ d S )NÚrefr   Tr   Útr   ÚyÚfk1r@   Úfk2r[   c                 S   s    t | tƒo|dko|o|dk S ©NÚforeign_key_constraintr_   ©Ú
isinstancer   ©Úobject_r   Útype_Ú	reflectedÚ
compare_tor0   r0   r1   Úinclude_object   s   
ÿþüzBIncludeHooksTest.test_remove_connection_fk.<locals>.include_object©Úobject_filtersr   c                 S   s8   | dkr|dkr
dS t |dƒ t |d dddœƒ dS dS )Nr_   ÚindexTrb   r]   ©Úschema_nameÚ
table_nameÚschema_qualified_table_nameFr   ©r   rg   Úparent_namesr0   r0   r1   Úinclude_name  s   
ýþz@IncludeHooksTest.test_remove_connection_fk.<locals>.include_name©Úname_filtersr   r$   r&   r   ©r   r   r   r   Úappend_constraintr   Úcr   r   r^   r)   r*   r   Úlen)	r,   Ú	hook_typer-   r.   r\   Út1rj   r/   rt   r0   r0   r1   Útest_remove_connection_fkÚ  s\   ýüÿÿýüù	z*IncludeHooksTest.test_remove_connection_fkc              	   C   sö   t ƒ }t ƒ }td|tdtdd�ƒ td|tdtƒtdtƒƒ td|tdtdd�ƒ}td|tdtƒtdtƒƒ}| t|jjg|jjgdd	�¡ | t|jj	g|jjgd
d	�¡ dd„ }| j
|||d�}| j|d dddgddgd
d	� tt|ƒdƒ d S )Nr\   r   Tr   r]   r   r^   r_   r@   r`   c                 S   s"   t | tƒo|dko| o|dk S ra   rc   re   r0   r0   r1   rj   K  s   
ÿþüz=IncludeHooksTest.test_add_metadata_fk.<locals>.include_objectrk   r   r3   r   rw   )r,   r-   r.   r\   Út2rj   r/   r0   r0   r1   Útest_add_metadata_fk)  sH   ýüýüÿÿÿz%IncludeHooksTest.test_add_metadata_fkc              	   C   s"  t ƒ }t ƒ }td|tdtdd�ƒ}td|tdtdd�tdtdd�ƒ td|tdtƒtd	tƒtd
tƒƒ}| t|jjg|jjgdd�¡ | t|jj	g|jjgdd�¡ td|tdtdd�ƒ td|tdtdd�tdtdd�ƒ}td|tdtƒtd	tƒtd
tƒƒ}| t|jj|jj
g|jj|jjgdd�¡ | t|jj	|jj
g|jj|jjgdd�¡ |dkr½dd„ }| j|||d�}	n|dkrÍdd„ }
| j|||
d�}	|dkrü| j|	d ddd	gddgdd� | j|	d ddd	d
gdddgdd� tt|	ƒdƒ d S |dk�rtdd„ |	D ƒh d£ƒ d S d S )NÚref_aÚaTr   Úref_bÚbr]   r   r^   Úzr_   r@   r`   r[   c                 S   s   t | tƒo|dko|dk S ra   rc   re   r0   r0   r1   rj   ˜  s
   
ÿýz7IncludeHooksTest.test_change_fk.<locals>.include_objectrk   r   c                 S   s8   |dkrdS | dkrt |dƒ t |d dddœƒ dS dS )Nrm   Tr_   rb   r]   rn   Fr   rr   r0   r0   r1   rt   ¢  s   
ýþz5IncludeHooksTest.test_change_fk.<locals>.include_nameru   r   r$   r   r3   é   c                 S   s   h | ]}|d  |d j f’qS )r   r   r@   )Ú.0Údr0   r0   r1   Ú	<setcomp>Æ  s    z2IncludeHooksTest.test_change_fk.<locals>.<setcomp>>   ©r3   r_   ©r3   r`   ©r$   r`   )r   r   r   r   rx   r   ry   r   r�   r^   r„   rƒ   r)   r*   r   rz   )r,   r{   r-   r.   Úr1ar|   Úr2br~   rj   r/   rt   r0   r0   r1   Útest_change_fkZ  s    ýüûÿÿýüûÿÿÿÿÿù	
þÿzIncludeHooksTest.test_change_fkN)rT   rU   rV   rW   rX   r   r   rB   rY   r}   r   rŽ   r0   r0   r0   r1   rZ   Ö  s    M1rZ   c                   @   s   e Zd ZdZdd„ Zejjdd„ ƒZejjdd„ ƒZ	dd	„ Z
ejjd
d„ ƒZejjdd„ ƒZejjdd„ ƒZejjdd„ ƒZejjdd„ ƒZejjdd„ ƒZejjdd„ ƒZejjdd„ ƒZejjdd„ ƒZejjejjdd„ ƒƒZejjdd„ ƒZejjd d!„ ƒZejjejjd"d#„ ƒƒZejjejjd$d%„ ƒƒZejjejjd&d'„ ƒƒZ ejjejjd(d)„ ƒƒZ!ejjejjd*d+„ ƒƒZ"ejjd,d-„ ƒZ#ejj$d.d/„ ƒZ%d0S )1ÚAutogenerateFKOptionsTestTc              
   C   sà   t ƒ }t ƒ }td|tdtdd�tdtdƒƒƒ td|tdtdd�tdtd	ƒd
d�tdtƒtdgdgfi |¤Žƒ td|tdtdd�tdtdƒƒƒ td|tdtdd�tdtd	ƒd
d�tdtƒtdgdgfi |¤Žƒ |  ||¡S )Nr   r   Tr   r   r   r   r   r   Fr   Útidr5   )r   r   r   r   r   r   r)   )r,   Úold_optsÚnew_optsr-   r.   r0   r0   r1   Ú_fk_opts_fixtureÎ  s>   üú	üú	z*AutogenerateFKOptionsTest._fk_opts_fixturec              
   C   óV   |   i ddi¡}| j|d dddgddgd d	d
� | j|d dddgddgdd� d S )NÚondeleteÚcascader   r$   r   r�   r   r   r%   ©r•   r'   r   r3   ©r•   ©r“   r*   ©r,   r/   r0   r0   r1   Útest_add_ondeleteô  ó(   ø
ùz+AutogenerateFKOptionsTest.test_add_ondeletec              
   C   óV   |   ddii ¡}| j|d dddgddgdd	d
� | j|d dddgddgd d� d S )Nr•   ÚCASCADEr   r$   r   r�   r   r   r%   r—   r   r3   r˜   r™   rš   r0   r0   r1   Útest_remove_ondelete  rœ   z.AutogenerateFKOptionsTest.test_remove_ondeletec                 C   ó"   |   ddiddi¡}t|g ƒ dS )útest case sensitivityr•   ÚcaSCAdeÚCasCadeN©r“   r   rš   r0   r0   r1   Útest_nochange_ondelete&  s   ÿz0AutogenerateFKOptionsTest.test_nochange_ondeletec              
   C   r”   )NÚonupdater–   r   r$   r   r�   r   r   r%   ©r¦   r'   r   r3   ©r¦   r™   rš   r0   r0   r1   Útest_add_onupdate-  rœ   z+AutogenerateFKOptionsTest.test_add_onupdatec              
   C   r�   )Nr¦   rž   r   r$   r   r�   r   r   r%   r§   r   r3   r¨   r™   rš   r0   r0   r1   Útest_remove_onupdateF  rœ   z.AutogenerateFKOptionsTest.test_remove_onupdatec                 C   r    )r¡   r¦   r¢   r£   Nr¤   rš   r0   r0   r1   Útest_nochange_onupdate_  s   ÿz0AutogenerateFKOptionsTest.test_nochange_onupdatec                 C   ó"   |   ddiddi¡}t|g ƒ dS )ú6test the RESTRICT option which MySQL doesn't report onr•   ÚrestrictNr¤   rš   r0   r0   r1   Útest_nochange_ondelete_restrictg  ó   ÿz9AutogenerateFKOptionsTest.test_nochange_ondelete_restrictc                 C   r¬   )r­   r¦   r®   Nr¤   rš   r0   r0   r1   Útest_nochange_onupdate_restrictp  r°   z9AutogenerateFKOptionsTest.test_nochange_onupdate_restrictc                 C   r¬   )ú<test the NO ACTION option which generally comes back as Noner•   ú	no actionNr¤   rš   r0   r0   r1   Útest_nochange_ondelete_noactiony  r°   z9AutogenerateFKOptionsTest.test_nochange_ondelete_noactionc                 C   r¬   )r²   r¦   r³   Nr¤   rš   r0   r0   r1   Útest_nochange_onupdate_noaction‚  r°   z9AutogenerateFKOptionsTest.test_nochange_onupdate_noactionc                 C   s`   |   ddiddi¡}| j|d dddgdd	gd
tjdd�	 | j|d dddgdd	gd
dd� d
S )r­   r•   r®   r–   r   r$   r   r�   r   r   Nr%   ©r¦   r•   r'   r   r3   ©r¦   r•   ©r“   r*   r   ÚANYrš   r0   r0   r1   Ú"test_change_ondelete_from_restrict‹  s0   ÿ÷
øz<AutogenerateFKOptionsTest.test_change_ondelete_from_restrictc                 C   s`   |   ddiddi¡}| j|d dddgdd	gtjd
dd�	 | j|d dddgdd	gdd
d� d
S )r­   r¦   r®   r–   r   r$   r   r�   r   r   Nr%   r¶   r   r3   r·   r¸   rš   r0   r0   r1   Ú"test_change_onupdate_from_restrict«  s0   ÿ÷
øz<AutogenerateFKOptionsTest.test_change_onupdate_from_restrictc                 C   sb   |   dddœdddœ¡}| j|d dddgd	d
gdddd�	 | j|d dddgd	d
gddd� d S )Nrž   zSET NULLr·   ÚRESTRICTr   r$   r   r�   r   r   r%   r¶   r   r3   r™   rš   r0   r0   r1   Útest_ondelete_onupdate_comboË  s2   þ÷
øz6AutogenerateFKOptionsTest.test_ondelete_onupdate_comboc              
   C   r”   )NÚ	initiallyÚdeferredr   r$   r   r�   r   r   r%   ©r¾   r'   r   r3   ©r¾   r™   rš   r0   r0   r1   Útest_add_initially_deferredê  rœ   z5AutogenerateFKOptionsTest.test_add_initially_deferredc                 C   sX   |   ddii ¡}| j|d dddgddgd	d
dd�	 | j|d dddgddgd d� d S )Nr¾   r¿   r   r$   r   r�   r   r   ÚDEFERREDTr%   ©r¾   Ú
deferrabler'   r   r3   rÁ   r™   rš   r0   r0   r1   Útest_remove_initially_deferred  s*   ÷
ùz8AutogenerateFKOptionsTest.test_remove_initially_deferredc              
   C   sZ   |   i dddœ¡}| j|d dddgdd	gd d
d� | j|d dddgdd	gddd� d S )NÚ	immediateT©r¾   rÅ   r   r$   r   r�   r   r   r%   rÀ   r   r3   r™   rš   r0   r0   r1   Ú,test_add_initially_immediate_plus_deferrable  s.   
ÿø
øzFAutogenerateFKOptionsTest.test_add_initially_immediate_plus_deferrablec                 C   s\   |   dddœi ¡}| j|d dddgdd	gd dd
d�	 | j|d dddgdd	gd d d� d S )NrÇ   TrÈ   r   r$   r   r�   r   r   r%   rÄ   r   r3   r™   rš   r0   r0   r1   Ú/test_remove_initially_immediate_plus_deferrable:  s0   
ÿ÷
øzIAutogenerateFKOptionsTest.test_remove_initially_immediate_plus_deferrablec                 C   ó&   |   dddœdddœ¡}t|g ƒ d S )NTrÇ   ©rÅ   r¾   r¤   rš   r0   r0   r1   Ú*test_add_initially_deferrable_nochange_oneX  ó
   þzDAutogenerateFKOptionsTest.test_add_initially_deferrable_nochange_onec                 C   rË   )NTr¿   rÌ   r¤   rš   r0   r0   r1   Ú*test_add_initially_deferrable_nochange_twob  rÎ   zDAutogenerateFKOptionsTest.test_add_initially_deferrable_nochange_twoc                 C   s&   |   d ddœd ddœ¡}t|g ƒ d S )Nr¿   rÌ   r¤   rš   r0   r0   r1   Ú,test_add_initially_deferrable_nochange_threel  rÎ   zFAutogenerateFKOptionsTest.test_add_initially_deferrable_nochange_threec              
   C   r”   ©NrÅ   Tr   r$   r   r�   r   r   r%   )rÅ   r'   r   r3   )rÅ   r™   rš   r0   r0   r1   Útest_add_deferrablev  rœ   z-AutogenerateFKOptionsTest.test_add_deferrablec              
   C   r�   rÑ   r™   rš   r0   r0   r1   Útest_remove_deferrable�  rœ   z0AutogenerateFKOptionsTest.test_remove_deferrableN)&rT   rU   rV   rW   r“   r   rB   Úfk_ondelete_is_reflectedr›   rŸ   r¥   Úfk_onupdate_is_reflectedr©   rª   Úfk_onupdater«   Úfk_ondelete_restrictr¯   Úfk_onupdate_restrictr±   Úfk_ondelete_noactionr´   rµ   rº   r»   r½   Úfk_initiallyrÂ   rÆ   Úfk_deferrablerÉ   rÊ   rÍ   rÏ   rÐ   rÒ   Úfk_deferrable_is_reflectedrÓ   r0   r0   r0   r1   r�   Ë  sh    &













r�   N)Ú
sqlalchemyr   r   r   r   r   r   Ú_autogen_fixturesr	   Útestingr   r   r   r   r   r   rZ   r�   r0   r0   r0   r1   Ú<module>   s&       I v