3
g"                 @   s   d dl Z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 de
ZdS )    N)count)settings)BaseCommandCommandError)DEFAULT_DB_ALIAS)TEST_DATABASE_PREFIX)SQLITE_ENGINESPOSTGRESQL_ENGINESMYSQL_ENGINES)parse_mysql_cnf)signalcommand)RemovedInNextVersionWarningc                   s,   e Zd ZdZ fddZedd Z  ZS )Commandz%Drops test database for this project.c                s   t  j| |jddddddd |jdd	d
dd dd |jddd
dd dd |jddd
dd dd |jddd
dtdd |jdtdt d 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__ v/var/www/tester-filtro-web/env/lib/python3.6/site-packages/django_extensions/management/commands/drop_test_database.pyr      s&    




zCommand.add_argumentsc                s  |d }|d t kr,tjdtdd |d }tjj|}|dkrLtd| |jd}d	 } }   }}	|d
krt|\}} }}	|d p|jdp|}|d p|jdp|}y|d d  W n t	k
r   d Y nX  dkrt
|d p|jd   dks d	krtd|jdp"|}|jdp2|	}	|d }
|d rXtdj d}nd}|dkrrtd dS  fdd}|tkrtjd|  dd }y@x:||D ].}tjj|sP tjd |  tj| qW W n tk
r   dS X n|tkrd!dl}||d"}|jd#r,||d$< n||d%< |	rFt|	|d&< |jf |}|j }xV|d'jD ]H}d(| }|j|}|d)k rP d*| }tjd+| d,  |j| qfW n>|tkrtjj d-}|rd!dl!}nd!dl"}dd.i}|r||d< |r||d< |r||d%< |	r$|	|d&< |jf |}|r>d/|_#n
|j$d! |j }x|d'jD ]}d0| }y@|j| |j%d)k rP d1| }tjd+| d,  |j| W n6 |j&k
r } ztj'd2t(|  dS d}~X nX q\W ntd3| |
dks|d rtd4 dS )5z$Drop test database for this project.databaser   z2--router is deprecated. You should use --database.   )
stacklevelNzUnknown database %sZENGINE Zmysqlr   USERr   ZPASSWORDZTESTNAMEr   z?You need to specify DATABASE_NAME in your Django settings file.ZHOSTZ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   s(   V   fddt dD E dH  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   s   | ]} |V  qd S )Nr    ).0n)database_name	formatterr    r!   	<genexpr>q   s    z=Command.handle.<locals>.get_database_names.<locals>.<genexpr>   N)r   )r.   )r-   )r.   r!   get_database_namesg   s    	z*Command.handle.<locals>.get_database_nameszUnlinking %s databasesc             S   s   t jj| \}}dj|||S )Nz{}_{}.{})ospathsplitextformat)namenumberfilenameextr    r    r!   format_filename{   s    z'Command.handle.<locals>.format_filenamezUnlinking database named "%s"r   )r   passwd/Zunix_sockethostportz{}_{}zKSELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='%s';r0   zDROP DATABASE IF EXISTS `%s`zExecuting: ""psycopgZ	template1Tz>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.))r   warningswarnr   r   Z	DATABASESgetr   r   KeyErrorr   inputr5   printr   logginginfor2   r3   isfileunlinkOSErrorr
   ZMySQLdb
startswithintconnectcursorexecuter	   	importlibutil	find_specr@   Zpsycopg2Z
autocommitZset_isolation_levelZrowcountZProgrammingError	exceptionstr)r   argsoptionsr"   ZdbinfoZenginer   r   Zdatabase_hostZdatabase_portr(   Zconfirmr1   r:   r)   ZDatabasekwargs
connectionrO   Zexists_queryZ	row_countZ
drop_queryZhas_psycopg3Zconn_paramser    )r-   r!   handle1   s    


	











zCommand.handle)__name__
__module____qualname__r   r   r   r[   __classcell__r    r    )r   r!   r      s   r   )importlib.utilrQ   	itertoolsr   r2   rG   rA   Zdjango.confr   Zdjango.core.management.baser   r   Z	django.dbr   Z django.db.backends.base.creationr   Zdjango_extensions.settingsr   r	   r
   Z"django_extensions.management.mysqlr   Z"django_extensions.management.utilsr   Z#django_extensions.utils.deprecationr   r   r    r    r    r!   <module>   s   