U
    adD                     @   s   d 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 http://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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__ R/tmp/pip-unpacked-wheel-portabvm/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|}|dkrLtd| |d}d	 } } } }	}
|d
krt|\}}}}	}
|d p|dp|}|d p|dp|}|d p|}|d p|dp|}|d	krtd|dp|	}	|dp|
}
|d }|d r t	d|f }nd}|dkr:t
d dS |tkrzztd| t| W n tk
rt   Y nX nJ|tkr,ddl}||d}|	dr|	|d< n|	|d< |
rt|
|d < |jf |}d!| }|d" rd	nd#}d$||f }td%| || td%| ||  n|tkrddl}dd&i}|rT||d< |rb||d< |	rp|	|d< |
r~|
|d < |jf |}|d | }|d' rd(| }td%|  z|| W n6 |jk
r } ztd)t| W 5 d}~X Y nX d*| }td%| z|| W n6 |jk
r\ } ztd)t| W 5 d}~X Y nX d+| }|rx|d,| 7 }|d-7 }tj r|d.tj  7 }n|d/7 }td%| || ntd0| |dks|d rt
d1 dS )2z
        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"Z	template1r   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   Zpsycopg2Z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conn_paramsrA   Zclose_sessions_queryer#   r#   r$   handleA   s    










""zCommand.handle)__name__
__module____qualname__r   r   r
   rJ   __classcell__r#   r#   r!   r$   r      s   )r   )__doc__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   