a
    ܌xd6                     @   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 |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	--noinput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__ f/var/www/html/Ranjet/env/lib/python3.9/site-packages/django_extensions/management/commands/reset_db.pyr      sN    





zCommand.add_argumentsc              
   O   s  |d }|d t kr,tjdtdd |d }tj|}|du 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v rxztd| t| W n tyr   Y n0 nV|tv r.ddl}||d}|	dr|	|d< n|	|d< |
rt|
|d < |jf i |}d!| }|d" rd	nd#}d$||f }td%| || td%| ||  n|tv rddl}dd&i}|rV||d< |rd||d< |	rr|	|d< |
r|
|d < |jf i |}|d | }|d' rd(| }td%|  z|| W n8 |jy
 } ztd)t| W Y d}~n
d}~0 0 d*| }td%| z|| W n8 |jyf } ztd)t| W Y d}~n
d}~0 0 d+| }|r|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 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_paramsrB   Zclose_sessions_queryer#   r#   r$   handleA   s    










&&zCommand.handle)__name__
__module____qualname__r   r   r
   rK   __classcell__r#   r#   r!   r$   r      s   )r   )__doc__r:   r8   r3   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   