Ë
    ðmxi  ã                   óÄ  — 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 h d£Zd„ Z ej0                  d«      d„ «       Z ej0                  d«      d„ «       Z ej0                  d«      d„ «       Z ej0                  d«      d„ «       Z ej0                  d«      d„ «       Z ej0                  d«      d„ «       Zd„ Z ej0                  d«      d„ «       Z ej0                  d«      d„ «       Z ej0                  d«      d„ «       Z  ej0                  d«      ddd œd!„«       Z!y)"é    Né   ©Úevent)Úexc)Úurl)Úconfig)Ú	create_db)Údrop_db)Úfollower_url_from_main)Úgenerate_driver_url)Úlog)Úpost_configure_engine)Úpost_configure_testing_engine)Úrun_reap_dbs)Ú stop_test_class_outside_fixtures)Útemp_table_keyword_args)Úupsert>   ÚpysqliteÚ	aiosqliteÚpysqlcipherÚpysqlite_dollarÚpysqlite_numericc                 óö  — t        j                  | «      } |€| j                  «       }| j                  }|dk(  }d}|r“|dk7  rŽd|vsJ ‚t	        j
                  d|«      }|D ](  }|t        v r|€|}Œ|dv rŒ|�Œ|j                  d«      }Œ* |sJ d| j                  › �«       ‚|› d|› �}|r|d|› �z  }|d	z  }|r|d
z  }| j                  |¬«      } |r| j                  d¬«      } | j                  d|›�¬«      } | S )zUgiven a sqlite url + desired driver + ident, make a canonical
    URL out of it

    Nr   ú:memory:Útest_schemaz[_\.])ÚdbÚencÚ_z#sqlite filename has no name token: ú.dbz.enc)ÚdatabaseÚtest)Úpasswordzsqlite+)Ú
drivername)	Úsa_urlÚmake_urlÚget_driver_namer    ÚreÚsplitÚ_drivernamesÚstripÚset)	r   ÚdriverÚidentÚfilenameÚ	needs_encÚ
name_tokenÚtokensÚtokenÚnew_filenames	            ú[/home/htdocs/ttos/venv/lib/python3.12/site-packages/sqlalchemy/dialects/sqlite/provision.pyÚ_format_urlr5   &   s8  € ô
 �/‰/˜#Ó
€Cà€~Ø×$Ñ$Ó&ˆà�|‰|€Hà˜-Ñ'€IØ€Já�H 
Ò*Ø HÑ,Ð,Ð,Ü—‘˜( HÓ-ˆàò 	.ˆEØœÑ$Ø�>Ø"�FØØ˜-Ñ'ØØÑ#Ø"Ÿ[™[¨Ó-‘
ð	.ñ ÐOÐ@ÀÇÁÀÐOÓOˆzà$˜ Q v hÐ/ˆÙØ˜a ˜w˜KÑ'ˆLØ˜ÑˆÙØ˜FÑ"ˆLØ�g‰g˜|ˆgÓ,ˆáØ�g‰g˜vˆgÓ&ˆà
�'Š'©FÐ4ˆ'Ó
5€Cà€Jó    Úsqlitec                 ót   — t        | |d «      } 	 | j                  «        | S # t        j                  $ r Y y w xY w©N)r5   Úget_dialectr   ÚNoSuchModuleError)r   r,   Ú	query_strs      r4   r   r   U   s@   € ä
�c˜6 4Ó
(€CðØ�‰Ôð ˆ
øô × Ñ ò Ùðús   �! ¡7¶7c                 ó   — t        | d |«      S r9   )r5   )r   r-   s     r4   Ú_sqlite_follower_url_from_mainr>   a   s   € ä�s˜D %Ó(Ð(r6   c                 óÆ   ‡— ddl m} |r|› d|j                  › d�Šn|j                  › d�Š |j                  |d«      ˆfd„«       } |j                  |d«      ˆfd„«       }y )	Nr   r   r   z_test_schema.dbÚconnectc                 ó0   •— | j                  d‰› d�«       y )NzATTACH DATABASE "z" AS test_schema)Úexecute)Údbapi_connectionÚconnection_recordÚattach_paths     €r4   r@   z._sqlite_post_configure_engine.<locals>.connecto   s    ø€ ð 	× Ñ Ø ˜}Ð,<Ð=õ	
r6   Úengine_disposedc                 ó  •— t         j                  j                  ‰«      rt        j                  ‰«       | j                  j
                  }|r<|dk7  r6t         j                  j                  |«      rt        j                  |«       yyyy)z¼most databases should be dropped using
        stop_test_class_outside_fixtures

        however a few tests like AttachedDBTest might not get triggered on
        that main hook

        r   N)ÚosÚpathÚexistsÚremover   r    )Úenginer.   rE   s     €r4   Údisposez._sqlite_post_configure_engine.<locals>.dispose}   s`   ø€ ô �7‰7�>‰>˜+Ô&Ü�I‰I�kÔ"à—:‘:×&Ñ&ˆá˜ JÒ.´2·7±7·>±>À(Ô3KÜ�I‰I�hÕð 4LÐ.ˆ8r6   )Ú
sqlalchemyr   r,   Úlistens_for)r   rL   Úfollower_identr   r@   rM   rE   s         @r4   Ú_sqlite_post_configure_enginerQ   f   su   ø€ å áØ'Ð(¨¨&¯-©-¨¸ÐH‰àŸ™˜ Ð7ˆà€U×Ñ�v˜yÓ)ó
ó *ð
ð €U×Ñ�vÐ0Ó1ó ó 2ñ r6   c                 ó‚  — |j                  dd«      }|j                  dd«      }|rG|j                  dk(  r8t        j                  |d«      d„ «       }t        j                  |d«      d„ «       }|rPt	        |j
                  d	«      r9d|d
<   |j
                  j                  t        j                  j
                  «       y y y )NÚsqlite_savepointFÚsqlite_share_poolr7   r@   c                 ó   — d | _         y r9   )Úisolation_level)rC   rD   s     r4   Ú
do_connectz9_sqlite_post_configure_testing_engine.<locals>.do_connect˜   s   € à/3ÐÕ,r6   Úbeginc                 ó&   — | j                  d«       y )NÚBEGIN)Úexec_driver_sql)Úconns    r4   Údo_beginz7_sqlite_post_configure_testing_engine.<locals>.do_beginœ   s   € à× Ñ  Õ)r6   Ú_transfer_fromÚ
use_reaper)	ÚgetÚnamer   rO   ÚhasattrÚpoolr^   r   r   )r   rL   ÚoptionsÚscoperS   rT   rW   r]   s           r4   Ú%_sqlite_post_configure_testing_enginerf   �   sº   € ð —{‘{Ð#5°uÓ=ÐØŸ™Ð$7¸Ó?Ðá˜FŸK™K¨8Ò3ä	×	Ñ	˜6 9Ó	-ñ	4ó 
.ð	4ô 
×	Ñ	˜6 7Ó	+ñ	*ó 
,ð	*ñ ô �6—;‘;Ð 0Ô1Ø$)ˆG�LÑ!Ø�K‰K×&Ñ&¤v§y¡y§~¡~Õ6ð 2ð	 r6   c                  ó   — y r9   © ©ÚcfgÚengr-   s      r4   Ú_sqlite_create_dbrl   ©   s   € àr6   c                 óZ   — t        |j                  j                  |j                  |«       y r9   )Ú_drop_dbs_w_identr   r    r,   ri   s      r4   Ú_sqlite_drop_dbro   ®   s   € ä�c—g‘g×&Ñ&¨¯
©
°EÕ:r6   c                 óæ   — t        j                  d«      D ]Y  }t         j                  j                  |«      \  }}||v sŒ*|dv sŒ/t	        j
                  d|«       t        j                  |«       Œ[ y )Nú.)r   z.db.encz!deleting SQLite database file: %s)rH   ÚlistdirrI   r(   r   ÚinforK   )Údatabasenamer,   r-   rI   ÚfnameÚexts         r4   rn   rn   ³   sX   € Ü—
‘
˜3“ò ˆÜ—W‘W—]‘] 4Ó(‰
ˆˆsØ�EŠ>˜cÐ%7Ò7Ü�H‰HÐ8¸$Ô?Ü�I‰I�d�Oñ	r6   c                 ó$   — |j                  «        y r9   )rM   )r   r   Úclss      r4   r   r   »   s   € à‡J�J…Lr6   c                 ó   — ddgiS )NÚprefixesÚ	TEMPORARYrh   )rj   rk   s     r4   Ú_sqlite_temp_table_keyword_argsr|   À   s   € à˜˜Ð&Ð&r6   c                 óö   — t        j                  d| «       t        j                  ddj                  |«      «       t        j                  | «      } |D ]$  }t
        D ]  }t        | j                  ||«       Œ Œ& y )Nzdb reaper connecting to %rzidentifiers in file: %sz, )r   rs   Újoinr$   r%   r)   rn   r    )r   Úidentsr-   r#   s       r4   Ú_reap_sqlite_dbsr€   Å   se   € ä‡H�HÐ)¨3Ô/Ü‡H�HÐ&¨¯	©	°&Ó(9Ô:Ü
�/‰/˜#Ó
€CØò ?ˆÜ&ò 	?ˆJÜ˜cŸl™l¨J¸Õ>ñ	?ñ?r6   F)Ú
set_lambdaÚsort_by_parameter_orderc                ó°   — ddl m}  ||«      }|r#|j                   ||j                  «      ¬«      }n|j	                  «       } |j
                  |d|iŽ}|S )Nr   )Úinsert)Úset_r‚   )Úsqlalchemy.dialects.sqliter„   Úon_conflict_do_updateÚexcludedÚon_conflict_do_nothingÚ	returning)rj   ÚtablerŠ   r�   r‚   r„   Ústmts          r4   Ú_upsertr�   Ï   s_   € õ 2á�%‹=€DáØ×)Ñ)©z¸$¿-¹-Ó/HÐ)ÓI‰à×*Ñ*Ó,ˆàˆ4�>‰>Ø	ðØ,Cñ€Dð €Kr6   )"rH   r'   Ú r   r   rL   r   r$   Útestingr   Útesting.provisionr	   r
   r   r   r   r   r   r   r   r   r   r)   r5   Úfor_dbr>   rQ   rf   rl   ro   rn   r|   r€   r�   rh   r6   r4   ú<module>r’      sž  ðó 
Û 	å Ý Ý #Ý Ý *Ý (Ý 7Ý 4Ý $Ý 6Ý >Ý -Ý AÝ 8Ý 'ò€ò,ð^ Ð×Ñ˜HÓ%ñó &ðð Ð×Ñ˜xÓ(ñ)ó )ð)ð Ð×Ñ˜hÓ'ñ& ó (ð& ðR &Ð×%Ñ% hÓ/ñ7ó 0ð7ð0 €×Ñ�(Óñ	ó ð	ð €‡��Óñ;ó ð;òð )Ð!×(Ñ(¨Ó2ñó 3ðð  Ð×Ñ Ó)ñ'ó *ð'ð €×Ñ�XÓñ?ó ð?ð €‡�ˆxÓà)-Àuóó ñr6   