
    g                     f    d dl 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
  G d de
      Zy)    N)Path)NotSupportedError)BaseDatabaseCreationc                   J    e Zd Zed        Zd Zd
dZd Zd
dZd Z	d Z
d Zy	)DatabaseCreationc                 >    t        | t               xr | dk(  xs d| v S )N:memory:zmode=memory)
isinstancer   )database_names    {/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/db/backends/sqlite3/creation.pyis_in_memory_dbz DatabaseCreation.is_in_memory_db   s+    mT22 
Z'I=M+I	
    c                     | j                   j                  d   d   xs d}|dk(  rd| j                   j                  z  S |S )NTESTNAMEr	   z)file:memorydb_%s?mode=memory&cache=shared)
connectionsettings_dictalias)selftest_database_names     r   _get_test_db_namez"DatabaseCreation._get_test_db_name   sD    !__::6B6JXj+>AVAVVV!!r   c                    | j                         }|r|S | j                  |      s|dk\  r%| j                  d| j                  ||      d       t	        j
                  |t        j                        rU|st        d|z        }|sdk(  r	 t	        j                  |       |S | j                  d       t        j                  d       |S # t        $ r4}| j                  d|z         t        j                  d       Y d }~|S d }~ww xY w)	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_dbz DatabaseCreation._create_test_db   s   !335%%##$67A~55iASTW yy+RWW5"#=?QRG 'U"2$		"45 "! HH/0HHQK!! % $!RUV!VW "!$s   C 	D)DDc                 f   | j                   j                  }|d   xs d}| j                  |      s1t        j                  j                  |      \  }}i |d| d| | iS t        j                         }|dk(  r|S |dk(  r"i |d| j                   j                   d| diS t        d|d      )	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_settingsz+DatabaseCreation.get_test_db_clone_settings6   s    !__::1&9GZ##$89(()=>ID#J(J&TF!F8C52IJJ&7796!%%7"$4??0016((C   ((88JK
 	
r   c                 B   | j                   j                  d   }| j                  |      d   }| j                  |      st	        j
                  |t        j                        rC|ry |dk\  r%| j                  d| j                  ||      d       	 t	        j                  |       	 t        j                  ||       y t        j                          dk(  rMt#        j$                  |d	
      }| j                   j                   j'                  |       |j)                          y y # t        $ r3}| j                  d|z         t        j                  d       Y d }~d }~ww xY w# t        $ r3}| j                  d|z         t        j                  d       Y d }~y d }~ww xY w)Nr   r   r   r   r   r   z*Got an error cloning the test database: %sr2   Turi)r   r   r=   r   r!   r"   r#   r   r    r%   r&   r'   r(   shutilcopyr5   r6   sqlite3connectbackupclose)r   r7   r)   r+   r9   target_database_namer-   	ondisk_dbs           r   _clone_test_dbzDatabaseCreation._clone_test_dbJ   sW   #<<VD#>>vFvN##$89yy-rww7>HH !:: )+? II2302FG --/7:(<$GIOO&&--i8OO ; !  HHNQRRSHHQKK 
  EIJs0   D# 'E" #	E,)EE"	F+)FFc                 X    |r(| j                  |      st        j                  |       y y y )N)r   r!   r%   )r   r   r)   s      r   _destroy_test_dbz!DatabaseCreation._destroy_test_dbm   s)    d&:&:;M&NII() 'Or   c                    | j                         }| j                  j                  d   g}| j                  |      r0|j	                  | j                  j
                         t        |      S |j	                  |       t        |      S )a   
        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_signaturez"DatabaseCreation.test_db_signaturer   st     "335,,V45 23JJt,,- Sz JJ)*Szr   c                 &   | j                  |      }t        j                         }|dk(  r@| j                  j                  j                  |       | j                  j                          y |dk(  r!| j                  j                  }d| d| d}| j                  j                  j                  d| d| dd	      }t        j                  |d	      }|j                  |       |j                          | j                  j                  j                  |       || j                  j                  d
<   | j                  j                          |j                          t        j                  j                  d      dk(  r| j                          y y y )Nr1   r2   zfile:memorydb_r0   z?mode=memory&cache=sharedzfile:z.sqlite3?mode=roTr?   r   RUNNING_DJANGOS_TEST_SUITEtrue)r=   r5   r6   r   r   updaterF   r   DatabaserD   rC   rE   r!   environget mark_expected_failures_and_skips)r   
_worker_idr   r<   r   connection_str	source_db	target_dbs           r   setup_worker_connectionz(DatabaseCreation.setup_worker_connection   sV   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?4BDOO))&1 OO##%OOzz~~:;vE557 F% %r   N)F)__name__
__module____qualname__staticmethodr   r   r.   r=   rI   rK   rP   r]    r   r   r   r      s8    
 

"":
(!F*
 8r   r   )r5   r!   rA   rC   r'   pathlibr   	django.dbr    django.db.backends.base.creationr   r   rb   r   r   <module>rf      s,     	   
  ' AS8+ S8r   