U
    ad                     @   s   d dl Z d dlZd dlZd dlm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 d dlmZmZmZ G d	d
 d
eZdS )    N)List)settings)BaseCommandCommandError)DEFAULT_DB_ALIAS)signalcommand)RemovedInNextVersionWarning)SQLITE_ENGINESPOSTGRESQL_ENGINESMYSQL_ENGINESc                       sB   e Zd ZU dZg Zee ed< dZ fddZ	e
dd Z  ZS )Commanda+  Generates the SQL to create your database for you, as specified in settings.py
The envisioned use case is something like this:

    ./manage.py sqlcreate [--database=<databasename>] | mysql -u <db_administrator> -p
    ./manage.py sqlcreate [--database=<databasname>] | psql -U <db_administrator> -Wrequires_system_checksTc                    sP   t  | |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-Rz--routerstorerouterz:Use this router-database other then defined in settings.py)actiondestdefaulthelpz
--databasezGNominates a database to run command for. Defaults to the "%s" database.)r   r   z-Dz--drop
store_truedropFzCIf given, includes commands to drop any existing user and database.)superadd_argumentsadd_argumentr   )selfparser	__class__ S/tmp/pip-unpacked-wheel-portabvm/django_extensions/management/commands/sqlcreate.pyr      s,             zCommand.add_argumentsc                 O   s  |d }|d t kr,tjdtdd |d }tj|}|d krLtd| |d}|d}|d	}|d
}|d}	t	 }
|	sd}	|t
krtjd n|tkrtjd td|  td|||
|f  n|tkrf|d rtd|f  |rtd|f  |rN|rNtd||f  td||f  td||f  ntd td|f  n,tjd|  td|  td||f  d S )Ndatabaser   z2--router is deprecated. You should use --database.   )
stacklevelzUnknown database %sZENGINEUSERZPASSWORDNAMEZHOST	localhostzH-- manage.py migrate will automatically create a sqlite3 database file.
z-- WARNING!: https://docs.djangoproject.com/en/dev/ref/databases/#collation-settings
-- Please read this carefully! Collation will be set to utf8_bin to have case-sensitive data.
z7CREATE DATABASE %s CHARACTER SET utf8 COLLATE utf8_bin;z=GRANT ALL PRIVILEGES ON %s.* to '%s'@'%s' identified by '%s';r   zDROP DATABASE IF EXISTS %s;zDROP USER IF EXISTS %s;z5CREATE USER %s WITH ENCRYPTED PASSWORD '%s' CREATEDB;z4CREATE DATABASE %s WITH ENCODING 'UTF-8' OWNER "%s";z*GRANT ALL PRIVILEGES ON DATABASE %s TO %s;z-- Assuming that unix domain socket connection mode is being used because
-- USER or PASSWORD are blank in Django DATABASES configuration.z)CREATE DATABASE %s WITH ENCODING 'UTF-8';z6-- Don't know how to handle '%s' falling back to SQL.
zCREATE DATABASE %s;z*GRANT ALL PRIVILEGES ON DATABASE %s to %s;)r   warningswarnr   r   Z	DATABASESgetr   socketgethostnamer	   sysstderrwriter   printr
   )r   argsoptionsr   ZdbinfoZengineZdbuserZdbpassZdbnameZdbhostZdbclientr   r   r   handle)   sT    




   


zCommand.handle)__name__
__module____qualname__r   r   r   str__annotations__Zcan_import_settingsr   r   r0   __classcell__r   r   r   r   r      s   
r   )r(   r*   r%   typingr   Zdjango.confr   Zdjango.core.management.baser   r   Z	django.dbr   Z"django_extensions.management.utilsr   Z#django_extensions.utils.deprecationr   Zdjango_extensions.settingsr	   r
   r   r   r   r   r   r   <module>   s   