
^Q\                  @   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 d d l m Z Gd d	   d	 e  Z d S)
zJ
originally from http://www.djangosnippets.org/snippets/828/ by dnordberg
    N)settings)BaseCommandCommandError)input)parse_mysql_cnf)signalcommandc                   s:   e  Z d  Z d Z   f d d   Z e d d    Z   S)Commandz%Resets the database for this project.c                sT  t  t |   j |  | j d d d d d d d d d	 | j d
 d d d d d d d d | j d d d d d d d d  d d | j d d d d d d d d  d d | j d d d d d d d d  d d | j d d d d d d d d  d d | j d  d! d d d d" d d d d# | j d$ d% d d d d& d d d d' d  S)(Nz	--noinputactionstore_falsedestinteractivedefaultThelpz:Tells Django to NOT prompt the user for input of any kind.z	--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 then defined in settings.pyz-Oz--ownerownerz[Use another owner for creating the database then the user defined in settings or via --userz-Pz
--passwordpasswordzAUse another password for the database then defined in settings.pyz-Dz--dbnamedbnamez5Use another database name then defined in settings.pyz-Rz--routerrouterz:Use this router-database other then defined in settings.pyz-cz--close-sessionsclose_sessionszEClose database connections before dropping database (PostgreSQL only))superr   add_argumentsadd_argument)selfparser)	__class__ _/var/www/dbchiro/venv/build/django-extensions/django_extensions/management/commands/reset_db.pyr      s6    zCommand.add_argumentsc             O   s  | r t  d   n  | j d  } t j j |  } | d k rU t  d |   n  | j d  j d  d= } d } } } }	 }
 | d	 k r t |  \ } } } }	 }
 n  | j d
  p | j d  p | } | j d  p | j d  p | } | j d  p| } | j d  p/| j d  p/| } | d k rMt  d   n  | j d  p_|	 }	 | j d  pt|
 }
 t | j d d   } | j d  rt d | f  } n d } | d k rt d  d S| d> k r&d d l	 } y" t
 j d |  | j |  Wqt k
 r"YqXn| d? k rd d l } i | d
 6| d 6} |	 j d  rn|	 | d <n
 |	 | d  <|
 rt |
  | d! <n  | j |   } d" | } | j d# d$  rd% n d } d& | | f } t
 j d' | d(  | j |  t
 j d' | d(  | j |  n| d@ k r| d) k rUt j dA k  rUd d l } n | dB k rpd d l } n  i d- d. 6} | r| | d
 <n  | r| | d <n  |	 r|	 | d  <n  |
 r|
 | d! <n  | j |   } | j d  | j   } | j d/  r{d0 | } t
 j d' | j   d(  y | j |  Wq{| j k
 rw} z t
 j d1 t |   WYd d } ~ Xq{Xn  d2 | } t
 j d' | d(  y | j |  Wn? | j k
 r} z t
 j d1 t |   WYd d } ~ Xn Xd3 | } | r| d4 | 7} n  | d5 7} | d+ k rrt j dC k  rrd d6 l m } | |  j } | d k	 rr| d7 | 7} qrn  t j  r| d8 t j  7} n
 | d9 7} t
 j d' | d(  | j |  n t  d: |   | d; k s| j d  rt d<  n  d S)Dz
        Resets 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?
        zreset_db takes no argumentsr   NzUnknown database router %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.sqlite3
spatialiter   zUnlinking %s databasepasswd/Zunix_sockethostportzDROP DATABASE IF EXISTS `%s`r   FzCHARACTER SET utf8zCREATE DATABASE `%s` %szExecuting... ""
postgresqlpostgresql_psycopg2postgis	   Z	template1Zdatabaser   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')DatabaseWrapperz TEMPLATE = %sz TABLESPACE = %s;;zUnknown database engine %s   zReset successful.)r(   r)   )r#   )r/   r0   r1   )r!   r2   )r/   r0   r1   )r!   r2   )!r   getr   Z	DATABASESsplitr   intr   printoslogginginfounlinkOSErrorZMySQLdb
startswithconnectquerydjangoVERSIONZpsycopgZpsycopg2Zset_isolation_levelcursorstripexecuteZProgrammingError	exceptionstrZ+django.contrib.gis.db.backends.postgis.baser3   Ztemplate_postgisZDEFAULT_TABLESPACE)r   argsoptionsr   ZdbinfoZenginer   r   Zdatabase_nameZdatabase_hostZdatabase_portr   r&   Zconfirmr;   ZDatabasekwargs
connectionZ
drop_queryZutf8_supportZcreate_queryZconn_paramsrE   Zclose_sessions_queryer3   Zpostgis_templater   r   r   handle3   s    	$$$




-
*

	
zCommand.handle)__name__
__module____qualname__r   r   r   rO   r   r   )r   r   r      s    r   )__doc__r<   rC   Zdjango.confr   Zdjango.core.management.baser   r   Z	six.movesr   Z"django_extensions.management.mysqlr   Z"django_extensions.management.utilsr   r   r   r   r   r   <module>   s   