3
g,                 @   s   d Z 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	 ddl
mZ ddlmZmZ ddlmZ dd	lmZ G d
d deZdZG dd deZdS )z*
Management utility to create superusers.
    N)get_user_model)get_default_username)validate_password)
exceptions)BaseCommandCommandError)DEFAULT_DB_ALIAS)capfirstc               @   s   e Zd ZdS )NotRunningInTTYExceptionN)__name__
__module____qualname__ r   r   u/var/www/tester-filtro-web/env/lib/python3.6/site-packages/django/contrib/auth/management/commands/createsuperuser.pyr
      s   r
   passwordc                   s`   e Zd 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
dddZdd Z  ZS )CommandzUsed to create a superuser.Tstdinc                s.   t  j|| t | _| jjj| jj| _d S )N)super__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 dd |j ddddd| jj d	 |j d
tdd xz| jjD ]n}| jjj|}|jr|jj	r|jj	jj
 rtd| q|j d| dd| fd qL|j d| d| d qLW d S )Nz--%sz&Specifies the login for the superuser.)helpz	--noinputz
--no-inputstore_falseinteractivezTells 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.)actiondestr   z
--databasez4Specifies the database to use. Default is "default".)defaultr   z\Required field '%s' specifies a many-to-many relation through model, which is not supported.appendz?Specifies the %s for the superuser. Can be used multiple times.)r!   r   z#Specifies the %s for the superuser.)add_argumentr   r   r   REQUIRED_FIELDSr   r   many_to_manyremote_fieldZthroughZauto_createdr   )r   parser
field_namefieldr   r   r   add_arguments"   s2    

zCommand.add_argumentsc                s   |j dtj| _t j||S )Nr   )getsysr   r   execute)r   r   options)r   r   r   r/   M   s    zCommand.executec             O   s  || j j }|d }i }| jj}y| j jjt W n tjk
rH   Y n
X d |t< y|d ri }t	| j
dr| j
j  rtt|d}|r| j|||}	|	r| jj|	 d }n|dkrtdt| xT|d kr| j| j|}
| j| j|
|}|r| j|||}	|	r| jj|	 d }qqW ||| j j< | jjrD| jjj|n||| j j< x| j jD ]}| j jj|}|| ||< x|| d kr| j|}
| j||
}|||< |jr|r|j sd ||< | jjd qzdd	 |jd
D ||< |js|||< |jrz|jj|||< qzW qZW xt|kr|t d krtj }tjd}||krh| jjd q$|j dkr| jjd q$yt|| j f | W nT tjk
r } z4| jjdj|j  t!d}|j" dkrw$W Y d d }~X nX ||t< q$W nt|kr&dt#j$kr&t#j$d |t< |d krHt#j$j%d| j jj&  }|d krdtd| j j n| j|||}	|	rt|	||| j j< xd| j jD ]X}d|j&  }|| pt#j$j%|}|std| | j jj|}|j'|d ||< qW | j j(j)|j*f | |d dkr"| j+jd W n t,k
rP   | jjd t-j.d Y nV tjk
r } ztdj|j W Y d d }~X n" tk
r   | j+jd Y nX d S )Ndatabaser    isatty)r1    z%s cannot be blank.z"Error: This field cannot be blank.c             S   s   g | ]}|j  qS r   )strip).0pkr   r   r   
<listcomp>   s    z"Command.handle.<locals>.<listcomp>,zPassword (again): z#Error: Your passwords didn't match.z&Error: Blank passwords aren't allowed.
z:Bypass password validation and create user anyway? [y/N]: yZDJANGO_SUPERUSER_PASSWORDZDJANGO_SUPERUSER_z!You must use --%s with --noinput.	verbosity   zSuperuser created successfully.z
Operation cancelled.z; zSuperuser creation skipped due to not running in a TTY. You can run `manage.py createsuperuser` in your project to create one manually.)/r   r   r   verbose_namer   r   PASSWORD_FIELDr   ZFieldDoesNotExisthasattrr   r2   r
   r   _validate_usernamestderrwriter   r	   _get_input_messageget_input_datar(   modelr&   r'   r4   splitZmany_to_onegetpassr   ValidationErrorjoinmessagesinputlowerosenvironr-   upperclean_default_manager
db_managerZcreate_superuserstdoutKeyboardInterruptr.   exit)r   r   r0   usernamer1   	user_dataverbose_field_nameZfake_user_dataZdefault_username	error_msgmessager*   r+   Zinput_valuer   Z	password2errresponseenv_varvalueer   r   r   handleQ   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.
        r3   Nz	Error: %sz; )rK   rP   r   rH   rA   rB   rI   rJ   )r   r+   rZ   r#   Z	raw_valuevalr_   r   r   r   rD      s    zCommand.get_input_datac             C   sL   dt |j|rd| nd|jrDd|jjjj|jr8|j n|jjf ndf S )Nz%s%s%s: z (leave blank to use '%s')r3   z (%s.%s))	r	   r=   r(   rE   r   Zobject_namer'   Zm2m_target_field_namer*   )r   r+   r#   r   r   r   rC      s    zCommand._get_input_messagec             C   s   | j jrBy| jjj|j| W n | jjk
r8   Y n
X d| S |sRdt| S y| j j|d W n* t	j
k
r } zdj|jS d}~X nX dS )z=Validate username. If invalid, return a string error message.z Error: That %s is already taken.z%s cannot be blank.Nz; )r   uniquer   rQ   rR   Zget_by_natural_keyZDoesNotExistr	   rP   r   rH   rI   rJ   )r   rV   rX   r1   r_   r   r   r   r@      s    zCommand._validate_username)r   )N)N)r   r   r   r   Zrequires_migrations_checksZstealth_optionsr   r,   r/   r`   rD   rC   r@   __classcell__r   r   )r   r   r      s   +{


r   )__doc__rG   rM   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.textr	   	Exceptionr
   r>   r   r   r   r   r   <module>   s   