
    Ƿi!                         d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZmZmZ d dlmZ d d	lmZ d d
lmZ  G d de          ZdS )    countN)settings)BaseCommandCommandError)DEFAULT_DB_ALIAS)TEST_DATABASE_PREFIX)SQLITE_ENGINESPOSTGRESQL_ENGINESMYSQL_ENGINES)parse_mysql_cnf)signalcommand)RemovedInNextVersionWarningc                   8     e Zd ZdZ fdZed             Z xZS )Commandz%Drops test database for this project.c                    t                                          |           |                    dddddd           |                    dd	d
dd d           |                    ddd
dd d           |                    ddd
dd d           |                    ddd
dt          d           |                    dt          dt          z             d S )Nz	--noinputz
--no-inputstore_falseinteractiveTz:Tells Django to NOT prompt the user for input of any kind.)actiondestdefaulthelpz-Uz--userstoreuserz=Use another user for the database then defined in settings.pyz-Pz
--passwordpasswordzAUse another password for the database then defined in settings.pyz-Dz--dbnamedbnamez5Use another database name then defined in settings.pyz-Rz--routerrouterz:Use this router-database other then defined in settings.pyz
--databasezGNominates a database to run command for. Defaults to the "%s" database.)r   r   )superadd_argumentsadd_argumentr   )selfparser	__class__s     p/srv/django_bis/venv311/lib/python3.11/site-packages/django_extensions/management/commands/drop_test_database.pyr   zCommand.add_arguments   s4   f%%%m-[ 	 	
 	
 	
 	(7P 	 	
 	
 	
 	,wZT 	 	
 	
 	
 	*W8TH 	 	
 	
 	
 	*W8EUM 	 	
 	
 	
 	"2Z]mm 	 	
 	
 	
 	
 	
    c                    |d         }|d         t           k    r$t          j        dt          d           |d         }t          j                            |          }|t          d|z            |                    d          }d	x}x}xx}}	|d
k    rt          |          \  }}}}	|d         p|                    d          p|}|d         p|                    d          p|}	 |d         d         n# t          $ r dY nw xY w%t          |d         p|                    d          z   d	k    rt          d          |                    d          p|}|                    d          p|	}	|d         }
|d         r$t          d                                        }nd}|dk    rt          d           dS fd}|t          v rt          j        d|z             d }	  ||          D ]N}t"          j                            |          s n,t          j        d|z             t#          j        |           On# t*          $ r Y dS w xY w|t,          v rddl}||d }|                    d!          r||d"<   n||d#<   |	rt3          |	          |d$<    |j        d1i |}|                                } |d%j                  D ]X}d&|z  }|                    |          }|d'k     r n5d(|z  }t          j        d)|z   d*z              |                    |           Yn#|t:          v rddl}dd+i}|r||d<   |r||d<   |r||d#<   |	r|	|d$<    |j        d1i |}|                    d           |                                } |d%j                  D ]}d,|z  }	 |                    |           |j         d'k     r nrd-|z  }t          j        d)|z   d*z              |                    |           _# |j!        $ r0}t          j"        d.tG          |          z             Y d}~ dS d}~ww xY wnt          d/|z            |
dk    s|d         rt          d0           dS dS )2z$Drop test database for this project.databaser   z2--router is deprecated. You should use --database.   )
stacklevelNzUnknown database %sENGINE mysqlr   USERr   PASSWORDTESTNAMEr   z?You need to specify DATABASE_NAME in your Django settings file.HOSTPORT	verbosityr   aG  
You have requested to drop all test databases.
This will IRREVERSIBLY DESTROY
ALL data in the database "{db_name}"
and all cloned test databases generated via
the "--parallel" flag (these are sequentially
named "{db_name}_1", "{db_name}_2", etc.).
Are you sure you want to do this?

Type 'yes' to continue, or 'no' to cancel: )db_nameyeszReset cancelled.c              3   Z    K   V   fdt          d          D             E d{V  dS )a}  
            Return a generator of all possible test database names.
            e.g., 'test_foo', 'test_foo_1', test_foo_2', etc.

            formatter: func returning a clone db name given the primary db name
            and the clone's number, e.g., 'test_foo_1' for mysql/postgres, and
            'test_foo_1..sqlite3' for sqlite (re: double dots, see comments).
            c              3   0   K   | ]} |          V  d S )N ).0ndatabase_name	formatters     r$   	<genexpr>z=Command.handle.<locals>.get_database_names.<locals>.<genexpr>p   s/      FF		-33FFFFFFr%      Nr   )r<   r;   s   `r$   get_database_namesz*Command.handle.<locals>.get_database_namesf   sQ        FFFFFU1XXFFFFFFFFFFFFr%   zUnlinking %s databasesc                 t    t           j                            |           \  }}d                    |||          S )Nz{}_{}.{})ospathsplitextformat)namenumberfilenameexts       r$   format_filenamez'Command.handle.<locals>.format_filenamez   s5     " 0 0 6 6# "((63???r%   zUnlinking database named "%s"r   )r   passwd/unix_sockethostportz{}_{}zKSELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='%s';r>   zDROP DATABASE IF EXISTS `%s`zExecuting: ""	template1z>SELECT datname FROM pg_catalog.pg_database WHERE datname='%s';zDROP DATABASE IF EXISTS "%s";z	Error: %szUnknown database engine %szReset successful.r8   )$r   warningswarnr   r   	DATABASESgetr   r   KeyErrorr	   inputrD   printr
   logginginforA   rB   isfileunlinkOSErrorr   MySQLdb
startswithintconnectcursorexecuter   psycopg2set_isolation_levelrowcountProgrammingError	exceptionstr)r!   argsoptionsr'   dbinfoenginer   r   database_hostdatabase_portr3   confirmr?   rI   r4   Databasekwargs
connectionra   exists_query	row_count
drop_queryconn_paramser;   s                           @r$   handlezCommand.handle0   s    :&8 000MNPkxyzzzzx(H#''11>4x?@@@H%%JLLLxL-L--WL[\bLcLcIT8]M=v<&**V"4"4<:&L&**Z*@*@LH	!"6N62MM 	! 	! 	! MMM	!  0GH4E4[TZI[I[\M MR$7$7`aaa

6**;m

6**;mK(	=! 	 	/ 06vmv/L/L	N 	NGG Ge$%%%F
	G 
	G 
	G 
	G 
	G ^## L1F:;;;@ @ @11/BB ' 'G7>>'22 L!@7!JKKKIg&&&&    }$$&&&&" F '',, /(5}%%!.v 4!$]!3!3v))33F33J&&((F--gn== 	+ 	+a  #NN<88	q==E;gE
^j83>???z****)))''''%{3K +&*F# 3*2J' 4&3F# 4&3F#))88K88J**1---&&((F--gn==  _ NN<000 **!BW!LJL*!<s!BCCCNN:....0   %kCFF&:;;;FFFFFF ;fDEEE>>W]3>%&&&&& >sC   +C: :D	D	.AI
 

II) P 4P  
P:
$P55P:)__name__
__module____qualname__r   r   r   rx   __classcell__)r#   s   @r$   r   r      s_        2D
 
 
 
 
6 \' \' ]\' \' \' \' \'r%   r   )	itertoolsr   rA   rX   rQ   django.confr   django.core.management.baser   r   	django.dbr    django.db.backends.base.creationr	   django_extensions.settingsr
   r   r   "django_extensions.management.mysqlr   "django_extensions.management.utilsr   #django_extensions.utils.deprecationr   r   r8   r%   r$   <module>r      s         				               A A A A A A A A & & & & & & A A A A A A X X X X X X X X X X > > > > > > < < < < < < K K K K K K{' {' {' {' {'k {' {' {' {' {'r%   