a
    ÆZEg^  ã                   @   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
--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__© úg/var/www/sistema_ama/venv/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r„t|ƒ\}}}}	}
|d p˜| d¡p˜|}|d p®| d¡p®|}|d pº|}|d pÐ| d¡pÐ|}|d	krât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 �n€|tv �r.ddl}||dœ}|	 d¡�rª|	|d< n|	|d< |
�rÄt|
ƒ|d < |jf i |¤Ž}d!| }|d" �rêd	nd#}d$||f }t d%|¡ | |¡ t d%|¡ | | ¡ ¡ �nÊ|tv �rìtj d&¡}|�rTddl}nddl}dd'i}|�rr||d< |�r€||d< |	�rŽ|	|d< |
�rœ|
|d < |jf i |¤Ž}|�rºd(|_n
| d¡ |  ¡ }|d) �r6d*| }t d%| ¡ ¡ z| !|¡ W n8 |j"�y4 } zt #d+t$|ƒ¡ W Y d}~n
d}~0 0 d,| }t d%|¡ z| !|¡ W n8 |j"�y� } zt #d+t$|ƒ¡ W Y d}~n
d}~0 0 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 )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_specr1   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_paramsrE   Zclose_sessions_queryÚer#   r#   r$   ÚhandleB   sÄ    

ú



þ





ü&&zCommand.handle)Ú__name__Ú
__module__Ú__qualname__r   r   r
   rN   Ú__classcell__r#   r#   r!   r$   r      s   )r   )Ú__doc__Úimportlib.utilrB   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   