Ë
    ýÿæi›.  ã                  óÔ  — 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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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l0m1Z1 dd l2m3Z3  ejh                  «       Z5e5jm                  d!g«        G d"„ d#e"«      Z!da7 G d$„ d%e!e «      Zd&e_8        d1d'„Z9i Z:d(e;d)<   ee	 	 	 	 	 	 d2d*„«       «       Z<ee	 	 	 	 d3d+„«       «       Z<e	 	 	 	 d4d,„«       Z<e	 	 	 	 d3d-„«       Z=	 	 	 	 	 d5d.„Z> G d/„ d0«      Z?y)6é    )ÚannotationsN)Úcontextmanager)ÚAny)ÚDict)Ú	Generator)ÚLiteral)Úoverload)ÚColumn©Úcreate_mock_engine)Úinspect)ÚMetaData)ÚString)ÚTable)Útesting)Útext)Úconfig)Úmock)Úeq_)ÚFutureEngineMixin)Ú
TablesTest)ÚTestBase)Údrop_all_tables_from_metadataé   )Ú_get_dialect)Ú_get_staging_directoryé   )ÚEnvironmentContext)ÚMigrationContext)Ú
Operations)Úsqla_compat)Úsqla_2ztest.cfgc                  ój  — e Zd ZeZ ej                  «       d„ «       Zedd„«       Z	 ej                  «       d„ «       Z
 ej                  «       d„ «       Zej                  d„ «       Zej                  d„ «       Zej                  d„ «       Zej                  d„ «       Z ej                  «       d	„ «       Zy
)r   c              #  ó®  K  — d –— t        «       }t        j                  |«      D ]«  }t        j                  j	                  ||«      }t        j                  j                  |«      st        j                  j                  |«      rt        j                  |«       Œwt        j                  j                  |«      sŒ—t        j                  |«       Œ­ y ­w©N)r   ÚosÚlistdirÚpathÚjoinÚisfileÚislinkÚunlinkÚisdirÚshutilÚrmtree)ÚselfÚlocationÚfilenameÚ	file_paths       úm/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/alembic/testing/fixtures.pyÚclear_staging_dirzTestBase.clear_staging_dir/   s   è ø€ ãÜ)Ó+ˆÜŸ
™
 8Ö,ˆHÜŸ™Ÿ™ X¨xÓ8ˆIÜ�w‰w�~‰~˜iÔ(¬B¯G©G¯N©N¸9Ô,EÜ—	‘	˜)Õ$Ü—‘—‘˜yÕ)Ü—‘˜iÕ(ñ -ùs   ‚B:CÂ=Cc              #  óÆ   K  — t        j                  «       }	 t        j                  |«       d –— t        j                  |«       y # t        j                  |«       w xY w­wr%   )r&   ÚgetcwdÚchdir)r0   ÚdirnameÚcurrent_dirs      r4   ÚpushdzTestBase.pushd:   s=   è ø€ ä—i‘i“kˆð	"Ü�H‰H�WÔÛä�H‰H�[Õ!øŒB�H‰H�[Õ!üs   ‚A!˜A ±A!ÁAÁA!c              #  óT   K  — d –— t         j                  j                  dd «       y ­w)NÚALEMBIC_CONFIG)r&   ÚenvironÚpop©r0   s    r4   Úpop_alembic_config_envzTestBase.pop_alembic_config_envC   s   è ø€ ãÜ
�
‰
�‰Ð'¨Õ.ùs   ‚&(c              #  ót   K  — |j                  d¬«      5  t        |«      –— d d d «       y # 1 sw Y   y xY w­w)NT)Ú_per_migration)Úbegin_transactionr    )r0   Úmigration_contexts     r4   Úops_contextzTestBase.ops_contextH   s/   è ø€ à×0Ñ0ÀÐ0ÕEÜÐ.Ó/Ò/÷ F×EÑEüs   ‚8•,£	8¬5±8c                óD   — t        j                  |t        d¬«      ¬«      S )NT)Útransaction_per_migration©Úopts©r   Ú	configureÚdict©r0   Ú
connections     r4   rE   zTestBase.migration_contextM   s   € ä×)Ñ)ØœT¸DÔAô
ð 	
ó    c                óF   — t        j                  |t        dd¬«      ¬«      S )NT)rH   Úas_sqlrI   rK   rN   s     r4   Úas_sql_migration_contextz!TestBase.as_sql_migration_contextS   s!   € ä×)Ñ)ØœT¸DÈÔNô
ð 	
rP   c              #  ó‚   K  — t         j                  j                  «       5 }|a|–— d ad d d «       y # 1 sw Y   y xY w­wr%   )r   ÚdbÚconnectÚ_connection_fixture_connection)r0   Úconns     r4   rO   zTestBase.connectionY   s6   è ø€ ô �Y‰Y×ÑÔ  DØ-1Ð*ØŠJà-1Ð*÷	 !× Ñ üs   ‚?¡	3ª	?³<¸?c              #  óZ   ‡‡K  — dŠdŠˆˆfd„}|–— ‰�‰�‰‰j                   _        yyy­w)z'Restore runners for modified operationsNc                óR   •— | j                   j                  j                  «       Š| Šy r%   )Ú_to_implÚ	_registryÚcopy)Ú_op_clsÚop_clsÚsaved_implss    €€r4   Ú_save_attrsz0TestBase.restore_operations.<locals>._save_attrsj   s"   ø€ à!×*Ñ*×4Ñ4×9Ñ9Ó;ˆKØ‰FrP   )r[   r\   )r0   ra   r_   r`   s     @@r4   Úrestore_operationszTestBase.restore_operationsc   s?   ùè ø€ ð ˆØˆõ	ð
 ÒàÐ +Ð"9Ø(3ˆF�O‰OÕ%ð #:Ðùs   „'+c              #  óž  K  — ddl m} |j                  «       }||j                  _        |–— |j                  `t
        rft
        j                  «       rRt
        j                  «       }|j                  «        t
        j                  «       5  t        |t
        «       ddd«       yt        |t        j                  «       y# 1 sw Y   yxY w­w)z>Provide bound MetaData for a single test, dropping afterwards.r   )ÚschemaN)Úsqlalchemy.sqlrd   r   ÚinstanceÚmetadatarW   Úin_transactionÚget_transactionÚrollbackÚbeginr   r   rU   )r0   Úrequestrd   rg   Útranss        r4   rg   zTestBase.metadatat   s™   è ø€ õ 	*à—?‘?Ó$ˆØ$,ˆ×ÑÔ!ØŠØ×ÑÐ%õ +Ü.×=Ñ=Ô?ä2×BÑBÓDˆEØ�N‰NÔÜ/×5Ñ5Õ7Ü-ØÔ<ô÷ 8Ð7ô
 *¨(´F·I±IÕ>÷ 8Ð7üs   ‚B
CÂCÂ$CÃC
ÃCN)ÚreturnzGenerator[None, None, None])Ú__name__Ú
__module__Ú__qualname__r"   Úis_sqlalchemy_futurer   Úfixturer5   r   r;   rA   rF   rE   rS   rO   rb   r   rg   © rP   r4   r   r   ,   sî   „ Ø!Ðà€W‡_�_Óñ)ó ð)ð ò"ó ð"ð €W‡_�_Óñ/ó ð/ð €W‡_�_Óñ0ó ð0ð ‡_�_ñ
ó ð
ð
 ‡_�_ñ
ó ð
ð
 ‡_�_ñ2ó ð2ð ‡_�_ñ4ó ð4ð  €V‡^�^Óñ?ó ñ?rP   r   c                  ó   — e Zd Zy)r   N)ro   rp   rq   rt   rP   r4   r   r   �   s   „ ØrP   r   Tc                ó6   ‡‡— g Šˆˆfd„}t        | |«      Š‰‰fS )Nc                ón   •— ‰j                  t        | j                  ‰j                  ¬«      «      «       y ©N)Údialect)ÚappendÚstrÚcompilery   )ÚsqlÚmultiparamsÚparamsÚbufÚengines      €€r4   Údumpzcapture_db.<locals>.dumpš   s#   ø€ Ø�
‰
”3�s—{‘{¨6¯>©>�{Ó:Ó;Õ<rP   r   )ry   r‚   r€   r�   s     @@r4   Ú
capture_dbrƒ   —   s%   ù€ Ø
€Cõ=ô   ¨Ó.€FØ�3ˆ;ÐrP   zDict[Any, Any]Ú_engsc                 ó   — y r%   rt   )Úbytes_ioÚkws     r4   Úcapture_context_bufferrˆ   ¤   s   € ð ),rP   c                  ó   — y r%   rt   )r‡   s    r4   rˆ   rˆ   «   s   € ð *-rP   c               +  óV  ‡ ‡K  — ‰ j                  dd«      rt        j                  «       }nt        j                  «       }‰ j	                  d|dœ«       t
        j                  Šˆˆ fd„}t        j                  j                  t
        d|«      5  |–— d d d «       y # 1 sw Y   y xY w­w)Nr†   FÚsqlite)Údialect_nameÚoutput_bufferc                 ó8   •—  |j                   di ‰¤Ž  ‰| i |¤ŽS ©Nrt   ©Úupdate©ÚargÚoptÚconfr‡   s     €€r4   rL   z)capture_context_buffer.<locals>.configure¾   ó$   ø€ Øˆ�
‰
Ñ�RÒÙ�SÐ ˜CÑ Ð rP   rL   )
r?   ÚioÚBytesIOÚStringIOr‘   r   rL   r   ÚpatchÚobject)r‡   r€   rL   r•   s   `  @r4   rˆ   rˆ   ²   sx   ùè ø€ ð 
‡v�vˆj˜%Ô Ü�j‰j‹l‰ä�k‰k‹mˆà‡I�I˜x¸#Ñ>Ô?Ü×'Ñ'€Dõ!ô 
�‰×	Ñ	Ô-¨{¸IÕ	FØŠ	÷ 
G×	FÑ	Füs   „BB)ÂBÂ	B)ÂB&Â"B)c               +  ó‚  ‡ ‡‡K  — ddl m} ddlm} t	        j
                  «       Š |«       }|j                  «       }|j                  |d«      ˆfd„«       }‰ j                  d|i«       t        j                  Šˆˆ fd„}t        j                  j                  t        d	|«      5  ‰–— d d d «       y # 1 sw Y   y xY w­w)
Nr   )Ú_sqlite_file_dbr   )ÚeventÚbefore_cursor_executec                ó.   •— ‰j                  |dz   «       y )NÚ
)Úwrite)rX   ÚcursorÚ	statementÚ
parametersÚcontextÚexecutemanyr€   s         €r4   Úbcez*capture_engine_context_buffer.<locals>.bceÓ   s   ø€ à�	‰	�)˜dÑ"Õ#rP   rO   c                 ó8   •—  |j                   di ‰¤Ž  ‰| i |¤ŽS r�   r�   r’   s     €€r4   rL   z0capture_engine_context_buffer.<locals>.configureÚ   r–   rP   rL   )Úenvr�   Ú
sqlalchemyrž   r—   r™   rV   Úlistens_forr‘   r   rL   r   rš   r›   )	r‡   r�   rž   ÚengrX   r¨   rL   r€   r•   s	   `      @@r4   Úcapture_engine_context_bufferr®   Æ   sš   úè ø€ õ %Ý ä
�+‰+‹-€Cá
Ó
€Cà�;‰;‹=€Dà
×Ñ�tÐ4Ó5ó$ó 6ð$ð ‡I�Iˆ|˜TÐ"Ô#Ü×'Ñ'€Dõ!ô 
�‰×	Ñ	Ô-¨{¸IÕ	FØŠ	÷ 
G×	FÑ	Füs   …B B?Â%B3Â*	B?Â3B<Â8B?c                ój  ‡‡‡— i }|rt        |¬«      |d<    G ˆfd„d«      } |«       Š G ˆfd„dt        «      }‰r‰|d<   |r||d<   t        | «      Š|�|‰_        d	‰_        ‰sˆˆfd
„}t        j                  ‰|¬«      }	n‰|d<   d }	 |‰|	|«      }
t        |
«      t        j                  _
        |
S )N)Únaming_conventionÚtarget_metadatac                  ó$   •— e Zd Zd„ Zˆ fd„Zd„ Zy)úop_fixture.<locals>.buffer_c                ó   — g | _         y r%   ©Úlinesr@   s    r4   Ú__init__z$op_fixture.<locals>.buffer_.__init__î   s	   € ØˆD�JrP   c                óê   •— |j                  «       }t        j                  dd|«      }‰r.t        j                  dd|«      }t        j                  dd|«      }| j                  j	                  |«       y )Nú[\n\t]Ú z    z\;\n*$)ÚstripÚreÚsubr¶   rz   )r0   ÚmsgrR   s     €r4   r¢   z!op_fixture.<locals>.buffer_.writeñ   s[   ø€ Ø—)‘)“+ˆCÜ—&‘&˜ B¨Ó,ˆCÙô —f‘f˜W b¨#Ó.�Ü—f‘f˜Y¨¨CÓ0�à�J‰J×Ñ˜cÕ"rP   c                 ó   — y r%   rt   r@   s    r4   Úflushz!op_fixture.<locals>.buffer_.flushü   s   € ØrP   N)ro   rp   rq   r·   r¢   rÀ   )rR   s   €r4   Úbuffer_r³   í   s   ø„ ò	ô		#ó	rP   rÁ   c                  ó6   •— e Zd Zˆ fd„Zˆ fd„Zˆ fd„Zˆ fd„Zy)úop_fixture.<locals>.ctxc                ó   •— ‰S r%   rt   ©r0   r€   s    €r4   Úget_bufzop_fixture.<locals>.ctx.get_buf  s   ø€ ØˆJrP   c                ó$   •— g ‰j                   d d  y r%   rµ   rÅ   s    €r4   Úclear_assertionsz(op_fixture.<locals>.ctx.clear_assertions  s   ø€ ØˆC�I‰I‘a‰LrP   c                ó‚   •— t        ‰j                  |D �cg c]  }t        j                  dd|«      ‘Œ c}«       y c c}w )Nr¹   rº   )r   r¶   r¼   r½   )r0   r}   Úsr€   s      €r4   Úassert_zop_fixture.<locals>.ctx.assert_  s2   ø€ ô �—	‘	¹cÓB¹c¸œBŸF™F 9¨b°!Õ4¸cÑBÕCùÒBs   –<
c                óŠ   •— ‰j                   D ]  }t        j                  dd|«      |v sŒ y  J d|›d‰j                   ›�«       ‚)Nr¹   rº   zCould not locate fragment z in )r¶   r¼   r½   )r0   r}   Ústmtr€   s      €r4   Úassert_containsz'op_fixture.<locals>.ctx.assert_contains  sD   ø€ ØŸ	œ	�Ü—6‘6˜) R¨Ó-°Ò5Ùð "ñÚØ—I’Iðó �urP   N)ro   rp   rq   rÆ   rÈ   rË   rÎ   )r€   s   €r4   ÚctxrÃ     s   ø„ ô	ô	ô	Dõ
	rP   rÏ   rR   Úliteral_bindsTc                ó°   •— t        | t        «      rt        | «      } | j                  sJ ‚t        | j	                  ‰¬«      «      }‰j                  |«       y rx   )Ú
isinstancer{   r   Úsupports_executionr|   r¢   )rÍ   Ú
multiparamÚparamr}   r€   Úctx_dialects       €€r4   Úexecutezop_fixture.<locals>.execute$  sE   ø€ Ü˜$¤Ô$Ü˜D“z�Ø×*Ò*Ð*Ð*Ü�d—l‘l¨;�lÓ7Ó8ˆCà�I‰I�c�NrP   )ry   r×   r�   )r   r   r   Úsupports_native_booleanÚ#non_native_boolean_check_constraintr   ÚMockr    ÚalembicÚopÚ_proxy)ry   rR   r°   rÐ   Únative_booleanrJ   rÁ   rÏ   r×   rO   r¦   r€   rÖ   s    `         @@r4   Ú
op_fixturerß   â   sÈ   ú€ ð €DÙÜ"*Ð=NÔ"OˆÐÑ÷ó ñ$ ‹)€CöÔô ñ, ØˆˆX‰ÙØ -ˆˆ_Ñä˜wÓ'€KØÐ!Ø.<ˆÔ+ð ;?ˆÔ7Ùõ	ô —Y‘Y {¸GÔD‰
à #ˆˆ_ÑØˆ
Ù�+˜z¨4Ó0€Gä" 7Ó+„G‡J�JÔØ€NrP   c                  ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zdd„Zy)	ÚAlterColRoundTripFixture)Úalter_columnc                óä   — t         j                  j                  «       | _        t	        j
                  | j                  «      | _        t        | j                  «      | _        t        «       | _
        y r%   )r   rU   rV   rX   r   rL   rÏ   r    rÜ   r   rg   r@   s    r4   ÚsetUpzAlterColRoundTripFixture.setUp=  sE   € Ü—I‘I×%Ñ%Ó'ˆŒ	Ü#×-Ñ-¨d¯i©iÓ8ˆŒÜ˜TŸX™XÓ&ˆŒÜ ›
ˆ�rP   c                óœ   — t        d|«      }t        d|«      }| j                  j                  j                  ||«      rJ d|›d|›d�«       ‚y )NÚqzType objects ú and ú didn't compare as equivalent)r
   rÏ   ÚimplÚcompare_type)r0   Út1Út2Úc1Úc2s        r4   Ú_compare_typez&AlterColRoundTripFixture._compare_typeC  sQ   € Ü�C˜‹_ˆÜ�C˜‹_ˆØ—8‘8—=‘=×-Ñ-Ø�ô
ñ 	LâDFÊÐKó	Lð 
ð 
rP   c                ó¨   — t        d||¬«      }t        d||¬«      }| j                  j                  j                  ||||«      rJ d|›d|›d�«       ‚y )Nræ   )Úserver_defaultzserver defaults rç   rè   )r
   rÏ   ré   Úcompare_server_default)r0   rë   Ús1rì   Ús2rí   rî   s          r4   Ú_compare_server_defaultz0AlterColRoundTripFixture._compare_server_defaultJ  s[   € Ü�C˜¨BÔ/ˆÜ�C˜¨BÔ/ˆØ—8‘8—=‘=×7Ñ7Ø��B˜ô
ñ 	OâGIÊ2ÐNó	Oð 
ð 
rP   c                ó  — t        j                  | j                  «       | j                  j                  «       5  | j                  j                  | j                  «       d d d «       | j                  j                  «        y # 1 sw Y   Œ$xY wr%   )r!   Ú%_safe_rollback_connection_transactionrX   rk   rg   Údrop_allÚcloser@   s    r4   ÚtearDownz!AlterColRoundTripFixture.tearDownQ  sT   € Ü×9Ñ9¸$¿)¹)ÔDØ�Y‰Y�_‰_ÕØ�M‰M×"Ñ" 4§9¡9Ô-÷ à�	‰	�‰Õ÷ Ðús   º&BÂBNc                óV  — t        |j                  dd«      |j                  dt        d«      «      |j                  dd«      |j                  dd «      ¬«      }t        d	| j                  |«      }t        j                  | j                  «      5  |j                  | j                  «       t        | j                  «      }|j                  d	«      d
   }| j                  j                  d	|j                  |j                  |j                  �|j                  nd|j                   rdnd|j                  dd «      |j                  dd«      |j                  dd «      |j                  dd «      ¬«	       d d d «       t        | j                  «      }|j                  d	«      d
   }|€|}t#        |d   d|v r|d   n|j                  «       | j%                  |d   |j                  dd   «      «       t#        |d   |j                  d|j                   «      «       | j'                  |d   |j                  dd «      |j                  d|d   «      d|v r|d   j(                  «       y |j                  �%|j                  j*                  j(                  «       y d «       y # 1 sw Y   �Œ.xY w)NÚnameÚcolnameÚtypeé
   ÚnullableTrñ   )r   rñ   Úxr   F)Úexisting_typeÚexisting_server_defaultÚexisting_nullabler   rñ   Únew_column_nameÚtype_Údefault)r
   Úgetr   r   rg   r!   Ú_ensure_scope_for_ddlrX   Úcreater   Úget_columnsrÜ   râ   rü   rþ   rñ   r   r   rï   rõ   r   r“   )	r0   Úfrom_Úto_ÚcompareÚcolumnÚtÚinspÚold_colÚnew_cols	            r4   Ú_run_alter_colz'AlterColRoundTripFixture._run_alter_colW  sY  € ÜØ�I‰I�f˜iÓ(Ø�I‰I�fœf R›jÓ)Ø—Y‘Y˜z¨4Ó0Ø Ÿ9™9Ð%5°tÓ<ô	
ˆô �#�t—}‘} fÓ-ˆä×.Ñ.¨t¯y©yÕ9Ø�H‰H�T—Y‘YÔÜ˜4Ÿ9™9Ó%ˆDØ×&Ñ& sÓ+¨AÑ.ˆGð �G‰G× Ñ ØØ—‘Ø$Ÿk™kð ×,Ñ,Ð8ð ×)Ò)àà*0¯/ª/¡$¸uàŸ™ ¨TÓ2à"Ÿw™wÐ'7¸Ó?Ø #§¡¨°Ó 5Ø—g‘g˜f dÓ+ð !ô ÷ :ô0 �t—y‘yÓ!ˆØ×"Ñ" 3Ó'¨Ñ*ˆàˆ?ØˆGäØ�F‰OØ%¨Ñ0ˆG�FŠO°f·k±kô	
ð 	×ÑØ�F‰O˜WŸ[™[¨°¸±ÓAô	
ô 	ˆG�JÑ §¡¨Z¸¿¹Ó!IÔJØ×$Ñ$Ø�F‰OØ�K‰K˜	 4Ó(Ø�K‰K˜ ¨¡Ó0ð $ wÑ.ð Ð(Ñ)×.Ñ.õ	
ð ×,Ñ,Ð8ð ×)Ñ)×-Ñ-×2Ñ2õ	
ð õ	
÷M :Ñ9ús   ÂC#JÊJ(r%   )	ro   rp   rq   Ú__requires__rä   rï   rõ   rú   r  rt   rP   r4   rá   rá   6  s$   „ ð
 %€Lò#òLòOòô=
rP   rá   )zpostgresql://)r†   zLiteral[True]r‡   r   rn   z!Generator[io.BytesIO, None, None])r‡   r   rn   z"Generator[io.StringIO, None, None])r‡   r   rn   z/Generator[io.StringIO | io.BytesIO, None, None])r  FNFN)@Ú
__future__r   ÚconfigparserÚ
contextlibr   r—   r&   r¼   r.   Útypingr   r   r   r   r	   r«   r
   r   r   r   r   r   r   r   Úsqlalchemy.testingr   r   Úsqlalchemy.testing.assertionsr   Úsqlalchemy.testing.fixturesr   r   ÚSQLAlchemyTablesTestr   ÚSQLAlchemyTestBaseÚsqlalchemy.testing.utilr   rÛ   Ú
assertionsr   rª   r   Úenvironmentr   Ú	migrationr   Ú
operationsr    Úutilr!   Úutil.sqla_compatr"   ÚConfigParserÚtesting_configÚreadrW   rr   rƒ   r„   Ú__annotations__rˆ   r®   rß   rá   rt   rP   r4   Ú<module>r*     s�  ðÞ "ã Ý %Û 	Û 	Û 	Û Ý Ý Ý Ý Ý å Ý )Ý Ý Ý Ý Ý Ý Ý %Ý #Ý -Ý 9Ý JÝ FÝ Aã Ý $Ý 'Ý ,Ý (Ý #Ý Ý %à*�×*Ñ*Ó,€Ø × Ñ �Z�LÔ !ô^?Ð!ô ^?ðB "&Ð ô	�Ð/ô 	ð *.Ð Ô &óð €€~Ó ð 
Øð,Øð,Ø#&ð,à&ò,ó ó 
ð,ð
 
Øð-Ø
ð-à'ò-ó ó 
ð-ð
 ðØ
ðà4òó ðð& ðØ
ðà'òó ðð8 ØØØØóQ÷h^
ò ^
rP   