Ë
    ¤#ijYÈ  ã                   ó.  — d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZmZ d dlmZ d dlmZ d dlm Z  d„ Z!d„ Z"d„ Z#d„ Z$ G d„ d«      Z% G d„ de%«      Z& G d„ de%«      Z'd„ Z(d„ Z)d„ Z*y)é    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                 ó:   — 	 t        | |«      S # t        $ r Y yw xY w)zX
    issubclass() variant that doesn't raise an exception if cls isn't a
    class.
    F)Ú
issubclassÚ	TypeError)ÚclsÚ	classinfos     úU/var/www/html/office/venv/lib/python3.12/site-packages/django/contrib/admin/checks.pyÚ_issubclassr      s&   € ð
Ü˜#˜yÓ)Ð)øÜò Ùðús   ‚ Ž	™c                 óz   — t        | «      }|D ]  }	 t        |«      }t        ||«      sŒ y y# t        $ r Y Œ+w xY w)z|
    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"      sT   € ô
 ˜
Ó
#€CØò ˆð	Ü)¨$Ó/ˆMô �} cÕ*Ùðð øô ò 	áð	ús   ’.®	:¹:c                 ód   — ddl m} g }|D ]"  }|j                  |j                  | «      «       Œ$ |S )Nr   ©Ú	all_sites)Údjango.contrib.admin.sitesr%   ÚextendÚcheck)Úapp_configsÚkwargsr%   ÚerrorsÚsites        r   Úcheck_admin_appr-   /   s3   € Ý4à€FØò /ˆØ�‰�d—j‘j Ó-Õ.ð/à€Mó    c                  óº  — ddl m} t        j                  d«      sg S g }d}|D ]G  \  }}t        j                  |«      rŒ|j	                  t        j                  d|z  d|z  ¬«      «       ŒI t        j                  «       D ]   }t        |t        «      sŒ|j                  } n d}|s'|j	                  t        j                  d	d
¬«      «       nÊd|j                  vr@t        dt        j                  «      r&|j	                  t        j                  dd¬«      «       d|j                  vr&|j	                  t        j                  dd¬«      «       t!        d„ |D «       «      }|r4d|j                  vr&|j	                  t        j"                  dd¬«      «       t        dt        j$                  «      s&|j	                  t        j                  dd¬«      «       t        dt        j$                  «      s&|j	                  t        j                  dd¬«      «       t        dt        j$                  «      s'|j	                  t        j                  ddd¬ «      «       |S )!zF
    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)ÚidNzƒA '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   ó4   K  — | ]  }|j                   –— Œ y ­w©N)Úenable_nav_sidebar)Ú.0r,   s     r   ú	<genexpr>z%check_dependencies.<locals>.<genexpr>{   s   è ø€ ÒL¸$˜d×5Õ5ÑLù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_dependenciesrG   8   s\  € õ 5ä×ÑÐ3Ô4Øˆ	Ø€FðÐð
 !1ò Ñˆ�*Ü× Ñ  Õ*Ø�M‰MÜ—‘ð#Ø%-ñ.à" ZÑ/ôõðô —+‘+“-ò )ˆÜ�fœoÕ.Ø(.¯©Ð%Ùð)ð
 %)Ð!Ù$Ø�‰Ü�L‰Lðð  ô	õ	
ð :Ø,×?Ñ?ñ@ä"Ø;Ü×0Ñ0ôð
 �M‰MÜ—‘ðJð $ô	ôð BØ,×?Ñ?ñ@ð �M‰MÜ—‘ð-ð $ô	ôô ÑLÀ)ÔLÓLˆáØ<Ø,×?Ñ?ñ@ð �M‰MÜ—‘ð*ð $ô	ôô ØAÄ8×CVÑCVôð 	�‰Ü�L‰LðJàôô	
ô Ø>Ä×@SÑ@Sôð 	�‰Ü�L‰LðJàôô	
ô Ø>Ä×@SÑ@Sôð 	�‰Ü�L‰LðJðQð
  ô
ô	
ð €Mr.   c                   ó®   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚBaseModelAdminChecksc                 óÀ  — g | j                  |«      ¢| j                  |«      ¢| j                  |«      ¢| j                  |«      ¢| j	                  |«      ¢| j                  |«      ¢| j                  |«      ¢| j                  |«      ¢| j                  |«      ¢| j                  |«      ¢| j                  |«      ¢| j                  |«      ¢| j                  |«      ¢S 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(   zBaseModelAdminChecks.check²   s  € ð
Ø×,Ñ,¨YÓ7ð
à×&Ñ& yÓ1ð
ð ×Ñ 	Ó*ð
ð ×"Ñ" 9Ó-ð	
ð
 × Ñ  Ó+ð
ð ×Ñ˜iÓ(ð
ð ×(Ñ(¨Ó3ð
ð ×*Ñ*¨9Ó5ð
ð ×%Ñ% iÓ0ð
ð ×,Ñ,¨YÓ7ð
ð ×)Ñ)¨)Ó4ð
ð ×!Ñ! )Ó,ð
ð ×(Ñ(¨Ó3ð
ð 	
r.   c                 ó  — t        |j                  t        t        f«      st	        dd|d¬«      S t        t        j                  t        |j                  «      D ��cg c]  \  }}| j                  ||d|z  «      ‘Œ c}}«      «      S c c}}w )zV
        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)rX   r_   ÚindexÚ
field_names       r   rK   z/BaseModelAdminChecks._check_autocomplete_fieldsÃ   s”   € ô ˜#×1Ñ1´D¼%°=ÔAÜØ!Ø,ØØô	ð ô Ü×#Ñ#ô
 2;¸3×;RÑ;RÓ1S÷	ñ .˜E :ð ×<Ñ<Ø Ð-FÈÑ-Nõóóó	ð 	ùós   Á Bc           	      óä  — 	 |j                   j                  j                  |«      }|j                  s)t	        |t
        j                  «      st        d||d¬«      S 	 |j                  j                  |j                  j                   «      }|j                  sPt        j                  |j                  j                  ›dt!        |«      j                  ›d�|j                  d¬«      gS g S # t"        $ r^ t        j                  d|j                  j                   j                  ›d	t!        |«      j                  ›d�|j                  d
¬«      gcY S w xY w# t$        $ r t'        |||d¬«      cY S w xY w)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©r_   r0   zAn admin for model "z+" has to be registered to be referenced by z
admin.E039z
admin.E037©Úfieldr^   r_   r0   )ÚmodelÚ_metaÚ	get_fieldÚmany_to_manyr;   r   Ú
ForeignKeyrb   Ú
admin_siteÚget_model_adminÚremote_fieldÚsearch_fieldsr
   r9   Ú	__class__Ú__name__Útyper   r   Úrefer_to_missing_field)rX   r_   rg   Úlabelrl   Úrelated_admins         r   re   z4BaseModelAdminChecks._check_autocomplete_fields_itemÚ   sP  € ð+	Ø—I‘I—O‘O×-Ñ-¨jÓ9ˆEð ×%Ò%¬j¸Ä×@QÑ@QÔ.RÜØ;Ø ØØ#ô	ð ðØ #§¡× >Ñ >¸u×?QÑ?Q×?WÑ?WÓ X�ð %×2Ò2äŸ™ð !.× 7Ñ 7× @Ó @Ü $ S£	× 2Ó 2ð	ð !$§¡Ø+ô	ðð ð ˆIøô7 !ò ä—L’Lð "×.Ñ.×4Ñ4×=Ó=Ü  ›I×.Ó.ð	ð  ŸM™MØ'ô	ðò ðûô !ò 	Ü)Ø ¨°C¸Lôò ð	ús$   ‚%E Á/C* Ã*A$EÅEÅE/Å.E/c                 óÚ   ‡ ‡— t        ‰j                  t        t        f«      st	        dd‰d¬«      S t        t        j                  ˆˆ fd„t        ‰j                  «      D «       «      «      S )zZCheck that `raw_id_fields` only contains field names that are listed
        on the model.r[   Úraw_id_fieldsz
admin.E001r]   c              3   óP   •K  — | ]  \  }}‰j                  ‰|d |z  «      –— Œ y­w)zraw_id_fields[%d]N)Ú_check_raw_id_fields_item©r4   rf   rg   r_   rX   s      €€r   r5   z<BaseModelAdminChecks._check_raw_id_fields.<locals>.<genexpr>  s7   øè ø€ ò $ñ *˜˜zð ×2Ñ2Ø˜ZÐ)<¸uÑ)D÷ñ$ùó   ƒ#&)r;   r}   r`   ra   rb   r   rc   rd   ©rX   r_   s   ``r   rL   z)BaseModelAdminChecks._check_raw_id_fields  sf   ù€ ô ˜#×+Ñ+¬d´E¨]Ô;ÜØ!¨/¸sÀ|ôð ô Ü×#Ñ#ô $ô .7°s×7HÑ7HÓ-Iô	$ó óð r.   c                 ó4  — 	 |j                   j                  j                  |«      }|j                  |k7  rt	        |||d¬«      S |j
                  s)t        |t        j                  «      st        d||d¬«      S g S # t        $ r t	        |||d¬«      cY S w xY w)zœCheck 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.E002rk   ri   z
admin.E003r]   )rm   rn   ro   Únamery   rp   r;   r   rq   rb   r   ©rX   r_   rg   rz   rl   s        r   r   z.BaseModelAdminChecks._check_raw_id_fields_item  s§   € ð
	Ø—I‘I—O‘O×-Ñ-¨jÓ9ˆEð �z‰z˜ZÒ'Ü-Ø$Ø ØØ#ô	ð ð ×%Ò%¬j¸Ä×@QÑ@QÔ.RÜØ;Ø ØØ#ô	ð ð �	øô+ !ò 	Ü)Ø ¨°C¸Lôò ð	ús   ‚%A< Á<BÂBc           
      ó|  ‡ ‡— ‰j                   €g S t        ‰j                   t        t        f«      st	        dd‰d¬«      S ‰j
                  r#t        j                  d‰j                  d¬«      gS t        j                  t        ‰j                   «      «      }|j                  «       D ��cg c]  \  }}|dkD  sŒ|‘Œ c}}x}rDt        j                  d	d
dj                  t        t        |«      «      z  ‰j                  d¬«      gS t        t!        j"                  ˆˆ fd„‰j                   D «       «      «      S c c}}w )z¤Check 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.E005rj   é   z2The value of 'fields' contains duplicate field(s).úRemove duplicates of %s.ú, z
admin.E006©r6   r_   r0   c              3   óD   •K  — | ]  }‰j                  ‰|d «      –— Œ y­w)r‡   N©Ú_check_field_spec)r4   rg   r_   rX   s     €€r   r5   z5BaseModelAdminChecks._check_fields.<locals>.<genexpr>^  s(   øè ø€ ò  àð ×&Ñ& s¨J¸×Añ ùs   ƒ )r‡   r;   r`   ra   rb   Ú	fieldsetsr
   r9   rv   ÚcollectionsÚCounterr   ÚitemsÚjoinÚmapÚreprr   rc   ©rX   r_   Úfield_countsrl   ÚcountÚduplicate_fieldss   ``    r   rM   z"BaseModelAdminChecks._check_fields=  s$  ù€ ð �:‰:ÐØˆIÜ˜CŸJ™J¬¬u¨Ô6ÜÐ,°XÀ3È<ÔXÐXØ�]Š]ä—‘ØBØŸ™Ø#ôðð ô #×*Ñ*¬7°3·:±:Ó+>Ó?ˆà&2×&8Ñ&8Ó&:÷ 
Ù"�e˜U¸eÀa»iŠEó 
ð 
Ðð 
ô —‘ØHØ3Ø—i‘i¤¤DÐ*:Ó ;Ó<ñ=àŸ™Ø#ôðð ô Ü×Ñô  à"%§*¡*ô ó ó
ð 	
ùó 
s   Â*D8Â8D8c                 óþ   ‡ ‡‡— ‰j                   €g S t        ‰j                   t        t        f«      st	        dd‰d¬«      S g Št        t        j                  ˆˆˆ fd„t        ‰j                   «      D «       «      «      S )zRCheck that fieldsets is properly formatted and doesn't contain
        duplicates.r[   r�   z
admin.E007r]   c              3   óR   •K  — | ]  \  }}‰j                  ‰|d |z  ‰«      –— Œ  y­w)zfieldsets[%d]N)Ú_check_fieldsets_item)r4   rf   Úfieldsetr_   Úseen_fieldsrX   s      €€€r   r5   z8BaseModelAdminChecks._check_fieldsets.<locals>.<genexpr>q  s8   øè ø€ ò $ñ (˜˜xð ×.Ñ.Ø˜X ¸Ñ'>À÷ñ$ùs   ƒ$')r�   r;   r`   ra   rb   r   rc   rd   )rX   r_   rž   s   ``@r   rN   z%BaseModelAdminChecks._check_fieldsetsd  sv   ú€ ð �=‰=Ð ØˆIÜ˜CŸM™M¬D´%¨=Ô9ÜØ!¨+¸3À<ôð ð ˆKÜÜ×#Ñ#õ $ô ,5°S·]±]Ó+Cô	$ó óð r.   c           
      ód  ‡ ‡‡— t        |t        t        f«      st        d‰‰d¬«      S t	        |«      dk7  rt        d‰‰d¬«      S t        |d   t
        «      st        dd	‰z  ‰d
¬«      S d|d   vr&t        j                  d‰z  ‰j                  d¬«      gS t        |d   d   t        t        f«      st        dd‰z  ‰d¬«      S t        |d   d   «      }|j                  |«       t        j                  |«      }t        |«      }|j                  «       D ��	cg c]  \  }}	|	dkD  r||v r|‘Œ c}	}x}
rGt        j                  d‰z  ddj                  t!        t"        |
«      «      z  ‰j                  d¬«      gS t        t%        j&                  ˆˆˆ fd„|d   d   D «       «      «      S c c}	}w )z|Check 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.E009rˆ   úa dictionaryú%s[1]z
admin.E010r‡   z3The value of '%s[1]' must contain the key 'fields'.z
admin.E011rj   z%s[1]['fields']z(There are duplicate field(s) in '%s[1]'.r‰   rŠ   z
admin.E012r‹   c              3   óJ   •K  — | ]  }‰j                  ‰|d ‰z  «      –— Œ y­w)z%s[1]["fields"]Nr�   )r4   Úfieldset_fieldsrz   r_   rX   s     €€€r   r5   z=BaseModelAdminChecks._check_fieldsets_item.<locals>.<genexpr>¨  s/   øè ø€ ò  à#ð ×&Ñ& s¨OÐ=NÐQVÑ=V×Wñ ùs   ƒ #)r;   r`   ra   rb   ÚlenÚdictr
   r9   rv   r   r'   r�   r‘   Úsetr’   r“   r”   r•   r   rc   )rX   r_   r�   rz   rž   r¤   r—   Úfieldset_fields_setrl   r˜   r™   s   `` `       r   rœ   z*BaseModelAdminChecks._check_fieldsets_itemy  sÔ  ú€ ô ˜(¤T¬5 MÔ2ÜÐ,°UÀÈÔUÐUÜ�‹]˜aÒÜ˜=°¸CÀLÔQÐQÜ˜H Q™K¬Ô.ÜØ w°¡¸CÀLôð ð ˜X a™[Ñ(ä—‘ØIÈEÑQØŸ™Ø#ôðð ô ˜H Q™K¨Ñ1´D¼%°=ÔAÜØ!Ø(¨5Ñ0ØØô	ð ô " (¨1¡+¨hÑ"7Ó8ˆØ×Ñ˜?Ô+Ü"×*Ñ*¨;Ó7ˆÜ! /Ó2Ðð !-× 2Ñ 2Ó 4÷ 
á��uØ�qŠy˜UÐ&9Ñ9ò ó 
ð 
Ðð 
ô —‘Ø>ÀÑFØ3Ø—i‘i¤¤DÐ*:Ó ;Ó<ñ=àŸ™Ø#ôðð ô Ü×Ñõ  à'/°¡{°8Ñ'<ô ó ó
ð 	
ùó 
s   ÄF,c                 ó²   ‡ ‡‡— t        |t        «      r2t        t        j                  ˆˆˆ fd„t        |«      D «       «      «      S ‰ j                  ‰|‰«      S )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   óT   •K  — | ]  \  }}‰j                  ‰|d ‰|fz  «      –— Œ! y­w)z%s[%d]N)Ú_check_field_spec_item)r4   rf   rg   rz   r_   rX   s      €€€r   r5   z9BaseModelAdminChecks._check_field_spec.<locals>.<genexpr>µ  s:   øè ø€ ò $ñ *˜˜zð ×/Ñ/Ø˜Z¨°U¸E°NÑ)B÷ñ$ùs   ƒ%()r;   ra   r`   r   rc   rd   r«   )rX   r_   r‡   rz   s   `` `r   rŽ   z&BaseModelAdminChecks._check_field_spec®  sU   ú€ ô
 �fœeÔ$ÜÜ×#Ñ#õ $ô .7°vÓ->ô	$ó óð ð ×.Ñ.¨s°F¸EÓBÐBr.   c                 óp  — ||j                   v rg S 	 |j                  j                  j                  |«      }t	        |t
        j                  «      rT|j                  j                  j                  j                  s*t        j                  d|›d|›d�|j                  d¬«      gS g S # t        $ r g cY S w xY w)NúThe value of 'ú&' cannot include the ManyToManyField 'ú>', because that field manually specifies a relationship model.ú
admin.E013rj   )Úreadonly_fieldsrm   rn   ro   r;   r   ÚManyToManyFieldrt   ÚthroughÚauto_createdr
   r9   rv   r   r…   s        r   r«   z+BaseModelAdminChecks._check_field_spec_item¿  s±   € Ø˜×,Ñ,Ñ,ð ˆIðØŸ	™	Ÿ™×1Ñ1°*Ó=�ô ˜u¤f×&<Ñ&<Ô=Ø!×.Ñ.×6Ñ6×<Ñ<×IÒIô Ÿšò 6;ºJðHð !$§¡Ø+ôðð ð �Iøô' %ò ð ’	ðús   ’%B' Â'B5Â4B5c           
      ó¨  — |j                   €g S t        |j                   t        t        f«      st	        dd|d¬«      S t        j                  |j                   «      }|j                  «       D ��cg c]  \  }}|dkD  sŒ|‘Œ c}}x}rDt        j                  dddj                  t        t        |«      «      z  |j                  d	¬
«      gS g S c c}}w )z4Check that exclude is a sequence without duplicates.r[   Úexcludez
admin.E014r]   rˆ   z3The value of 'exclude' contains duplicate field(s).r‰   rŠ   z
admin.E015r‹   )r¶   r;   r`   ra   rb   r�   r‘   r’   r
   r9   r“   r”   r•   rv   r–   s         r   rO   z#BaseModelAdminChecks._check_excludeÝ  sÑ   € ð �;‰;ÐØˆIÜ˜CŸK™K¬$´¨Ô7ÜØ!¨)¸Àôð ô #×*Ñ*¨3¯;©;Ó7ˆà&2×&8Ñ&8Ó&:÷ 
Ù"�e˜U¸eÀa»iŠEó 
ð 
Ðð 
ô —‘ØIØ3Ø—i‘i¤¤DÐ*:Ó ;Ó<ñ=àŸ™Ø#ôðð ð ˆIùó 
s   Á0CÁ>Cc                 óX   — t        |j                  t        «      st        dd|d¬«      S g S )z)Check that form subclasses BaseModelForm.r   Úformz
admin.E016©Úparentr^   r_   r0   )r   r¸   r   Úmust_inherit_fromr‚   s     r   rP   z BaseModelAdminChecks._check_formö  s-   € ä˜3Ÿ8™8¤]Ô3Ü$Ø&¨v¸3À<ôð ð ˆIr.   c                 óÚ   ‡ ‡— t        ‰j                  t        t        f«      st	        dd‰d¬«      S t        t        j                  ˆˆ fd„t        ‰j                  «      D «       «      «      S )z8Check that filter_vertical is a sequence of field names.r[   Úfilter_verticalz
admin.E017r]   c              3   óP   •K  — | ]  \  }}‰j                  ‰|d |z  «      –— Œ y­w)zfilter_vertical[%d]N©Ú_check_filter_itemr€   s      €€r   r5   z>BaseModelAdminChecks._check_filter_vertical.<locals>.<genexpr>  s7   øè ø€ ò $ñ *˜˜zð ×+Ñ+Ø˜ZÐ)>ÀÑ)F÷ñ$ùr�   )r;   r½   r`   ra   rb   r   rc   rd   r‚   s   ``r   rQ   z+BaseModelAdminChecks._check_filter_verticalÿ  se   ù€ ä˜#×-Ñ-´´e¨}Ô=ÜØ!Ð*;ÀÈôð ô Ü×#Ñ#ô $ô .7°s×7JÑ7JÓ-Kô	$ó óð r.   c                 óÚ   ‡ ‡— t        ‰j                  t        t        f«      st	        dd‰d¬«      S t        t        j                  ˆˆ fd„t        ‰j                  «      D «       «      «      S )z:Check that filter_horizontal is a sequence of field names.r[   Úfilter_horizontalz
admin.E018r]   c              3   óP   •K  — | ]  \  }}‰j                  ‰|d |z  «      –— Œ y­w)zfilter_horizontal[%d]Nr¿   r€   s      €€r   r5   z@BaseModelAdminChecks._check_filter_horizontal.<locals>.<genexpr>  s7   øè ø€ ò $ñ *˜˜zð ×+Ñ+Ø˜ZÐ)@À5Ñ)H÷ñ$ùr�   )r;   rÂ   r`   ra   rb   r   rc   rd   r‚   s   ``r   rR   z-BaseModelAdminChecks._check_filter_horizontal  se   ù€ ä˜#×/Ñ/´$¼°Ô?ÜØ!Ð*=À3È<ôð ô Ü×#Ñ#ô $ô .7°s×7LÑ7LÓ-Mô	$ó óð r.   c                 ó   — 	 |j                   j                  j                  |«      }|j                  rt	        |t
        j                  «      rt        d||d¬«      S |j                  j                  j                  j                  s*t        j                  d|› d|› d�|j                  d¬«      gS g S # t        $ r t        |||d	¬
«      cY S w xY w)z€Check 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°   rj   z
admin.E019rk   )rm   rn   ro   rp   r;   r   ÚManyToManyRelrb   rt   r³   r´   r
   r9   rv   r   ry   r…   s        r   rÀ   z'BaseModelAdminChecks._check_filter_item  s×   € ð	Ø—I‘I—O‘O×-Ñ-¨jÓ9ˆEð ×%Ò%¬°E¼6×;OÑ;OÔ)PÜØ*°5¸cÀlôð ð ×'Ñ'×/Ñ/×5Ñ5×BÒBä—L‘LØ(¨¨ð 0Ø&˜<ð (.ð/ð  ŸM™MØ'ôðð ð �	øô) !ò 	Ü)Ø ¨°C¸Lôò ð	ús   ‚%B2 Â2CÃCc                 óØ   ‡ ‡— t        ‰j                  t        «      st        dd‰d¬«      S t	        t        j                  ˆˆ fd„‰j                  j                  «       D «       «      «      S )z*Check that `radio_fields` is a dictionary.r¡   Úradio_fieldsz
admin.E021r]   c              3   óx   •K  — | ]1  \  }}‰j                  ‰|d «      ‰j                  ‰|d|z  «      z   –— Œ3 y­w)rÇ   zradio_fields["%s"]N)Ú_check_radio_fields_keyÚ_check_radio_fields_value©r4   rg   Úvalr_   rX   s      €€r   r5   z;BaseModelAdminChecks._check_radio_fields.<locals>.<genexpr>C  sN   øè ø€ ò $ñ
 (˜
 Cð	 ×0Ñ0°°jÀ.ÓQØ×4Ñ4Ø˜SÐ"6¸Ñ"Cóõñ$ùó   ƒ7:)r;   rÇ   r¦   rb   r`   r   rc   r’   r‚   s   ``r   rS   z(BaseModelAdminChecks._check_radio_fields;  sd   ù€ ä˜#×*Ñ*¬DÔ1ÜØ ~¸3À<ôð ô Ü×#Ñ#ô $ð
 ,/×+;Ñ+;×+AÑ+AÓ+Cô$ó óð r.   c                 ó.  — 	 |j                   j                  j                  |«      }t        |t        j
                  «      s6|j                  s*t        j                  d|›d|›d�|j                  d¬«      gS g S # t        $ r t        |||d¬«      cY S w xY w)zŒCheck 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.E023rj   z
admin.E022rk   )rm   rn   ro   r;   r   rq   Úchoicesr
   r9   rv   r   ry   r…   s        r   rÉ   z,BaseModelAdminChecks._check_radio_fields_keyL  s“   € ð	Ø—I‘I—O‘O×-Ñ-¨jÓ9ˆEô ˜u¤f×&7Ñ&7Ô8¸E¿MºMä—L’Lò */²
ð<ð  ŸM™MØ'ôðð ð �	øô! !ò 	Ü)Ø ¨°C¸Lôò ð	ús   ‚%A9 Á9BÂBc                 ón   — ddl m}m} |||fvr&t        j                  d|z  |j
                  d¬«      gS g S )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.E024rj   )Údjango.contrib.admin.optionsrÒ   rÓ   r
   r9   rv   )rX   r_   rÌ   rz   rÒ   rÓ   s         r   rÊ   z.BaseModelAdminChecks._check_radio_fields_valued  sI   € ÷ 	Fà�z 8Ð,Ñ,ä—‘ð&Ø(-ñ.àŸ™Ø#ô	ðð ð ˆIr.   c                 óª   — t        |j                  «      s=t        |j                  t        «      s#t	        j
                  d|j                  d¬«      gS g S )NzBThe value of 'view_on_site' must be a callable or a boolean value.z
admin.E025rj   )ÚcallableÚview_on_siter;   Úboolr
   r9   rv   r‚   s     r   rU   z,BaseModelAdminChecks._check_view_on_site_urlu  sK   € Ü˜×(Ñ(Ô)´*¸S×=MÑ=MÌtÔ2Tä—‘ðàŸ™Ø#ô	ðð ð ˆIr.   c                 óØ   ‡ ‡— t        ‰j                  t        «      st        dd‰d¬«      S t	        t        j                  ˆˆ fd„‰j                  j                  «       D «       «      «      S )zXCheck that `prepopulated_fields` is a dictionary containing allowed
        field types.r¡   Úprepopulated_fieldsz
admin.E026r]   c              3   óx   •K  — | ]1  \  }}‰j                  ‰|d «      ‰j                  ‰|d|z  «      z   –— Œ3 y­w)rÚ   zprepopulated_fields["%s"]N)Ú_check_prepopulated_fields_keyÚ _check_prepopulated_fields_valuerË   s      €€r   r5   zBBaseModelAdminChecks._check_prepopulated_fields.<locals>.<genexpr>‹  sT   øè ø€ ò $ñ (˜
 Cð ×7Ñ7Ø˜ZÐ)>óð ×;Ñ;Ø˜SÐ"=À
Ñ"Jóõñ$ùrÍ   )r;   rÚ   r¦   rb   r`   r   rc   r’   r‚   s   ``r   rT   z/BaseModelAdminChecks._check_prepopulated_fields‚  sg   ù€ ô ˜#×1Ñ1´4Ô8ÜØÐ'<À#È,ôð ô Ü×#Ñ#ô $ð ,/×+BÑ+B×+HÑ+HÓ+Jô$ó ó
ð 
r.   c                 óT  — 	 |j                   j                  j                  |«      }t        |t        j
                  t        j                  t        j                  f«      r*t        j                  d|›d|›d�|j                  d¬«      gS g S # t        $ r t        |||d¬«      cY S w xY w)z›Check 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.E028rj   z
admin.E027rk   )rm   rn   ro   r;   r   ÚDateTimeFieldrq   r²   r
   r9   rv   r   ry   r…   s        r   rÜ   z3BaseModelAdminChecks._check_prepopulated_fields_key–  s¦   € ð
	Ø—I‘I—O‘O×-Ñ-¨jÓ9ˆEô Øœ×,Ñ,¬f×.?Ñ.?Ä×AWÑAWÐXôô —L’Lò /4²ZðAð  ŸM™MØ'ôðð ð �	øô% !ò 	Ü)Ø ¨°C¸Lôò ð	ús   ‚%B ÂB'Â&B'c                 ó¶   ‡ ‡‡— t        |t        t        f«      st        d‰‰d¬«      S t        t	        j
                  ˆˆˆ fd„t        |«      D «       «      «      S )zdCheck a value of `prepopulated_fields` dictionary, i.e. it's an
        iterable of existing fields.r[   z
admin.E029r]   c           	   3   óV   •K  — | ]   \  }}‰j                  ‰|‰›d |›d�«      –— Œ" y­w)ú[ú]N)Ú%_check_prepopulated_fields_value_item)r4   rf   Úsubfield_namerz   r_   rX   s      €€€r   r5   zHBaseModelAdminChecks._check_prepopulated_fields_value.<locals>.<genexpr>¹  s6   øè ø€ ò $ñ -˜˜}ð ×>Ñ>Ø˜]ººuÐ,E÷ñ$ùs   ƒ&))r;   r`   ra   rb   r   rc   rd   )rX   r_   rÌ   rz   s   `` `r   rÝ   z5BaseModelAdminChecks._check_prepopulated_fields_value±  sS   ú€ ô ˜#¤¤e˜}Ô-ÜÐ,°UÀÈÔUÐUäÜ×#Ñ#õ $ô 1:¸#³ô	$ó óð r.   c                 óŽ   — 	 |j                   j                  j                  |«       g S # t        $ r t	        |||d¬«      cY S w xY w)zYFor `prepopulated_fields` equal to {"slug": ("title",)},
        `field_name` is "title".z
admin.E030rk   )rm   rn   ro   r   ry   ©rX   r_   rg   rz   s       r   rä   z:BaseModelAdminChecks._check_prepopulated_fields_value_itemÁ  sK   € ð	Ø�I‰I�O‰O×%Ñ% jÔ1ð ˆIøô !ò 	Ü)Ø ¨°C¸Lôò ð	ús   ‚%) ©AÁAc                 óö   ‡ ‡— ‰j                   €g S t        ‰j                   t        t        f«      st	        dd‰d¬«      S t        t        j                  ˆˆ fd„t        ‰j                   «      D «       «      «      S )z;Check that ordering refers to existing fields or is random.r[   Úorderingz
admin.E031r]   c              3   óP   •K  — | ]  \  }}‰j                  ‰|d |z  «      –— Œ y­w)zordering[%d]N)Ú_check_ordering_itemr€   s      €€r   r5   z7BaseModelAdminChecks._check_ordering.<locals>.<genexpr>Ú  s2   øè ø€ ò $á)˜˜zð ×-Ñ-¨c°:¸~ÐPUÑ?U×Vñ$ùr�   )ré   r;   r`   ra   rb   r   rc   rd   r‚   s   ``r   rV   z$BaseModelAdminChecks._check_orderingÎ  so   ù€ ð �<‰<ÐØˆIÜ˜CŸL™L¬4´¨-Ô8ÜØ!¨*¸#À,ôð ô Ü×#Ñ#ô $ä-6°s·|±|Ó-Dô$ó óð r.   c                 óp  — t        |t        t        j                  f«      rgt        |t        j                  «      s|j	                  «       }t        |j
                  t        j                  «      r|j
                  j                  }ng S |dk(  r<t        |j                  «      dk7  r$t        j                  dd|j                  d¬«      gS |dk(  rg S t        |v rg S |j                  d«      }|dk(  rg S 	 |j                  j                   j#                  |«       g S # t$        $ r t'        |||d	¬
«      cY S w xY w)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.E033rk   )r;   r   r   ÚOrderByÚascÚ
expressionÚFr„   r¥   ré   r
   r9   rv   r   Úremoveprefixrm   rn   ro   r   ry   rç   s       r   rë   z)BaseModelAdminChecks._check_ordering_itemà  s  € ä�j¤:¬v¯~©~Ð">Ô?Ü˜j¬&¯.©.Ô9Ø'Ÿ^™^Ó-�
Ü˜*×/Ñ/´·±Ô:Ø'×2Ñ2×7Ñ7‘
à�	Ø˜Ò¤ S§\¡\Ó!2°aÒ!7ä—‘ð9àMØŸ™Ø#ôðð ð ˜3ÒØˆIÜ˜:Ñ%ð ˆIà#×0Ñ0°Ó5ˆJØ˜TÒ!Ø�	ðØ—	‘	—‘×)Ñ)¨*Ô5ð �	øô %ò Ü-Ø$¨U¸Àôò ðús   Ã3%D ÄD5Ä4D5c                 óü   ‡ ‡— ‰j                   dk(  rg S t        ‰j                   t        t        f«      st	        dd‰d¬«      S t        t        j                  ˆˆ fd„t        ‰j                   «      D «       «      «      S )z?Check that readonly_fields refers to proper attribute or field.© r[   r±   z
admin.E034r]   c              3   óP   •K  — | ]  \  }}‰j                  ‰|d |z  «      –— Œ y­w)zreadonly_fields[%d]N)Ú_check_readonly_fields_itemr€   s      €€r   r5   z>BaseModelAdminChecks._check_readonly_fields.<locals>.<genexpr>  s7   øè ø€ ò $ñ *˜˜zð ×4Ñ4Ø˜ZÐ)>ÀÑ)F÷ñ$ùr�   )r±   r;   r`   ra   rb   r   rc   rd   r‚   s   ``r   rW   z+BaseModelAdminChecks._check_readonly_fields  sz   ù€ ð ×Ñ "Ò$ØˆIÜ˜C×/Ñ/´$¼°Ô?ÜØ!Ð*;ÀÈôð ô Ü×#Ñ#ô $ô .7°s×7JÑ7JÓ-Kô	$ó óð r.   c                 óš  — t        |«      rg S t        ||«      rg S t        |j                  |«      rg S 	 |j                  j                  j	                  |«       g S # t
        $ re t        j                  d|›d|›d|j                  j                  ›d|j                  j                  j                  ›d�	|j                  d¬«      gcY S w xY w)Nr­   rÏ   z-', which is not a callable, an attribute of 'z', or an attribute of 'ú'.z
admin.E035rj   )rÖ   Úhasattrrm   rn   ro   r   r
   r9   rv   rw   rz   rç   s       r   rø   z0BaseModelAdminChecks._check_readonly_fields_item  s±   € Ü�JÔØˆIÜ�S˜*Ô%ØˆIÜ�S—Y‘Y 
Ô+ØˆIðØ—	‘	—‘×)Ñ)¨*Ô5ð" �	øô! %ò ä—L’Lò "Ú&ØŸM™M×2Ó2ØŸI™IŸO™O×1Ó1ðð  ŸM™MØ'ôðò ðús   µ%A ÁA+C
Ã	C
N)rw   Ú
__module__Ú__qualname__r(   rK   re   rL   r   rM   rN   rœ   rŽ   r«   rO   rP   rQ   rR   rÀ   rS   rÉ   rÊ   rU   rT   rÜ   rÝ   rä   rV   rë   rW   rø   rö   r.   r   rI   rI   ±   sŽ   „ ò
ò"ò.1òfò$ò<%
òNò*3
òjCò"ò<ò2òò ò ò8ò"ò0ò"òò(ò6ò òò$$òLó&r.   rI   c                   óŠ   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )ÚModelAdminChecksc                 óà  •— g t         ‰| �  |«      ¢| j                  |«      ¢| j                  |«      ¢| j	                  |«      ¢| j                  |«      ¢| j                  |«      ¢| j                  |«      ¢| j                  |«      ¢| j                  |«      ¢| j                  |«      ¢| j                  |«      ¢| j                  |«      ¢| j                  |«      ¢| j                  |«      ¢S 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)rX   rY   r*   rv   s      €r   r(   zModelAdminChecks.check7  s-  ø€ ð
Ü‰W‰]˜9Ó%ð
à× Ñ  Ó+ð
ð ×$Ñ$ YÓ/ð
ð × Ñ  Ó+ð	
ð
 ×%Ñ% iÓ0ð
ð ×+Ñ+¨IÓ6ð
ð ×$Ñ$ YÓ/ð
ð ×,Ñ,¨YÓ7ð
ð ×&Ñ& yÓ1ð
ð ×*Ñ*¨9Ó5ð
ð ×&Ñ& yÓ1ð
ð ×&Ñ& yÓ1ð
ð ×'Ñ'¨	Ó2ð
ð × Ñ  Ó+ð
ð 	
r.   c                 óX   — t        |j                  t        «      st        dd|d¬«      S g S )zCheck save_as is a boolean.ú	a booleanÚsave_asz
admin.E101r]   )r;   r  rØ   rb   r‚   s     r   r  zModelAdminChecks._check_save_asI  s(   € ô ˜#Ÿ+™+¤tÔ,Ü˜;¨y¸cÀlÔSÐSàˆIr.   c                 óX   — t        |j                  t        «      st        dd|d¬«      S g S )zCheck save_on_top is a boolean.r  Úsave_on_topz
admin.E102r]   )r;   r  rØ   rb   r‚   s     r   r  z#ModelAdminChecks._check_save_on_topQ  s(   € ô ˜#Ÿ/™/¬4Ô0Ü˜;¨}À#È,ÔWÐWàˆIr.   c                 óÚ   ‡ ‡— t        ‰j                  t        t        f«      st	        dd‰d¬«      S t        t        j                  ˆˆ fd„t        ‰j                  «      D «       «      «      S )z%Check all inline model admin classes.r[   Úinlinesz
admin.E103r]   c              3   óP   •K  — | ]  \  }}‰j                  ‰|d |z  «      –— Œ y­w)zinlines[%d]N)Ú_check_inlines_item©r4   rf   Úitemr_   rX   s      €€r   r5   z2ModelAdminChecks._check_inlines.<locals>.<genexpr>b  s1   øè ø€ ò $á#˜˜tð ×,Ñ,¨S°$¸ÈÑ8M×Nñ$ùr�   )r;   r  r`   ra   rb   r   rc   rd   r‚   s   ``r   r  zModelAdminChecks._check_inlinesY  s`   ù€ ô ˜#Ÿ+™+¬¬e }Ô5ÜØ!¨)¸Àôð ô Ü×#Ñ#ô $ä'0°·±Ó'=ô$ó óð r.   c                 ó<  — 	 |j                   dz   |j                  z   }ddlm} t        ||«      s&t        j                  d|z  |j
                  d¬«      gS |j                  s&t        j                  d|z  |j
                  d¬«      gS t        |j                  t        j                  «      st        d	d
|z  |d¬«      S  ||j                  |j                  «      j                  «       S # t        $ r) t        j                  d|z  |j
                  d¬«      gcY S w xY w)zCheck one inline model admin.ú.z*'%s' must inherit from 'InlineModelAdmin'.z
admin.E104rj   r   )ÚInlineModelAdminz#'%s' must have a 'model' attribute.z
admin.E105za Modelz%s.modelz
admin.E106r]   )rü   rw   ÚAttributeErrorr
   r9   rv   rÔ   r  r   rm   r   ÚModelrb   rr   r(   )rX   r_   Úinlinerz   Úinline_labelr  s         r   r  z$ModelAdminChecks._check_inlines_itemh  s  € ð		Ø!×,Ñ,¨sÑ2°V·_±_ÑDˆLõ 	Bä˜6Ð#3Ô4ä—‘Ø@À<ÑOØŸ™Ø#ôðð ð —’ä—‘Ø9¸LÑHØŸ™Ø#ôðð ô ˜VŸ\™\¬6¯<©<Ô8ÜØ *¨|Ñ";ÀÈôð ñ ˜#Ÿ)™) S§^¡^Ó4×:Ñ:Ó<Ð<øôA ò 	ä—‘Ø@À3ÑFØŸ™Ø#ôðò ð	ús   ‚C) Ã)/DÄDc                 óÚ   ‡ ‡— t        ‰j                  t        t        f«      st	        dd‰d¬«      S t        t        j                  ˆˆ fd„t        ‰j                  «      D «       «      «      S )z=Check list_display only contains fields or usable attributes.r[   Úlist_displayz
admin.E107r]   c              3   óP   •K  — | ]  \  }}‰j                  ‰|d |z  «      –— Œ y­w)zlist_display[%d]N)Ú_check_list_display_itemr  s      €€r   r5   z7ModelAdminChecks._check_list_display.<locals>.<genexpr>—  s3   øè ø€ ò $á#˜˜tð ×1Ñ1°#°tÐ=OÐRWÑ=W×Xñ$ùr�   )r;   r"  r`   ra   rb   r   rc   rd   r‚   s   ``r   r  z$ModelAdminChecks._check_list_displayŽ  sd   ù€ ô ˜#×*Ñ*¬T´5¨MÔ:ÜØ!¨.¸cÀlôð ô Ü×#Ñ#ô $ä'0°×1AÑ1AÓ'Bô$ó óð r.   c                 ó  — t        |«      rg S t        ||«      rg S 	 |j                  j                  j	                  |«      }t        |d	d
«      r|j                  s9|j                   s-t        |dd «      rG|j"                  j$                  j&                  r't        j                  d|› d�|j                  d¬«      gS g S # t
        $ rÁ 	 t        |j                  |«      }n¥# t        $ r™ 	 t        |j                  |«      d   }n{# t
        t        f$ ri t        j                  d|› d|› d|j                  j                  › d|j                  j                  j                  › d�	|j                  d¬«      gcY cY cY S w xY wY nw xY wY �ŒDw xY w)Néÿÿÿÿr­   rÏ   z,', which is not a callable or attribute of 'z)', or an attribute, method, or field on 'rú   z
admin.E108rj   Úis_relationFÚrelz<' must not be a many-to-many field or a reverse foreign key.z
admin.E109)rÖ   rû   rm   rn   ro   r   Úgetattrr  r	   r   r
   r9   rv   rw   rz   rp   Úone_to_manyr(  rl   Úmany_to_one)rX   r_   r  rz   rl   s        r   r$  z)ModelAdminChecks._check_list_display_item�  s|  € Ü�DŒ>ØˆIÜ�S˜$ÔØˆIð	Ø—I‘I—O‘O×-Ñ-¨dÓ3ˆEô& �E˜=¨%Ô0Ø×#Ò# u×'8Ò'8Ü�e˜U DÔ)¨e¯i©i¯o©o×.IÒ.Iä—‘Ø$ U Gð ,+ð ,àŸ™Ø#ô	ðð ð ˆ	øô; !ò 	ðÜ §	¡	¨4Ó0‘øÜ!ò ðÜ0°·±¸DÓAÀ"ÑE‘EøÜ)Ô+;Ð<ò 
äŸ™Ø,¨U¨G°=ÀÀð G;Ø;>¿=¹=×;QÑ;QÐ:Rð S à #§	¡	§¡× 5Ñ 5Ð6°bð:ð !$§¡Ø+ôð	ö 	ð
úñ ðýð	ús`   �%B= Â=	FÃCÃFÃ	F Ã(DÄF ÄA1E:Å3F Å5FÅ9E:Å:F Å=FÅ?F Æ FÆFc                 óJ  ‡ ‡— ddl m} ‰j                  €g S t        ‰j                  t        t
        f«      st        dd‰d¬«      S ‰j                  j                  |j                  u r;t	        t        j                  ˆˆ fd„t        ‰j                  «      D «       «      «      S g S )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   óP   •K  — | ]  \  }}‰j                  ‰|d |z  «      –— Œ y­w)zlist_display_links[%d]N)Ú_check_list_display_links_itemr€   s      €€r   r5   z=ModelAdminChecks._check_list_display_links.<locals>.<genexpr>Ó  s7   øè ø€ ò $ñ *˜˜zð ×7Ñ7Ø˜ZÐ)AÀEÑ)I÷ñ$ùr�   )rÔ   r-  r.  r;   r`   ra   rb   Úget_list_displayÚ__func__r   rc   rd   )rX   r_   r-  s   `` r   r  z*ModelAdminChecks._check_list_display_linksÃ  sœ   ù€ å;à×!Ñ!Ð)ØˆIÜ˜C×2Ñ2´T¼5°MÔBÜØ*Ø+ØØô	ð ð ×!Ñ!×*Ñ*¨j×.IÑ.IÑIÜÜ×#Ñ#ô $ô .7°s×7MÑ7MÓ-Nô	$ó óð ð ˆ	r.   c                 óv   — ||j                   vr*t        j                  d|›d|›d�|j                  d¬«      gS g S )Nr­   rÏ   z*', which is not defined in 'list_display'.z
admin.E111rj   )r"  r
   r9   rv   rç   s       r   r0  z/ModelAdminChecks._check_list_display_links_itemÜ  sA   € Ø˜S×-Ñ-Ñ-ä—’â).²
ð<àŸ™Ø#ô	ðð ð ˆIr.   c                 óÚ   ‡ ‡— t        ‰j                  t        t        f«      st	        dd‰d¬«      S t        t        j                  ˆˆ fd„t        ‰j                  «      D «       «      «      S )Nr[   Úlist_filterz
admin.E112r]   c              3   óP   •K  — | ]  \  }}‰j                  ‰|d |z  «      –— Œ y­w)zlist_filter[%d]N)Ú_check_list_filter_itemr  s      €€r   r5   z6ModelAdminChecks._check_list_filter.<locals>.<genexpr>ð  s3   øè ø€ ò $á#˜˜tð ×0Ñ0°°dÐ<MÐPUÑ<U×Vñ$ùr�   )r;   r5  r`   ra   rb   r   rc   rd   r‚   s   ``r   r  z#ModelAdminChecks._check_list_filteré  s^   ù€ Ü˜#Ÿ/™/¬D´%¨=Ô9ÜØ!¨-¸SÀ\ôð ô Ü×#Ñ#ô $ä'0°·±Ó'Aô$ó óð r.   c                 ó$  — ddl m}m} t        |«      rit	        |t
        j                  «      sOt        ||«      st        d||d¬«      S t        ||«      r&t        j                  d|z  |j                  d¬«      gS g S t	        |t        t        f«      r%|\  }}t        ||«      st        d	d
|z  |d¬«      S g S |}	 t        |j                   |«       g S # t"        t$        f$ r- t        j                  d|›d|›d�|j                  d¬«      gcY S w xY w)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.E114rj   r9  r¢   z
admin.E115r­   rÏ   z#', which does not refer to a Field.z
admin.E116)Údjango.contrib.adminr9  r:  rÖ   r;   r   ÚFieldr   r»   r   r
   r9   rv   ra   r`   r	   rm   r   r   )rX   r_   r  rz   r9  r:  rl   Úlist_filter_classs           r   r7  z(ModelAdminChecks._check_list_filter_itemö  s$  € ÷ 	Eä�DŒ>¤*¨T´6·<±<Ô"@ä˜t ZÔ0Ü(Ø'°¸3À<ôð ô ˜D /Ô2ä—L‘LØTØñ àŸM™MØ'ô	ðð ð �	Ü˜œu¤d˜mÔ,à'+Ñ$ˆEÐ$ÜÐ0°/ÔBÜ(Ø,Ø" U™?ØØ#ô	ð ð �	ð ˆEðÜ$ S§Y¡Y°Ô6ð �	øô %Ô&7Ð8ò ä—L’Lâ$)ª5ð2àŸM™MØ'ô	ðò ðús   Â;C Ã9DÄDc                 ón   — t        |j                  t        t        t        f«      st        dd|d¬«      S g S )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;   r?  rØ   r`   ra   rb   r‚   s     r   r  z+ModelAdminChecks._check_list_select_related1  s;   € ô ˜#×1Ñ1´D¼$ÄÐ3FÔGÜØ*Ø,ØØô	ð ð ˆIr.   c                 óX   — t        |j                  t        «      st        dd|d¬«      S g S )z'Check that list_per_page is an integer.ú
an integerÚlist_per_pagez
admin.E118r]   )r;   rB  Úintrb   r‚   s     r   r	  z%ModelAdminChecks._check_list_per_page>  s1   € ô ˜#×+Ñ+¬SÔ1ÜØ _¸#À,ôð ð ˆIr.   c                 óX   — t        |j                  t        «      st        dd|d¬«      S g S )z+Check that list_max_show_all is an integer.rA  Úlist_max_show_allz
admin.E119r]   )r;   rE  rC  rb   r‚   s     r   r
  z)ModelAdminChecks._check_list_max_show_allH  s2   € ô ˜#×/Ñ/´Ô5ÜØÐ%8¸cÀlôð ð ˆIr.   c                 óÚ   ‡ ‡— t        ‰j                  t        t        f«      st	        dd‰d¬«      S t        t        j                  ˆˆ fd„t        ‰j                  «      D «       «      «      S )zjCheck that list_editable is a sequence of editable fields from
        list_display without first element.r[   Úlist_editablez
admin.E120r]   c              3   óP   •K  — | ]  \  }}‰j                  ‰|d |z  «      –— Œ y­w)zlist_editable[%d]N)Ú_check_list_editable_itemr  s      €€r   r5   z8ModelAdminChecks._check_list_editable.<locals>.<genexpr>\  s7   øè ø€ ò $ñ $˜˜tð ×2Ñ2Ø˜TÐ#6¸Ñ#>÷ñ$ùr�   )r;   rG  r`   ra   rb   r   rc   rd   r‚   s   ``r   r  z%ModelAdminChecks._check_list_editableR  sf   ù€ ô ˜#×+Ñ+¬d´E¨]Ô;ÜØ!¨/¸sÀ|ôð ô Ü×#Ñ#ô $ô (1°×1BÑ1BÓ'Cô	$ó óð r.   c                 óÄ  — 	 |j                   j                  j                  |«      }||j                  vr*t	        j
                  d|›d|›d�|j                  d¬«      gS |j                  r4||j                  v r&t	        j
                  d|z  |j                  d¬«      gS |j                  d   |k(  rO|j                  sC|j                  �7t	        j
                  d|›d	|j                  d   ›d
�|j                  d¬«      gS |j                  r|j                  r*t	        j
                  d|›d|›d�|j                  d¬«      gS g S # t        $ r t        |||d¬«      cY S w xY w)Nr­   rÏ   z,', which is not contained in 'list_display'.z
admin.E122rj   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.E121rk   )rm   rn   ro   r"  r
   r9   rv   r.  ÚeditableÚprimary_keyr   ry   r…   s        r   rI  z*ModelAdminChecks._check_list_editable_itemd  so  € ð3	Ø—I‘I—O‘O×-Ñ-¨jÓ9ˆEð  ×!1Ñ!1Ñ1ä—L’Lâ:?ÂðMàŸM™MØ'ô	ðð ð ×'Ò'¨J¸#×:PÑ:PÑ,Pä—L‘Lð0Ø2<ñ=àŸM™MØ'ô	ðð ð × Ñ  Ñ# zÒ1Ø×.Ò.Ø×*Ñ*Ð6ô —L’Lò #(¨×)9Ñ)9¸!Ó)<ð>ð  ŸM™MØ'ôðð ð —^’^ u×'8Ò'8ä—L’Lâ05²zðCàŸM™MØ'ô	ðð ð �	øôc !ò 	Ü)Ø ¨°C¸Lôò ð	ús   ‚%E ÅEÅEc                 ód   — t        |j                  t        t        f«      st	        dd|d¬«      S g S )z"Check search_fields is a sequence.r[   ru   z
admin.E126r]   )r;   ru   r`   ra   rb   r‚   s     r   r  z%ModelAdminChecks._check_search_fieldsš  s5   € ô ˜#×+Ñ+¬d´E¨]Ô;ÜØ!¨/¸sÀ|ôð ð ˆIr.   c                 ó6  — |j                   €g S 	 t        |j                  |j                   «      d   }|j                  «       dvrt	        dd|d¬«      S g S # t
        t        f$ r3 t        j                  d|j                   z  |j                  d¬	«      gcY S w xY w)
z?Check that date_hierarchy refers to DateField or DateTimeField.r&  >   Ú	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.E127rj   )
rP  r	   rm   Úget_internal_typerb   r   r   r
   r9   rv   )rX   r_   rl   s      r   r  z&ModelAdminChecks._check_date_hierarchy¤  s´   € ð ×ÑÐ%ØˆIðÜ,¨S¯Y©Y¸×8JÑ8JÓKÈBÑO�ð ×*Ñ*Ó,Ð4RÑRÜ"Ø6Ø/ØØ'ô	ð ð �Iøô% %Ô&7Ð8ò ä—L‘Lð5Ø7:×7IÑ7IñJàŸM™MØ'ô	ðò ðús   �#A Á?BÂBc                 ó\  — g }|j                  «       }|D ]Ž  \  }}}t        |d«      sŒ|j                  D ]l  }d|z  }t        ||«      rŒ|j                  t	        j
                  |j                  j                  ›d|›d|j                  ›d�|j                  d¬«      «       Œn Œ� t        j                  d„ |D «       «      }	|	j                  «       D ]W  \  }}
|
d	kD  sŒ|j                  t	        j
                  d
|j                  j                  ›d|›d�|j                  d¬«      «       ŒY |S )NÚallowed_permissionszhas_%s_permissionz must define a z() method for the z action.z
admin.E129rj   c              3   ó(   K  — | ]
  \  }}}|–— Œ y ­wr2   rö   )r4   Ú_r„   s      r   r5   z2ModelAdminChecks._check_actions.<locals>.<genexpr>Ù  s   è ø€ Ò#C©Z¨Q°°a¤DÑ#Cùs   ‚rˆ   z*__name__ attributes of actions defined in z must be unique. Name z is not unique.z
admin.E130)Ú_get_base_actionsrû   rS  r8   r
   r9   rv   rw   r�   r‘   r’   )rX   r_   r+   ÚactionsÚfuncr„   rU  Ú
permissionÚmethod_nameÚnamesr˜   s              r   r  zModelAdminChecks._check_actionsÀ  s  € ØˆØ×'Ñ'Ó)ˆð %ò 	‰MˆD�$˜Ü˜4Ð!6Ô7ØØ"×6Ñ6ò �
Ø1°JÑ>�Ü˜s KÕ0Ø—M‘MÜŸ™ð !$§¡× 6Ó 6Ú +Ø $§£ð	ð !$§¡Ø+ô	õñð	ô& ×#Ñ#Ñ#C¸7Ô#CÓCˆØ Ÿ;™;›=ò 	‰KˆD�%Ø�q‹yØ—‘Ü—L’Lð  ŸM™M×2Ó2Ú ð	ð  ŸM™MØ'ô	õð	ð ˆr.   )rw   rü   rý   r(   r  r  r  r  r  r$  r  r0  r  r7  r  r	  r
  r  rI  r  r  r  Ú__classcell__©rv   s   @r   rÿ   rÿ   6  sf   ø„ ô
ò$òòò$=òLò$òLò2òò9òvòòòò$4òlòö8(r.   rÿ   c                   óF   ‡ — e Zd Zˆ fd„Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	ˆ xZ
S )ÚInlineModelAdminChecksc                 ó  •— |j                   }g t        ‰| �	  |«      ¢| j                  ||«      ¢| j	                  ||«      ¢| j                  |«      ¢| j                  |«      ¢| j                  |«      ¢| j                  |«      ¢S r2   )	Úparent_modelr  r(   Ú_check_relationÚ_check_exclude_of_parent_modelÚ_check_extraÚ_check_max_numÚ_check_min_numÚ_check_formset)rX   Ú
inline_objr*   ra  rv   s       €r   r(   zInlineModelAdminChecks.checkì  s©   ø€ Ø!×.Ñ.ˆð
Ü‰W‰]˜:Ó&ð
à×!Ñ! *¨lÓ;ð
ð ×0Ñ0°¸\ÓJð
ð ×Ñ˜zÓ*ð	
ð
 × Ñ  Ó,ð
ð × Ñ  Ó,ð
ð × Ñ  Ó,ð
ð 	
r.   c                 óv  •— t         ‰| �  |«      }|rg S | j                  ||«      rg S |j                  €g S t	        ||j
                  |j                  ¬«      }|j                  |j                  v rHt        j                  d|j                  ›d|j                  j                  ›d�|j                  d¬«      gS g S )N©Úfk_namezCannot exclude the field 'z6', because it is the foreign key to the parent model 'rú   z
admin.E201rj   )r  rO   rb  r¶   r   rm   rk  r„   r
   r9   rn   rz   rv   )rX   r_   ra  r+   Úfkrv   s        €r   rc  z5InlineModelAdminChecks._check_exclude_of_parent_modelø  s®   ø€ ô ‘Ñ'¨Ó,ˆÙØˆIð ×Ñ  \Ô2ØˆIà�;‰;ÐØˆIä˜l¨C¯I©I¸s¿{¹{ÔKˆØ�7‰7�c—k‘kÑ!ä—’ð Ÿ›Ø$×*Ñ*×0Ó0ð	ð Ÿ™Ø#ô	ðð ð ˆIr.   c                 óØ   — 	 t        ||j                  |j                  ¬«       g S # t        $ r:}t	        j
                  |j                  d   |j                  d¬«      gcY d }~S d }~ww xY w)Nrj  r   z
admin.E202rj   )r   rm   rk  Ú
ValueErrorr
   r9   Úargsrv   )rX   r_   ra  Úes       r   rb  z&InlineModelAdminChecks._check_relation  sX   € ð	Ü˜\¨3¯9©9¸c¿k¹kÕJð ˆIøô ò 	QÜ—L‘L §¡¨¡°·±À,ÔOÐPÕPûð	Qús   ‚"& ¦	A)¯/A$ÁA)Á$A)c                 óX   — t        |j                  t        «      st        dd|d¬«      S g S )zCheck that extra is an integer.rA  Úextraz
admin.E203r]   )r;   rr  rC  rb   r‚   s     r   rd  z#InlineModelAdminChecks._check_extra  s(   € ô ˜#Ÿ)™)¤SÔ)Ü˜<°¸SÀ\ÔRÐRàˆIr.   c                 ót   — |j                   €g S t        |j                   t        «      st        dd|d¬«      S g S )z!Check that max_num is an integer.rA  Úmax_numz
admin.E204r]   )rt  r;   rC  rb   r‚   s     r   re  z%InlineModelAdminChecks._check_max_num'  ó7   € ð �;‰;ÐØˆIÜ˜CŸK™K¬Ô-Ü˜<°	¸sÀ|ÔTÐTàˆIr.   c                 ót   — |j                   €g S t        |j                   t        «      st        dd|d¬«      S g S )z!Check that min_num is an integer.rA  Úmin_numz
admin.E205r]   )rw  r;   rC  rb   r‚   s     r   rf  z%InlineModelAdminChecks._check_min_num1  ru  r.   c                 óX   — t        |j                  t        «      st        dd|d¬«      S g S )z0Check formset is a subclass of BaseModelFormSet.r   Úformsetz
admin.E206r¹   )r   ry  r   r»   r‚   s     r   rg  z%InlineModelAdminChecks._check_formset;  s0   € ô ˜3Ÿ;™;Ô(8Ô9Ü$Ø)°)ÀÈôð ð ˆIr.   )rw   rü   rý   r(   rc  rb  rd  re  rf  rg  r\  r]  s   @r   r_  r_  ë  s&   ø„ ô

ôò>òòòör.   r_  c                 óV   — t        j                  d|›d| ›d�|j                  |¬«      gS )Nr­   z
' must be r  rj   ©r
   r9   rv   )rx   r^   r_   r0   s       r   rb   rb   F  s*   € ä�ŠÚ/5²tÐ<Ø—‘Øô	
ðð r.   c                 óV   — t        j                  d|›d| ›d�|j                  |¬«      gS )Nr­   z' must inherit from 'rú   rj   r{  r¹   s       r   r»   r»   P  s*   € ä�ŠÚ;AÂ6ÐJØ—‘Øô	
ðð r.   c           	      ó˜   — t        j                  d|›d| ›d|j                  j                  j                  ›d�|j
                  |¬«      gS )Nr­   rÏ   z', which is not a field of 'rú   rj   )r
   r9   rm   rn   rz   rv   rk   s       r   ry   ry   Z  s<   € ä�Šâ’u˜cŸi™iŸo™o×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-   rG   rI   rÿ   r_  rb   r»   ry   rö   r.   r   ú<module>rŒ     sŠ   ðÛ Ý å Ý  Ý 9ß VÑ VÝ Ý 4Ý Ý 1Ý 3ß QÑ QÝ #Ý ;Ý 5òòò"òv÷rB
ñ B
ôJrÐ+ô rôjXÐ1ô Xòvòór.   