o
    ÔèFhÓ4  ã                   @   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 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)Úcached_property)Úcapfirstc                   @   s   e Zd ZdS )ÚNotRunningInTTYExceptionN)Ú__name__Ú
__module__Ú__qualname__© r   r   úp/var/www/html/loop/nvenv/lib/python3.10/site-packages/django/contrib/auth/management/commands/createsuperuser.pyr      s    r   Úpasswordc                       sl   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e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   sº   |j d| jj dd� |j ddddd| jj d	� |j d
tdd� | jjD ]5}| jj |¡}|jrO|jj	rA|jj	jj
sAtd| ƒ‚|j d| dd| fd� q%|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\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_fieldÚthroughÚauto_createdr   )r   ÚparserÚ
field_nameÚfieldr   r   r   Úadd_arguments&   sV   
þüúýÿ
þÿÿÿÿý	þëzCommand.add_argumentsc                    s"   |  dtj¡| _tƒ j|i |¤ŽS )Nr   )ÚgetÚsysr   r   Úexecute)r   r   Úoptionsr   r   r   r4   W   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< �z8|d �r�i }t	| j
dƒr>| j
 ¡ s>t‚t|d�}|rW|  |||¡}	|	rV| j |	¡ d }n|dkrctdt|ƒ ƒ‚|d u rŽ|  | j|¡}
|  | j|
|¡}|rŠ|  |||¡}	|	rŠ| j |	¡ d }qc|d u sg||| j j< | jjrŸ| jj |¡n||| j j< | j jD ]s}| j j |¡}|| ||< || d urÈ| || d ¡||< || d u �r|  |¡}
|  ||
¡}|||< |jrþ|rþ| ¡ sòd ||< | j d¡ qÈdd	„ | d
¡D ƒ||< || d u sÏ|j�s|| ||< |j�r|j || ¡||< q©t|v �rœ|t d u �rœt ¡ }t d¡}||k�r?| j d¡ �q| ¡ dk�rN| j d¡ �qzt|| j di |¤Žƒ W n0 tj�y‹ } z"| j d  |j!¡¡ t"dƒ}| #¡ dk�r�W Y d }~�qW Y d }~nd }~ww ||t< t|v �rœ|t d u �s)n¥t|v �r¯dt$j%v �r¯t$j%d |t< |d u �rÀt$j% &d| j j '¡  ¡}|d u �rÍtd| j j ƒ‚|  |||¡}	|	�rÛt|	ƒ‚||| j j< | j jD ]\}d| '¡  }|| �p÷t$j% &|¡}| j j |¡}|�s|j(�r|| dk�st$j% &|¡dk�r�qåtd| ƒ‚| |d ¡||< |j�r@t)|| t*ƒ�r@dd	„ ||  d
¡D ƒ||< �qå| j j+ ,|¡j-di |¤Ž |d dk�r_| j. d¡ W d S W d S  t/�yw   | j d¡ t0 1d¡ Y d S  tj�yŒ } ztd  |j!¡ƒ‚d }~w t�yœ   | j. d¡ Y d S w )NÚdatabaser#   Úisatty)r6   Ú ú%s cannot be blank.z"Error: This field cannot be blank.c                 S   ó   g | ]}|  ¡ ‘qS r   ©Ústrip©Ú.0Úpkr   r   r   Ú
<listcomp>Ÿ   ó    ÿ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]: ÚyÚDJANGO_SUPERUSER_PASSWORDÚDJANGO_SUPERUSER_z!You must use --%s with --noinput.c                 S   r:   r   r;   r=   r   r   r   r@   ê   rA   Ú	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   )2r   r   r   Úverbose_namer   r   ÚPASSWORD_FIELDr   ÚFieldDoesNotExistÚhasattrr   r7   r   r   Ú_validate_usernameÚstderrÚwriter   r
   Ú_get_input_messageÚget_input_datar+   Úmodelr)   Úcleanr*   r<   ÚsplitÚmany_to_oneÚgetpassr   ÚValidationErrorÚjoinÚmessagesÚinputÚlowerÚosÚenvironr2   ÚupperÚblankÚ
isinstanceÚstrÚ_default_managerÚ
db_managerÚcreate_superuserÚstdoutÚKeyboardInterruptr3   Úexit)r   r   r5   Úusernamer6   Ú	user_dataÚverbose_field_nameÚfake_user_dataÚdefault_usernameÚ	error_msgÚmessager/   r0   Úinput_valuer   Ú	password2ÚerrÚresponseÚenv_varÚvalueÚ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.
        r8   Nz	Error: %srI   )r[   rT   r   rX   rO   rP   rY   rZ   )r   r0   ro   r&   Ú	raw_valueÚvalrv   r   r   r   rR   ÿ   s   ü€üzCommand.get_input_datac                 C   sP   dt |jƒ|rd| nd|jr$d|jjjj|jr| ¡ n|jjf f S df S )Nz%s%s%s: z (leave blank to use '%s')r8   z (%s.%s))	r
   rJ   r+   rS   r   Úobject_namer*   Úm2m_target_field_namer/   )r   r0   r&   r   r   r   rQ     s   ÷

ÿûÿüòzCommand._get_input_messagec                    s(   ˆ j jrdS t‡ fdd„ˆ jjjD ƒƒS )NTc                 3   s0   � | ]}t |jƒd ko|jd ˆ jjkV  qdS )rH   r   N)ÚlenÚfieldsr   Úname)r>   Úunique_constraint©r   r   r   Ú	<genexpr>&  s   € þ
þz-Command.username_is_unique.<locals>.<genexpr>)r   ÚuniqueÚanyr   r   Útotal_unique_constraintsr€   r   r€   r   Úusername_is_unique"  s
   ýzCommand.username_is_uniquec              
   C   s”   | 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
yI } 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.r9   NrI   )r…   r   rc   rd   Úget_by_natural_keyÚDoesNotExistr
   r   rT   r   rX   rY   rZ   )r   ri   rk   r6   rv   r   r   r   rN   ,  s"   ÿýÿ€ÿzCommand._validate_usernamer   )r   r   r   r!   Úrequires_migrations_checksÚstealth_optionsr   r1   r4   rw   rR   rQ   r	   r…   rN   Ú__classcell__r   r   r   r   r      s    1 
%

	r   )Ú__doc__rW   r]   r3   Údjango.contrib.authr   Údjango.contrib.auth.managementr   Ú'django.contrib.auth.password_validationr   Údjango.corer   Údjango.core.management.baser   r   Ú	django.dbr   Údjango.utils.functionalr	   Údjango.utils.textr
   Ú	Exceptionr   rK   r   r   r   r   r   Ú<module>   s    