
    h                     J    d dl Z d dlZd dlZd dlmZ d dlmZ  G d de      Zy)    N)Path)BaseDatabaseCreationc                   D    e Zd Zed        Zd Zd	dZd Zd	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    f/var/www/html/ranktracker/api/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~229>PQ  yy+RWW5"#=?QRG 'U"2$		"45 "! HH/0HHQK!! % $!RUV!VW "!$s   C 	D)DDc                     | j                   j                  }|d   }| j                  |      r|S t        j                  j                  |d         \  }}i |ddj                  |||      iS )Nr   z{}_{}.{})r   r   r   r    pathsplitextformat)r   suffixorig_settings_dictsource_database_namerootexts         r   get_test_db_clone_settingsz+DatabaseCreation.get_test_db_clone_settings3   ss    !__::1&9 45%%(();F)CDID#W(W&*2C2CD&RU2VWWr   c                 z   | 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 y # t        $ r3}| j                  d|z         t        j                  d       Y d }~Pd }~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: %s)r   r   r7   r   r    r!   r"   r   r   r$   r%   r&   r'   shutilcopy)r   r2   r(   r*   r4   target_database_namer,   s          r   _clone_test_dbzDatabaseCreation._clone_test_db<   s   #<<VD#>>vFvN##$89yy-rww7>HH66yBVW  II2302FG : !  HHNQRRSHHQKK 
  EIJs0   B? 'C> ?	C;)C66C;>	D:)D55D: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_dbT   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_signatureY   st     "335,,V45 23JJt,,- Sz JJ)*Szr   N)F)__name__
__module____qualname__staticmethodr   r   r-   r7   r<   r>   rC    r   r   r   r   	   s3    
 

""8X0*
r   r   )r    r9   r&   pathlibr    django.db.backends.base.creationr   r   rH   r   r   <module>rK      s#    	  
  A^+ ^r   