o
    iL$                     @   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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__ x/var/www/html/formularioweb/env/lib/python3.10/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|}|du r&td| |d}d	 } }   }}	|d
krBt|\}} }}	|d pL|dpL|}|d pW|dpW|}z|d d  W n t	yk   d Y nw  du r{t
|d py|d   du s d	krtd|dp|}|dp|	}	|d }
|d rtdj d}nd}|dkrtd dS  fdd}|tv rtd|  dd }z||D ]}tj|s ntd |  t| qW n ty   Y dS w |tv rNd!dl}||d"}|d#r	||d$< n||d%< |	rt|	|d&< |jd5i |}| }|d'jD ]%}d(| }||}|d)k r9 nd*| }td+| d,  || q'n|tv rtj d-}|rad!dl!}nd!dl"}dd.i}|rp||d< |rw||d< |r~||d%< |	r|	|d&< |jd5i |}|rd/|_#n|$d! | }|d'jD ]H}d0| }z#|| |j%d)k rW  n4d1| }td+| d,  || W q |j&y } zt'd2t(|  W Y d}~ dS d}~ww ntd3| |
dks|d rtd4 dS dS )6z$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   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>   s    z=Command.handle.<locals>.get_database_names.<locals>.<genexpr>   Nr   r6   r5   r9   r#   get_database_names   s   	"z*Command.handle.<locals>.get_database_nameszUnlinking %s databasesc                 S   s   t j| \}}d|||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/unix_sockethostportz{}_{}zKSELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='%s';r8   zDROP DATABASE IF EXISTS `%s`zExecuting: ""psycopg	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"   ))r   warningswarnr   r   	DATABASESgetr   r   KeyErrorr   inputr?   printr	   logginginfor<   r=   isfileunlinkOSErrorr   MySQLdb
startswithintconnectcursorexecuter
   	importlibutil	find_specrK   psycopg2
autocommitset_isolation_levelrowcountProgrammingError	exceptionstr)r   argsoptionsr$   dbinfoenginer   r   database_hostdatabase_portr0   confirmr;   rD   r1   Databasekwargs
connectionr]   exists_query	row_count
drop_queryhas_psycopg3conn_paramser"   r:   r#   handleJ   s   
	








zCommand.handle)__name__
__module____qualname__r   r   r   ry   __classcell__r"   r"   r    r#   r      s
    4r   )importlib.utilr_   	itertoolsr   r<   rT   rM   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   r"   r"   r"   r#   <module>   s   