o
    ‹åg§#  ã                   @  sÒ  U d dl mZ d dlZd dlmZ d dl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 d dlm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* e +¡ Z,e, -dg¡ G dd„ deƒZG dd „ d eeƒZd!e_.d1d#d$„Z/i Z0d%e1d&< ed'd(„ ƒZ2ed)d*„ ƒZ3	+	,		,	d2d-d.„Z4G d/d0„ d0ƒZ5dS )3é    )ÚannotationsN)Úcontextmanager)ÚAny)ÚDict)ÚColumn©Úcreate_mock_engine)Úinspect)ÚMetaData)ÚString)ÚTable)Útesting)Útext)Úconfig)Úmock)Úeq_)ÚFutureEngineMixin)Ú
TablesTest)ÚTestBaseé   )Ú_get_dialecté   )ÚEnvironmentContext)ÚMigrationContext)Ú
Operations)Úsqla_compat)Úsqla_2ztest.cfgc                   @  sJ   e Zd ZeZe ¡ dd„ ƒZejdd„ ƒZejdd„ ƒZ	ejdd„ ƒZ
d	S )
r   c                 c  s>   � |j dd�� t|ƒV  W d   ƒ d S 1 sw   Y  d S )NT)Ú_per_migration)Úbegin_transactionr   )ÚselfÚmigration_context© r!   úT/var/www/html/flaskapp/venv/lib/python3.10/site-packages/alembic/testing/fixtures.pyÚops_context)   s   €"ÿzTestBase.ops_contextc                 C  s   t j|tdd�d�S )NT)Útransaction_per_migration©Úopts©r   Ú	configureÚdict©r   Ú
connectionr!   r!   r"   r    .   s   
ÿzTestBase.migration_contextc                 C  s   t j|tddd�d�S )NT)r$   Úas_sqlr%   r'   r*   r!   r!   r"   Úas_sql_migration_context4   s   ÿz!TestBase.as_sql_migration_contextc                 c  s8   � t j ¡ �}|V  W d   ƒ d S 1 sw   Y  d S ©N)r   ÚdbÚconnect)r   Úconnr!   r!   r"   r+   :   s   €"ÿzTestBase.connectionN)Ú__name__Ú
__module__Ú__qualname__r   Úis_sqlalchemy_futurer   Úfixturer#   r    r-   r+   r!   r!   r!   r"   r   &   s    


r   c                   @  s   e Zd ZdS )r   N)r2   r3   r4   r!   r!   r!   r"   r   @   s    r   Túpostgresql://c                   s$   g ‰ ‡ ‡fdd„}t | |ƒ‰ˆˆ fS )Nc                   s   ˆ   t| jˆjd�ƒ¡ d S ©N)Údialect)ÚappendÚstrÚcompiler9   )ÚsqlÚmultiparamsÚparams©ÚbufÚenginer!   r"   ÚdumpJ   s   zcapture_db.<locals>.dumpr   )r9   rC   r!   r@   r"   Ú
capture_dbG   s   
rD   zDict[Any, Any]Ú_engsc                  +  s€   � ˆ  dd¡rt ¡ }nt ¡ }ˆ d|dœ¡ tj‰ ‡ ‡fdd„}tj 	td|¡� |V  W d   ƒ d S 1 s9w   Y  d S )NÚbytes_ioFÚsqlite)Údialect_nameÚoutput_bufferc                    ó   |j di ˆ¤Ž ˆ | i |¤ŽS ©Nr!   ©Úupdate©ÚargÚopt©ÚconfÚkwr!   r"   r(   ^   ó   z)capture_context_buffer.<locals>.configurer(   )
ÚpopÚioÚBytesIOÚStringIOrM   r   r(   r   ÚpatchÚobject)rS   rA   r(   r!   rQ   r"   Úcapture_context_bufferT   s   €
"ÿr[   c                  +  s¦   � ddl m} ddlm} t ¡ ‰ |ƒ }| ¡ }| |d¡‡ fdd„ƒ}ˆ d|i¡ t	j
‰‡‡fd	d
„}tj t	d|¡� ˆ V  W d   ƒ d S 1 sLw   Y  d S )Nr   )Ú_sqlite_file_dbr   )ÚeventÚbefore_cursor_executec                   s   ˆ   |d ¡ d S )NÚ
)Úwrite)r1   ÚcursorÚ	statementÚ
parametersÚcontextÚexecutemany©rA   r!   r"   Úbceq   s   z*capture_engine_context_buffer.<locals>.bcer+   c                    rJ   rK   rL   rN   rQ   r!   r"   r(   x   rT   z0capture_engine_context_buffer.<locals>.configurer(   )Úenvr\   Ú
sqlalchemyr]   rV   rX   r0   Úlistens_forrM   r   r(   r   rY   rZ   )rS   r\   r]   Úengr1   rg   r(   r!   )rA   rR   rS   r"   Úcapture_engine_context_bufferf   s   €
"ÿrl   ÚdefaultFc                   sÀ   i }|rt |d�|d< G ‡ fdd„dƒ}|ƒ ‰G ‡fdd„dtƒ}ˆ r'ˆ |d< |r-||d< t| ƒ‰|d ur;|ˆ_d	ˆ_ˆ sL‡‡fd
d„}tjˆ|d�}	nˆ|d< d }	|ˆ|	|ƒ}
t|
ƒtj	_
|
S )N)Únaming_conventionÚtarget_metadatac                      s(   e Zd Zdd„ Z‡ fdd„Zdd„ ZdS )zop_fixture.<locals>.buffer_c                 S  s
   g | _ d S r.   ©Úlines©r   r!   r!   r"   Ú__init__Œ   s   
z$op_fixture.<locals>.buffer_.__init__c                   sF   |  ¡ }t dd|¡}ˆ rt dd|¡}t dd|¡}| j |¡ d S )Nú[\n\t]Ú z    z\;\n*$)ÚstripÚreÚsubrq   r:   )r   Úmsg©r,   r!   r"   r`   �   s   z!op_fixture.<locals>.buffer_.writec                 S  s   d S r.   r!   rr   r!   r!   r"   Úflushš   ó   z!op_fixture.<locals>.buffer_.flushN)r2   r3   r4   rs   r`   r{   r!   rz   r!   r"   Úbuffer_‹   s    r}   c                      s<   e Zd Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡ fdd„Zd	S )
zop_fixture.<locals>.ctxc                   s   ˆ S r.   r!   rr   rf   r!   r"   Úget_buf    r|   zop_fixture.<locals>.ctx.get_bufc                   s   g ˆ j d d …< d S r.   rp   rr   rf   r!   r"   Úclear_assertions£   s   z(op_fixture.<locals>.ctx.clear_assertionsc                   s   t ˆ jdd„ |D ƒƒ d S )Nc                 S  s   g | ]	}t  d d|¡‘qS )rt   ru   )rw   rx   )Ú.0Úsr!   r!   r"   Ú
<listcomp>©   s    z3op_fixture.<locals>.ctx.assert_.<locals>.<listcomp>)r   rq   )r   r=   rf   r!   r"   Úassert_¦   s   zop_fixture.<locals>.ctx.assert_c                   s6   ˆ j D ]}t dd|¡|v r d S qJ d|ˆ j f ƒ‚)Nrt   ru   Fz"Could not locate fragment %r in %r)rq   rw   rx   )r   r=   Ústmtrf   r!   r"   Úassert_contains«   s   
ÿþz'op_fixture.<locals>.ctx.assert_containsN)r2   r3   r4   r~   r   rƒ   r…   r!   rf   r!   r"   ÚctxŸ   s
    r†   r,   Úliteral_bindsTc                   s:   t | tƒr	t| ƒ} | jsJ ‚t| jˆd�ƒ}ˆ  |¡ d S r8   )Ú
isinstancer;   r   Úsupports_executionr<   r`   )r„   Ú
multiparamÚparamr=   )rA   Úctx_dialectr!   r"   ÚexecuteÂ   s
   

zop_fixture.<locals>.execute)r9   r�   rI   )r
   r   r   Úsupports_native_booleanÚ#non_native_boolean_check_constraintr   ÚMockr   ÚalembicÚopÚ_proxy)r9   r,   rn   r‡   Únative_booleanr&   r}   r†   r�   r+   rd   r!   )r,   rA   rŒ   r"   Ú
op_fixture€   s,   r•   c                   @  s:   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zddd„Zd
S )ÚAlterColRoundTripFixture)Úalter_columnc                 C  s2   t j ¡ | _t | j¡| _t| jƒ| _t	ƒ | _
d S r.   )r   r/   r0   r1   r   r(   r†   r   r’   r
   Úmetadatarr   r!   r!   r"   ÚsetUpÛ   s   zAlterColRoundTripFixture.setUpc                 C  s8   t d|ƒ}t d|ƒ}| jj ||¡rJ d||f ƒ‚d S )NÚqz3Type objects %r and %r didn't compare as equivalent)r   r†   ÚimplÚcompare_type)r   Út1Út2Úc1Úc2r!   r!   r"   Ú_compare_typeá   s   

ÿ
þz&AlterColRoundTripFixture._compare_typec                 C  sD   t d||d�}t d||d�}| jj ||||¡r J d||f ƒ‚d S )Nrš   )Úserver_defaultz6server defaults %r and %r didn't compare as equivalent)r   r†   r›   Úcompare_server_default)r   r�   Ús1rž   Ús2rŸ   r    r!   r!   r"   Ú_compare_server_defaultè   s   ÿ
þz0AlterColRoundTripFixture._compare_server_defaultc                 C  sR   t  | j¡ | j ¡ � | j | j¡ W d   ƒ n1 sw   Y  | j ¡  d S r.   )r   Ú%_safe_rollback_connection_transactionr1   Úbeginr˜   Údrop_allÚcloserr   r!   r!   r"   ÚtearDownï   s
   ÿz!AlterColRoundTripFixture.tearDownNc           	      C  sÄ  t | dd¡| dtdƒ¡| dd¡| dd ¡d�}td	| j|ƒ}t | j¡�H | | j¡ t	| jƒ}| 
d	¡d
 }| jjd	|j|j|jd urJ|jnd|jrPdnd| dd ¡| dd¡| dd ¡| dd ¡d�	 W d   ƒ n1 srw   Y  t	| jƒ}| 
d	¡d
 }|d u r‰|}t|d d|v r•|d n|jƒ |  |d | d|d ¡¡ t|d | d|j¡ƒ |  |d | dd ¡| d|d ¡d|v rÐ|d j¡ d S |jd urÝ|jjj¡ d S d ¡ d S )NÚnameÚcolnameÚtypeé
   ÚnullableTr¢   )r°   r¢   Úxr   F)Úexisting_typeÚexisting_server_defaultÚexisting_nullabler°   r¢   Únew_column_nameÚtype_rm   )r   Úgetr   r   r˜   r   Ú_ensure_scope_for_ddlr1   Úcreater	   Úget_columnsr’   r—   r¬   r®   r¢   r°   r   r¡   r¦   r   rO   )	r   Úfrom_Úto_ÚcompareÚcolumnÚtÚinspÚold_colÚnew_colr!   r!   r"   Ú_run_alter_colõ   sb   


ü

ÿ



ñú
þÿ
ÿû
	ÿø
öz'AlterColRoundTripFixture._run_alter_colr.   )	r2   r3   r4   Ú__requires__r™   r¡   r¦   r«   rÃ   r!   r!   r!   r"   r–   Ô   s    r–   )r7   )rm   FNFN)6Ú
__future__r   ÚconfigparserÚ
contextlibr   rV   rw   Útypingr   r   ri   r   r   r	   r
   r   r   r   r   Úsqlalchemy.testingr   r   Úsqlalchemy.testing.assertionsr   Úsqlalchemy.testing.fixturesr   r   ÚSQLAlchemyTablesTestr   ÚSQLAlchemyTestBaser‘   Ú
assertionsr   Úenvironmentr   Ú	migrationr   Ú
operationsr   Úutilr   Úutil.sqla_compatr   ÚConfigParserÚtesting_configÚreadr5   rD   rE   Ú__annotations__r[   rl   r•   r–   r!   r!   r!   r"   Ú<module>   s\    




ûT