o
    uvXjÓ  ã                   @   s`   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	 ddl
mZ dd	d
„Zddd„ZdS )é    )Úchain)Ú
MethodType)Úapps)Úsettings)Úchecksé   )Ú_get_builtin_permissionsNc                 K   sT  | d u rt  tj¡}ntj d¡\}}| D ]}|j|kr#| |¡} nqg S g }t|jtt	fƒs;| 
tjd|dd�¡ |j|jv rL| 
tjd|dd�¡ |j |j¡js€tjdgkrm| 
tjd|jj|jf |d	d�¡ n| 
tjd
|jj|jf d|dd�¡ t|ƒ jtƒr”| 
tjd| |dd�¡ t|ƒ jtƒr¨| 
tjd| |dd�¡ |S )NÚ.z*'REQUIRED_FIELDS' must be a list or tuple.z	auth.E001©ÚobjÚidzjThe field named as the 'USERNAME_FIELD' for a custom user model must not be included in 'REQUIRED_FIELDS'.z	auth.E002z)django.contrib.auth.backends.ModelBackendzC'%s.%s' must be unique because it is named as the 'USERNAME_FIELD'.z	auth.E003z?'%s.%s' is named as the 'USERNAME_FIELD', but it is not unique.zKEnsure that your authentication backend(s) can handle non-unique usernames.z	auth.W004)Úhintr   r   z�%s.is_anonymous must be an attribute or property rather than a method. Ignoring this is a security issue as anonymous users will be treated as authenticated!z	auth.C009z¡%s.is_authenticated must be an attribute or property rather than a method. Ignoring this is a security issue as anonymous users will be treated as authenticated!z	auth.C010)r   Ú	get_modelr   ÚAUTH_USER_MODELÚsplitÚlabelÚ
isinstanceÚREQUIRED_FIELDSÚlistÚtupleÚappendr   ÚErrorÚUSERNAME_FIELDÚ_metaÚ	get_fieldÚuniqueÚAUTHENTICATION_BACKENDSÚobject_nameÚWarningÚis_anonymousr   ÚCriticalÚis_authenticated)Úapp_configsÚkwargsÚclsÚ	app_labelÚ
model_nameÚ
app_configÚerrors© r)   úW/var/www/html/myproject/venv/lib/python3.10/site-packages/django/contrib/auth/checks.pyÚcheck_user_model   sŒ   

þýÿ	üÿ
ÿ
ÿûÿ

ÿúÿþûÿ	þûÿ	r+   c              
   K   sn  | d u r	t  ¡ }n
t dd„ | D ƒ¡}t  dd¡}|j d¡j}g }|D ]�}|j}tt	|ƒƒ}|r<t
dd„ | ¡ D ƒƒnd}	|	|kr^||	t|jƒ  }
| tjd|j|j|
|f |d	d
�¡ tƒ }|jD ]O\}}t|ƒ|kr�| tjd||j|j|f |dd
�¡ ||v r˜| tjd||j|jf |dd
�¡ n||v r®| tjd||j|jf |dd
�¡ | |¡ qdq$|S )Nc                 s   s   � | ]}|  ¡ V  qd S ©N)Ú
get_models)Ú.0r'   r)   r)   r*   Ú	<genexpr>e   ó   € z+check_models_permissions.<locals>.<genexpr>ÚauthÚ
PermissionÚnamec                 s   s   � | ]}t |ƒV  qd S r,   )Úlen)r.   r3   r)   r)   r*   r/   p   r0   r   z}The verbose_name of model '%s.%s' must be at most %d characters for its builtin permission names to be at most %d characters.z	auth.E007r
   zHThe permission named '%s' of model '%s.%s' is longer than %d characters.z	auth.E008zRThe permission codenamed '%s' clashes with a builtin permission for model '%s.%s'.z	auth.E005z>The permission codenamed '%s' is duplicated for model '%s.%s'.z	auth.E006)r   r-   r   Úfrom_iterabler   r   r   Ú
max_lengthÚdictr   ÚmaxÚvaluesr4   Úverbose_name_rawr   r   r   r%   r   ÚsetÚpermissionsÚadd)r"   r#   Úmodelsr2   Úpermission_name_max_lengthr(   ÚmodelÚoptsÚbuiltin_permissionsÚ"max_builtin_permission_name_lengthÚverbose_name_max_lengthÚ	codenamesÚcodenamer3   r)   r)   r*   Úcheck_models_permissionsa   s|   
ÿþÿÿÿúÿ
ÿûÿ

ÿÿúÿ

ÿûÿ	Þ$rG   r,   )Ú	itertoolsr   Útypesr   Údjango.appsr   Údjango.confr   Údjango.corer   Ú
managementr   r+   rG   r)   r)   r)   r*   Ú<module>   s    
V