3
š(ƒhî  ã               @   sP   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„ deƒZ	dS )é    N)ÚImproperlyConfigured)ÚBaseDatabaseCreation)Úinputc               @   s@   e Zd Zdd„ Zddd„Zdd„ Zddd	„Zd
d„ Zdd„ ZdS )ÚDatabaseCreationc             C   sT   | j jd d }| j jj}|r@|dkr@d|kr<| r<tdƒ‚|S |rPd| j j S dS )NZTESTÚNAMEz:memory:zmode=memoryz„Using a shared memory database with `mode=memory` in the database name is not supported in your environment, use `:memory:` instead.z)file:memorydb_%s?mode=memory&cache=shared)Ú
connectionÚsettings_dictÚfeaturesÚcan_share_in_memory_dbr   Úalias)ÚselfÚtest_database_namer
   © r   úG/tmp/pip-install-q3hcpn_q/Django/django/db/backends/sqlite3/creation.pyÚ_get_test_db_name   s    
z"DatabaseCreation._get_test_db_nameFc             C   sÈ   | j ƒ }|r|S | jj|ƒsÄ|dkr:td| j||ƒf ƒ tj|tjƒrÄ|sXtd| ƒ}|sd|dkr²ytj	|ƒ W qÄ t
k
r® } z tjjd| ƒ tjdƒ W Y d d }~X qÄX ntdƒ tjdƒ |S )Né   z,Destroying old test database for alias %s...zXType 'yes' if you would like to try deleting the test database '%s', or 'no' to cancel: Úyesz0Got an error deleting the old test database: %s
é   zTests cancelled.)r   r   Úis_in_memory_dbÚprintÚ_get_database_display_strÚosÚaccessÚF_OKr   ÚremoveÚ	ExceptionÚsysÚstderrÚwriteÚexit)r   Ú	verbosityZautoclobberÚkeepdbr   ZconfirmÚer   r   r   Ú_create_test_db   s*    
z DatabaseCreation._create_test_dbc             C   sV   | j j}|d }| j j|ƒr |S |jƒ }tjj|d ƒ\}}dj|||ƒ|d< |S d S )Nr   z{}_{}.{})r   r   r   Úcopyr   ÚpathÚsplitextÚformat)r   ÚnumberZorig_settings_dictÚsource_database_nameZnew_settings_dictÚrootÚextr   r   r   Úget_test_db_clone_settings7   s    z+DatabaseCreation.get_test_db_clone_settingsc             C   sø   | j jd }| j|ƒd }| j j|ƒsôtj|tjƒr¦|r<d S |dkrZtd| j||ƒf ƒ ytj	|ƒ W n< t
k
r¤ } z tjjd| ƒ tjdƒ W Y d d }~X nX ytj||ƒ W n< t
k
rò } z tjjd| ƒ tjdƒ W Y d d }~X nX d S )Nr   r   z,Destroying old test database for alias %s...z0Got an error deleting the old test database: %s
r   z+Got an error cloning the test database: %s
)r   r   r,   r   r   r   r   r   r   r   r   r   r   r   r   Úshutilr$   )r   r(   r    r!   r)   Ztarget_database_namer"   r   r   r   Ú_clone_test_dbB   s&    zDatabaseCreation._clone_test_dbc             C   s    |r| j j|ƒ rtj|ƒ d S )N)r   r   r   r   )r   r   r    r   r   r   Ú_destroy_test_dbZ   s    z!DatabaseCreation._destroy_test_dbc             C   s8   | j ƒ }| jjd g}| jj|ƒr0|j| jjƒ t|ƒS )a   
        Returns 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 http://www.sqlite.org/inmemorydb.html
        r   )r   r   r   r   Úappendr   Útuple)r   r   Úsigr   r   r   Útest_db_signature_   s
    z"DatabaseCreation.test_db_signatureN)F)F)	Ú__name__Ú
__module__Ú__qualname__r   r#   r,   r.   r/   r3   r   r   r   r   r   
   s   

r   )
r   r-   r   Zdjango.core.exceptionsr   Z django.db.backends.base.creationr   Zdjango.utils.six.movesr   r   r   r   r   r   Ú<module>   s   