
    af                     n    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dS )    N)Path)NotSupportedError)BaseDatabaseCreationc                   R    e Zd Zed             Zd ZddZd ZddZd Z	d Z
d	 Zd
S )DatabaseCreationc                 B    t          | t                     o	| dk    pd| v S )N:memory:zmode=memory)
isinstancer   )database_names    U/var/www/html/env/lib/python3.11/site-packages/django/db/backends/sqlite3/creation.pyis_in_memory_dbz DatabaseCreation.is_in_memory_db   s.    mT222 
Z'I=M+I	
    c                 d    | j         j        d         d         p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   s=    !_:6B6JXj++>AVVV!!r   Fc                 @   |                                  }|r|S |                     |          s|dk    r-|                     d|                     ||          d           t	          j        |t          j                  r|st          d|z            }|s|dk    rY	 t	          j        |           nl# t          $ r6}|                     d|z             t          j        d           Y d }~n1d }~ww xY w|                     d           t          j        d           |S )	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5 	&%%##$677 	 A~~55iASTTTTW   y+RW55  " #=?QR G   'U"2"2$	"45555$ $ $ $!RUV!VWWW$ HH/000HQKKK!!s   B2 2
C2<,C--C2c                 R   | j         j        }|d         pd}|                     |          s1t          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spawn.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9 	K(()=>>ID#J(J&T2I2IF2IC2I2IJJJ&7996!!%%7""$4?0CC6CCC    KKKK
 
 	
r   c                 f   | j         j        d         }|                     |          d         }|                     |          st	          j        |t          j                  r|rd S |dk    r-|                     d|                     ||          d           	 t	          j	        |           nC# t          $ r6}|                     d|z             t          j        d           Y d }~nd }~ww xY w	 t          j        ||           d S # t          $ r7}|                     d|z             t          j        d           Y d }~d S d }~ww xY wt          j                    dk    rKt#          j        |d	
          }| j         j                             |           |                                 d S d S )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copyr6   r7   sqlite3connectbackupclose)r   r8   r)   r+   r:   target_database_namer-   	ondisk_dbs           r   _clone_test_dbzDatabaseCreation._clone_test_dbJ   s   #<VD#>>vFFvN##$899 	y-rw77   F>>HHH !:: )+?      I23333       HHNQRRSSSHQKKKKKKKK 02FGGGGG   EIJJJ -//7::(<$GGGIO&--i888OO ;:s0   B0 0
C0:,C++C04D 
E,EEc                 d    |r+|                      |          st          j        |           d S d S d S )N)r   r!   r%   )r   r   r)   s      r   _destroy_test_dbz!DatabaseCreation._destroy_test_dbm   sK     	*d&:&:;M&N&N 	*I()))))	* 	* 	* 	*r   c                    |                                  }| j        j        d         g}|                     |          r |                    | j        j                   n|                    |           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   sx     "3355,V45 233 	+JJt,----JJ)***Szzr   c                    |                      |          }t          j                    }|dk    r:| j        j                            |           | j                                         d S |dk    r| j        j        }d| d| d}| j        j        	                    d| d| dd	          }t          j	        |d	          }|                    |           |                                 | j        j                            |           || j        j        d
<   | j        	                                 |                                 t          j                            d          dk    r|                                  d S d S d S )Nr1   r2   zfile:memorydb_r0   z?mode=memory&cache=sharedzfile:r3   Tr@   r   RUNNING_DJANGOS_TEST_SUITEtrue)r>   r6   r7   r   r   updaterG   r   DatabaserE   rD   rF   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   s   77
CC '7996!!O)00???O!!#####W$$O)ENNNNNN  088444
444$ 9  I  DAAAIY'''OOO)00???4BDO)&1 O##%%%OOz~~:;;vEE5577777' %$$ FEr   N)F)__name__
__module____qualname__staticmethodr   r   r.   r>   rJ   rL   rQ   r^    r   r   r   r      s        
 
 \

" " "" " " ":
 
 
(! ! ! !F* * *
   8 8 8 8 8r   r   )r6   r!   rB   rD   r'   pathlibr   	django.dbr    django.db.backends.base.creationr   r   rc   r   r   <module>rg      s        				   



       ' ' ' ' ' ' A A A A A AS8 S8 S8 S8 S8+ S8 S8 S8 S8 S8r   