o
    /h!                     @   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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
--databasez>Nominates a database to run command for. Defaults to the "%s".)r   r   z-cz--close-sessionsclose_sessionszXClose database connections before dropping database (currently works on PostgreSQL only))superadd_argumentsadd_argumentr   )selfparser	__class__ i/var/www/html/env_mimamsha/lib/python3.10/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|}|du r&td| |d}d	 } } } }	}
|d
krBt|\}}}}	}
|d pL|dpL|}|d pW|dpW|}|d p]|}|d ph|dph|}|d	krqtd|dpw|	}	|dp~|
}
|d }|d rt	d|f }nd}|dkrt
d dS |tv rztd| t| W nF ty   Y n=w |tv rddl}||d}|	dr|	|d< n|	|d< |
rt|
|d < |jd4i |}d!| }|d" rd	nd#}d$||f }td%| || td%| ||  n|tv rtjd&}|r"ddl}nddl}dd'i}|r1||d< |r8||d< |	r?|	|d< |
rF|
|d < |jd4i |}|rUd(|_n|d |  }|d) rd*| }td%|  z|!| W n |j"y } zt#d+t$| W Y d}~nd}~ww d,| }td%| z|!| W n |j"y } zt#d+t$| W Y d}~nd}~ww d-| }|r|d.| 7 }|d/7 }tj%r|d0tj% 7 }n|d17 }td%| |!| ntd2| |dks|d rt
d3 dS dS )5z
        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 %sENGINE mysqlr   USERr   PASSWORDr   r   NAMEz?You need to specify DATABASE_NAME in your Django settings file.HOST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/unix_sockethostportzDROP DATABASE IF EXISTS `%s`r   zCHARACTER SET utf8zCREATE DATABASE `%s` %szExecuting... "%s"psycopg	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#   )&r   warningswarnr   r   	DATABASESgetr   r	   inputprintr   logginginfoosunlinkOSErrorr   MySQLdb
startswithintconnectquerystripr   	importlibutil	find_specr7   psycopg2
autocommitset_isolation_levelcursorexecuteProgrammingError	exceptionstrDEFAULT_TABLESPACE)r   argsoptionsr%   dbinfoenginer   r   database_namedatabase_hostdatabase_portr   r0   confirmDatabasekwargs
connection
drop_queryutf8_supportcreate_queryhas_psycopg3conn_paramsrQ   close_sessions_queryer#   r#   r$   handled   s   








zCommand.handle)__name__
__module____qualname__r   r   r
   ri   __classcell__r#   r#   r!   r$   r      s
    Jr   )__doc__importlib.utilrK   rB   r@   r:   django.confr   django.core.management.baser   r   	django.dbr   django_extensions.settingsr   r   r   "django_extensions.management.mysqlr	   "django_extensions.management.utilsr
   #django_extensions.utils.deprecationr   r   r#   r#   r#   r$   <module>   s   