
    h*                     .   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     M/var/www/html/env/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)s   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_dependenciesrH   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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$ 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)self	admin_objr*   s      r   r(   BaseModelAdminChecks.check   s   
,,Y7
&&y1
 	*
 ""9-	

   +
 i(
 ((3
 **95
 %%i0
 ,,Y7
 )))4
 !!),
 ((3
 	
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<   r_   listtuplemust_ber   from_iterable	enumerate_check_autocomplete_fields_item)rZ   rb   index
field_names       r   rM   /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                  UR                  R                   5      nUR                  (       dP  [        R                  " UR                  R                  < S[!        U5      R                  < S3UR                  SS9/$  / $ ! ["         a^    [        R                  " SUR                  R                   R                  < 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.E038r`   z9 must define "search_fields", because it's referenced by z.autocomplete_fields.z
admin.E040rb   r0   zAn admin for model "z+" has to be registered to be referenced by z
admin.E039z
admin.E037fieldra   rb   r0   )model_meta	get_fieldmany_to_manyr<   r   
ForeignKeyre   
admin_siteget_model_adminremote_fieldsearch_fieldsr
   r:   	__class____name__typer   r   refer_to_missing_field)rZ   rb   rj   labelrp   related_admins         r   rh   4BaseModelAdminChecks._check_autocomplete_fields_item   sV   +	IIOO--j9E %%j@Q@Q.R.R; #	  # > >u?Q?Q?W?W X %22 !. 7 7 @ @ $S	 2 2	 !$+	  3 I7 ! LL "..44== I..	  MM'	  ! 	) CL 	s$   %E" $/C7 7A%EE"E:9E: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.E001r`   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   ri   rj   rb   rZ   s      r   r5   <BaseModelAdminChecks._check_raw_id_fields.<locals>.<genexpr>  s>      $ .J) 22Z)<u)D  .J   %()r<   r   rc   rd   re   r   rf   rg   rZ   rb   s   ``r   rN   )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.E002ro   rm   z
admin.E003r`   )rq   rr   rs   namer}   rt   r<   r   ru   re   r   rZ   rb   rj   r~   rp   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/$ [        TR                   5      n[        U5      [        [        U5      5      :w  a!  [        R                  " STR                  S	S9/$ [        [        R                  " UU 4S
 jTR                    5       5      5      $ )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.E004r`   z,Both 'fieldsets' and 'fields' are specified.z
admin.E005rn   z2The value of 'fields' contains duplicate field(s).z
admin.E006c              3   J   >#    U  H  nTR                  TUS 5      v   M     g7f)r   N_check_field_spec)r4   rj   rb   rZ   s     r   r5   5BaseModelAdminChecks._check_fields.<locals>.<genexpr>Y  s*       ",J &&sJAA",s    #)r   r<   rc   rd   re   	fieldsetsr
   r:   rz   r   lensetr   rf   )rZ   rb   r   s   `` r   rO   "BaseModelAdminChecks._check_fields=  s    
 ::ICJJu66,X3<XX]]B#  $v;#c&k**H#    "%**  
 	
r.   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.E007r`   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   ri   fieldsetrb   seen_fieldsrZ   s      r   r5   8BaseModelAdminChecks._check_fieldsets.<locals>.<genexpr>l  s>      $ ,D ..X'>  ,Ds   &))r   r<   rc   rd   re   r   rf   rg   )rZ   rb   r   s   ``@r   rP   %BaseModelAdminChecks._check_fieldsets_  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R                  [        US   S   5      5        [	        U5      [	        [        U5      5      :w  a$  [        R                  " ST-  TR                  SS9/$ [        [        R                  " UUU 4S jUS   S    5       5      5      $ )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.E008r`      zof length 2z
admin.E009   a dictionary%s[1]z
admin.E010r   z3The value of '%s[1]' must contain the key 'fields'.z
admin.E011rn   z%s[1]['fields']z(There are duplicate field(s) in '%s[1]'.z
admin.E012c              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~   rb   rZ   s     r   r5   =BaseModelAdminChecks._check_fieldsets_item.<locals>.<genexpr>  s1       '<O &&sO=NQV=VWW'<s   #&)r<   rc   rd   re   r   dictr
   r:   rz   r'   r   r   r   rf   )rZ   rb   r   r~   r   s   `` ` r   r   *BaseModelAdminChecks._check_fieldsets_itemt  sp    (T5M22,UUU]a=CLQQHQK..wCL  Xa[(IEQ#  HQK1D%=AA!(50	  	78A;x#89:{s3{#344>F#    '/{8'<  
 	
r.   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   ri   rj   r~   rb   rZ   s      r   r5   9BaseModelAdminChecks._check_field_spec.<locals>.<genexpr>  s?      $ .?) //ZUEN)B  .?s   '*)r<   rd   rc   r   rf   rg   r   )rZ   rb   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.E013rn   )readonly_fieldsrq   rr   rs   r<   r   ManyToManyFieldrx   throughauto_createdr
   r:   rz   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                 2   UR                   c  / $ [        UR                   [        [        45      (       d  [	        SSUSS9$ [        UR                   5      [        [        UR                   5      5      :  a!  [        R                  " SUR                  SS9/$ / $ )z4Check that exclude is a sequence without duplicates.r^   excludez
admin.E014r`   z3The value of 'exclude' contains duplicate field(s).z
admin.E015rn   )
r   r<   rc   rd   re   r   r   r
   r:   rz   r   s     r   rQ   #BaseModelAdminChecks._check_exclude  s     ;;ICKK$77!)  C$4 55I#  Ir.   c                 \    [        UR                  [        5      (       d  [        SSUSS9$ / $ )z)Check that form subclasses BaseModelForm.r   formz
admin.E016parentra   rb   r0   )r   r   r   must_inherit_fromr   s     r   rR    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.E017r`   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   rc   rd   re   r   rf   rg   r   s   ``r   rS   +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.E018r`   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   rc   rd   re   r   rf   rg   r   s   ``r   rT   -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.E020r`   r   r   r   r   rn   z
admin.E019ro   )rq   rr   rs   rt   r<   r   ManyToManyRelre   rx   r   r   r
   r:   rz   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.E021r`   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   rj   valrb   rZ   s      r   r5   ;BaseModelAdminChecks._check_radio_fields.<locals>.<genexpr>0  sO      $
 ,D
	 00j.Q44S"6"C ,D   9<)r<   r   r   re   rc   r   rf   itemsr   s   ``r   rU   (BaseModelAdminChecks._check_radio_fields(  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.E023rn   z
admin.E022ro   )rq   rr   rs   r<   r   ru   choicesr
   r:   rz   r   r}   r   s        r   r   ,BaseModelAdminChecks._check_radio_fields_key9  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.E024rn   )django.contrib.admin.optionsr   r   r
   r:   rz   )rZ   rb   r   r~   r   r   s         r   r   .BaseModelAdminChecks._check_radio_fields_valueQ  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.E025rn   )callableview_on_siter<   boolr
   r:   rz   r   s     r   rW   ,BaseModelAdminChecks._check_view_on_site_urlb  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.E026r`   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>x  sU      $ ,K
 77Z)> ;;S"=
"J ,Kr   )r<   r   r   re   rc   r   rf   r   r   s   ``r   rV   /BaseModelAdminChecks._check_prepopulated_fieldso  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.E028rn   z
admin.E027ro   )rq   rr   rs   r<   r   DateTimeFieldru   r   r
   r:   rz   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.E029r`   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   ri   subfield_namer~   rb   rZ   s      r   r5   HBaseModelAdminChecks._check_prepopulated_fields_value.<locals>.<genexpr>  s;      $ 1?, >>]u,E  1?s   *-)r<   rc   rd   re   r   rf   rg   )rZ   rb   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.E030ro   )rq   rr   rs   r   r}   rZ   rb   rj   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.E031r`   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<   rc   rd   re   r   rf   rg   r   s   ``r   rX   $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.E032)r7   rb   r0   -pkz
admin.E033ro   )r<   r   r   OrderByasc
expressionFr   r   r   r
   r:   rz   r   removeprefixrq   rr   rs   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.E034r`   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<   rc   rd   re   r   rf   rg   r   s   ``r   rY   +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.E035rn   )r   hasattrrq   rr   rs   r   r
   r:   rz   r{   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r  N) r{   
__module____qualname____firstlineno__r(   rM   rh   rN   r   rO   rP   r   r   r   rQ   rR   rS   rT   r   rU   r   r   rW   rV   r   r   r   rX   r  rY   r  __static_attributes__r  r.   r   rJ   rJ      s    
".1f$< 
D**
XC"<(  8"0"(6 $$L&r.   rJ   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$ )ModelAdminChecksi#  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)rZ   r[   r*   rz   s      r   r(   ModelAdminChecks.check$  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.E101r`   )r<   r0  r   re   r   s     r   r   ModelAdminChecks._check_save_as6  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.r/  save_on_topz
admin.E102r`   )r<   r3  r   re   r   s     r   r!  #ModelAdminChecks._check_save_on_top>  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.E103r`   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   ri   itemrb   rZ   s      r   r5   2ModelAdminChecks._check_inlines.<locals>.<genexpr>O  s1      $'= ,,S$8MNN'=r   )r<   r6  rc   rd   re   r   rf   rg   r   s   ``r   r"  ModelAdminChecks._check_inlinesF  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.E104rn   r   )InlineModelAdminz#'%s' must have a 'model' attribute.z
admin.E105za Modelz%s.modelz
admin.E106r`   )r  r{   AttributeErrorr
   r:   rz   r   r?  r   rq   r   Modelre   rv   r(   )rZ   rb   inliner~   inline_labelr?  s         r   r8  $ModelAdminChecks._check_inlines_itemU  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      $ )zBCheck that list_display only contains fields or usable attributes.r^   list_displayz
admin.E107r`   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_itemr9  s      r   r5   7ModelAdminChecks._check_list_display.<locals>.<genexpr>  s3      $'B 11#t=ORW=WXX'Br   )r<   rF  rc   rd   re   r   rf   rg   r   s   ``r   r#  $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.E108rn   is_relationFrelz<' must not be a many-to-many field or a reverse foreign key.z
admin.E109)r   r  rq   rr   rs   r   getattrr@  r	   r   r
   r:   rz   r{   r~   rt   one_to_manyrN  rp   many_to_one)rZ   rb   r:  r~   rp   s        r   rH  )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.E110r`   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   rT  rU  r<   rc   rd   re   get_list_display__func__r   rf   rg   )rZ   rb   rT  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.E111rn   )rF  r
   r:   rz   r   s       r   rW  /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.E112r`   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_itemr9  s      r   r5   6ModelAdminChecks._check_list_filter.<locals>.<genexpr>  s3      $'A 00d<MPU<UVV'Ar   )r<   r_  rc   rd   re   r   rf   rg   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`, i.e. check if it is one of three options:
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
ListFilterrf  z
admin.E113r   z:The value of '%s' must not inherit from 'FieldListFilter'.z
admin.E114rn   re  r   z
admin.E115r   r   z#', which does not refer to a Field.z
admin.E116)django.contrib.adminre  rf  r   r<   r   Fieldr   r   r   r
   r:   rz   rd   rc   r	   rq   r   r   )rZ   rb   r:  r~   re  rf  rp   list_filter_classs           r   ra  (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.E117r`   )r<   rl  r   rc   rd   re   r   s     r   r&  +ModelAdminChecks._check_list_select_related  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.E118r`   )r<   rp  intre   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.ro  list_max_show_allz
admin.E119r`   )r<   rt  rq  re   r   s     r   r(  )ModelAdminChecks._check_list_max_show_all5  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.E120r`   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_itemr9  s      r   r5   8ModelAdminChecks._check_list_editable.<locals>.<genexpr>I  s=      $ (D 22T#6#>  (Dr   )r<   rw  rc   rd   re   r   rf   rg   r   s   ``r   r)  %ModelAdminChecks._check_list_editable?  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.E122rn   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.E121ro   )rq   rr   rs   rF  r
   r:   rz   rU  editableprimary_keyr   r}   r   s        r   ry  *ModelAdminChecks._check_list_editable_itemQ  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^   ry   z
admin.E126r`   )r<   ry   rc   rd   re   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.rL  >   	DateFieldr   za DateField or DateTimeFielddate_hierarchyz
admin.E128r`   zNThe value of 'date_hierarchy' refers to '%s', which does not refer to a Field.z
admin.E127rn   )
r  r	   rq   get_internal_typere   r   r   r
   r:   rz   )rZ   rb   rp   s      r   r+  &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  u  pEn[        US5      (       d  M  UR                   Hs  nSU-  n[        X5      (       a  M  UR                  [        R
                  " UR                  R                  < SU< SUR                  < S3UR                  SS95        Mu     M     [        R                  " S U 5       5      n	U	R                  5        HY  u  pZU
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.E129rn   c              3   *   #    U  H	  u  pov   M     g 7fr2   r  )r4   _r   s      r   r5   2ModelAdminChecks._check_actions.<locals>.<genexpr>  s     #C7ZQaD7s   r   z*__name__ attributes of actions defined in z must be unique. Name z is not unique.z
admin.E130)_get_base_actionsr  r  r9   r
   r:   rz   r{   collectionsCounterr   )rZ   rb   r+   actionsfuncr   r  
permissionmethod_namenamescounts              r   r,  ModelAdminChecks._check_actions  s   '') %MD4!677"66
1J>s00MM !$ 6 6 + $	 !$+	 7 %& ###C7#CC ;;=KDqyLL  MM22 	  MM'	 ) r.   r  )r{   r  r  r  r(   r   r!  r"  r8  r#  rH  r$  rW  r%  ra  r&  r'  r(  r)  ry  r*  r+  r,  r  __classcell__rz   s   @r   r  r  #  sk    
$$=L$L29v$4l8( (r.   r  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_modelr  r(   _check_relation_check_exclude_of_parent_model_check_extra_check_max_num_check_min_num_check_formset)rZ   
inline_objr*   r  rz   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.E201rn   )r  rQ   r  r   r   rq   r  r   r
   r:   rr   r~   rz   )rZ   rb   r  r+   fkrz   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.E202rn   )r   rq   r  
ValueErrorr
   r:   argsrz   )rZ   rb   r  es       r   r  &InlineModelAdminChecks._check_relation  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.ro  extraz
admin.E203r`   )r<   r  rq  re   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.ro  max_numz
admin.E204r`   )r  r<   rq  re   r   s     r   r  %InlineModelAdminChecks._check_max_num  :     ;;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.ro  min_numz
admin.E205r`   )r  r<   rq  re   r   s     r   r  %InlineModelAdminChecks._check_min_num  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_formset(  s3     3;;(899$))  Ir.   r  )r{   r  r  r  r(   r  r  r  r  r  r  r  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 r>  rn   r
   r:   rz   )r|   ra   rb   r0   s       r   re   re   3  s*    /5t<	
 r.   c                 V    [         R                  " SU< SU < S3UR                  US9/$ )Nr   z' must inherit from 'r  rn   r  r   s       r   r   r   =  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  rn   )r
   r:   rq   rr   r~   rz   ro   s       r   r}   r}   G  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-   rH   rJ   r  r  re   r   r}   r  r.   r   <module>r     s         9 V V  4  1 3 Q Q # ; 5"vro	 o	dr+ rjX1 Xvr.   