o
    }ó·i–3  ã                   @   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   ú}C:\Users\psant\Downloads\PAF backend\school\venv\Lib\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_fieldZthroughZ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   r2   V   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|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 ]F}d| '¡  }|| �p÷t$j% &|¡}|�std| ƒ‚| j j |¡}| |d ¡||< |j�r*t(|| t)ƒ�r*dd	„ ||  d
¡D ƒ||< �qå| j j* +|¡j,di |¤Ž |d dk�rI| j- d¡ W d S W d S  t.�ya   | j d¡ t/ 0d¡ Y d S  tj�yv } ztd  |j!¡ƒ‚d }~w t�y†   | j- d¡ Y d S w )NÚdatabaser#   Úisatty)r4   Ú ú%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]: ÚyZDJANGO_SUPERUSER_PASSWORDZDJANGO_SUPERUSER_z!You must use --%s with --noinput.c                 S   r8   r   r9   r;   r   r   r   r>   å   r?   Ú	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   )1r   r   r   Úverbose_namer   r   ÚPASSWORD_FIELDr   ZFieldDoesNotExistÚhasattrr   r5   r   r   Ú_validate_usernameÚstderrÚwriter   r
   Ú_get_input_messageÚget_input_datar+   Úmodelr)   Úcleanr*   r:   ÚsplitZmany_to_oneÚgetpassr   ÚValidationErrorÚjoinÚmessagesÚinputÚlowerÚosÚenvironr0   ÚupperÚ
isinstanceÚstrÚ_default_managerÚ
db_managerZcreate_superuserÚstdoutÚKeyboardInterruptr1   Úexit)r   r   r3   Úusernamer4   Ú	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   ÚhandleZ   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.
        r6   Nz	Error: %srE   )rU   rO   r   rR   rJ   rK   rS   rT   )r   r.   re   r&   Z	raw_valueÚvalrj   r   r   r   rM   ú   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')r6   z (%s.%s))	r
   rF   r+   rN   r   Zobject_namer*   Zm2m_target_field_namer-   )r   r.   r&   r   r   r   rL   
  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 )rD   r   N)ÚlenÚfieldsr   Úname)r<   Zunique_constraint©r   r   r   Ú	<genexpr>  s   € þ
þz-Command.username_is_unique.<locals>.<genexpr>)r   ÚuniqueÚanyr   r   Ztotal_unique_constraintsrp   r   rp   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.r7   NrE   )rt   r   r\   r]   Zget_by_natural_keyZDoesNotExistr
   r   rO   r   rR   rS   rT   )r   ra   rc   r4   rj   r   r   r   rI   #  s"   ÿýÿ€ÿzCommand._validate_usernamer   )r   r   r   r!   Zrequires_migrations_checksZstealth_optionsr   r/   r2   rk   rM   rL   r	   rt   rI   Ú__classcell__r   r   r   r   r      s    1 
!

	r   )Ú__doc__rQ   rW   r1   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.functionalr	   Zdjango.utils.textr
   Ú	Exceptionr   rG   r   r   r   r   r   Ú<module>   s    