Ë
    r™ãj‡  ã                   ó  — 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 h d£Zd„ Z ej2                  d«      d„ «       Z ej2                  d«      d„ «       Z ej2                  d«      d„ «       Z ej2                  d«      d„ «       Z ej2                  d«      d„ «       Z ej2                  d«      d„ «       Zd„ Z ej2                  d«      d„ «       Z ej2                  d«      d„ «       Z  ej2                  d«      d„ «       Z! ej2                  d«      dd dd!œd"„«       Z" ej2                  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)Úprofile_platform_tokens)Ú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	            úo/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/sqlalchemy/dialects/sqlite/provision.pyÚ_format_urlr6   '   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)r6   Úget_dialectr   ÚNoSuchModuleError)r   r-   Ú	query_strs      r5   r   r   V   s@   € ä
�c˜6 4Ó
(€CðØ�‰Ôð ˆ
øô × Ñ ò Ùðús   �! ¡7¶7c                 ó   — t        | d |«      S r:   )r6   )r   r.   s     r5   Ú_sqlite_follower_url_from_mainr?   b   s   € ä�s˜D %Ó(Ð(r7   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     €r5   rA   z._sqlite_post_configure_engine.<locals>.connectp   s    ø€ ð 	× Ñ Ø ˜}Ð,<Ð=õ	
r7   Ú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/   rF   s     €r5   Údisposez._sqlite_post_configure_engine.<locals>.dispose~   s`   ø€ ô �7‰7�>‰>˜+Ô&Ü�I‰I�kÔ"à—:‘:×&Ñ&ˆá˜ JÒ.´2·7±7·>±>À(Ô3KÜ�I‰I�hÕð 4LÐ.ˆ8r7   )Ú
sqlalchemyr   r-   Úlistens_for)r   rM   Úfollower_identr   rA   rN   rF   s         @r5   Ú_sqlite_post_configure_enginerR   g   su   ø€ å áØ'Ð(¨¨&¯-©-¨¸ÐH‰àŸ™˜ Ð7ˆà€U×Ñ�v˜yÓ)ó
ó *ð
ð €U×Ñ�vÐ0Ó1ó ó 2ñ r7   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_poolr8   rA   c                 ó   — d | _         y r:   )Úisolation_level)rD   rE   s     r5   Ú
do_connectz9_sqlite_post_configure_testing_engine.<locals>.do_connect™   s   € à/3ÐÕ,r7   Úbeginc                 ó&   — | j                  d«       y )NÚBEGIN)Úexec_driver_sql)Úconns    r5   Údo_beginz7_sqlite_post_configure_testing_engine.<locals>.do_begin�   s   € à× Ñ  Õ)r7   Ú_transfer_fromÚ
use_reaper)	ÚgetÚnamer   rP   ÚhasattrÚpoolr_   r   r   )r   rM   ÚoptionsÚscoperT   rU   rX   r^   s           r5   Ú%_sqlite_post_configure_testing_enginerg   ‘   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ð	 r7   c                  ó   — y r:   © ©ÚcfgÚengr.   s      r5   Ú_sqlite_create_dbrm   ª   s   € àr7   c                 óZ   — t        |j                  j                  |j                  |«       y r:   )Ú_drop_dbs_w_identr   r!   r-   rj   s      r5   Ú_sqlite_drop_dbrp   ¯   s   € ä�c—g‘g×&Ñ&¨¯
©
°EÕ:r7   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)rI   ÚlistdirrJ   r)   r   ÚinforL   )Údatabasenamer-   r.   rJ   ÚfnameÚexts         r5   ro   ro   ´   sX   € Ü—
‘
˜3“ò ˆÜ—W‘W—]‘] 4Ó(‰
ˆˆsØ�EŠ>˜cÐ%7Ò7Ü�H‰HÐ8¸$Ô?Ü�I‰I�d�Oñ	r7   c                 ó$   — |j                  «        y r:   )rN   )r   r   Úclss      r5   r   r   ¼   s   € à‡J�J…Lr7   c                 ó   — ddgiS )NÚprefixesÚ	TEMPORARYri   )rk   rl   s     r5   Ú_sqlite_temp_table_keyword_argsr}   Á   s   € à˜˜Ð&Ð&r7   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   rt   Újoinr%   r&   r*   ro   r!   )r   Úidentsr.   r$   s       r5   Ú_reap_sqlite_dbsr�   Æ   se   € ä‡H�HÐ)¨3Ô/Ü‡H�HÐ&¨¯	©	°&Ó(9Ô:Ü
�/‰/˜#Ó
€CØò ?ˆÜ&ò 	?ˆJÜ˜cŸl™l¨J¸Õ>ñ	?ñ?r7   F)Ú
set_lambdaÚsort_by_parameter_orderÚindex_elementsc                ó°   — 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)rk   ÚtablerŒ   r‚   rƒ   r„   r†   Ústmts           r5   Ú_upsertr�   Ð   s_   € õ 2á�%‹=€DáØ×)Ñ)©z¸$¿-¹-Ó/HÐ)ÓI‰à×*Ñ*Ó,ˆàˆ4�>‰>Ø	ðØ,Cñ€Dð €Kr7   c                 óT   — | j                   j                  | j                  «      rdS dS )N)Úfileri   )ÚdialectÚ_is_url_file_dbr   )rl   s    r5   Ú_sqlite_profile_platform_tokensr”   é   s$   € ð Ÿ™×3Ñ3°C·G±GÔ<ˆ9ÐDÀ"ÐDr7   )$rI   r(   Ú r   r   rM   r   r%   Útestingr   Útesting.provisionr	   r
   r   r   r   r   r   r   r   r   r   r   r*   r6   Úfor_dbr?   rR   rg   rm   rp   ro   r}   r�   r�   r”   ri   r7   r5   ú<module>r™      sË  ðó 
Û 	å Ý Ý #Ý Ý *Ý (Ý 7Ý 4Ý $Ý 6Ý >Ý 8Ý -Ý AÝ 8Ý 'ò€ò,ð^ Ð×Ñ˜HÓ%ñó &ðð Ð×Ñ˜xÓ(ñ)ó )ð)ð Ð×Ñ˜hÓ'ñ& ó (ð& ðR &Ð×%Ñ% hÓ/ñ7ó 0ð7ð0 €×Ñ�(Óñ	ó ð	ð €‡��Óñ;ó ð;òð )Ð!×(Ñ(¨Ó2ñó 3ðð  Ð×Ñ Ó)ñ'ó *ð'ð €×Ñ�XÓñ?ó ð?ð €‡�ˆxÓð Ø!Øóó ðð0  Ð×Ñ Ó)ñEó *ñEr7   