o
    uvXjî$  ã                   @   s”   d 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   út/var/www/html/myproject/venv/lib/python3.10/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                    s2   t ƒ j|i |¤Ž tƒ | _| 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   sj   |j d| jj dd� |j ddddd| jj d	� |j d
tdd� | jjD ]}|j d| d| d� q%d S )Nz--%sz&Specifies the login for the superuser.)Úhelpz	--noinputz
--no-inputÚstore_falseÚinteractivezòTells 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#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"   |  dtj¡| _tƒ j|i |¤ŽS )Nr   )ÚgetÚsysr   r   Úexecute)r   r   Úoptionsr   r   r   r-   ;   s   zCommand.executec              
   O   sú  || j j }|d }i }| jj}z	| j j t¡ W n
 tjy#   Y nw d |t< �z˜|d �r]i }t	| j
dƒr>| j
 ¡ s>t‚tƒ }|rU|  |||¡}	|	rT| j |	¡ d }n|dkratdt|ƒ ƒ‚|d u rŒ|  | j|¡}
|  | j|
|¡}|rˆ|  |||¡}	|	rˆ| j |	¡ d }qa|d u se||| j j< | jjr�| jj |¡n||| j j< | j jD ]9}| j j |¡}|| ||< || d u rà|  |¡}
|  ||
¡}|||< |||< |jrÚ|j |¡||< || d u s¼q§t|v �r\|t d u �r\t ¡ }t d¡}||k�r| j d¡ qá| ¡ dk�r| j d¡ qázt|| j di |¤Žƒ W n/ tj�yL } z!| j d	 |j¡¡ td
ƒ}| ¡ dk�rBW Y d }~qáW Y d }~nd }~ww ||t< t|v �r\|t d u sínE|d u �rjtd| j j ƒ‚|  |||¡}	|	�rxt|	ƒ‚||| j j< | j jD ]}|| �rœ| j j |¡}|  || d ¡||< �q‚td| ƒ‚| j j! "|¡j#di |¤Ž |d dk�r¿| j$ d¡ W d S W d S  t%�y×   | j d¡ t& 'd¡ Y d S  tj�yì } ztd |j¡ƒ‚d }~w t�yü   | j$ d¡ Y d S w )NÚdatabaser"   ÚisattyÚ ú%s cannot be blank.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!You must use --%s with --noinput.Ú	verbosityé   zSuperuser created successfully.z
Operation cancelled.ú; z‡Superuser 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   r   Úverbose_namer   r   ÚPASSWORD_FIELDr   ÚFieldDoesNotExistÚhasattrr   r0   r
   r   Ú_validate_usernameÚstderrÚwriter   r	   Ú_get_input_messageÚget_input_dataÚremote_fieldÚmodelr'   ÚgetpassÚstripr   ÚValidationErrorÚjoinÚmessagesÚinputÚlowerÚcleanÚ_default_managerÚ
db_managerÚcreate_superuserÚstdoutÚKeyboardInterruptr,   Úexit)r   r   r.   Úusernamer/   Ú	user_dataÚverbose_field_nameÚfake_user_dataÚdefault_usernameÚ	error_msgÚmessageÚ
field_namer)   Úinput_valuer   Ú	password2ÚerrÚresponseÚer   r   r   Úhandle?   sÆ   ÿ
€ø	ÿ
þ
ø€

ÿ€ýî€

ÿ€
ÿÿzCommand.handleNc              
   C   sp   t |ƒ}|r|dkr|}z	| |d¡}W |S  tjy7 } z| j dd |j¡ ¡ d}W Y d}~|S d}~ww )zm
        Override this method if you want to customize data inputs or
        validation exceptions.
        r1   Nz	Error: %sr7   )rH   rJ   r   rE   r=   r>   rF   rG   )r   r)   rW   r%   Ú	raw_valueÚvalr]   r   r   r   r@   «   s   ü€üzCommand.get_input_datac                 C   sB   dt |jƒ|rd| nd|jrd|jjjj|jjf f S df S )Nz%s%s%s: z (leave blank to use '%s')r1   z (%s.%s))r	   r8   rA   rB   r   Úobject_namerX   )r   r)   r%   r   r   r   r?   »   s   ý
þýúzCommand._get_input_messagec              
   C   s–   | j jrz| jj |¡ |¡ W d| S  | jjy   Y nw |s'dt|ƒ S z
| j  |d¡ W dS  t	j
yJ } zd |j¡W  Y d}~S d}~ww )z=Validate username. If invalid, return a string error message.z Error: That %s is already taken.r2   Nr7   )r   Úuniquer   rK   rL   Úget_by_natural_keyÚDoesNotExistr	   rJ   r   rE   rF   rG   )r   rQ   rS   r/   r]   r   r   r   r<   Å   s   ýÿ€ÿzCommand._validate_usernamer   )r   r   r   r    Úrequires_migrations_checksÚstealth_optionsr   r*   r-   r^   r@   r?   r<   Ú__classcell__r   r   r   r   r      s    
l

r   )Ú__doc__rC   r,   Údjango.contrib.authr   Údjango.contrib.auth.managementr   Ú'django.contrib.auth.password_validationr   Údjango.corer   Údjango.core.management.baser   r   Ú	django.dbr   Údjango.utils.textr	   Ú	Exceptionr
   r9   r   r   r   r   r   Ú<module>   s    