3
(h"                 @   s   d Z ddlmZ ddlZddlZddlmZ ddlm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 G dd deZG dd deZdS )z*
Management utility to create superusers.
    )unicode_literalsN)get_user_model)get_default_username)validate_password)
exceptions)BaseCommandCommandError)DEFAULT_DB_ALIAS)	force_str)input)capfirstc               @   s   e Zd ZdS )NotRunningInTTYExceptionN)__name__
__module____qualname__ r   r   [/tmp/pip-install-q3hcpn_q/Django/django/contrib/auth/management/commands/createsuperuser.pyr      s   r   c                   sJ   e Zd ZdZdZ fddZdd Z fddZd	d
 ZdddZ	  Z
S )CommandzUsed to create a superuser.Tc                s2   t t| j|| t | _| jjj| jj| _d S )N)	superr   __init__r   	UserModel_meta	get_fieldUSERNAME_FIELDusername_field)selfargskwargs)	__class__r   r   r      s    zCommand.__init__c             C   s   |j d| jj | jjd dd |j dddddd	| jj d
 |j dddtdd
 x*| jjD ]}|j d| |d d| d qZW d S )Nz--%sz&Specifies the login for the superuser.)destdefaulthelpz	--noinputz
--no-inputstore_falseinteractiveTzTells Django to NOT prompt the user for input of any kind. You must use --%s with --noinput, along with an option for any other required field. Superusers created with --noinput will not be able to log in until they're given a valid password.)actionr   r    r!   z
--databasestoredatabasez4Specifies the database to use. Default is "default".z#Specifies the %s for the superuser.)add_argumentr   r   r	   REQUIRED_FIELDS)r   parserfieldr   r   r   add_arguments!   s"    

zCommand.add_argumentsc                s"   |j dtj| _tt| j||S )Nstdin)getsysr,   r   r   execute)r   r   options)r   r   r   r/   =   s    zCommand.executec             O   s  || j j }|d }d }i }i }|d syp|s>td| j j | jj|d }xH| j jD ]<}|| r| j jj|}	|	j|| d ||< qVtd| qVW W n4 tj	k
r }
 ztdj
|
jW Y d d }
~
X nX nt }ydt| jdo| jj   rtd| jj}x|d krt|}|r,|d| 7 }| jj}td||rTd	|jjj|jf nd
f }| j| j||}|sxq| jjry| j jj|j| W n | j jk
r   Y nX | jjd|  d }qW x| j jD ]}| j jj|}	|| ||< x~|| d krvtdt|	j|	jr4d	|	jjjj|	jjf nd
f }| j|	|}|||< |||< |	jr|	jj|||< qW qW x|d kr:t j  }t j td}||kr| jjd d }q|j! d
kr| jjd d }qyt"|| j f | W n> tj	k
r4 } z| jjdj
|j d }W Y d d }~X nX qW W nL t#k
rj   | jjd t$j%d Y n" tk
r   | j&jd Y nX |r||| j j< ||d< | j jj|j'f | |d dkr| j&jd d S )Nr&   r#   z!You must use --%s with --noinput.z; isattyzNot running in a TTYz (leave blank to use '%s')z%s%s: z (%s.%s) z Error: That %s is already taken.zPassword (again): z#Error: Your passwords didn't match.z&Error: Blank passwords aren't allowed.
z
Operation cancelled.   zSuperuser creation skipped due to not running in a TTY. You can run `manage.py createsuperuser` in your project to create one manually.password	verbosityzSuperuser created successfully.)(r   r   r   r   cleanr(   r   r   r   ValidationErrorjoinmessagesr   hasattrr,   r1   r   Zverbose_namer   Zremote_fieldr
   modelZobject_name
field_nameget_input_datauniqueZ_default_managerZ
db_managerZget_by_natural_keyZDoesNotExiststderrwritegetpassstripr   KeyboardInterruptr.   exitstdoutZcreate_superuser)r   r   r0   usernamer&   r5   Z	user_dataZfake_user_datar=   r*   eZdefault_usernameZverbose_field_nameZ	input_msgZusername_relmessageZinput_valueZ	password2errr   r   r   handleA   s    &$

*
 zCommand.handleNc             C   sn   t |}|r|dkr|}y|j|d}W n@ tjk
rh } z"| jjddj|j  d}W Y dd}~X nX |S )zm
        Override this method if you want to customize data inputs or
        validation exceptions.
        r2   Nz	Error: %sz; )r   r7   r   r8   r@   rA   r9   r:   )r   r*   rI   r    Z	raw_valuevalrH   r   r   r   r>      s    zCommand.get_input_data)N)r   r   r   r!   Zrequires_migrations_checksr   r+   r/   rK   r>   __classcell__r   r   )r   r   r      s   zr   )__doc__
__future__r   rB   r.   Zdjango.contrib.authr   Zdjango.contrib.auth.managementr   Z'django.contrib.auth.password_validationr   Zdjango.corer   Zdjango.core.management.baser   r   Z	django.dbr	   Zdjango.utils.encodingr
   Zdjango.utils.six.movesr   Zdjango.utils.textr   	Exceptionr   r   r   r   r   r   <module>   s   