o
    uvXj6  ã                   @   s|   d 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 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)Úinput)ÚSQLITE_ENGINESÚPOSTGRESQL_ENGINESÚMYSQL_ENGINES)Úparse_mysql_cnf)Úsignalcommandc                       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 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d d!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Úrouterr   z:Use this router-database other than defined in settings.pyz-cz--close-sessionsÚclose_sessionszEClose database connections before dropping database (PostgreSQL only))Úsuperr   Úadd_argumentsÚadd_argument)ÚselfÚparser©Ú	__class__© úk/var/www/html/myproject/venv/lib/python3.10/site-packages/django_extensions/management/commands/reset_db.pyr      sF   ýý
þ
þ
þ
þ
þ

þzCommand.add_argumentsc              
   O   s¼  |d }t j |¡}|du rtd| ƒ‚| d¡}d } } } }	}
|dkr0t|ƒ\}}}}	}
|d p:| d¡p:|}|d	 pE| d
¡pE|}|d pK|}|d pV| d¡pV|}|dkr_tdƒ‚| d¡pe|	}	| d¡pl|
}
|d }|d r}td|f ƒ}nd}|dkr‰tdƒ dS |tv r¦zt 	d|¡ t
 |¡ W �n0 ty¥   Y �n'w |tv rüddl}||dœ}|	 d¡r½|	|d< n|	|d< |
rÉt|
ƒ|d< |jd0i |¤Ž}d| }|d rÛdnd}d ||f }t 	d!|¡ | |¡ t 	d!|¡ | | ¡ ¡ nÐ|tv �rÆddl}d"d#i}|�r||d< |�r||d	< |	�r|	|d< |
�r%|
|d< |jd0i |¤Ž}| d¡ | ¡ }|d$ �rkd%| }t 	d!| ¡ ¡ z| |¡ W n |j�yj } 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¶|d+t j 7 }n|d,7 }t 	d!|¡ | |¡ ntd-| ƒ‚|d.k�sÖ|d �rÜtd/ƒ dS dS )1z½
        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?
        r   NzUnknown database router %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"ÚdatabaseÚ	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 %sé   zReset successful.r"   )r   Ú	DATABASESÚgetr   r	   r   Úprintr   ÚloggingÚinfoÚosÚunlinkÚOSErrorr   ÚMySQLdbÚ
startswithÚintÚconnectÚqueryÚstripr   Úpsycopg2Úset_isolation_levelÚcursorÚexecuteÚProgrammingErrorÚ	exceptionÚstrÚDEFAULT_TABLESPACE)r   ÚargsÚoptionsr   ÚdbinfoÚenginer   r   Údatabase_nameÚdatabase_hostÚdatabase_portr   r,   ÚconfirmÚDatabaseÚkwargsÚ
connectionÚ
drop_queryÚutf8_supportÚcreate_queryÚconn_paramsrG   Úclose_sessions_queryÚer"   r"   r#   Úhandle;   sÀ   
úÿþ





ü€ÿ€ÿÿzCommand.handle)Ú__name__Ú
__module__Ú__qualname__r   r   r
   r^   Ú__classcell__r"   r"   r    r#   r      s
    %r   )Ú__doc__r<   r:   Údjango.confr   Údjango.core.management.baser   r   Ú	six.movesr   Údjango_extensions.settingsr   r   r   Ú"django_extensions.management.mysqlr	   Ú"django_extensions.management.utilsr
   r   r"   r"   r"   r#   Ú<module>   s   