
    h                     f    S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJr  S SK	J
r
   " S S\
5      rg)    N)Path)NotSupportedError)BaseDatabaseCreationc                   V    \ rS rSr\S 5       rS rSS jrS rSS jr	S r
S rS	 rS
rg)DatabaseCreation   c                 \    [        U [        5      (       + =(       a    U S:H  =(       d    SU ;   $ )N:memory:zmode=memory)
isinstancer   )database_names    U/var/www/html/env/lib/python3.13/site-packages/django/db/backends/sqlite3/creation.pyis_in_memory_db DatabaseCreation.is_in_memory_db   s+    mT22 
Z'I=M+I	
    c                     U R                   R                  S   S   =(       d    SnUS:X  a  SU R                   R                  -  $ U$ )NTESTNAMEr
   z)file:memorydb_%s?mode=memory&cache=shared)
connectionsettings_dictalias)selftest_database_names     r   _get_test_db_name"DatabaseCreation._get_test_db_name   sD    !__::6B6JXj+>AVAVVV!!r   c                 V   U R                  5       nU(       a  U$ U R                  U5      (       d  US:  a%  U R                  SU R                  X5      < S35        [        R
                  " U[        R                  5      (       ab  U(       d  [        SU-  5      nU(       d  WS:X  a   [        R                  " U5        U$ U R                  S5        [        R                  " S5        U$ ! [         a5  nU R                  SU-  5        [        R                  " S5         S nAU$ S nAff = f)	N   'Destroying old test database for alias ...zXType 'yes' if you would like to try deleting the test database '%s', or 'no' to cancel: yes/Got an error deleting the old test database: %s   zTests cancelled.)r   r   log_get_database_display_strosaccessF_OKinputremove	Exceptionsysexit)r   	verbosityautoclobberkeepdbr   confirmes          r   _create_test_db DatabaseCreation._create_test_db   s   !335%%##$677A~55iTW yy+RWW55"#=?QRG 'U"2$		"45 "! HH/0HHQK!! % $!RUV!VW "!$s   (C) )
D(3*D##D(c                    U R                   R                  nUS   =(       d    SnU R                  U5      (       d0  [        R                  R                  U5      u  pE0 UESU SU U 30E$ [        R                  " 5       nUS:X  a  U$ US:X  a"  0 UESU R                   R                   SU S30E$ [        SU< S35      e)	Nr   r
   _forkspawnz.sqlite3zCloning with start method z is not supported.)
r   r   r   r$   pathsplitextmultiprocessingget_start_methodr   r   )r   suffixorig_settings_dictsource_database_namerootextstart_methods          r   get_test_db_clone_settings+DatabaseCreation.get_test_db_clone_settings6   s    !__::1&9GZ##$899(()=>IDJ(J&TF!F8C52IJJ&7796!%%7"$4??0016((C   ((88JK
 	
r   c                 n   U R                   R                  S   nU R                  U5      S   nU R                  U5      (       d  [        R
                  " U[        R                  5      (       aJ  U(       a  g US:  a%  U R                  SU R                  X%5      < S35         [        R                  " U5         [        R                  " XE5        g [        R                   " 5       S:X  aK  ["        R$                  " US	S
9nU R                   R                   R'                  U5        UR)                  5         g g ! [         a4  nU R                  SU-  5        [        R                  " S5         S nANS nAff = f! [         a4  nU R                  SU-  5        [        R                  " S5         S nAg S nAff = f)Nr   r   r   r   r    r!   z*Got an error cloning the test database: %sr6   Turi)r   r   rA   r   r$   r%   r&   r"   r#   r(   r)   r*   r+   shutilcopyr9   r:   sqlite3connectbackupclose)r   r;   r,   r.   r=   target_database_namer0   	ondisk_dbs           r   _clone_test_dbDatabaseCreation._clone_test_dbJ   sW   #<<VD#>>vFvN##$899yy-rww77>HH !:: ) II230G --/7:(<$GIOO&&--i8OO ; !  HHNQRRSHHQKK 
  EIJs0   "D5 9E6 5
E3?*E..E36
F4 *F//F4c                 n    U(       a.  U R                  U5      (       d  [        R                  " U5        g g g )N)r   r$   r(   )r   r   r,   s      r   _destroy_test_db!DatabaseCreation._destroy_test_dbm   s,    d&:&:;M&N&NII() 'Or   c                    U R                  5       nU R                  R                  S   /nU R                  U5      (       a&  UR	                  U R                  R
                  5        OUR	                  U5        [        U5      $ )z
Return a tuple that uniquely identifies a test database.

This takes into account the special cases of ":memory:" and "" for
SQLite since the databases will be distinct despite having the same
TEST NAME. See https://www.sqlite.org/inmemorydb.html
r   )r   r   r   r   appendr   tuple)r   r   sigs      r   test_db_signature"DatabaseCreation.test_db_signaturer   si     "335,,V45 233JJt,,-JJ)*Szr   c                 "   U R                  U5      n[        R                  " 5       nUS:X  a@  U R                  R                  R                  U5        U R                  R                  5         g US:X  Ga  U R                  R                  nSU SU S3nU R                  R                  R                  SU SU S3SS	9n[        R                  " USS	9nUR                  U5        UR                  5         U R                  R                  R                  U5        XPR                  R                  S
'   U R                  R                  5         UR                  5         [        R                  R                  S5      S:X  a  U R                  5         g g g )Nr5   r6   zfile:memorydb_r4   z?mode=memory&cache=sharedzfile:z.sqlite3?mode=roTrD   r   RUNNING_DJANGOS_TEST_SUITEtrue)rA   r9   r:   r   r   updaterK   r   DatabaserI   rH   rJ   r$   environget mark_expected_failures_and_skips)r   
_worker_idr   r@   r   connection_str	source_db	target_dbs           r   setup_worker_connection(DatabaseCreation.setup_worker_connection   sT   77
C '7796!OO))00?OO!!#W$OO))E q4MN  0088wa
|+;<$ 9 I  DAIY'OOOO))00?4BOO))&1 OO##%OOzz~~:;vE557 F% %r    N)F)__name__
__module____qualname____firstlineno__staticmethodr   r   r1   rA   rN   rQ   rW   re   __static_attributes__rg   r   r   r   r      s8    
 

"":
(!F*
 8r   r   )r9   r$   rF   rH   r*   pathlibr   	django.dbr    django.db.backends.base.creationr   r   rg   r   r   <module>rq      s,     	   
  ' AS8+ S8r   