
    j                     .   S SK r S SKJr  S SKJr  S SKJr  S SKJr  S SK	J
r
JrJr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJrJrJr  S SKJr  S SKJr  S SKJ r   S r!S r"S r#S r$ " S S5      r% " S S\%5      r& " S S\%5      r'S r(S r)S r*g)    N)chain)apps)settings)NotRegistered)NotRelationFieldflattenget_fields_from_path)checks)FieldDoesNotExist)models)
LOOKUP_SEP)
Combinable)BaseModelFormBaseModelFormSet_get_foreign_key)engines)DjangoTemplates)import_stringc                 :     [        X5      $ ! [         a     gf = f)zL
issubclass() variant that doesn't raise an exception if cls isn't a
class.
F)
issubclass	TypeError)cls	classinfos     S/var/www/html/KUNJ/venv/lib/python3.13/site-packages/django/contrib/admin/checks.py_issubclassr      s$    
#)) s   
 
c                     [        U 5      nU H!  n [        U5      n[        XB5      (       d  M!    g   g! [         a     M3  f = f)zp
Return whether or not a dotted class path (or a subclass of that class) is
found in a list of candidate paths.
TF)r   ImportErrorr   )
class_pathcandidate_pathsr   pathcandidate_clss        r   _contains_subclassr"      sP    
 

#C	)$/M }**     		s   4
AAc                 h    SSK Jn  / nU H#  nUR                  UR                  U 5      5        M%     U$ )Nr   	all_sites)django.contrib.admin.sitesr%   extendcheck)app_configskwargsr%   errorssites        r   check_admin_appr-   /   s.    4Fdjj-. M    c                     SSK Jn  [        R                  " S5      (       d  / $ / nSnU HL  u  pE[        R                  " U5      (       a  M"  UR	                  [
        R                  " SU-  SU-  S95        MN     [        R                  " 5        H&  n[        U[        5      (       d  M  UR                  n  O   SnU(       d%  UR	                  [
        R                  " S	S
S95        OSUR                  ;  aC  [        S[        R                  5      (       a$  UR	                  [
        R                  " SSS95        SUR                  ;  a$  UR	                  [
        R                  " SSS95        [!        S U 5       5      nU(       a4  SUR                  ;  a$  UR	                  [
        R"                  " SSS95        [        S[        R$                  5      (       d$  UR	                  [
        R                  " SSS95        [        S[        R$                  5      (       d$  UR	                  [
        R                  " SSS95        [        S[        R$                  5      (       d%  UR	                  [
        R                  " SSSS 95        U$ )!z>
Check that the admin's dependencies are correctly installed.
r   r$   zdjango.contrib.admin))zdjango.contrib.contenttypesi  )zdjango.contrib.authi  )zdjango.contrib.messagesi  zE'%s' must be in INSTALLED_APPS in order to use the admin application.z	admin.E%d)idNzA 'django.template.backends.django.DjangoTemplates' instance must be configured in TEMPLATES in order to use the admin application.z
admin.E403z+django.contrib.auth.context_processors.authz)django.contrib.auth.backends.ModelBackendz'django.contrib.auth.context_processors.auth' must be enabled in DjangoTemplates (TEMPLATES) if using the default auth backend in order to use the admin application.z
admin.E402z3django.contrib.messages.context_processors.messagesz'django.contrib.messages.context_processors.messages' must be enabled in DjangoTemplates (TEMPLATES) in order to use the admin application.z
admin.E404c              3   8   #    U  H  oR                   v   M     g 7fN)enable_nav_sidebar).0r,   s     r   	<genexpr>%check_dependencies.<locals>.<genexpr>{   s     L)$55)   z*django.template.context_processors.requestz'django.template.context_processors.request' must be enabled in DjangoTemplates (TEMPLATES) in order to use the admin navigation sidebar.z
admin.W411z7django.contrib.auth.middleware.AuthenticationMiddlewarezv'django.contrib.auth.middleware.AuthenticationMiddleware' must be in MIDDLEWARE in order to use the admin application.z
admin.E408z4django.contrib.messages.middleware.MessageMiddlewarezs'django.contrib.messages.middleware.MessageMiddleware' must be in MIDDLEWARE in order to use the admin application.z
admin.E409z4django.contrib.sessions.middleware.SessionMiddlewarezs'django.contrib.sessions.middleware.SessionMiddleware' must be in MIDDLEWARE in order to use the admin application.zInsert 'django.contrib.sessions.middleware.SessionMiddleware' before 'django.contrib.auth.middleware.AuthenticationMiddleware'.z
admin.E410)hintr0   )r&   r%   r   is_installedappendr
   Errorr   all
isinstancer   enginecontext_processorsr"   r   AUTHENTICATION_BACKENDSanyWarning
MIDDLEWARE)	r*   r%   r+   app_dependenciesapp_name
error_coder>   django_templates_instancesidebar_enableds	            r   check_dependenciesrI   8   sm    5344	F
 !1  **MM#%-."Z/ !1 ++-fo..(.%  
 %)!$LL  		
 :,??@";00 
 MMJ $	 B,??@ MM- $	 L)LL<,??@ MM* $	 A8CVCV  	LLJ	
 >@S@S  	LLJ	
 >@S@S  	LLJQ
  
	
 Mr.   c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSr g) BaseModelAdminChecks   c                    / U R                  U5      QU R                  U5      QU R                  U5      QU R                  U5      QU R	                  U5      QU R                  U5      QU R                  U5      QU R                  U5      QU R                  U5      QU R                  U5      QU R                  U5      QU R                  U5      QU R                  U5      QU R                  U5      Q$ r2   )_check_autocomplete_fields_check_raw_id_fields_check_fields_check_fieldsets_check_exclude_check_form_check_filter_vertical_check_filter_horizontal_check_radio_fields_check_prepopulated_fields_check_view_on_site_url_check_ordering_check_readonly_fields&_check_delete_confirmation_max_display)self	admin_objr*   s      r   r(   BaseModelAdminChecks.check   s.   
,,Y7
&&y1
 	*
 ""9-	

   +
 i(
 ((3
 **95
 %%i0
 ,,Y7
 )))4
 !!),
 ((3
 88C
 	
r.   c                 $   [        UR                  [        [        45      (       d  [	        SSUSS9$ [        [
        R                  " [        UR                  5       VVs/ s H  u  p#U R                  XSU-  5      PM     snn5      5      $ s  snnf )zF
Check that `autocomplete_fields` is a list or tuple of model fields.
a list or tupleautocomplete_fieldsz
admin.E036optionobjr0   zautocomplete_fields[%d])	r=   ra   listtuplemust_ber   from_iterable	enumerate_check_autocomplete_fields_item)r\   rd   index
field_names       r   rN   /BaseModelAdminChecks._check_autocomplete_fields   s     #11D%=AA!,	  ##
 2;3;R;R1S	 2T-E <<-F-N 2T		 	s   !Bc           	          UR                   R                  R                  U5      nUR                  (       d+  [	        U[
        R                  5      (       d  [        SUUSS9$  [	        UR                  R                   [        5      (       a  [        eUR                  R                  UR                  R                   5      nUR                  (       dP  [        R                  " UR                   R"                  < S[%        U5      R"                  < S3UR                   SS9/$  / $ ! [         au    ['        UR                  R                   SUR                  R                   5      n[        R                  " S	U< S
[%        U5      R"                  < S3UR                   SS9/s $ f = f! [(         a    [+        X#USS9s $ f = f)z
Check that an item in `autocomplete_fields` is a ForeignKey or a
ManyToManyField and that the item has a related ModelAdmin with
search_fields defined.
%a foreign key or a many-to-many fieldz
admin.E038rb   z9 must define "search_fields", because it's referenced by z.autocomplete_fields.z
admin.E040rd   r0   __name__zAn admin for model "z+" has to be registered to be referenced by z
admin.E039z
admin.E037fieldrc   rd   r0   )model_meta	get_fieldmany_to_manyr=   r   
ForeignKeyrg   remote_fieldstrr   
admin_siteget_model_adminsearch_fieldsr
   r;   	__class__rq   typegetattrr   refer_to_missing_field)r\   rd   rl   labelrs   related_adminremote_models          r   rj   4BaseModelAdminChecks._check_autocomplete_fields_item   s   1	IIOO--j9E %%j@Q@Q.R.R; #	 "e0066<<'' # > >u?Q?Q?W?W X& %22 !. 7 7 @ @ $S	 2 2	 !$+	  3 I? ! &&&,,j%:L:L:R:R  LL ) I..	  MM'	 ! ! 	) CL 	s%   %F( $AD& &A<F%$F%(G ?G c                    ^ ^ [        TR                  [        [        45      (       d  [	        SSTSS9$ [        [
        R                  " UU 4S j[        TR                  5       5       5      5      $ )zRCheck that `raw_id_fields` only contains field names that are listed
on the model.r`   raw_id_fieldsz
admin.E001rb   c              3   T   >#    U  H  u  pTR                  TUS U-  5      v   M     g7f)zraw_id_fields[%d]N)_check_raw_id_fields_itemr4   rk   rl   rd   r\   s      r   r5   <BaseModelAdminChecks._check_raw_id_fields.<locals>.<genexpr>  s>      $ .J) 22Z)<u)D  .J   %()r=   r   re   rf   rg   r   rh   ri   r\   rd   s   ``r   rO   )BaseModelAdminChecks._check_raw_id_fields  si     #++dE];;!/s|  ## $ .7s7H7H-I	$  r.   c                 8    UR                   R                  R                  U5      nUR                  U:w  a  [	        UUUSS9$ UR
                  (       d+  [        U[        R                  5      (       d  [        SUUSS9$ / $ ! [         a    [	        X#USS9s $ f = f)zCheck an item of `raw_id_fields`, i.e. check that field named
`field_name` exists in model `model` and is a ForeignKey or a
ManyToManyField.z
admin.E002rr   ro   z
admin.E003rb   )rt   ru   rv   namer   rw   r=   r   rx   rg   r   r\   rd   rl   r   rs   s        r   r   .BaseModelAdminChecks._check_raw_id_fields_item&  s    
	IIOO--j9E zzZ'-$ #	  %%j@Q@Q.R.R; #	  	+ ! 	) CL 	s   %B BBc           
        ^ ^ TR                   c  / $ [        TR                   [        [        45      (       d  [	        SSTSS9$ TR
                  (       a!  [        R                  " STR                  SS9/$ [        R                  " [        TR                   5      5      nUR                  5        VVs/ s H  u  p4US:  d  M  UPM     snn=n(       aB  [        R                  " S	S
SR                  [        [        U5      5      -  TR                  SS9/$ [        [         R"                  " UU 4S jTR                    5       5      5      $ s  snnf )zCheck that `fields` only refer to existing fields, doesn't contain
duplicates. Check if at most one of `fields` and `fieldsets` is
defined.
r`   fieldsz
admin.E004rb   z,Both 'fieldsets' and 'fields' are specified.z
admin.E005rp      z2The value of 'fields' contains duplicate field(s).Remove duplicates of %s., z
admin.E006r8   rd   r0   c              3   J   >#    U  H  nTR                  TUS 5      v   M     g7f)r   N_check_field_spec)r4   rl   rd   r\   s     r   r5   5BaseModelAdminChecks._check_fields.<locals>.<genexpr>e  s*       ",J &&sJAA",s    #)r   r=   re   rf   rg   	fieldsetsr
   r;   r~   collectionsCounterr   itemsjoinmapreprr   rh   r\   rd   field_countsrs   countduplicate_fieldss   ``    r   rP   "BaseModelAdminChecks._check_fieldsD  s*    ::ICJJu66,X3<XX]]B#  #**73::+>?&2&8&8&: 
&:leeaiE&: 
 
 
 H3iiD*: ;<=#    "%**  
 	
 
s   1EEc                   ^ ^^ TR                   c  / $ [        TR                   [        [        45      (       d  [	        SSTSS9$ / m[        [
        R                  " UUU 4S j[        TR                   5       5       5      5      $ )zJCheck that fieldsets is properly formatted and doesn't contain
duplicates.r`   r   z
admin.E007rb   c              3   V   >#    U  H  u  pTR                  TUS U-  T5      v   M      g7f)zfieldsets[%d]N)_check_fieldsets_item)r4   rk   fieldsetrd   seen_fieldsr\   s      r   r5   8BaseModelAdminChecks._check_fieldsets.<locals>.<genexpr>x  s>      $ ,D ..X'>  ,Ds   &))r   r=   re   rf   rg   r   rh   ri   )r\   rd   r   s   ``@r   rQ   %BaseModelAdminChecks._check_fieldsetsk  sy     == ICMMD%=99!+3<  K## $ ,5S]]+C	$  r.   c           
        ^ ^^ [        U[        [        45      (       d  [        STTSS9$ [	        U5      S:w  a  [        STTSS9$ [        US   [
        5      (       d  [        SS	T-  TS
S9$ SUS   ;  a$  [        R                  " ST-  TR                  SS9/$ [        US   S   [        [        45      (       d  [        SST-  TSS9$ [        US   S   5      nUR                  U5        [        R                  " U5      n[        U5      nUR                  5        VV	s/ s H  u  pU	S:  d  M  X;   d  M  UPM     sn	n=n
(       aE  [        R                  " ST-  SSR                  [!        ["        U
5      5      -  TR                  SS9/$ [        [$        R&                  " UUU 4S jUS   S    5       5      5      $ s  sn	nf )ztCheck an item of `fieldsets`, i.e. check that this is a pair of a
set name and a dictionary containing "fields" key.r`   z
admin.E008rb      zof length 2z
admin.E009r   a dictionary%s[1]z
admin.E010r   z3The value of '%s[1]' must contain the key 'fields'.z
admin.E011rp   z%s[1]['fields']z(There are duplicate field(s) in '%s[1]'.r   r   z
admin.E012r   c              3   P   >#    U  H  nTR                  TUS T-  5      v   M     g7f)z%s[1]["fields"]Nr   )r4   fieldset_fieldsr   rd   r\   s     r   r5   =BaseModelAdminChecks._check_fieldsets_item.<locals>.<genexpr>  s1       '<O &&sO=NQV=VWW'<s   #&)r=   re   rf   rg   lendictr
   r;   r~   r   r'   r   r   setr   r   r   r   r   rh   )r\   rd   r   r   r   r   r   fieldset_fields_setrs   r   r   s   `` `       r   r   *BaseModelAdminChecks._check_fieldsets_item  s    (T5M22,UUU]a=CLQQHQK..wCL  Xa[(IEQ#  HQK1D%=AA!(50	  "(1+h"78?+"**;7!/2 !- 2 2 4 
 4qy "9  4 
 
 
 >F3iiD*: ;<=#    '/{8'<  
 	
 
s    F>0F>7F>c                    ^ ^^ [        U[        5      (       a4  [        [        R                  " UUU 4S j[        U5       5       5      5      $ T R                  TUT5      $ )z`fields` should be an item of `fields` or an item of
fieldset[1]['fields'] for any `fieldset` in `fieldsets`. It should be a
field name or a tuple of field names.c              3   X   >#    U  H  u  pTR                  TUS TU4-  5      v   M!     g7f)z%s[%d]N)_check_field_spec_item)r4   rk   rl   r   rd   r\   s      r   r5   9BaseModelAdminChecks._check_field_spec.<locals>.<genexpr>  s?      $ .?) //ZUEN)B  .?s   '*)r=   rf   re   r   rh   ri   r   )r\   rd   r   r   s   `` `r   r   &BaseModelAdminChecks._check_field_spec  sX    
 fe$$## $ .7v->	$   ..sFEBBr.   c                    X!R                   ;   a  / $  UR                  R                  R                  U5      n[	        U[
        R                  5      (       aY  UR                  R                  R                  R                  (       d*  [        R                  " SU< SU< S3UR                  SS9/$ / $ ! [         a    / s $ f = f)NThe value of '&' cannot include the ManyToManyField '>', because that field manually specifies a relationship model.
admin.E013rp   )readonly_fieldsrt   ru   rv   r=   r   ManyToManyFieldry   throughauto_createdr
   r;   r~   r   r   s        r   r   +BaseModelAdminChecks._check_field_spec_item  s    ,,, I		11*= uf&<&<==!..66<<II  6;JH !$+  I' %  	s   %B2 2C Cc           
         UR                   c  / $ [        UR                   [        [        45      (       d  [	        SSUSS9$ [
        R                  " UR                   5      nUR                  5        VVs/ s H  u  p4US:  d  M  UPM     snn=n(       aB  [        R                  " SSSR                  [        [        U5      5      -  UR                  S	S
9/$ / $ s  snnf )z4Check that exclude is a sequence without duplicates.r`   excludez
admin.E014rb   r   z3The value of 'exclude' contains duplicate field(s).r   r   z
admin.E015r   )r   r=   re   rf   rg   r   r   r   r
   r;   r   r   r   r~   r   s         r   rR   #BaseModelAdminChecks._check_exclude  s     ;;ICKK$77!)  #**3;;7&2&8&8&: 
&:leeaiE&: 
 
 
 I3iiD*: ;<=#  I 
s   4CCc                 \    [        UR                  [        5      (       d  [        SSUSS9$ / $ )z)Check that form subclasses BaseModelForm.r   formz
admin.E016parentrc   rd   r0   )r   r   r   must_inherit_fromr   s     r   rS    BaseModelAdminChecks._check_form  s0    388]33$&v3<  Ir.   c                    ^ ^ [        TR                  [        [        45      (       d  [	        SSTSS9$ [        [
        R                  " UU 4S j[        TR                  5       5       5      5      $ )z8Check that filter_vertical is a sequence of field names.r`   filter_verticalz
admin.E017rb   c              3   T   >#    U  H  u  pTR                  TUS U-  5      v   M     g7f)zfilter_vertical[%d]N_check_filter_itemr   s      r   r5   >BaseModelAdminChecks._check_filter_vertical.<locals>.<genexpr>  s>      $ .L) ++Z)>)F  .Lr   )r=   r   re   rf   rg   r   rh   ri   r   s   ``r   rT   +BaseModelAdminChecks._check_filter_vertical  sh    #--e}==!*;  ## $ .7s7J7J-K	$  r.   c                    ^ ^ [        TR                  [        [        45      (       d  [	        SSTSS9$ [        [
        R                  " UU 4S j[        TR                  5       5       5      5      $ )z:Check that filter_horizontal is a sequence of field names.r`   filter_horizontalz
admin.E018rb   c              3   T   >#    U  H  u  pTR                  TUS U-  5      v   M     g7f)zfilter_horizontal[%d]Nr   r   s      r   r5   @BaseModelAdminChecks._check_filter_horizontal.<locals>.<genexpr>  s>      $ .N) ++Z)@5)H  .Nr   )r=   r   re   rf   rg   r   rh   ri   r   s   ``r   rU   -BaseModelAdminChecks._check_filter_horizontal  sh    #//$??!*=3<  ## $ .7s7L7L-M	$  r.   c                     UR                   R                  R                  U5      nUR                  (       a  [	        U[
        R                  5      (       a  [        SX1SS9$ UR                  R                  R                  R                  (       d(  [        R                  " SU SU S3UR                  SS9/$ / $ ! [         a    [        X#US	S
9s $ f = f)zxCheck one item of `filter_vertical` or `filter_horizontal`, i.e.
check that given field exists and is a ManyToManyField.za many-to-many fieldz
admin.E020rb   r   r   r   r   rp   z
admin.E019rr   )rt   ru   rv   rw   r=   r   ManyToManyRelrg   ry   r   r   r
   r;   r~   r   r   r   s        r   r   'BaseModelAdminChecks._check_filter_item&  s    	IIOO--j9E %%E6;O;O)P)P*5l  ''//55BBLL( 0&< (./  MM'  	) ! 	) CL 	s   %B; ;CCc                    ^ ^ [        TR                  [        5      (       d  [        SSTSS9$ [	        [
        R                  " UU 4S jTR                  R                  5        5       5      5      $ )z*Check that `radio_fields` is a dictionary.r   radio_fieldsz
admin.E021rb   c              3   |   >#    U  H1  u  pTR                  TUS 5      TR                  TUSU-  5      -   v   M3     g7f)r   zradio_fields["%s"]N)_check_radio_fields_key_check_radio_fields_valuer4   rl   valrd   r\   s      r   r5   ;BaseModelAdminChecks._check_radio_fields.<locals>.<genexpr>J  sO      $
 ,D
	 00j.Q44S"6"C ,D   9<)r=   r   r   rg   re   r   rh   r   r   s   ``r   rV   (BaseModelAdminChecks._check_radio_fieldsB  sg    #**D11~3<  ## $
 ,/+;+;+A+A+C$  r.   c                 <    UR                   R                  R                  U5      n[        U[        R
                  5      (       d;  UR                  (       d*  [        R                  " SU< SU< S3UR                  SS9/$ / $ ! [         a    [        X#USS9s $ f = f)zCheck that a key of `radio_fields` dictionary is name of existing
field and that the field is a ForeignKey or has `choices` defined.r   ' refers to 'zT', which is not an instance of ForeignKey, and does not have a 'choices' definition.z
admin.E023rp   z
admin.E022rr   )rt   ru   rv   r=   r   rx   choicesr
   r;   r~   r   r   r   s        r   r   ,BaseModelAdminChecks._check_radio_fields_keyS  s    	IIOO--j9E uf&7&788EMMLL */
<  MM'  	! ! 	) CL 	s   %B BBc                 l    SSK JnJn  X$U4;  a$  [        R                  " SU-  UR
                  SS9/$ / $ )z3Check type of a value of `radio_fields` dictionary.r   )
HORIZONTALVERTICALzDThe value of '%s' must be either admin.HORIZONTAL or admin.VERTICAL.z
admin.E024rp   )django.contrib.admin.optionsr   r   r
   r;   r~   )r\   rd   r   r   r   r   s         r   r   .BaseModelAdminChecks._check_radio_fields_valuek  sG     	F8,,&(-.#	  Ir.   c                     [        UR                  5      (       d@  [        UR                  [        5      (       d!  [        R
                  " SUR                  SS9/$ / $ )NzBThe value of 'view_on_site' must be a callable or a boolean value.z
admin.E025rp   )callableview_on_siter=   boolr
   r;   r~   r   s     r   rX   ,BaseModelAdminChecks._check_view_on_site_url|  sQ    (())*S=M=Mt2T2T#	  Ir.   c                    ^ ^ [        TR                  [        5      (       d  [        SSTSS9$ [	        [
        R                  " UU 4S jTR                  R                  5        5       5      5      $ )zPCheck that `prepopulated_fields` is a dictionary containing allowed
field types.r   prepopulated_fieldsz
admin.E026rb   c              3   |   >#    U  H1  u  pTR                  TUS 5      TR                  TUSU-  5      -   v   M3     g7f)r   zprepopulated_fields["%s"]N)_check_prepopulated_fields_key _check_prepopulated_fields_valuer   s      r   r5   BBaseModelAdminChecks._check_prepopulated_fields.<locals>.<genexpr>  sU      $ ,K
 77Z)> ;;S"=
"J ,Kr   )r=   r   r   rg   re   r   rh   r   r   s   ``r   rW   /BaseModelAdminChecks._check_prepopulated_fields  sj     #11488'<#,  ## $ ,/+B+B+H+H+J$ 
 
r.   c                 X    UR                   R                  R                  U5      n[        U[        R
                  [        R                  [        R                  45      (       a*  [        R                  " SU< SU< S3UR                  SS9/$ / $ ! [         a    [        X#USS9s $ f = f)zCheck a key of `prepopulated_fields` dictionary, i.e. check that it
is a name of existing field and the field is one of the allowed types.
r   r   zZ', which must not be a DateTimeField, a ForeignKey, a OneToOneField, or a ManyToManyField.z
admin.E028rp   z
admin.E027rr   )rt   ru   rv   r=   r   DateTimeFieldrx   r   r
   r;   r~   r   r   r   s        r   r   3BaseModelAdminChecks._check_prepopulated_fields_key  s    
	IIOO--j9E ,,f.?.?AWAWX  LL /4ZA  MM'  	% ! 	) CL 	s   %B B)(B)c                    ^ ^^ [        U[        [        45      (       d  [        STTSS9$ [        [        R
                  " UUU 4S j[        U5       5       5      5      $ )z\Check a value of `prepopulated_fields` dictionary, i.e. it's an
iterable of existing fields.r`   z
admin.E029rb   c           	   3   ^   >#    U  H"  u  pTR                  TUT< S U< S35      v   M$     g7f)[]N)%_check_prepopulated_fields_value_item)r4   rk   subfield_namer   rd   r\   s      r   r5   HBaseModelAdminChecks._check_prepopulated_fields_value.<locals>.<genexpr>  s;      $ 1?, >>]u,E  1?s   *-)r=   re   rf   rg   r   rh   ri   )r\   rd   r   r   s   `` `r   r   5BaseModelAdminChecks._check_prepopulated_fields_value  sV     #e}--,UUU## $ 1:#	$  r.   c                      UR                   R                  R                  U5        / $ ! [         a    [	        X#USS9s $ f = f)zQFor `prepopulated_fields` equal to {"slug": ("title",)},
`field_name` is "title".z
admin.E030rr   )rt   ru   rv   r   r   r\   rd   rl   r   s       r   r	  :BaseModelAdminChecks._check_prepopulated_fields_value_item  sI    	IIOO%%j1 I ! 	) CL 	s   %) A Ac                    ^ ^ TR                   c  / $ [        TR                   [        [        45      (       d  [	        SSTSS9$ [        [
        R                  " UU 4S j[        TR                   5       5       5      5      $ )z;Check that ordering refers to existing fields or is random.r`   orderingz
admin.E031rb   c              3   T   >#    U  H  u  pTR                  TUS U-  5      v   M     g7f)zordering[%d]N)_check_ordering_itemr   s      r   r5   7BaseModelAdminChecks._check_ordering.<locals>.<genexpr>  s3      $-D) --c:~PU?UVV-Dr   )r  r=   re   rf   rg   r   rh   ri   r   s   ``r   rY   $BaseModelAdminChecks._check_ordering  sr     <<ICLL4-88!*#,  ## $-6s||-D$  r.   c                    [        U[        [        R                  45      (       aq  [        U[        R                  5      (       d  UR	                  5       n[        UR
                  [        R                  5      (       a  UR
                  R                  nO/ $ US:X  a;  [        UR                  5      S:w  a"  [        R                  " SSUR                  SS9/$ US:X  a  / $ [        U;   a  / $ UR                  S5      nUS:X  a  / $  UR                  R                   R#                  U5        / $ ! [$         a    ['        X#US	S
9s $ f = f)z0Check that `ordering` refers to existing fields.?r   z^The value of 'ordering' has the random ordering marker '?', but contains other fields as well.z2Either remove the "?", or remove the other fields.z
admin.E032r   -pkz
admin.E033rr   )r=   r   r   OrderByasc
expressionFr   r   r  r
   r;   r~   r   removeprefixrt   ru   rv   r   r   r  s       r   r  )BaseModelAdminChecks._check_ordering_item  s$   j:v~~">??j&..99'^^-
*//::'2277
	S\\!2a!79M#  3I:% I#005JT!			))*5 	 % -$ s   %D- -EEc                   ^ ^ TR                   S:X  a  / $ [        TR                   [        [        45      (       d  [	        SSTSS9$ [        [
        R                  " UU 4S j[        TR                   5       5       5      5      $ )z?Check that readonly_fields refers to proper attribute or field. r`   r   z
admin.E034rb   c              3   T   >#    U  H  u  pTR                  TUS U-  5      v   M     g7f)zreadonly_fields[%d]N)_check_readonly_fields_itemr   s      r   r5   >BaseModelAdminChecks._check_readonly_fields.<locals>.<genexpr>  s>      $ .L) 44Z)>)F  .Lr   )r   r=   re   rf   rg   r   rh   ri   r   s   ``r   rZ   +BaseModelAdminChecks._check_readonly_fields  s}     "$IC//$??!*;  ## $ .7s7J7J-K	$  r.   c                    [        U5      (       a  / $ [        X5      (       a  / $ [        UR                  U5      (       a  / $  UR                  R                  R	                  U5        / $ ! [
         ag    [        R                  " SU< SU< SUR                  R                  < SUR                  R                  R                  < S3	UR                  SS9/s $ f = f)Nr   r   z-', which is not a callable, an attribute of 'z', or an attribute of ''.z
admin.E035rp   )r   hasattrrt   ru   rv   r   r
   r;   r~   rq   r   r  s       r   r#  0BaseModelAdminChecks._check_readonly_fields_item   s    JIS%%ISYY
++I		))*5" 	! % LL "&MM22IIOO11  MM' s   %A* *A.CCc                     UR                   c  / $ [        UR                   [        5      (       a  UR                   S:  a  [        SSUSS9$ / $ )zMCheck that delete_confirmation_max_display is
a non-negative integer or None.r   za non-negative integer or Nonedelete_confirmation_max_displayz
admin.E041rb   )r+  r=   intrg   r   s     r   r[   ;BaseModelAdminChecks._check_delete_confirmation_max_display<  sV     ..6I3>>DD22Q608	  Ir.   r!  N)!rq   
__module____qualname____firstlineno__r(   rN   rj   rO   r   rP   rQ   r   r   r   rR   rS   rT   rU   r   rV   r   r   rX   rW   r   r   r	  rY   r  rZ   r#  r[   __static_attributes__r!  r.   r   rK   rK      s    
$.7r$<%
N*3
jC"<2  8"0"(6 $$L&8r.   rK   c                      ^  \ rS rSrU 4S jrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rSrU =r$ )ModelAdminChecksiP  c                   > / [         TU ]  U5      QU R                  U5      QU R                  U5      QU R	                  U5      QU R                  U5      QU R                  U5      QU R                  U5      QU R                  U5      QU R                  U5      QU R                  U5      QU R                  U5      QU R                  U5      QU R                  U5      QU R                  U5      Q$ r2   )superr(   _check_save_as_check_save_on_top_check_inlines_check_list_display_check_list_display_links_check_list_filter_check_list_select_related_check_list_per_page_check_list_max_show_all_check_list_editable_check_search_fields_check_date_hierarchy_check_actions)r\   r]   r*   r~   s      r   r(   ModelAdminChecks.checkQ  s-   
W]9%
  +
 $$Y/
   +	

 %%i0
 ++I6
 $$Y/
 ,,Y7
 &&y1
 **95
 &&y1
 &&y1
 ''	2
   +
 	
r.   c                 \    [        UR                  [        5      (       d  [        SSUSS9$ / $ )zCheck save_as is a boolean.	a booleansave_asz
admin.E101rb   )r=   rF  r   rg   r   s     r   r6  ModelAdminChecks._check_save_asc  s+     #++t,,;yclSSIr.   c                 \    [        UR                  [        5      (       d  [        SSUSS9$ / $ )zCheck save_on_top is a boolean.rE  save_on_topz
admin.E102rb   )r=   rI  r   rg   r   s     r   r7  #ModelAdminChecks._check_save_on_topk  s+     #//400;}#,WWIr.   c                    ^ ^ [        TR                  [        [        45      (       d  [	        SSTSS9$ [        [
        R                  " UU 4S j[        TR                  5       5       5      5      $ )z%Check all inline model admin classes.r`   inlinesz
admin.E103rb   c              3   T   >#    U  H  u  pTR                  TUS U-  5      v   M     g7f)zinlines[%d]N)_check_inlines_itemr4   rk   itemrd   r\   s      r   r5   2ModelAdminChecks._check_inlines.<locals>.<genexpr>|  s1      $'= ,,S$8MNN'=r   )r=   rL  re   rf   rg   r   rh   ri   r   s   ``r   r8  ModelAdminChecks._check_inliness  sc     #++e}55!)  ## $'0'=$  r.   c                 H    UR                   S-   UR                  -   nSSKJn  [        X%5      (       d$  [        R                  " SU-  UR
                  SS9/$ UR                  (       d$  [        R                  " SU-  UR
                  SS9/$ [        UR                  [        R                  5      (       d  [        S	S
U-  USS9$ U" UR                  UR                  5      R                  5       $ ! [         a'    [        R                  " SU-  UR
                  SS9/s $ f = f)zCheck one inline model admin..z*'%s' must inherit from 'InlineModelAdmin'.z
admin.E104rp   r   )InlineModelAdminz#'%s' must have a 'model' attribute.z
admin.E105za Modelz%s.modelz
admin.E106rb   )r.  rq   AttributeErrorr
   r;   r~   r   rU  r   rt   r   Modelrg   r{   r(   )r\   rd   inliner   inline_labelrU  s         r   rN  $ModelAdminChecks._check_inlines_item  s   		!,,s2V__DL 	B644@<O#  9LH#  V\\6<<88*|";  #))S^^4::<<A  	@3F# 	s   C0 0.D! D!c                    ^ ^ [        TR                  [        [        45      (       d  [	        SSTSS9$ [        [
        R                  " UU 4S j[        TR                  5       5       5      5      $ )z=Check list_display only contains fields or usable attributes.r`   list_displayz
admin.E107rb   c              3   T   >#    U  H  u  pTR                  TUS U-  5      v   M     g7f)zlist_display[%d]N)_check_list_display_itemrO  s      r   r5   7ModelAdminChecks._check_list_display.<locals>.<genexpr>  s3      $'B 11#t=ORW=WXX'Br   )r=   r\  re   rf   rg   r   rh   ri   r   s   ``r   r9  $ModelAdminChecks._check_list_display  sg     #**T5M::!.cl  ## $'01A1A'B$  r.   c                 R   [        U5      (       a  / $ [        X5      (       a  / $  UR                  R                  R	                  U5      n[        US	S
5      (       a"  UR                  (       dH  UR                   (       d7  [        USS 5      (       aJ  UR"                  R$                  R&                  (       a%  [        R                  " SU S3UR                  SS9/$ / $ ! [
         a     [        UR                  U5      n N! [         a     [        UR                  U5      S   n  N! [
        [        4 ag    [        R                  " SU SU SUR                  R                   SUR                  R                  R                   S3	UR                  SS9/s s s $ f = ff = ff = f)Nr   r   z,', which is not a callable or attribute of 'z)', or an attribute, method, or field on 'r'  z
admin.E108rp   is_relationFrelz<' must not be a many-to-many field or a reverse foreign key.z
admin.E109)r   r(  rt   ru   rv   r   r   rV  r	   r   r
   r;   r~   rq   r   rw   one_to_manyrd  rs   many_to_one)r\   rd   rP  r   rs   s        r   r^  )ModelAdminChecks._check_list_display_item  s   D>>ISI	IIOO--d3E& E=%00##u'8'8eUD))eiioo.I.I$UG ,+ ,#	  	; ! 			40! 0DA"EE)+;< 
,UG= G;;>==;Q;Q:R S  #		 5 56b: !$+	 	
	sH   %C 
F&(D  
F"D'$F&'A0FF"F&FF""F&c                 V  ^ ^ SSK Jn  TR                  c  / $ [        TR                  [        [
        45      (       d  [        SSTSS9$ TR                  R                  UR                  L a=  [	        [        R                  " UU 4S j[        TR                  5       5       5      5      $ / $ )zACheck that list_display_links is a unique subset of list_display.r   )
ModelAdminza list, a tuple, or Nonelist_display_linksz
admin.E110rb   c              3   T   >#    U  H  u  pTR                  TUS U-  5      v   M     g7f)zlist_display_links[%d]N)_check_list_display_links_itemr   s      r   r5   =ModelAdminChecks._check_list_display_links.<locals>.<genexpr>  s>      $ .O) 77Z)AE)I  .Or   )r   ri  rj  r=   re   rf   rg   get_list_display__func__r   rh   ri   )r\   rd   ri  s   `` r   r:  *ModelAdminChecks._check_list_display_links  s    ;!!)IC22T5MBB*+	  !!**j.I.II## $ .7s7M7M-N	$   	r.   c                 x    X!R                   ;  a*  [        R                  " SU< SU< S3UR                  SS9/$ / $ )Nr   r   z*', which is not defined in 'list_display'.z
admin.E111rp   )r\  r
   r;   r~   r  s       r   rl  /ModelAdminChecks._check_list_display_links_item  s?    ---).
<#	  Ir.   c                    ^ ^ [        TR                  [        [        45      (       d  [	        SSTSS9$ [        [
        R                  " UU 4S j[        TR                  5       5       5      5      $ )Nr`   list_filterz
admin.E112rb   c              3   T   >#    U  H  u  pTR                  TUS U-  5      v   M     g7f)zlist_filter[%d]N)_check_list_filter_itemrO  s      r   r5   6ModelAdminChecks._check_list_filter.<locals>.<genexpr>
  s3      $'A 00d<MPU<UVV'Ar   )r=   rt  re   rf   rg   r   rh   ri   r   s   ``r   r;  #ModelAdminChecks._check_list_filter  sa    #//D%=99!-S\  ## $'0'A$  r.   c                 H   SSK JnJn  [        U5      (       ap  [	        U[
        R                  5      (       dQ  [        X%5      (       d  [        SX1SS9$ [        X$5      (       a$  [        R                  " SU-  UR                  SS9/$ / $ [	        U[        [        45      (       a%  Uu  pg[        Xt5      (       d  [        S	S
U-  USS9$ / $ Un [        UR                   U5        / $ ! ["        [$        4 a-    [        R                  " SU< SU< S3UR                  SS9/s $ f = f)a
  
Check one item of `list_filter`, the three valid options are:
1. 'field' -- a basic field filter, possibly w/ relationships (e.g.
   'field__rel')
2. ('field', SomeFieldListFilter) - a field-based list filter class
3. SomeListFilter - a non-field list filter class
r   )FieldListFilter
ListFilterr{  z
admin.E113r   z:The value of '%s' must not inherit from 'FieldListFilter'.z
admin.E114rp   rz  r   z
admin.E115r   r   z#', which does not refer to a Field.z
admin.E116)django.contrib.adminrz  r{  r   r=   r   Fieldr   r   r   r
   r;   r~   rf   re   r	   rt   r   r   )r\   rd   rP  r   rz  r{  rs   list_filter_classs           r   rv  (ModelAdminChecks._check_list_filter_item  s*    	ED>>*T6<<"@"@t00('<  D22LLT MM'	  	udm,,'+$E0BB(,"U?#	  	 E$SYY6 	 %&78 LL$)52MM'	 s   C$ $:D! D!c                 r    [        UR                  [        [        [        45      (       d  [        SSUSS9$ / $ )z?Check that list_select_related is a boolean, a list or a tuple.za boolean, tuple or listlist_select_relatedz
admin.E117rb   )r=   r  r   re   rf   rg   r   s     r   r<  +ModelAdminChecks._check_list_select_relatedK  s@     #11D$3FGG +,  Ir.   c                 \    [        UR                  [        5      (       d  [        SSUSS9$ / $ )z'Check that list_per_page is an integer.
an integerlist_per_pagez
admin.E118rb   )r=   r  r,  rg   r   s     r   r=  %ModelAdminChecks._check_list_per_page[  s4     #++S11_#,  Ir.   c                 \    [        UR                  [        5      (       d  [        SSUSS9$ / $ )z+Check that list_max_show_all is an integer.r  list_max_show_allz
admin.E119rb   )r=   r  r,  rg   r   s     r   r>  )ModelAdminChecks._check_list_max_show_alle  s5     #//55%8cl  Ir.   c                    ^ ^ [        TR                  [        [        45      (       d  [	        SSTSS9$ [        [
        R                  " UU 4S j[        TR                  5       5       5      5      $ )zbCheck that list_editable is a sequence of editable fields from
list_display without first element.r`   list_editablez
admin.E120rb   c              3   T   >#    U  H  u  pTR                  TUS U-  5      v   M     g7f)zlist_editable[%d]N)_check_list_editable_itemrO  s      r   r5   8ModelAdminChecks._check_list_editable.<locals>.<genexpr>y  s=      $ (D 22T#6#>  (Dr   )r=   r  re   rf   rg   r   rh   ri   r   s   ``r   r?  %ModelAdminChecks._check_list_editableo  si     #++dE];;!/s|  ## $ (11B1B'C	$  r.   c                     UR                   R                  R                  U5      nX!R                  ;  a*  [        R
                  " SU< SU< S3UR                  SS9/$ UR                  (       a3  X!R                  ;   a$  [        R
                  " SU-  UR                  SS9/$ UR                  S   U:X  aU  UR                  (       dD  UR                  b7  [        R
                  " SU< S	UR                  S   < S
3UR                  SS9/$ UR                  (       a  UR                  (       a*  [        R
                  " SU< SU< S3UR                  SS9/$ / $ ! [         a    [        X#USS9s $ f = f)Nr   r   z,', which is not contained in 'list_display'.z
admin.E122rp   zMThe value of '%s' cannot be in both 'list_editable' and 'list_display_links'.z
admin.E123r   z0' refers to the first field in 'list_display' ('z<'), which cannot be used unless 'list_display_links' is set.z
admin.E124z+', which is not editable through the admin.z
admin.E125z
admin.E121rr   )rt   ru   rv   r\  r
   r;   r~   rj  editableprimary_keyr   r   r   s        r   r  *ModelAdminChecks._check_list_editable_item  si   3	IIOO--j9E !1!11LL:?MMM'	  ''J:P:P,PLL02<=MM'	    #z1..**6 LL #()9)9!)<>  MM'  ^^u'8'8LL05zCMM'	  	c ! 	) CL 	s   %E E21E2c                 h    [        UR                  [        [        45      (       d  [	        SSUSS9$ / $ )z"Check search_fields is a sequence.r`   r}   z
admin.E126rb   )r=   r}   re   rf   rg   r   s     r   r@  %ModelAdminChecks._check_search_fields  s8     #++dE];;!/s|  Ir.   c                 4   UR                   c  / $  [        UR                  UR                   5      S   nUR                  5       S;  a  [	        SSUSS9$ / $ ! [
        [        4 a1    [        R                  " SUR                   -  UR                  SS	9/s $ f = f)
z?Check that date_hierarchy refers to DateField or DateTimeField.rb  >   	DateFieldr  za DateField or DateTimeFielddate_hierarchyz
admin.E128rb   zNThe value of 'date_hierarchy' refers to '%s', which does not refer to a Field.z
admin.E127rp   )
r  r	   rt   get_internal_typerg   r   r   r
   r;   r~   )r\   rd   rs   s      r   rA  &ModelAdminChecks._check_date_hierarchy  s     %I,SYY8J8JKBO **,4RR"6/'	  I% %&78 LL57:7I7IJMM'	 s   #A >BBc                    / nUR                  5       nU H  n[        UR                  S5      (       d  M   UR                  R                   H}  nSU-  n[        X5      (       a  M  UR	                  [
        R                  " UR                  R                  < SU< SUR                  R                  < S3UR                  SS95        M     M     [        R                  " S U 5       5      nUR                  5        HY  u  pU	S	:  d  M  UR	                  [
        R                  " S
UR                  R                  < SU< S3UR                  SS95        M[     U$ )Nallowed_permissionszhas_%s_permissionz must define a z() method for the z action.z
admin.E129rp   c              3   8   #    U  H  oR                   v   M     g 7fr2   )r   )r4   actions     r   r5   2ModelAdminChecks._check_actions.<locals>.<genexpr>  s     #FgFKKgr7   r   z*__name__ attributes of actions defined in z must be unique. Name z is not unique.z
admin.E130)_get_base_actionsr(  funcr  r:   r
   r;   r~   rq   r   r   r   )
r\   rd   r+   actionsr  
permissionmethod_namenamesr   r   s
             r   rB  ModelAdminChecks._check_actions  s   '') F6;;(=>>$kk==
1J>s00MM !$ 6 6 + & 4 4	 !$+	 > & ###Fg#FF ;;=KDqyLL  MM22 	  MM'	 ) r.   r!  )rq   r.  r/  r0  r(   r6  r7  r8  rN  r9  r^  r:  rl  r;  rv  r<  r=  r>  r?  r  r@  rA  rB  r1  __classcell__r~   s   @r   r3  r3  P  sk    
$$=L$L29v $4l8( (r.   r3  c                   R   ^  \ rS rSrU 4S jrU 4S jrS rS rS rS r	S r
S	rU =r$ )
InlineModelAdminChecksi  c                 
  > UR                   n/ [        TU ]	  U5      QU R                  X5      QU R	                  X5      QU R                  U5      QU R                  U5      QU R                  U5      QU R                  U5      Q$ r2   )	parent_modelr5  r(   _check_relation_check_exclude_of_parent_model_check_extra_check_max_num_check_min_num_check_formset)r\   
inline_objr*   r  r~   s       r   r(   InlineModelAdminChecks.check	  s    !..
W]:&
!!*;
 00J
 z*	

   ,
   ,
   ,
 	
r.   c                   > [         TU ]  U5      nU(       a  / $ U R                  X5      (       a  / $ UR                  c  / $ [	        X!R
                  UR                  S9nUR                  UR                  ;   aH  [        R                  " SUR                  < SUR                  R                  < S3UR                  SS9/$ / $ )Nfk_namezCannot exclude the field 'z6', because it is the foreign key to the parent model 'r'  z
admin.E201rp   )r5  rR   r  r   r   rt   r  r   r
   r;   ru   r   r~   )r\   rd   r  r+   fkr~   s        r   r  5InlineModelAdminChecks._check_exclude_of_parent_model  s     ',I 22I;;IlIIs{{K77ckk! $**00	 #	  Ir.   c                      [        X!R                  UR                  S9  / $ ! [         a8  n[        R
                  " UR                  S   UR                  SS9/s S nA$ S nAff = f)Nr  r   z
admin.E202rp   )r   rt   r  
ValueErrorr
   r;   argsr~   )r\   rd   r  es       r   r  &InlineModelAdminChecks._check_relation4  sV    	\99ckkJ I  	QLL,OPP	Qs   " 
A$-AA$A$c                 \    [        UR                  [        5      (       d  [        SSUSS9$ / $ )zCheck that extra is an integer.r  extraz
admin.E203rb   )r=   r  r,  rg   r   s     r   r  #InlineModelAdminChecks._check_extra<  s+     #))S))<S\RRIr.   c                 z    UR                   c  / $ [        UR                   [        5      (       d  [        SSUSS9$ / $ )z!Check that max_num is an integer.r  max_numz
admin.E204rb   )r  r=   r,  rg   r   s     r   r  %InlineModelAdminChecks._check_max_numD  :     ;;ICKK--<	s|TTIr.   c                 z    UR                   c  / $ [        UR                   [        5      (       d  [        SSUSS9$ / $ )z!Check that min_num is an integer.r  min_numz
admin.E205rb   )r  r=   r,  rg   r   s     r   r  %InlineModelAdminChecks._check_min_numN  r  r.   c                 \    [        UR                  [        5      (       d  [        SSUSS9$ / $ )z0Check formset is a subclass of BaseModelFormSet.r   formsetz
admin.E206r   )r   r  r   r   r   s     r   r  %InlineModelAdminChecks._check_formsetX  s3     3;;(899$))  Ir.   r!  )rq   r.  r/  r0  r(   r  r  r  r  r  r  r1  r  r  s   @r   r  r    s+    

> r.   r  c                 V    [         R                  " SU< SU < S3UR                  US9/$ )Nr   z
' must be rT  rp   r
   r;   r~   )r   rc   rd   r0   s       r   rg   rg   c  s*    /5t<	
 r.   c                 V    [         R                  " SU< SU < S3UR                  US9/$ )Nr   z' must inherit from 'r'  rp   r  r   s       r   r   r   m  s*    ;A6J	
 r.   c           	          [         R                  " SU< SU < SUR                  R                  R                  < S3UR
                  US9/$ )Nr   r   z', which is not a field of 'r'  rp   )r
   r;   rt   ru   r   r~   rr   s       r   r   r   w  s<    uciioo335		
 r.   )+r   	itertoolsr   django.appsr   django.confr   django.contrib.admin.exceptionsr   django.contrib.admin.utilsr   r   r	   django.corer
   django.core.exceptionsr   	django.dbr   django.db.models.constantsr   django.db.models.expressionsr   django.forms.modelsr   r   r   django.templater   django.template.backends.djangor   django.utils.module_loadingr   r   r"   r-   rI   rK   r3  r  rg   r   r   r!  r.   r   <module>r     s         9 V V  4  1 3 Q Q # ; 5"vr\
 \
~u+ upX1 Xvr.   