3
g^                 @   s   d Z ddl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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 )z]
reset_db command

originally from https://www.djangosnippets.org/snippets/828/ by dnordberg
    N)settings)BaseCommandCommandError)DEFAULT_DB_ALIAS)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%Resets the database for this project.c                s   t  j| |jddddddd |j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d dd |jdddd td!d |jd"td#t d$ |jd%d&d	d'dd(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	--no-utf8
store_trueno_utf8_supportFz3Tells Django to not create a UTF-8 charset databasez-Uz--userstoreuserz=Use another user for the database than defined in settings.pyz-Oz--ownerownerz[Use another owner for creating the database than the user defined in settings or via --userz-Pz
--passwordpasswordzAUse another password for the database than defined in settings.pyz-Dz--dbnamedbnamez5Use another database name than defined in settings.pyz-Rz--routerrouterz:Use this router-database other than defined in settings.pyz
--databasezGNominates a database to run command for. Defaults to the "%s" database.)r   r   z-cz--close-sessionsclose_sessionszEClose database connections before dropping database (PostgreSQL only))superadd_argumentsadd_argumentr   )selfparser)	__class__ l/var/www/tester-filtro-web/env/lib/python3.6/site-packages/django_extensions/management/commands/reset_db.pyr      s<    





zCommand.add_argumentsc             O   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|}|d p|}|d p|jdp|}|d	krtd|jdp|	}	|jdp|
}
|d }|d r t	d|f }nd}|dkr:t
d dS |tkrzytjd| tj| W n tk
rt   Y nX nt|tkr,ddl}||d}|	jdr|	|d< n|	|d< |
rt|
|d < |jf |}d!| }|d" rd	nd#}d$||f }tjd%| |j| tjd%| |j|j  n|tkrtjjd&}|rRddl}nddl}dd'i}|rp||d< |r~||d< |	r|	|d< |
r|
|d < |jf |}|rd(|_n
|jd |j  }|d) r.d*| }tjd%|j  y|j!| W n6 |j"k
r, } ztj#d+t$| W Y dd}~X nX d,| }tjd%| y|j!| W n6 |j"k
r } ztj#d+t$| W Y dd}~X nX d-| }|r|d.| 7 }|d/7 }tj%r|d0tj% 7 }n|d17 }tjd%| |j!| ntd2| |dks|d r
t
d3 dS )4z
        Reset the database for this project.

        Note: Transaction wrappers are in reverse as a work around for
        autocommit, anybody know how to do this the right way?
        databaser   z2--router is deprecated. You should use --database.   )
stacklevelNzUnknown database %sZENGINE Zmysqlr   USERr   ZPASSWORDr   r   NAMEz?You need to specify DATABASE_NAME in your Django settings file.ZHOSTZPORT	verbosityr   z
You have requested a database reset.
This will IRREVERSIBLY DESTROY
ALL data in the database "%s".
Are you sure you want to do this?

Type 'yes' to continue, or 'no' to cancel: yeszReset cancelled.zUnlinking %s databaser   )r   passwd/Zunix_sockethostportzDROP DATABASE IF EXISTS `%s`r   zCHARACTER SET utf8zCREATE DATABASE `%s` %szExecuting... "%s"psycopgZ	template1Tr   z
                    SELECT pg_terminate_backend(pg_stat_activity.pid)
                    FROM pg_stat_activity
                    WHERE pg_stat_activity.datname = '%s';
                z	Error: %szDROP DATABASE "%s";zCREATE DATABASE "%s"z WITH OWNER = "%s" z ENCODING = 'UTF8'z TABLESPACE = %s;;zUnknown database engine %szReset successful.)&r   warningswarnr   r   Z	DATABASESgetr   r	   inputprintr   logginginfoosunlinkOSErrorr   ZMySQLdb
startswithintconnectquerystripr   	importlibutil	find_specr0   Zpsycopg2Z
autocommitZset_isolation_levelcursorexecuteZProgrammingError	exceptionstrZDEFAULT_TABLESPACE)r   argsoptionsr$   ZdbinfoZenginer   r   Zdatabase_nameZdatabase_hostZdatabase_portr   r*   ZconfirmZDatabasekwargs
connectionZ
drop_queryZutf8_supportZcreate_queryZhas_psycopg3Zconn_paramsrD   Zclose_sessions_queryer"   r"   r#   handleB   s    











""zCommand.handle)__name__
__module____qualname__r   r   r
   rM   __classcell__r"   r"   )r!   r#   r      s   )r   )__doc__importlib.utilrA   r9   r7   r2   Zdjango.confr   Zdjango.core.management.baser   r   Z	django.dbr   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   