ó
    ½Rj ã                   ó:  • S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
  S SKJr  S SK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JrJrJrJrJrJr  S S
KJr  S SK J!r!J"r"  S SK#J$r$  S SK%J&r&  S SK'J(r(  S SK)J*r*J+r+  S SK,J-r-  S SK.J/r/J0r0  S SK1J2r2  S SK3J4r4  S SK5J6r6  S SK7J8r8J9r9  S SK:J;r;  S SK<J=r=J>r>J?r?J@r@  S SKAJBrB  S SKCJDrD  S SKEJFrFJGrG  S SKHJIrI  S SKJJKrKJLrL  S SKMJNrNJOrO  S SKPJQrQ  S SKRJSrSJTrTJUrUJVrVJWrW  S S KXJYrYJZrZ  S S!K[J\r\  S S"K]J^r^  S S#K_J`r`  \RÂ                  " S$5      rbS%rcS& rdS' re " S( S)\S5      rf " S* S+5      rg " S, S-\g5      rh " S. S/\i5      rj " S0 S15      rk " S2 S35      rl " S4 S5\RÚ                  5      rn " S6 S7\n5      roSQS8 jrp " S9 S:5      rq " S; S<\o5      rm " S= S>5      rrS? rsS@ rtSA ruSB rv " SC SD\95      rw " SE SF\/5      rx " SG SH\x5      ry " SI SJ\x5      rz " SK SL\Rö                  5      r| " SM SN\o5      r} " SO SP5      r~g)Ré    N)ÚCounter)Úcontextmanager)ÚcopyÚdeepcopy)Úget_close_matches©Úwraps)Ú_DebugResult)Ú	safe_repr)Ú	parse_qslÚunquoteÚ	urlencodeÚurljoinÚurlparseÚurlsplitÚ
urlunparse)Úurl2pathname)Úasync_to_syncÚiscoroutinefunction)Úapps)Úsettings)Úmail)ÚImproperlyConfiguredÚValidationError)Úlocks)ÚWSGIHandlerÚget_path_info)Úcall_command)Úno_style)Úemit_post_migrate_signal)ÚThreadedWSGIServerÚWSGIRequestHandler)Úsetting_changed)ÚDEFAULT_DB_ALIASÚ
connectionÚconnectionsÚtransaction)Ú	CharField)Ú	QueryDict)Úsplit_domain_portÚvalidate_host)ÚHttpResponseBase)ÚAsyncClientÚClient)ÚHTMLParseErrorÚ
parse_html)Útemplate_rendered)ÚCaptureQueriesContextÚContextListÚcompare_xmlÚmodify_settingsÚoverride_settings)ÚRemovedInDjango50WarningÚRemovedInDjango51Warning)Úclassproperty)ÚPY310)Úservezdjango.test)ÚTestCaseÚTransactionTestCaseÚSimpleTestCaseÚskipIfDBFeatureÚskipUnlessDBFeaturec                 ó6   • [        U [        5      (       d  U /n U $ )z.Put value into a list if it's not already one.)Ú
isinstanceÚlist)Úvalues    ÚAD:\diplom_project\venv\Lib\site-packages\django/test/testcases.pyÚto_listrF   H   s   € ä�eœT×"Ñ"Ø�ˆØ€Ló    c                 ó    •  [        U5      nU$ ! [         a4  nU< SU< 3nU R                  U R                  X&5      5         S nAW$ S nAff = f)NÚ
)r0   r/   ÚfailÚ_formatMessage)ÚselfÚhtmlÚuser_msgÚmsgÚdomÚeÚstandardMsgs          rE   Úassert_and_parse_htmlrS   O   sS   € ð>Ü˜Óˆð €Jøô ó >Û"%¢qÐ)ˆØ�	‰	�$×%Ñ% hÓ<×=Ð=Ø€Jûð>ús   ‚ �
A™)AÁAc                   ó4   ^ • \ rS rSrU 4S jrU 4S jrSrU =r$ )Ú_AssertNumQueriesContextéX   c                 ó<   >• Xl         X l        [        TU ]  U5        g ©N)Ú	test_caseÚnumÚsuperÚ__init__)rL   rY   rZ   r%   Ú	__class__s       €rE   r\   Ú!_AssertNumQueriesContext.__init__Y   s   ø€ Ø"ŒØŒÜ‰Ñ˜Õ$rG   c                 ó  >• [         TU ]  XU5        Ub  g [        U 5      nU R                  R	                  UU R
                  SUU R
                  SR                  S [        U R                  SS9 5       5      4-  5        g )Nz:%d queries executed, %d expected
Captured queries were:
%srI   c              3   ó8   #   • U  H  u  pS XS   4-  v •  M     g7f)z%d. %sÚsqlN© )Ú.0ÚiÚquerys      rE   Ú	<genexpr>Ú4_AssertNumQueriesContext.__exit__.<locals>.<genexpr>j   s%   é € ð â$M™˜ð  ¨¡<Ð0Ö0Ú$Mùs   ‚é   )Ústart)	r[   Ú__exit__ÚlenrY   ÚassertEqualrZ   ÚjoinÚ	enumerateÚcaptured_queries)rL   Úexc_typeÚ	exc_valueÚ	tracebackÚexecutedr]   s        €rE   rj   Ú!_AssertNumQueriesContext.__exit__^   s}   ø€ Ü‰Ñ˜¨iÔ8ØÑØÜ�t“9ˆØ�‰×"Ñ"ØØ�H‰HØJàØ—‘Ø—	‘	ñ ä$-¨d×.CÑ.CÈ1Ò$Móó ðñõ	
rG   )rZ   rY   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r\   rj   Ú__static_attributes__Ú__classcell__©r]   s   @rE   rU   rU   X   s   ø† õ%÷

ó 
rG   rU   c                   ó6   • \ rS rSrS	S jrS rS rS rS rSr	g)
Ú_AssertTemplateUsedContextér   Nc                 ón   • Xl         X l        X0l        X@l        / U l        / U l        [        5       U l        g rX   )rY   Útemplate_nameÚ
msg_prefixÚcountÚrendered_templatesÚrendered_template_namesr3   Úcontext)rL   rY   r€   r�   r‚   s        rE   r\   Ú#_AssertTemplateUsedContext.__init__s   s0   € Ø"ŒØ*ÔØ$ŒØŒ
à"$ˆÔØ')ˆÔ$Ü"“}ˆ�rG   c                 óÌ   • U R                   R                  U5        U R                  R                  UR                  5        U R                  R                  [        U5      5        g rX   )rƒ   Úappendr„   Únamer…   r   )rL   ÚsenderÚsignalÚtemplater…   Úkwargss         rE   Úon_template_renderÚ-_AssertTemplateUsedContext.on_template_render}   sD   € Ø×Ñ×&Ñ& xÔ0Ø×$Ñ$×+Ñ+¨H¯M©MÔ:Ø�‰×ÑœD ›MÕ*rG   c                 ó�   • U R                   R                  U R                  U R                  U R                  U R
                  5        g rX   )rY   Ú_assert_template_usedr€   r„   r�   r‚   ©rL   s    rE   ÚtestÚ_AssertTemplateUsedContext.test‚   s4   € Ø�‰×,Ñ,Ø×ÑØ×(Ñ(Ø�O‰OØ�J‰Jõ		
rG   c                 óF   • [         R                  " U R                  5        U $ rX   )r1   ÚconnectrŽ   r’   s    rE   Ú	__enter__Ú$_AssertTemplateUsedContext.__enter__Š   s   € Ü×!Ò! $×"9Ñ"9Ô:ØˆrG   c                 ól   • [         R                  " U R                  5        Ub  g U R                  5         g rX   )r1   Ú
disconnectrŽ   r“   )rL   rp   rq   rr   s       rE   rj   Ú#_AssertTemplateUsedContext.__exit__Ž   s(   € Ü×$Ò$ T×%<Ñ%<Ô=ØÑØØ�	‰	�rG   )r…   r‚   r�   r„   rƒ   r€   rY   )Ú N)
ru   rv   rw   rx   r\   rŽ   r“   r—   rj   ry   rb   rG   rE   r}   r}   r   s   † ô%ò+ò

òõrG   r}   c                   ó   • \ rS rSrS rSrg)Ú_AssertTemplateNotUsedContexté•   c                 óž   • U R                   R                  U R                  U R                  ;   U R                   SU R                   S35        g )Nú
Template 'z1' was used unexpectedly in rendering the response)rY   ÚassertFalser€   r„   r�   r’   s    rE   r“   Ú"_AssertTemplateNotUsedContext.test–   sI   € Ø�‰×"Ñ"Ø×Ñ $×">Ñ">Ñ>Ø�‰Ð˜z¨$×*<Ñ*<Ð)=ð >5ð 6õ	
rG   rb   N)ru   rv   rw   rx   r“   ry   rb   rG   rE   rž   rž   •   s   † õ
rG   rž   c                   ó   • \ rS rSrSrg)ÚDatabaseOperationForbiddenéž   rb   N)ru   rv   rw   rx   ry   rb   rG   rE   r¥   r¥   ž   s   † ÚrG   r¥   c                   ó    • \ rS rSrS rS rSrg)Ú_DatabaseFailureé¢   c                 ó   • Xl         X l        g rX   )ÚwrappedÚmessage)rL   r«   r¬   s      rE   r\   Ú_DatabaseFailure.__init__£   s   € ØŒØ�rG   c                 ó,   • [        U R                  5      erX   )r¥   r¬   r’   s    rE   Ú__call__Ú_DatabaseFailure.__call__§   s   € Ü(¨¯©Ó6Ð6rG   )r¬   r«   N)ru   rv   rw   rx   r\   r¯   ry   rb   rG   rE   r¨   r¨   ¢   s   † òõ7rG   r¨   c                   óN   • \ rS rSr\SS j5       r\ SS j5       r\S 5       rSr	g)Ú!_AssertFormErrorDeprecationHelperé¬   c                 óŠ  • SU< SU< S3n[         R                  " U[        SS9  U(       a  U S3OSnUR                  b  [	        UR                  5      O/ nU(       d  U R                  U S	35        S
n	[        U5       H!  u  p«X+;  a  M  Sn	U R                  X²   X4US9  M#     U	(       d  U R                  U SU S35        gg)a  
Search through all the rendered contexts of the `response` for a form named
`form` then dispatch to the new assertFormError() using that instance.
If multiple contexts contain the form, they're all checked in order and any
failure will abort (this matches the old behavior).
ztPassing response to assertFormError() is deprecated. Use the form object directly: assertFormError(response.context[ú], ú, ...)é   ©Ú
stacklevelú: rœ   Nú8Response did not use any contexts to render the responseFT)r�   z
The form 'ú%' was not used to render the response)ÚwarningsÚwarnr7   r…   rF   rJ   rn   ÚassertFormError)rL   ÚresponseÚformÚfieldÚerrorsr�   Úwarning_msgÚfull_msg_prefixÚcontextsÚ
found_formrd   r…   s               rE   r¿   Ú1_AssertFormErrorDeprecationHelper.assertFormError­   sè   € ð:Ø:>¹ÀÀUÁIÈVðUð 	ô 	�Š�kÔ#;ÈÒJæ/9˜Z˜L¨Ñ+¸rˆØ08×0@Ñ0@Ñ0L”7˜8×+Ñ+Ô,ÐRTˆÞØ�I‰IØ"Ð#ð $ð ôð
 ˆ
Ü# HÖ-‰JˆAØÓ"ÙØˆJØ× Ñ  ¡°È*Ð ÓUñ	 .ö
 Ø�I‰IØ"Ð# :¨d¨Vð 4ð õð rG   c                 ó´  • SU< SU< S3n[         R                  " U[        SS9  U(       a  U S3OSnUR                  b  [	        UR                  5      O/ n	U	(       d  U R                  U S	35        S
n
[        U	5       H6  u  p¼X,;  d  [        XÂ   S5      (       d  M  Sn
U R                  XÂ   X4XV5        M8     U
(       d  U R                  U SU S35        gg)zæ
Search for a formset named "formset" in the "response" and dispatch to
the new assertFormSetError() using that instance. If the name is found
in multiple contexts they're all checked in order and any failure will
abort the test.
z}Passing response to assertFormSetError() is deprecated. Use the formset object directly: assertFormSetError(response.context[rµ   r¶   r·   r¸   rº   rœ   Nr»   FÚformsTzThe formset 'r¼   )	r½   r¾   r7   r…   rF   rJ   rn   ÚhasattrÚassertFormSetError)rL   rÀ   ÚformsetÚ
form_indexrÂ   rÃ   r�   rÄ   rÅ   rÆ   Úfound_formsetrd   r…   s                rE   rÌ   Ú4_AssertFormErrorDeprecationHelper.assertFormSetErrorÏ   sù   € ðDØDKÁ;ÈcØ‰n˜Fð$ð 	ô
 	�Š�kÔ#;ÈÒJæ/9˜Z˜L¨Ñ+¸rˆØ08×0@Ñ0@Ñ0L”7˜8×+Ñ+Ô,ÐRTˆÞØ�I‰IØ"Ð#ð $ð ôð ˆÜ# HÖ-‰JˆAØÓ%¬W°WÑ5EÀw×-OÑ-OÙØ ˆMØ×#Ñ#ØÑ  *°Vöñ	 .ö Ø�I‰IØ"Ð# =°°	ð :ð õð rG   c                 ó4   ^ ^• [        T5      U U4S j5       nU$ )z·
Replace the decorated method with a new one that inspects the passed
args/kwargs and dispatch to the old implementation (with deprecation
warning) when it detects the old signature.
c                 óx  >• [        TT	R                  5      n[        R                  " U5      n UR                  " U /UQ70 UD6n[        R                  " T	5      n UR                  " U /UQ70 UD6nUR                  S   UR                  S   :X  d   e[        UR                  S   S5      (       a  U" U /UQ70 UD6$ [        UR                  S   [        5      (       a  [        UR                   S35      eT	" U /UQ70 UD6$ ! [
         a    T	" U /UQ70 UD6s $ f = f! [
         a    U" U /UQ70 UD6s $ f = f)Nrh   r…   úD() is only usable on responses fetched using the Django test Client.)Úgetattrru   ÚinspectÚ	signatureÚbindÚ	TypeErrorÚargsrË   rB   r,   Ú
ValueError)
rL   rÙ   r�   Ú
old_methodÚold_signatureÚold_bound_argsÚnew_signatureÚnew_bound_argsÚclsÚ
new_methods
           €€rE   Úpatched_methodÚI_AssertFormErrorDeprecationHelper.patch_signature.<locals>.patched_methodý   sq  ø€ ä   j×&9Ñ&9Ó:ˆJÜ#×-Ò-¨jÓ9ˆMð9Ø!.×!3Ò!3°DÐ!J¸4Ò!JÀ6Ñ!J�ô $×-Ò-¨jÓ9ˆMð9Ø!.×!3Ò!3°DÐ!J¸4Ò!JÀ6Ñ!J�ð "×&Ñ& qÑ)¨^×-@Ñ-@ÀÑ-CÓCÐCÐCÜØ×#Ñ# AÑ&¨	÷ñ ñ " $Ð8¨Ò8°Ñ8Ð8Ü˜N×/Ñ/°Ñ2Ô4D×EÑEÜ Ø!×*Ñ*Ð+ð ,4ð 5óð ñ
 " $Ð8¨Ò8°Ñ8Ð8øô9 ó 9ñ
 " $Ð8¨Ò8°Ñ8Ò8ð9ûô ó 9ñ " $Ð8¨Ò8°Ñ8Ò8ð9ús#   ¯D ÁD  ÄDÄDÄ D9Ä8D9r   )rà   rá   râ   s   `` rE   Úpatch_signatureÚ1_AssertFormErrorDeprecationHelper.patch_signatureõ   s%   ù€ ô 
ˆzÓ	õ!	9ó 
ð!	9ðF ÐrG   rb   N©rœ   )
ru   rv   rw   rx   Ústaticmethodr¿   rÌ   Úclassmethodrä   ry   rb   rG   rE   r²   r²   ¬   sA   † Øóó ððB àGIó#ó ð#ðJ ñ+ó ó+rG   r²   c                   ó  ^ • \ rS rSr\r\rSrSr	\
" 5       rSr/ SQr\U 4S j5       r\S 5       r\S 5       r\S 5       rS,S	 jrS
 rS-U 4S jjrS rS rS rS r    S.S jrS/S jrS r S0S jr S1S jrS rS r \!RD                  S/S j5       r#S r$\!RD                  S/S j5       r%S r&S r' S2S jr(S3S jr)\*S 5       r+S r,S  r-S! r.\/(       d
  \*S,S" j5       r0   S3S# jr1S,S$ jr2S,S% jr3S4S& jr4S,S' jr5S,S( jr6S,S) jr7S,S* jr8S+r9U =r:$ )5r>   i$  NzáDatabase %(operation)s to %(alias)r are not allowed in SimpleTestCase subclasses. Either subclass TestCase or TransactionTestCase to ensure proper test isolation or add %(alias)r to %(test)s.databases to silence this failure.))r–   r&   )Útemporary_connectionr&   )ÚcursorÚqueries)Úchunked_cursorrì   c                 ó   >• [         TU ]  5         U R                  (       aY  [        S0 U R                  D6U l        U R                  R                  5         U R                  U R                  R                  5        U R                  (       aY  [        U R                  5      U l
        U R                  R                  5         U R                  U R                  R                  5        U R                  5         U R                  U R                  5        g )Nrb   )r[   Ú
setUpClassÚ_overridden_settingsr6   Ú_cls_overridden_contextÚenableÚaddClassCleanupÚdisableÚ_modified_settingsr5   Ú_cls_modified_contextÚ_add_databases_failuresÚ_remove_databases_failures©rà   r]   s    €rE   rï   ÚSimpleTestCase.setUpClass:  sÁ   ø€ ä‰ÑÔØ×#×#Ü*;Ñ*W¸c×>VÑ>VÑ*WˆCÔ'Ø×'Ñ'×.Ñ.Ô0Ø×Ñ × ;Ñ ;× CÑ CÔDØ×!×!Ü(7¸×8NÑ8NÓ(OˆCÔ%Ø×%Ñ%×,Ñ,Ô.Ø×Ñ × 9Ñ 9× AÑ AÔBØ×#Ñ#Ô%Ø×Ñ˜C×:Ñ:Õ;rG   c                 óT  • U R                   S:X  a  [        [        5      $ U R                    He  nU[        ;  d  M  U R                  < SU R                  < SU< S3n[        U[        [        5      5      nU(       a  USUS   -  -  n[        U5      e   [        U R                   5      $ )NÚ__all__Ú.z.databases refers to z, which is not defined in settings.DATABASES.z Did you mean %r?r   )Ú	databasesÚ	frozensetr&   rv   rw   r   rC   r   )rà   Úaliasr¬   Úclose_matchess       rE   Ú_validate_databasesÚ"SimpleTestCase._validate_databasesH  s•   € à�=‰=˜IÓ%Üœ[Ó)Ð)Ø—]”]ˆEØœKÕ'ð
 ŸœØ×(Ô(Ûðð ô !2°%¼¼kÓ9JÓ K�Þ ØÐ2°]À1Ñ5EÑEÑE�GÜ*¨7Ó3Ð3ñ #ô ˜Ÿ™Ó'Ð'rG   c           
      óB  • U R                  5       U l        [         H€  nXR                  ;   a  M  [        U   nU R                   HS  u  p4U R                  U R
                  < SU R                  < 3UUS.-  n[        X#5      n[        X#[        Xe5      5        MU     M‚     g )Nrý   )r“   r   Ú	operation)
r  rþ   r&   Ú_disallowed_connection_methodsÚ_disallowed_database_msgrv   rw   rÔ   Úsetattrr¨   )rà   r   r%   r‰   r  r¬   Úmethods          rE   r÷   Ú&SimpleTestCase._add_databases_failures]  s�   € à×/Ñ/Ó1ˆŒß ˆEØŸ™Ó%ÙÜ$ UÑ+ˆJØ#&×#EÔ#E‘�Ø×6Ñ6Ø'*§~¤~°s×7GÓ7GÐHØ"Ø!*ñ:ñ �ô
 ! Ó2�Ü˜
Ô*:¸6Ó*KÖLó $Fò	 !rG   c                 ó¾   • [          HS  nXR                  ;   a  M  [         U   nU R                   H&  u  p4[        X#5      n[	        X#UR
                  5        M(     MU     g rX   )r&   rþ   r  rÔ   r  r«   )rà   r   r%   r‰   Ú_r	  s         rE   rø   Ú)SimpleTestCase._remove_databases_failuresm  sM   € ç ˆEØŸ™Ó%ÙÜ$ UÑ+ˆJØ×=Ô=‘�Ü  Ó2�Ü˜
¨&¯.©.Ö9ó >ò	 !rG   c                 ó&   • U R                  U5        g)z¬
Wrapper around default __call__ method to perform common Django test
set up. This means that user-defined Test Cases aren't required to
include a call to super().setUp().
N)Ú_setup_and_call)rL   Úresults     rE   r¯   ÚSimpleTestCase.__call__w  s   € ð 	×Ñ˜VÕ$rG   c                 ó8   • [        5       nU R                  USS9  g)z?Perform the same as __call__(), without catching the exception.T)ÚdebugN)r
   r  )rL   Údebug_results     rE   r  ÚSimpleTestCase.debug  s   € ä#“~ˆØ×Ñ˜\°ÐÒ6rG   c                 ó„  >• [        X R                  5      n[        U R                  SS5      =(       d    [        USS5      n[        U5      (       a  [	        X R                  [        U5      5        U(       d   U R                  5         U(       a  [        TU ]1  5         O[        TU ]5  U5        U(       d   U R                  5         gg! [         a0    U(       a  e UR                  U [        R                  " 5       5         gf = f! [         a0    U(       a  e UR                  U [        R                  " 5       5         gf = f)zæ
Perform the following in order: pre-setup, run test, post-teardown,
skipping pre/post hooks if test is set to be skipped.

If debug=True, reraise any errors in setup and use super().debug()
instead of __call__() to run the test.
Ú__unittest_skip__FN)rÔ   Ú_testMethodNamer]   r   r  r   Ú
_pre_setupÚ	ExceptionÚaddErrorÚsysÚexc_infor[   r  r¯   Ú_post_teardown)rL   r  r  Ú
testMethodÚskippedr]   s        €rE   r  ÚSimpleTestCase._setup_and_call„  s   ø€ ô ˜T×#7Ñ#7Ó8ˆ
Ü˜$Ÿ.™.Ð*=¸uÓE÷ 
ÌØÐ+¨UóJ
ˆô
 ˜z×*Ñ*Ü�D×.Ñ.´¸jÓ0IÔJæðØ—‘Ô!ö Ü‰G‰M�Oä‰GÑ˜VÔ$ÞðØ×#Ñ#Õ%ð øô ó ÞØØ—‘ ¤c§l¢l£nÔ5Ùð	ûô ó ÞØØ—‘ ¤c§l¢l£nÔ5Ùð	ús$   Á9C Â6D Ã7DÄDÄ7D?Ä>D?c                 ón   • U R                  5       U l        U R                  5       U l        / [        l        g)zO
Perform pre-test setup:
* Create a test client.
* Clear the mail test outbox.
N)Úclient_classÚclientÚasync_client_classÚasync_clientr   Úoutboxr’   s    rE   r  ÚSimpleTestCase._pre_setupª  s,   € ð ×'Ñ'Ó)ˆŒØ ×3Ñ3Ó5ˆÔØŒ�rG   c                 ó   • g)zPerform post-test things.Nrb   r’   s    rE   r  ÚSimpleTestCase._post_teardown´  s   € àrG   c                 ó   • [        S0 UD6$ )zo
A context manager that temporarily sets a setting and reverts to the
original value when exiting the context.
rb   )r6   ©rL   r�   s     rE   r   ÚSimpleTestCase.settings¸  s   € ô
 !Ñ* 6Ñ*Ð*rG   c                 ó   • [        S0 UD6$ )z„
A context manager that temporarily applies changes a list setting and
reverts back to the original value when exiting the context.
rb   )r5   r,  s     rE   r5   ÚSimpleTestCase.modify_settings¿  s   € ô
 Ñ( Ñ(Ð(rG   c           
      óÈ  • U(       a  US-  n[        US5      (       a«  U R                  UR                  USUR                  U4-  -   5        U R	                  UR                  S   S   UUSUR                  S   S   U4-  -   5        UR                  S   u  psU R	                  UR                  UUSUR                  U4-  -   5        GO{U R	                  UR                  UUSUR                  U4-  -   5        UR
                  n[        U5      u  p‰p«nU
R                  S	5      (       d2  [        UR                  S
   U5      n[        UR                  S
   U
5      n
U(       aâ  [        U	5      u  pÞU(       a3  [        U[        R                  5      (       d  [        SU< SU< S35      eUR                  R                   =(       d    0 nUR                  R"                  =(       d    0 nUR                  R$                  " U
['        U5      4US:H  US.UD6nU R	                  UR                  UUSU
UR                  U4-  -   5        U R)                  UUUSU< SU< S3-   5        g)zú
Assert that a response redirected to a specific URL and that the
redirect URL can be loaded.

Won't work for external links since it uses the test client to do a
request (use fetch_redirect_response=False to check such links without
fetching them).
rº   Úredirect_chainzHResponse didn't redirect as expected: Response code was %d (expected %d)r   rh   zPInitial response didn't redirect as expected: Response code was %d (expected %d)éÿÿÿÿzNResponse didn't redirect as expected: Final Response code was %d (expected %d)Ú/Ú	PATH_INFOz4The test client is unable to fetch remote URLs (got z)). If the host is served by Django, add 'zW' to ALLOWED_HOSTS. Otherwise, use assertRedirects(..., fetch_redirect_response=False).Úhttps)ÚsecureÚheaderszKCouldn't retrieve redirection page '%s': response code was %d (expected %d)zResponse redirected to 'z', expected 'Ú'N)rË   Ú
assertTruer1  Ústatus_coderl   Úurlr   Ú
startswithr   Úrequestr*   r+   r   ÚALLOWED_HOSTSrÚ   r$  Úextrar7  Úgetr)   ÚassertURLEqual)rL   rÀ   Úexpected_urlr:  Útarget_status_coder�   Úfetch_redirect_responser;  ÚschemeÚnetlocÚpathre   ÚfragmentÚdomainÚportr?  r7  Úredirect_responses                     rE   ÚassertRedirectsÚSimpleTestCase.assertRedirectsÆ  s¢  € ö" Ø˜$ÑˆJä�8Ð-×.Ñ.à�O‰OØ×'Ñ'Øð$ð ×'Ñ'¨Ð5ñ	6ñ6ôð ×ÑØ×'Ñ'¨Ñ*¨1Ñ-ØØð'ð ×*Ñ*¨1Ñ-¨aÑ0°+Ð>ñ	?ñ?ô	ð  (×6Ñ6°rÑ:ÑˆCà×ÑØ×$Ñ$Ø"Øð$ð ×'Ñ'Ð);Ð<ñ	=ñ=ö	ð ×ÑØ×$Ñ$ØØð$ð ×'Ñ'¨Ð5ñ	6ñ6ô	ð —,‘,ˆCÜ4<¸S³MÑ1ˆF˜D¨ð —?‘? 3×'Ñ'Ü˜h×.Ñ.¨{Ñ;¸SÓA�Ü˜x×/Ñ/°Ñ<¸dÓC�æ&ô  1°Ó8‘�Þ¤-°¼×8NÑ8N×"OÑ"OÝ$ó
 £ð	(óð ð !Ÿ™×-Ñ-×3°�Ø"Ÿ/™/×1Ñ1×7°R�Ø$,§O¡O×$7Ò$7ØÜ˜eÓ$ð%ð # gÑ-Ø#ñ	%ð
 ñ%Ð!ð × Ñ Ø%×1Ñ1Ø&Øð(ð Ð.×:Ñ:Ð<NÐOñ	PñPô	ð 	×ÑØØÙÛ>AÃ<ÐPñQõ	
rG   c           
      ó`   • S nU R                  U" U5      U" U5      USU< SU< S3-   5        g)zç
Assert that two URLs are the same, ignoring the order of query string
parameters except for parameters with the same name.

For example, /path/?x=1&y=2 is equal to /path/?y=2&x=1, but
/path/?a=1&a=2 isn't equal to /path/?a=2&a=1.
c           	      óŽ   • [        U 5      n [        U 5      u  pp4pV[        [        U5      5      n[	        XX4[        U5      U45      $ )z'Sort the URL's query string parameters.)Ústrr   Úsortedr   r   r   )r;  rE  rF  rG  Úparamsre   rH  Úquery_partss           rE   Ú	normalizeÚ0SimpleTestCase.assertURLEqual.<locals>.normalizeF  sH   € ä�c“(ˆCÜ<DÀS»MÑ9ˆF˜D¨%Ü ¤¨5Ó!1Ó2ˆKÜØ ¬y¸Ó/EÀxÐPóð rG   z
Expected 'z' to equal 'z'.N)rl   )rL   Úurl1Úurl2r�   rT  s        rE   rA  ÚSimpleTestCase.assertURLEqual=  s2   € ò	ð 	×ÑÙ�d‹OÙ�d‹OÙ»4ÃÐFÑFõ	
rG   c                 ó”  • [        US5      (       a;  [        UR                  5      (       a!  UR                  (       d  UR                  5         U(       a  US-  nU R	                  UR
                  UUSUR
                  U4-  -   5        UR                  (       a  SR                  UR                  5      nOUR                  n[        U[        5      (       a  U(       a,  [        U5      nUR                  UR                  5      nSU-  nO[        U5      nU(       a  [!        XS S5      n[!        XS S5      nUR#                  U5      nXxU4$ )NÚrenderrº   z=Couldn't retrieve content: Response code was %d (expected %d)rG   z'%s'z%Response's content is not valid HTML:ú"Second argument is not valid HTML:)rË   ÚcallablerZ  Úis_renderedrl   r:  Ú	streamingrm   Ústreaming_contentÚcontentrB   ÚbytesrP  ÚdecodeÚcharsetÚreprrS   r‚   )	rL   rÀ   Útextr:  r�   rM   r`  Ú	text_reprÚ
real_counts	            rE   Ú_assert_containsÚSimpleTestCase._assert_containsU  s(  € ô �H˜h×'Ñ'Ü˜Ÿ™×)Ñ)Ø×(×(à�O‰OÔæØ˜$ÑˆJà×ÑØ× Ñ ØØð Ø (× 4Ñ 4°kÐBñCñ Cô	
ð ××Ø—h‘h˜x×9Ñ9Ó:‰Gà×&Ñ&ˆGÜ˜$¤×&Ñ&®$Ü�t“9ˆDØ—n‘n X×%5Ñ%5Ó6ˆGØ ™‰Iä˜T›
ˆIÞÜ+Ø˜tÐ%LóˆGô )Ø˜DÐ"FóˆDð —]‘] 4Ó(ˆ
Ø zÐ2Ð2rG   c           	      ó¤   • U R                  XXEU5      u  pxnUb  U R                  UUUSX‡U4-  -   5        gU R                  US:g  USU-  -   5        g)a?  
Assert that a response indicates that some content was retrieved
successfully, (i.e., the HTTP status code was as expected) and that
``text`` occurs ``count`` times in the content of the response.
If ``count`` is None, the count doesn't matter - the assertion is true
if the text occurs at least once in the response.
Nz2Found %d instances of %s in response (expected %d)r   zCouldn't find %s in response)rh  rl   r9  )	rL   rÀ   re  r‚   r:  r�   rM   rf  rg  s	            rE   ÚassertContainsÚSimpleTestCase.assertContains}  sv   € ð -1×,AÑ,AØ˜K°Tó-
Ñ)ˆ	˜zð ÑØ×ÑØØØØFØ¨%Ð0ñ1ñ1õð �O‰OØ˜a‘ Ð.LÈyÑ.XÑ!XõrG   c                 ób   • U R                  XX4U5      u  pgnU R                  USUSU-  -   5        g)z½
Assert that a response indicates that some content was retrieved
successfully, (i.e., the HTTP status code was as expected) and that
``text`` doesn't occur in the content of the response.
r   zResponse should not contain %sN)rh  rl   )rL   rÀ   re  r:  r�   rM   rf  rg  s           rE   ÚassertNotContainsÚ SimpleTestCase.assertNotContains˜  sB   € ð -1×,AÑ,AØ˜K°Tó-
Ñ)ˆ	˜zð 	×ÑØ˜˜:Ð(HÈ9Ñ(TÑTõ	
rG   c                 ó@   • [        X5      (       d  [        U S35      eg)zO
Raise a ValueError if the given response doesn't have the required
attribute.
rÓ   N)rË   rÚ   )rL   rÀ   Ú	attributeÚmethod_names       rE   Ú_check_test_client_responseÚ*SimpleTestCase._check_test_client_response¨  s0   € ô
 �x×+Ñ+ÜØ�-ð  *ð *óð ð ,rG   c                 óV  • UR                   (       d  U R                  U SU S35        Ub*  X!R                  ;  a  U R                  U SU SU< S35        Uc  UR                  5       nSU S3nO&UR                  R                  U/ 5      nSU< SU S3nU R                  XcXG-   5        g )	NzThe ú- is not bound, it will never have any errors.z does not contain the field rý   zThe non-field errors of ú don't match.zThe errors of field z on )Úis_boundrJ   ÚfieldsÚnon_field_errorsrÃ   r@  rl   )rL   rÁ   rÂ   rÃ   r�   Ú	form_reprÚfield_errorsÚfailure_messages           rE   Ú_assert_form_errorÚ!SimpleTestCase._assert_form_error³  sÂ   € Ø�}�}Ø�I‰IØ�,˜d 9 +ð .ð ôð
 Ñ ¯k©kÓ!9Ø�I‰IØ�,˜d 9 +Ð-IÈ%ÉÐRSÐTôð ‰=Ø×0Ñ0Ó2ˆLØ 8¸¸À=ÐQ‰OàŸ;™;Ÿ?™?¨5°"Ó5ˆLà& u¡i¨t°I°;¸mÐLð ð 	×Ñ˜¨zÑ/KÕLrG   c                 óž   • Uc  [         R                  " S[        SS9  / nU(       a  US-  n[        U5      nU R	                  XX4SU< 35        g)a  
Assert that a field named "field" on the given form object has specific
errors.

errors can be either a single error message or a list of errors
messages. Using errors=[] test that the field has no errors.

You can pass field=None to check the form's non-field errors.
NzNPassing errors=None to assertFormError() is deprecated, use errors=[] instead.r·   r¸   rº   úform )r½   r¾   r7   rF   r~  )rL   rÁ   rÂ   rÃ   r�   s        rE   r¿   ÚSimpleTestCase.assertFormErrorË  sV   € ð ‰>Ü�MŠMð%ä(Øò	ð ˆFæØ˜$ÑˆJÜ˜“ˆØ×Ñ ¨VÀ5ÈÉÐAQÕRrG   c                 óZ   • [         R                  " S[        SS9  U R                  " U0 UD6$ )NzDassertFormsetError() is deprecated in favor of assertFormSetError().r·   ©Úcategoryr¹   )r½   r¾   r8   rÌ   ©rL   rÙ   Úkws      rE   ÚassertFormsetErrorÚ!SimpleTestCase.assertFormsetErrorå  s/   € Ü�ŠØRÜ-Øò	
ð
 ×&Ò&¨Ð3°Ñ3Ð3rG   c           
      ó.  • Uc  [         R                  " S[        SS9  / nUc  Ub  [        S5      eU(       a  US-  n[	        U5      nUR
                  (       d  U R                  U SU< S35        UbK  X!R                  5       :¼  a8  UR                  5       nUS	:”  a  S
OSnU R                  U SU< SU SU S35        Ub*  SU SU< 3nU R                  UR                  U   X4XX5        gSU< S3n	U R                  UR                  5       XEU	-   5        g)a  
Similar to assertFormError() but for formsets.

Use form_index=None to check the formset's non-form errors (in that
case, you must also use field=None).
Otherwise use an integer to check the formset's n-th form for errors.

Other parameters are the same as assertFormError().
NzQPassing errors=None to assertFormSetError() is deprecated, use errors=[] instead.r·   r¸   z-You must use field=None with form_index=None.rº   zThe formset rv  rh   rÊ   rÁ   z
 only has Ú rý   r�  z of formset zThe non-form errors of formset rw  )r½   r¾   r7   rÚ   rF   rx  rJ   Útotal_form_countr~  rÊ   rl   Únon_form_errors)
rL   rÍ   rÎ   rÂ   rÃ   r�   Ú
form_countÚform_or_formsr{  r}  s
             rE   rÌ   Ú!SimpleTestCase.assertFormSetErrorï  sD  € ð ‰>Ü�MŠMð)ä(Øò	ð ˆFàÑ %Ñ"3ÜÐLÓMÐMæØ˜$ÑˆJÜ˜“ˆà××Ø�I‰IØ�,˜l¨7©+ð 6ð ôð Ñ! j×4LÑ4LÓ4NÓ&NØ ×1Ñ1Ó3ˆJØ'1°A£~™G¸6ˆMØ�I‰IØ�,˜l¨7©+°ZÀ
¸|È1Ø �/ ð$ôð Ñ!Ø 
˜|¨<¸±{ÐCˆIØ×#Ñ#Ø—‘˜jÑ)¨5¸*õð !@À¹{È-ÐXˆOØ×ÑØ×'Ñ'Ó)¨6ÀÑ3OõrG   c                 ó>  • Uc  Uc  [        S5      eU(       a  US-  nUb  Ub  U R                  USU5        [        US5      (       a
  Uc  U(       a  U(       a  UnS nUS U4$ UR                   Vs/ s H  oUR                  c  M  UR                  PM     nnS Xc4$ s  snf )Nz7response and/or template_name argument must be providedrº   Ú	templates)rØ   rs  rË   r’  r‰   )rL   rÀ   r€   r�   rr  ÚtÚtemplate_namess          rE   Ú_get_template_usedÚ!SimpleTestCase._get_template_used!  s¨   € ØÑ Ñ 5ÜÐUÓVÐVæØ˜$ÑˆJàÑ$¨Ñ)=Ø×,Ñ,¨X°{ÀKÔPä�x ×-Ñ-°(Ñ2BÆ}ÞØ (�Ø�à  $¨
Ð2Ð2à*2×*<Ò*<ÓSÒ*< QÇÁ›&˜!Ÿ&œ&Ñ*<ˆÐSØ�^Ð/Ð/ùò Ts   Á0BÂBc                 ó  • U(       d  U R                  US-   5        U R                  X;   USU< SSR                  U5      < 3-   5        Ub:  U R                  UR	                  U5      UUSXUR	                  U5      4-  -   5        g g )Nz(No templates used to render the responser¡   zK' was not a template used to render the response. Actual template(s) used: ú, zZTemplate '%s' was expected to be rendered %d time(s) but was actually rendered %d time(s).)rJ   r9  rm   rl   r‚   )rL   r€   r”  r�   r‚   s        rE   r‘   Ú$SimpleTestCase._assert_template_used5  s˜   € ÞØ�I‰I�jÐ#MÑMÔNØ�‰ØÑ+Ùã˜dŸi™i¨Õ7ð9ñ 9ô	
ð ÑØ×ÑØ×$Ñ$ ]Ó3ØØð @à ¨×)=Ñ)=¸mÓ)LÐMñNñ Nõð rG   c                 ó|   • U R                  UUUS5      u  pVnU(       a  [        XX45      $ U R                  X&X45        g)zu
Assert that the template with the provided name was used in rendering
the response. Also usable as context manager.
ÚassertTemplateUsedN)r•  r}   r‘   )rL   rÀ   r€   r�   r‚   Úcontext_mgr_templater”  s          rE   r›  Ú!SimpleTestCase.assertTemplateUsedH  sP   € ð <@×;RÑ;RØØØØ ó	<
Ñ8Ð¨jö  ä-Ø¨Jóð ð 	×"Ñ" =À*ÕTrG   c                 óŒ   • U R                  UUUS5      u  pEnU(       a  [        XU5      $ U R                  X%;   USU-  -   5        g)zy
Assert that the template with the provided name was NOT used in
rendering the response. Also usable as context manager.
ÚassertTemplateNotUsedz=Template '%s' was used unexpectedly in rendering the responseN)r•  rž   r¢   )rL   rÀ   r€   r�   rœ  r”  s         rE   rŸ  Ú$SimpleTestCase.assertTemplateNotUsed]  s`   € ð
 <@×;RÑ;RØØØØ#ó	<
Ñ8Ð¨jö  ä0°ÈZÓXÐXà×ÑØÑ+ØØMØññõ	
rG   c           	   #   ó¢   #   • U" U5       nUv •  S S S 5        U R                  U[        [        WU5      5      5        g ! , (       d  f       N4= f7frX   )ÚassertInrP  rÔ   )rL   ÚfuncÚcm_attrÚexpected_exceptionÚexpected_messageÚcms         rE   Ú_assert_raises_or_warns_cmÚ)SimpleTestCase._assert_raises_or_warns_cms  s?   é € ñ Ð$Ô%¨ØŠH÷ &à�‰Ð&¬¬G°B¸Ó,@Ó(AÕB÷ &Õ%üs   ‚	A‹>�.A¾
AÁAc                 ó’   • S nU(       a  UtpuU R                  XX45      nUc  U$ U   U" U0 UD6  S S S 5        g ! , (       d  f       g = frX   )r¨  )	rL   r£  r¤  r¥  r¦  rÙ   r�   Úcallable_objr§  s	            rE   Ú_assertFooMessageÚ SimpleTestCase._assertFooMessage{  sQ   € ð ˆÞØ"&ÐˆLØ×,Ñ,ØÐ-ó
ˆð ÑØˆIâÙ˜$Ð) &Ò)÷ �RŽRús	   ¦	8¸
Ac                 óH   • U R                   " U R                  SUU/UQ70 UD6$ )a#  
Assert that expected_message is found in the message of a raised
exception.

Args:
    expected_exception: Exception class expected to be raised.
    expected_message: expected error message string value.
    args: Function to be called and extra positional args.
    kwargs: Extra kwargs.
Ú	exception)r¬  ÚassertRaises)rL   r¥  r¦  rÙ   r�   s        rE   ÚassertRaisesMessageÚ"SimpleTestCase.assertRaisesMessage‹  s=   € ð ×%Ò%Ø×ÑØØØð	
ð
 ò
ð ñ
ð 	
rG   c                 óH   • U R                   " U R                  SUU/UQ70 UD6$ )zN
Same as assertRaisesMessage but for assertWarns() instead of
assertRaises().
Úwarning)r¬  ÚassertWarns)rL   Úexpected_warningr¦  rÙ   r�   s        rE   ÚassertWarnsMessageÚ!SimpleTestCase.assertWarnsMessage¡  s=   € ð
 ×%Ò%Ø×ÑØØØð	
ð
 ò
ð ñ
ð 	
rG   c              #   óv  #   • [        U[        5      (       a  [        R                  " U5      nOUc  Sn U R	                  X5       nSv •  SSS5        U R                  SWR                  < 35        g! , (       d  f       N.= f! [         a(  nUR                  S   nSU SU 3nXV:w  a  Ue SnAgSnAff = f7f)zM
Assert no messages are logged on the logger, with at least the
given level.
NÚINFOzUnexpected logs found: r   zno logs of level z or higher triggered on )	rB   ÚintÚloggingÚgetLevelNameÚ
assertLogsrJ   ÚoutputÚAssertionErrorrÙ   )rL   ÚloggerÚlevelr§  rQ   rO   Úexpected_msgs          rE   ÚassertNoLogsÚSimpleTestCase.assertNoLogs²  s°   é € ô ˜%¤×%Ñ%Ü×,Ò,¨UÓ3‘Ø‘Ø�ðCØ—_‘_ VÔ3°rÛ÷ 4ð —	‘	Ð3°B·I±I±=ÐAÕB÷ 4Õ3ûä!ó Ø—f‘f˜Q‘i�à'¨ wÐ.FÀvÀhÐOð ð Ó&Ø�Gô 'ûðüsF   ‚2B9µB ÁA3ÁB Á B9Á3
BÁ=B Â
B6ÂB1Â,B9Â1B6Â6B9c                 ó   • Uc  / nUc  0 nU" U0 UD6nU" U0 0 UESS0ED6nUR                  5        HG  u  pšU R                  UR                  U	5      U
5        U R                  UR                  U	5      U
5        MI     UR                  5        H¯  u  p›U R                  [        5       nUR                  U	5        SSS5        U R                  WR
                  R                  U5        U R                  [        5       nUR                  U	5        SSS5        U R                  UR
                  R                  U5        M±     UR                  S   /nUR                   Hy  nU R                  [        5       nUR                  U5        SSS5        U R                  WR
                  R                  U5        U R                  UR                  U5      U5        M{     [        U[        5      (       a-  UR                  SSS.5        U R                  U" U0 UD6U5        gg! , (       d  f       GNj= f! , (       d  f       GN'= f! , (       d  f       NÀ= f)a÷  
Assert that a form field behaves correctly with various inputs.

Args:
    fieldclass: the class of the field to be tested.
    valid: a dictionary mapping valid inputs to their expected
            cleaned values.
    invalid: a dictionary mapping invalid inputs to one or more
            raised error messages.
    field_args: the args passed to instantiate the field
    field_kwargs: the kwargs passed to instantiate the field
    empty_value: the expected clean output for inputs in empty_values
NÚrequiredFr·   é   )Ú
min_lengthÚ
max_length)Úitemsrl   Úcleanr°  r   r¯  ÚmessagesÚerror_messagesÚempty_valuesÚ
issubclassr(   ÚupdateÚassertIsInstance)rL   Ú
fieldclassÚvalidÚinvalidÚ
field_argsÚfield_kwargsÚempty_valuerÇ  ÚoptionalÚinputr¿  rÃ   Úcontext_managerÚerror_requiredrQ   s                  rE   ÚassertFieldOutputÚ SimpleTestCase.assertFieldOutputÉ  sî  € ð, ÑØˆJØÑØˆLÙ˜zÐ:¨\Ñ:ˆÙ˜zÐQÐ-P°Ð-P¸jÈ%Ñ-PÑQˆà"Ÿ[™[ž]‰MˆEØ×Ñ˜XŸ^™^¨EÓ2°FÔ;Ø×Ñ˜XŸ^™^¨EÓ2°FÖ;ñ +ð %Ÿ]™]ž_‰MˆEØ×"Ñ"¤?Ô3°Ø—‘˜uÔ%÷ 4à×Ñ˜_×6Ñ6×?Ñ?ÀÔHà×"Ñ"¤?Ô3°Ø—‘˜uÔ%÷ 4à×Ñ˜_×6Ñ6×?Ñ?ÀÖHñ -ð #×1Ñ1°*Ñ=Ð>ˆØ×&Ô&ˆAØ×"Ñ"¤?Ô3°Ø—‘˜qÔ!÷ 4à×Ñ˜_×6Ñ6×?Ñ?ÀÔPØ×Ñ˜XŸ^™^¨AÓ.°Ö<ñ	 'ô �j¤)×,Ñ,Ø×Ñ¨qÀÑ CÔDØ×!Ñ!¡*¨jÐ"I¸LÑ"IÈ:ÕVð -÷ 4Ö3ú÷ 4Ö3ú÷ 4Õ3ús$   Â&HÃ;H-Å3H?È
H*	È-
H<	È?
I	c           	      óŽ  • [        XUS5      n[        XUS5      nXE:w  a¦  [        US5      < S[        US5      < 3nSSR                  [        R                  " [        U5      R                  5       [        U5      R                  5       5      5      -   nU R                  Xg5      nU R                  U R                  X65      5        gg)z¬
Assert that two HTML snippets are semantically the same.
Whitespace in most cases is ignored, and attribute ordering is not
significant. The arguments must be valid HTML.
ú!First argument is not valid HTML:r[  Tú != rI   N)
rS   r   rm   ÚdifflibÚndiffrP  Ú
splitlinesÚ_truncateMessagerJ   rK   )rL   Úhtml1Úhtml2rO   Údom1Údom2rR   Údiffs           rE   ÚassertHTMLEqualÚSimpleTestCase.assertHTMLEqualþ  s¸   € ô %Ø˜ÐAó
ˆô %Ø˜ÐBó
ˆð ‹<Ü(1°$¸Ö(=¼yÈÈtÕ?TÐUˆKØ˜$Ÿ)™)Ü—’Ü˜“I×(Ñ(Ó*Ü˜“I×(Ñ(Ó*óóñ ˆDð ×/Ñ/°ÓBˆKØ�I‰I�d×)Ñ)¨#Ó;Õ<ð rG   c                 ó¾   • [        XUS5      n[        XUS5      nXE:X  a>  [        US5      < S[        US5      < 3nU R                  U R                  X65      5        gg)z>Assert that two HTML snippets are not semantically equivalent.rà  r[  Tú == N)rS   r   rJ   rK   )rL   ræ  rç  rO   rè  ré  rR   s          rE   ÚassertHTMLNotEqualÚ!SimpleTestCase.assertHTMLNotEqual  sc   € ä$Ø˜ÐAó
ˆô %Ø˜ÐBó
ˆð ‹<Ü(1°$¸Ö(=¼yÈÈtÕ?TÐUˆKØ�I‰I�d×)Ñ)¨#Ó;Õ<ð rG   c           	      óÎ   • [        XS S5      n[        XS S5      nUR                  U5      nUb  U R                  UUUSXQU4-  -   5        g U R                  US:g  USU-  -   5        g )Nrà  r[  z4Found %d instances of '%s' in response (expected %d)r   zCouldn't find '%s' in response)rS   r‚   rl   r9  )rL   ÚneedleÚhaystackr‚   r�   rg  s         rE   ÚassertInHTMLÚSimpleTestCase.assertInHTML#  s�   € Ü&Ø˜$Ð Có
ˆô )Ø˜DÐ"Fó
ˆð —^‘^ FÓ+ˆ
ØÑØ×ÑØØØØHØ uÐ-ñ.ñ.õð �O‰OØ˜a‘ Ð.NÐQWÑ.WÑ!WõrG   c                 óN  •  [         R                  " U5      n[	        U[
        5      (       a   [         R                  " U5      nU R                  WX#S9  g! [         R                   a    U R                  SU-  5         Ngf = f! [         a    U R                  SU-  5         N_f = f)z¨
Assert that the JSON fragments raw and expected_data are equal.
Usual JSON non-significant whitespace rules apply as the heavyweight
is delegated to the json library.
ú$First argument is not valid JSON: %rú%Second argument is not valid JSON: %r©rO   N)ÚjsonÚloadsÚJSONDecodeErrorrJ   rB   rP  rÚ   rl   ©rL   ÚrawÚexpected_datarO   Údatas        rE   ÚassertJSONEqualÚSimpleTestCase.assertJSONEqual8  sœ   € ð	DÜ—:’:˜c“?ˆDô �m¤S×)Ñ)ðSÜ $§
¢
¨=Ó 9�ð 	×Ñ˜˜}ÐÒ6øô ×#Ñ#ó 	DØ�I‰IÐ<¸sÑBÖCð	Dûô
 ó SØ—	‘	ÐAÀMÑQÖRðSús"   ‚A ®B Á(B Á?B ÂB$Â#B$c                 ób  •  [         R                  " U5      n[	        U[
        5      (       a   [         R                  " U5      nU R                  WX#S9  g! [         R                   a    U R                  SU-  5         Ngf = f! [         R                   a    U R                  SU-  5         Nif = f)z¬
Assert that the JSON fragments raw and expected_data are not equal.
Usual JSON non-significant whitespace rules apply as the heavyweight
is delegated to the json library.
r÷  rø  rù  N)rú  rû  rü  rJ   rB   rP  ÚassertNotEqualrý  s        rE   ÚassertJSONNotEqualÚ!SimpleTestCase.assertJSONNotEqualI  s¢   € ð	DÜ—:’:˜c“?ˆDô �m¤S×)Ñ)ðSÜ $§
¢
¨=Ó 9�ð 	×Ñ˜D -ÐÒ9øô ×#Ñ#ó 	DØ�I‰IÐ<¸sÑBÖCð	Dûô
 ×'Ñ'ó SØ—	‘	ÐAÀMÑQÖRðSús"   ‚A ®B Á(B Á?B Â(B.Â-B.c                 óÊ  •  [        X5      nU(       d”  [        US5      < S[        US5      < 3nSSR                  [        R                  " UR                  5       UR                  5       5      5      -   nU R                  XV5      nU R                  U R                  X55      5        gg! [         a/  nSU-  nU R                  U R                  X55      5         SnAgSnAff = f)z©
Assert that two XML snippets are semantically the same.
Whitespace in most cases is ignored and attribute ordering is not
significant. The arguments must be valid XML.
Trá  rI   ú,First or second argument is not valid XML
%sN)
r4   r   rm   râ  rã  rä  rå  rJ   rK   r  )rL   Úxml1Úxml2rO   r  rR   rê  rQ   s           rE   ÚassertXMLEqualÚSimpleTestCase.assertXMLEqualZ  sÉ   € ð	AÜ  Ó,ˆFö
 ä˜d DÖ)Ü˜d DÕ)ð�ð ˜dŸi™iÜ—M’M $§/¡/Ó"3°T·_±_Ó5FÓGóñ �ð #×3Ñ3°KÓF�Ø—	‘	˜$×-Ñ-¨cÓ?Õ@ð øô	 ó 	=ØIÈAÑMˆKØ�I‰I�d×)Ñ)¨#Ó;×<Ñ<ûð	=ús   ‚B) Â)
C"Â3%CÃC"c                 ó  •  [        X5      nU(       a>  [        US5      < S[        US5      < 3nU R                  U R                  X55      5        gg! [         a/  nSU-  nU R                  U R                  X55      5         SnAgSnAff = f)z¯
Assert that two XML snippets are not semantically equivalent.
Whitespace in most cases is ignored and attribute ordering is not
significant. The arguments must be valid XML.
Trî  r  N)r4   r   rJ   rK   r  )rL   r	  r
  rO   r  rR   rQ   s          rE   ÚassertXMLNotEqualÚ SimpleTestCase.assertXMLNotEqualq  s†   € ð	AÜ  Ó,ˆFö
 ä˜d DÖ)Ü˜d DÕ)ð�ð —	‘	˜$×-Ñ-¨cÓ?Õ@ð øô	 ó 	=ØIÈAÑMˆKØ�I‰I�d×)Ñ)¨#Ó;×<Ñ<ûð	=ús   ‚A Á
BÁ%BÂB)r&  r$  rX   )F)i.  éÈ   rœ   Træ   )Nr  rœ   F)r  rœ   F)NNrœ   N)NNrœ   )Nrœ   );ru   rv   rw   rx   r.   r#  r-   r%  rð   rõ   Úsetrþ   r  r  rè   rï   r  r÷   rø   r¯   r  r  r  r  r   r5   rL  rA  rh  rk  rn  rs  r~  r²   rä   r¿   rˆ  rÌ   r•  r‘   r›  rŸ  r   r¨  r¬  r±  r·  r:   rÄ  rÝ  rë  rï  rô  r  r  r  r  ry   rz   r{   s   @rE   r>   r>   $  sÁ  ø† ð €LØ$ÐØÐØÐá“€Ið	ð ò&Ð"ð ô<ó ð<ð ñ(ó ð(ð( ñMó ðMð ñ:ó ð:ô%ò7÷
$òLòò+ò)ð ØØØ $ôu
ôn
ò0&3ðR PUôð8 DIô
ò 	òMð0 '×6Ñ6óSó 7ðSò24ð '×6Ñ6ó/ó 7ð/òb0ò(ð( GKôUô*
ð, ñCó ðCò*ò 
ò,
ö à	ó	Có 
ð	Cð6 ØØô3Wôj=ô0=ôô*7ô":ô"A÷.Aò ArG   r>   c                   óœ   ^ • \ rS rSrSrSrSr\1rSr	Sr
U 4S jr\SS j5       rS rS rS	 rU 4S
 jrS rS rSS jrS\S.S jjrSrU =r$ )r=   i…  FNzŸDatabase %(operation)s to %(alias)r are not allowed in this test. Add %(alias)r to %(test)s.databases to ensure proper test isolation and silence this failure.c                 óœ  >• [         TU ]  5         U R                  bz  [        R                  " U R                  5        [
        R                  " [        R                  R                  SU R                  SS9  U R                  SS9 H  n[        SSUS9  M      U R                  5         U R                  SS9 H$  n[         U   R"                  R%                  5         M&     g! [         aa    U R                  bR  [        R                  " 5         [
        R                  " [        R                  R                  S[        R                  SS9  e f = f)	a,  
Perform pre-test setup:
* If the class has an 'available_apps' attribute, restrict the app
  registry to these applications, then fire the post_migrate signal --
  it must run with the correct set of applications for the test case.
* If the class has a 'fixtures' attribute, install those fixtures.
NÚINSTALLED_APPST©rŠ   ÚsettingrD   ÚenterF©Úinclude_mirrorsr   )Ú	verbosityÚinteractiveÚdb)r[   r  Úavailable_appsr   Úset_available_appsr#   Úsendr   Ú_wrappedr]   Ú_databases_namesr    Ú_fixture_setupr  Úunset_available_appsr  r&   Úqueries_logÚclear©rL   Údb_namer]   s     €rE   r  ÚTransactionTestCase._pre_setup�  s   ø€ ô 	‰ÑÔØ×ÑÑ*Ü×#Ò# D×$7Ñ$7Ô8Ü× Ò Ü×(Ñ(×2Ñ2Ø(Ø×)Ñ)Øò	ð  ×0Ñ0ÀÐ0ÓG�Ü(°1À%ÈGÔTñ Hð	Ø×ÑÔ!ð ×,Ñ,¸UÐ,ÓCˆGÜ˜Ñ ×,Ñ,×2Ñ2Ö4ò Døô ó 		Ø×"Ñ"Ñ.Ü×)Ò)Ô+Ü×$Ò$Ü#×,Ñ,×6Ñ6Ø,Ü"×1Ñ1Øò	ð ð		ús   ÂC  Ã A+Ec                 óª   • [          Vs/ s H=  nX R                  ;   d  M  U(       d   [         U   R                  S   S   (       a  M;  UPM?     sn$ s  snf )NÚTESTÚMIRROR)r&   rþ   Úsettings_dict)rà   r  r   s      rE   r!  Ú$TransactionTestCase._databases_namesÂ  sU   € õ
 %ó
â$�ØŸ™Ñ%ó ö  Ü" 5Ñ)×7Ñ7¸Ñ?ÀÕI÷ Ù$ñ
ð 	
ùò 
s   ‰A #AÁAc                 óº  • [         U   nUR                  R                  (       a•  UR                  R	                  [        5       UR                  R                  5       5      nU(       aQ  [        R                  " US9   UR                  5        nU H  nUR                  U5        M     S S S 5        S S S 5        g g g ! , (       d  f       N= f! , (       d  f       g = f)N©Úusing)r&   ÚfeaturesÚsupports_sequence_resetÚopsÚsequence_reset_by_name_sqlr   ÚintrospectionÚsequence_listr'   Úatomicrë   Úexecute)rL   r'  ÚconnÚsql_listrë   ra   s         rE   Ú_reset_sequencesÚ$TransactionTestCase._reset_sequencesÏ  sŸ   € Ü˜7Ñ#ˆØ�=‰=×0×0Ø—x‘x×:Ñ:Ü“
˜D×.Ñ.×<Ñ<Ó>óˆHö Ü ×'Ò'¨gÓ6ØŸ™œ¨&Û#+˜CØ"ŸN™N¨3Ö/ñ $,÷ '÷ 7Ð6ð ð	 1÷ '�ú÷ 7Õ6ús$   Á<CÂB;Â(CÂ;
C		ÃCÃ
Cc                 ó,  • U R                  SS9 GH   nU R                  (       a  U R                  U5        U R                  (       aš  [	        [
        U   S5      (       a‚  U R                  b  [        R                  " 5         [
        U   R                  R                  [
        U   R                  5        U R                  b   [        R                  " U R                  5        U R                  (       d  Mä  [        S/U R                  Q70 SUS.D6  GM     g )NFr  Ú_test_serialized_contentsÚloaddatar   ©r  Údatabase)r!  Úreset_sequencesr;  Úserialized_rollbackrË   r&   r  r   r#  ÚcreationÚdeserialize_db_from_stringr>  r  Úfixturesr   )rL   r'  s     rE   r"  Ú"TransactionTestCase._fixture_setupÛ  sæ   € Ø×,Ñ,¸UÐ,ÔCˆGà×#×#Ø×%Ñ% gÔ.ð ×'×'¬GÜ˜GÑ$Ð&A÷-ñ -ð ×&Ñ&Ñ2Ü×-Ò-Ô/Ü˜GÑ$×-Ñ-×HÑHÜ Ñ(×BÑBôð ×&Ñ&Ñ2Ü×+Ò+¨D×,?Ñ,?Ô@à�}�}‰}ô ØðØ!%§¡òØ@AÈwÑ2Wõò) DrG   c                 ó   • g©NTrb   r’   s    rE   Ú_should_reload_connectionsÚ.TransactionTestCase._should_reload_connectionsô  s   € ØrG   c           	      óN  >•  U R                  5         [        TU ]	  5         U R                  5       (       a+  [        R
                  " SS9 H  nUR                  5         M     U R                  bS  [        R                  " 5         [        R                  " [        R                  R                  S[        R                  SS9  gg! U R                  bS  [        R                  " 5         [        R                  " [        R                  R                  S[        R                  SS9  f f = f)zæ
Perform post-test things:
* Flush the contents of the database to leave a clean slate. If the
  class has an 'available_apps' attribute, don't fire post_migrate.
* Force-close the connection so the next test gets a clean cursor.
T©Úinitialized_onlyNr  Fr  )Ú_fixture_teardownr[   r  rJ  r&   ÚallÚcloser  r   r#  r#   r  r   r   r]   r  )rL   r9  r]   s     €rE   r  Ú"TransactionTestCase._post_teardown÷  sâ   ø€ ð	Ø×"Ñ"Ô$Ü‰GÑ"Ô$Ø×.Ñ.×0Ñ0ô (ŸOšO¸TÔB�DØ—J‘J–Lñ Cð ×"Ñ"Ñ.Ü×)Ò)Ô+Ü×$Ò$Ü#×,Ñ,×6Ñ6Ø,Ü"×1Ñ1Øó	ð /øˆt×"Ñ"Ñ.Ü×)Ò)Ô+Ü×$Ò$Ü#×,Ñ,×6Ñ6Ø,Ü"×1Ñ1Øó	ð /ús   ƒAC ÃA"D$c                 óÜ   • U R                  SS9 HY  nU R                  S L=(       d&    U R                  =(       a    [        [        U   S5      n[        SSSUSU R                  S LUS9  M[     g )NFr  r>  Úflushr   )r  r  rA  rB  Úallow_cascadeÚinhibit_post_migrate)r!  r  rC  rË   r&   r   )rL   r'  rV  s      rE   rO  Ú%TransactionTestCase._fixture_teardown  s‚   € ð ×,Ñ,¸UÐ,ÓCˆGð ×#Ñ#¨4Ð/÷ ð ×,Ñ,÷ SÜ¤¨GÑ 4Ð6QÓRð !ô ØØØ!Ø Ø %Ø"×1Ñ1¸Ð=Ø%9ôò DrG   c                 óZ   • [         R                  " S[        SS9  U R                  " U0 UD6$ )NzFassertQuerysetEqual() is deprecated in favor of assertQuerySetEqual().r·   r„  )r½   r¾   r8   ÚassertQuerySetEqualr†  s      rE   ÚassertQuerysetEqualÚ'TransactionTestCase.assertQuerysetEqual,  s/   € Ü�ŠØTÜ-Øò	
ð
 ×'Ò'¨Ð4°Ñ4Ð4rG   c                 ó6  • [        U5      nUnUb  [        X65      nU(       d#  U R                  [        U5      [        U5      US9$ [	        U5      S:”  a-  [        US5      (       a  UR                  (       d  [        S5      eU R                  [        U5      X%S9$ )Nrù  rh   ÚorderedzKTrying to compare non-ordered queryset against more than one ordered value.)	rC   ÚmapÚassertDictEqualr   rk   rË   r]  rÚ   rl   )rL   ÚqsÚvaluesÚ	transformr]  rO   rË  s          rE   rY  Ú'TransactionTestCase.assertQuerySetEqual4  s�   € Ü�f“ˆØˆØÑ Ü˜	Ó)ˆEÞØ×'Ñ'¬°«¼À»ÈSÐ'ÐQÐQô ˆv‹;˜‹?œw r¨9×5Ñ5¸b¿j¿jÜð!óð ð ×Ñ¤ U£¨VÐÐ=Ð=rG   r/  c                ó€   • [         U   n[        XU5      nUc  U$ U   U" U0 UD6  S S S 5        g ! , (       d  f       g = frX   )r&   rU   )rL   rZ   r£  r0  rÙ   r�   r9  r…   s           rE   ÚassertNumQueriesÚ$TransactionTestCase.assertNumQueriesD  s<   € Ü˜5Ñ!ˆä*¨4°dÓ;ˆØ‰<ØˆNâÙ�$Ð!˜&Ò!÷ �WŽWús   �	/¯
=rb   )T)NTNrX   )ru   rv   rw   rx   rB  r  rF  r$   rþ   r  rC  r  rè   r!  r;  r"  rJ  r  rO  rZ  rY  re  ry   rz   r{   s   @rE   r=   r=   …  s�   ø† ð €Oð €Nð €Hà!Ð"€Ið	$ð ð  Ðõ#5ðJ ó

ó ð

ò
0òò2õò:ò05ô>ð "Ð<L÷ "ô "rG   r=   c                 óh   • U c  [         R                  " 5       OS U  5       n[        S U 5       5      $ )zL
Return whether or not all (or specified) connections support
transactions.
c              3   ó4   #   • U  H  n[         U   v •  M     g 7frX   )r&   )rc   r   s     rE   rf   Ú3connections_support_transactions.<locals>.<genexpr>W  s   é € Ð6ªg UŒk˜%Ö ªgùs   ‚c              3   óL   #   • U  H  oR                   R                  v •  M     g 7frX   )r1  Úsupports_transactions)rc   r9  s     rE   rf   ri  Y  s   é € ÐEºu°t�}‰}×2Ö2ºuùs   ‚"$)r&   rP  )ÚaliasesÚconnss     rE   Ú connections_support_transactionsrn  O  s5   € ð ‰?ô 	�ŠÔá6©gÓ6ð 
ô
 ÑE¹uÓEÓEÐErG   c                   ó4   • \ rS rSrSrSrS rS rS rS r	Sr
g	)
ÚTestDatai\  al  
Descriptor to provide TestCase instance isolation for attributes assigned
during the setUpTestData() phase.

Allow safe alteration of objects assigned in setUpTestData() by test
methods by exposing deep copies instead of the original objects.

Objects are deep copied using a memo kept on the test case instance in
order to maintain their original relationships.
Ú_testdata_memoc                 ó   • Xl         X l        g rX   ©r‰   r   )rL   r‰   r   s      rE   r\   ÚTestData.__init__j  s   € ØŒ	Ø�	rG   c                 ó„   •  [        XR                  5      nU$ ! [         a    0 n[        XR                  U5         U$ f = frX   )rÔ   Ú	memo_attrÚAttributeErrorr  )rL   ÚtestcaseÚmemos      rE   Úget_memoÚTestData.get_memon  sE   € ð	4Ü˜8§^¡^Ó4ˆDð ˆøô ó 	4ØˆDÜ�HŸn™n¨dÕ3Øˆð	4ús   ‚ ™"?¾?c                 óž   • Uc  U R                   $ U R                  U5      n[        U R                   U5      n[        XR                  U5        U$ rX   )r   rz  r   r  r‰   )rL   ÚinstanceÚownerry  r   s        rE   Ú__get__ÚTestData.__get__v  sC   € ØÑØ—9‘9ÐØ�}‰}˜XÓ&ˆÜ˜Ÿ	™	 4Ó(ˆÜ�Ÿ)™) TÔ*ØˆrG   c                 ó@   • SU R                   < SU R                  < S3$ )Nz<TestData: name=z, data=Ú>rs  r’   s    rE   Ú__repr__ÚTestData.__repr__~  s   � Ø15·´¸D¿I¼IÐFÐFrG   )r   r‰   N)ru   rv   rw   rx   Ú__doc__rv  r\   rz  r  rƒ  ry   rb   rG   rE   rp  rp  \  s#   † ñ	ð !€IòòòõGrG   rp  c                   óÚ   ^ • \ rS rSrSr\S 5       r\S 5       r\S 5       r\U 4S j5       r	\U 4S j5       r
\S 5       rU 4S	 jrU 4S
 jrU 4S jrS r\\\SS.S j5       5       rSrU =r$ )r<   i‚  a¡  
Similar to TransactionTestCase, but use `transaction.atomic()` to achieve
test isolation.

In most situations, TestCase should be preferred to TransactionTestCase as
it allows faster execution. However, there are some situations where using
TransactionTestCase might be necessary (e.g. testing some transactional
behavior).

On database backends with no transaction support, TestCase behaves as
TransactionTestCase.
c                 ó–   • 0 nU R                  5        H2  n[        R                  " US9nSUl        UR	                  5         X1U'   M4     U$ )z*Open atomic blocks for multiple databases.r/  T)r!  r'   r7  Ú_from_testcaser—   )rà   Úatomicsr'  r7  s       rE   Ú_enter_atomicsÚTestCase._enter_atomics�  sO   € ð ˆØ×+Ñ+Ö-ˆGÜ ×'Ò'¨gÑ6ˆFØ$(ˆFÔ!Ø×ÑÔØ%�GÓñ	 .ð
 ˆrG   c                 ó˜   • [        U R                  5       5       H-  n[        R                  " SUS9  X   R	                  SSS5        M/     g)z5Rollback atomic blocks opened by the previous method.Tr/  N)Úreversedr!  r'   Úset_rollbackrj   )rà   r‰  r'  s      rE   Ú_rollback_atomicsÚTestCase._rollback_atomics›  sA   € ô   × 4Ñ 4Ó 6Ö7ˆGÜ×$Ò$ T°Ò9ØÑ×%Ñ% d¨D°$Ö7ò 8rG   c                 ó,   • [        U R                  5      $ rX   )rn  rþ   ©rà   s    rE   Ú_databases_support_transactionsÚ(TestCase._databases_support_transactions¢  s   € ä/°·±Ó>Ð>rG   c           	      ó˜  >• [         TU ]  5         U R                  5       (       d  g U R                  5       U l        U R
                  (       a3  U R                  SS9 H   n [        S/U R
                  Q70 SUS.D6  M"     U R                  R                  5       n U R                  5         U R                  R                  5        H/  u  p4XBR                  U5      Ld  M  [        X[!        X45      5        M1     g ! [         a    U R                  U R                  5        e f = f! [         a    U R                  U R                  5        e f = f)NFr  r?  r   r@  )r[   rï   r“  rŠ  Úcls_atomicsrF  r!  r   r  r�  Ú__dict__r   ÚsetUpTestDatarË  r@  r  rp  )rà   r'  Ú	pre_attrsr‰   rD   r]   s        €rE   rï   ÚTestCase.setUpClass¦  s$  ø€ ä‰ÑÔØ×2Ñ2×4Ñ4ØØ×,Ñ,Ó.ˆŒà�<�<Ø×/Ñ/ÀÐ/ÓF�ðÜ Ø"ðàŸ™òð )*°wÑ?ôñ Gð —L‘L×%Ñ%Ó'ˆ	ð	Ø×ÑÔð Ÿ<™<×-Ñ-Ö/‰KˆDØŸM™M¨$Ó/Ô/Ü˜¤8¨DÓ#8Ö9ò 0øô !ó Ø×)Ñ)¨#¯/©/Ô:Øðûô ó 	Ø×!Ñ! #§/¡/Ô2Øð	ús   ÁC8ÂD" Ã8'DÄ"'E	c                 óØ   >• U R                  5       (       aF  U R                  U R                  5        [        R                  " SS9 H  nUR                  5         M     [        TU ]  5         g )NTrM  )r“  r�  r–  r&   rP  rQ  r[   ÚtearDownClass)rà   r9  r]   s     €rE   rœ  ÚTestCase.tearDownClassÂ  sK   ø€ à×.Ñ.×0Ñ0Ø×!Ñ! #§/¡/Ô2Ü#Ÿš¸Ô>�Ø—
‘
–ñ ?ä‰ÑÕrG   c                 ó   • g)z#Load initial data for the TestCase.Nrb   r’  s    rE   r˜  ÚTestCase.setUpTestDataÊ  s   € ð 	rG   c                 óL   >• U R                  5       (       a  g[        TU ]	  5       $ )NF)r“  r[   rJ  ©rL   r]   s    €rE   rJ  Ú#TestCase._should_reload_connectionsÏ  s#   ø€ Ø×/Ñ/×1Ñ1ØÜ‰wÑ1Ó3Ð3rG   c                 óÎ   >• U R                  5       (       d  U R                  5         [        TU ]  5       $ U R                  (       a  [        S5      eU R                  5       U l        g )Nz4reset_sequences cannot be used on TestCase instances)r“  r˜  r[   r"  rB  rØ   rŠ  r‰  r¡  s    €rE   r"  ÚTestCase._fixture_setupÔ  sS   ø€ Ø×3Ñ3×5Ñ5ð ×ÑÔ Ü‘7Ñ)Ó+Ð+à××ÜÐRÓSÐSØ×*Ñ*Ó,ˆ�rG   c                 óp  >• U R                  5       (       d  [        TU ]	  5       $  [        U R	                  5       5       H9  nU R                  [        U   5      (       d  M"  [        U   R                  5         M;     U R                  U R                  5        g ! U R                  U R                  5        f = frX   )
r“  r[   rO  r�  r!  Ú_should_check_constraintsr&   Úcheck_constraintsr�  r‰  r&  s     €rE   rO  ÚTestCase._fixture_teardownß  s‹   ø€ Ø×3Ñ3×5Ñ5Ü‘7Ñ,Ó.Ð.ð	1Ü# D×$9Ñ$9Ó$;Ö<�Ø×1Ñ1´+¸gÑ2F×GÓGÜ Ñ(×:Ñ:Ö<ñ =ð ×"Ñ" 4§<¡<Õ0øˆD×"Ñ" 4§<¡<Õ0ús   ¦7B Á!B ÂB5c                 óŽ   • UR                   R                  =(       a)    UR                  (       + =(       a    UR                  " 5       $ rX   )r1  Úcan_defer_constraint_checksÚneeds_rollbackÚ	is_usable)rL   r%   s     rE   r¦  Ú"TestCase._should_check_constraintsé  s8   € à×Ñ×;Ñ;÷ 'Ø×-Ñ-Ô-÷'à×$Ò$Ó&ð	
rG   F)r0  r8  c          
   #   ó”  #   • / n[        [        U   R                  5      n Uv •   [        [        U   R                  5      n[        U   R                  US  H8  u  pgnUR                  U5        U(       d  M   U(       a
   U" 5         M1  U" 5         M:     U[        [        U   R                  5      :X  a  gUnM“  ! [         a.  n	[
        R                  SUR                   S3U	SS9   Sn	A	M”  Sn	A	ff = f!  [        [        U   R                  5      n[        U   R                  US  Hs  u  pgnUR                  U5        U(       d  M   U(       aE   U" 5         M1  ! [         a.  n	[
        R                  SUR                   S3U	SS9   Sn	A	Md  Sn	A	ff = fU" 5         Mu     U[        [        U   R                  5      :X  a  f UnMÎ  = f7f)z=Context manager to capture transaction.on_commit() callbacks.TNzError calling z in on_commit() (%s).)r  )rk   r&   Úrun_on_commitrˆ   r  rÁ  Úerrorrw   )
rà   r0  r8  Ú	callbacksÚstart_countÚcallback_countr  ÚcallbackÚrobustrQ   s
             rE   ÚcaptureOnCommitCallbacksÚ!TestCase.captureOnCommitCallbacksð  sÇ  é € ð ˆ	Üœ+ eÑ,×:Ñ:Ó;ˆð	-ØŠOàÜ!$¤[°Ñ%7×%EÑ%EÓ!F�Ü+6°uÑ+=×+KÑ+KØ�Ló,Ñ'�A ð ×$Ñ$ XÔ.ß�wÞ!ð"Ù (¦
ñ %žJñ!,ð$ "¤S¬°UÑ);×)IÑ)IÓ%JÓJØØ,�ñ- øô $-ó "Ü &§¡Ø&4°X×5JÑ5JÐ4Kð L8ð %9à$%Ø-1ð	 !-÷ !"ûð"ûð Ü!$¤[°Ñ%7×%EÑ%EÓ!F�Ü+6°uÑ+=×+KÑ+KØ�Ló,Ñ'�A ð ×$Ñ$ XÔ.ß�wÞ!ð"Ù (¦
øÜ#,ó "Ü &§¡Ø&4°X×5JÑ5JÐ4Kð L8ð %9à$%Ø-1ð	 !-÷ !"ûð"úñ %žJñ!,ð$ "¤S¬°UÑ);×)IÑ)IÓ%JÓJØØ,�ñ- üs}   ‚G¢C5 ¦AGÁ9GÂB:Â2GÂ:
C2Ã#C-Ã'GÃ-C2Ã2GÃ5AGÅ	GÅEÅGÅ
F	Å$#F	ÆGÆF	Æ3GÇG)r‰  )ru   rv   rw   rx   r…  rè   rŠ  r�  r“  rï   rœ  r˜  rJ  r"  rO  r¦  r   r$   r¶  ry   rz   r{   s   @rE   r<   r<   ‚  sµ   ø† ñð ñó ðð ñ8ó ð8ð ñ?ó ð?ð ô:ó ð:ð6 ô ó ð ð ñó ðõ4õ
	-õ1ò
ð ØØ/?Èô -ó ó ö-rG   r<   c                   ó.   • \ rS rSrSrS rS rSS jrSrg)	ÚCheckConditioni  z1Descriptor class for deferred condition checking.c                 ó   • Xl         g rX   ©Ú
conditions)rL   r¼  s     rE   r\   ÚCheckCondition.__init__  s   € Ø$�rG   c                 ó@   • U R                   " / U R                  QX4P76 $ rX   )r]   r¼  )rL   Ú	conditionÚreasons      rE   Úadd_conditionÚCheckCondition.add_condition  s    € Ø�~Š~ÐD˜tŸ™ÐD°Ð0CÒDÐDrG   Nc                 ó¨   • [        S UR                   5       5      (       a  gU R                   H   u  p4U" 5       (       d  M  SUl        XBl          g   g)Nc              3   ó<   #   • U  H  n[        US S5      v •  M     g7f)r  FN)rÔ   )rc   Úbases     rE   rf   Ú)CheckCondition.__get__.<locals>.<genexpr>  s   é € ÐSÂ]¸TŒw�tÐ0°%×8Ð8Â]ùs   ‚TF)ÚanyÚ	__bases__r¼  r  Ú__unittest_skip_why__)rL   r}  rà   r¿  rÀ  s        rE   r  ÚCheckCondition.__get__  sH   € äÑSÀSÇ]Â]ÓS×SÑSØØ!%§¤ÑˆIÙ�{‹{à(,�Ô%Ø,2Ô)Ùñ "1ð rG   r»  rX   )	ru   rv   rw   rx   r…  r\   rÁ  r  ry   rb   rG   rE   r¹  r¹    s   † Ù;ò%òE÷
rG   r¹  c                 ó   ^ ^^• U UU4S jnU$ )Nc                 óÌ  >^ ^• [        T [        5      (       a  [        T [        R                  5      (       d  [        T 5      UUUU 4S j5       nUmT$ T m[        TSS 5      nU(       a  [        R                  U;  a  UU4S jmT R                  R                  S5      n[        U[        5      (       a  UR                  TT5      Tl        T$ USLa  [        TT45      Tl        T$ )Nc            
      ót  >• U (       a‡  [        U S   [        R                  5      (       ae  [        R                  [        U S   S0 5      ;  aC  [        T< SU S   < SU S   R                  R                  < S[        R                  < S35      eT" 5       (       a  [        R                  " T5      eT" U 0 UD6$ )Nr   rþ   ú cannot be used on z as z# doesn't allow queries against the z
 database.)
rB   Úunittestr<   r%   r   rÔ   rÚ   r]   rw   ÚSkipTest)rÙ   r�   r¿  r‰   rÀ  Ú	test_funcs     €€€€rE   Úskip_wrapperÚ6_deferredSkip.<locals>.decorator.<locals>.skip_wrapper/  sž   ø€ ö Ü" 4¨¡7¬H×,=Ñ,=×>Ñ>Ü"×(Ñ(´¸¸Q¹ÀÈbÓ0QÓQä$ó !Ø  œGØ  ™G×-Ñ-×:Ô:Ü&×,Ô,ðó	ð 	ñ —;‘;Ü"×+Ò+¨FÓ3Ð3Ù  $Ð1¨&Ñ1Ð1rG   rþ   c                  óN   >• [        T < ST< S[        R                  < S35      e)NrÎ  z* as it doesn't allow queries against the 'z' database.)rÚ   r%   r   )r‰   Ú	test_items   €€rE   r¿  Ú3_deferredSkip.<locals>.decorator.<locals>.conditionK  s&   ø€ Ü$ó !Û%Ü&×,Ô,ðóð rG   r  T)rB   ÚtyperÐ  rÏ  r<   r	   rÔ   r%   r   r—  r@  r¹  rÁ  r  )rÑ  rÒ  rþ   ÚskiprÕ  r¿  r‰   rÀ  s   `   @€€€rE   Ú	decoratorÚ _deferredSkip.<locals>.decorator)  sÛ   ú€ ô �y¤$×'Ñ'¬J°yÄ(×BSÑBS×,TÑ,Tô �9Ó÷2ó ð2ð( %ˆIð2 Ðð- "ˆIÜ 	¨;¸Ó=ˆIÞ¤
× 0Ñ 0¸	Ó Aö	ð ×%Ñ%×)Ñ)Ð*=Ó>ˆDÜ˜$¤×/Ñ/Ø.2×.@Ñ.@ÀÈFÓ.S�	Ô+ð Ðð ˜TÒ!Ü.<¸iÈÐ=PÓ.Q�	Ô+ØÐrG   rb   )r¿  rÀ  r‰   rÙ  s   ``` rE   Ú_deferredSkiprÛ  (  s   ú€ ÷4ðl ÐrG   c                  óJ   ^ • [        U 4S jSSR                  T 5      -  S5      $ )zASkip a test if a database has at least one of the named features.c                  ó(   >• [        S T  5       5      $ )Nc              3   óX   #   • U  H   n[        [        R                  US 5      v •  M"     g7f©FN©rÔ   r%   r1  ©rc   Úfeatures     rE   rf   Ú4skipIfDBFeature.<locals>.<lambda>.<locals>.<genexpr>e  s%   é € ð 
ÚHP¸WŒG”J×'Ñ'¨°%×8Ð8Êùó   ‚(*©rÇ  ©r1  s   €rE   Ú<lambda>Ú!skipIfDBFeature.<locals>.<lambda>e  s   ø€ ”ñ 
ÙHPó
ô 
rG   zDatabase has feature(s) %sr˜  r?   ©rÛ  rm   ræ  s   `rE   r?   r?   b  s+   ø€ äô	
ð 	% t§y¡y°Ó':Ñ:Øóð rG   c                  óJ   ^ • [        U 4S jSSR                  T 5      -  S5      $ )z9Skip a test unless a database has all the named features.c                  ó2   >• [        S T  5       5      (       + $ )Nc              3   óX   #   • U  H   n[        [        R                  US 5      v •  M"     g7frß  rà  rá  s     rE   rf   Ú8skipUnlessDBFeature.<locals>.<lambda>.<locals>.<genexpr>p  ó%   é € ð 
ÚHP¸WŒG”J×'Ñ'¨°%×8Ð8Êùrä  )rP  ræ  s   €rE   rç  Ú%skipUnlessDBFeature.<locals>.<lambda>p  ó   ø€ ”Cñ 
ÙHPó
ó 
õ 
rG   z'Database doesn't support feature(s): %sr˜  r@   ré  ræ  s   `rE   r@   r@   m  s+   ø€ äô	
ð 	2°D·I±I¸hÓ4GÑGØóð rG   c                  óJ   ^ • [        U 4S jSSR                  T 5      -  S5      $ )z<Skip a test unless a database has any of the named features.c                  ó2   >• [        S T  5       5      (       + $ )Nc              3   óX   #   • U  H   n[        [        R                  US 5      v •  M"     g7frß  rà  rá  s     rE   rf   Ú;skipUnlessAnyDBFeature.<locals>.<lambda>.<locals>.<genexpr>{  rî  rä  rå  ræ  s   €rE   rç  Ú(skipUnlessAnyDBFeature.<locals>.<lambda>{  rð  rG   z2Database doesn't support any of the feature(s): %sr˜  ÚskipUnlessAnyDBFeatureré  ræ  s   `rE   rö  rö  x  s+   ø€ äô	
ð 	=¸t¿y¹yÈÓ?RÑRØ óð rG   c                   ó   • \ rS rSrSrS rSrg)ÚQuietWSGIRequestHandleriƒ  z…
A WSGIRequestHandler that doesn't log to standard output any of the
requests received, so as to not clutter the test result output.
c                  ó   • g rX   rb   )rÙ   s    rE   Úlog_messageÚ#QuietWSGIRequestHandler.log_message‰  s   € ØrG   rb   N)ru   rv   rw   rx   r…  rú  ry   rb   rG   rE   rø  rø  ƒ  s   † ñõ
rG   rø  c                   óV   ^ • \ rS rSrSrU 4S jrS rS rU 4S jrS r	U 4S jr
S	rU =r$ )
ÚFSFilesHandleri�  z–
WSGI middleware that intercepts calls to a directory, as defined by one of
the *_ROOT settings, and serves those files, publishing them under *_URL.
c                 ój   >• Xl         [        U R                  5       5      U l        [        TU ]  5         g rX   )Úapplicationr   Úget_base_urlÚbase_urlr[   r\   )rL   rÿ  r]   s     €rE   r\   ÚFSFilesHandler.__init__“  s)   ø€ Ø&ÔÜ  ×!2Ñ!2Ó!4Ó5ˆŒÜ‰ÑÕrG   c                 ót   • UR                  U R                  S   5      =(       a    U R                  S   (       + $ )z¤
Check if the path should be handled. Ignore the path if:
* the host is provided as part of the base_url
* the request's path isn't under the media path (or equal)
r·   rh   )r<  r  )rL   rG  s     rE   Ú_should_handleÚFSFilesHandler._should_handle˜  s-   € ð �‰˜tŸ}™}¨QÑ/Ó0×I¸¿¹ÀqÑ9IÔ5IÐIrG   c                 óN   • U[        U R                  S   5      S n[        U5      $ )z?Return the relative path to the file on disk for the given URL.r·   N)rk   r  r   )rL   r;  Úrelative_urls      rE   Ú	file_pathÚFSFilesHandler.file_path   s(   € àœ3˜tŸ}™}¨QÑ/Ó0Ð2Ð3ˆÜ˜LÓ)Ð)rG   c                 óª   >• SSK Jn  U R                  UR                  5      (       a   U R	                  U5      $ [
        TU ]  U5      $ ! U a     Nf = f)Nr   )ÚHttp404)Údjango.httpr  r  rG  r;   r[   Úget_response)rL   r=  r  r]   s      €rE   r  ÚFSFilesHandler.get_response¥  sU   ø€ Ý'à×Ñ˜wŸ|™|×,Ñ,ðØ—z‘z 'Ó*Ð*ô ‰wÑ# GÓ,Ð,øð ó Ùðús   ©A	 Á	AÁAc                 óè   • U R                  UR                  5      n[        R                  " [	        U5      5      nUR                  SS5      R                  S5      n[        XU R                  5       S9$ )NÚ\r3  )Údocument_root)	r  rG  Ú	posixpathÚnormpathr   ÚreplaceÚlstripr;   Úget_base_dir)rL   r=  Úos_rel_pathÚfinal_rel_paths       rE   r;   ÚFSFilesHandler.serve¯  s^   € Ø—n‘n W§\¡\Ó2ˆÜ×(Ò(¬°Ó)=Ó>ˆð %×,Ñ,¨T°3Ó7×>Ñ>¸sÓCˆÜ�W¸D×<MÑ<MÓ<OÑPÐPrG   c                 ó‚   >• U R                  [        U5      5      (       d  U R                  X5      $ [        TU ]  X5      $ rX   )r  r   rÿ  r[   r¯   )rL   ÚenvironÚstart_responser]   s      €rE   r¯   ÚFSFilesHandler.__call__¸  s:   ø€ Ø×"Ñ"¤=°Ó#9×:Ñ:Ø×#Ñ# GÓ<Ð<Ü‰wÑ Ó8Ð8rG   )rÿ  r  )ru   rv   rw   rx   r…  r\   r  r  r  r;   r¯   ry   rz   r{   s   @rE   rý  rý  �  s-   ø† ñõ
ò
Jò*õ
-òQ÷9ó 9rG   rý  c                   ó$   • \ rS rSrSrS rS rSrg)Ú_StaticFilesHandleri¾  zy
Handler for serving static files. A private class that is meant to be used
solely as a convenience by LiveServerThread.
c                 ó"   • [         R                  $ rX   )r   ÚSTATIC_ROOTr’   s    rE   r  Ú _StaticFilesHandler.get_base_dirÄ  s   € Ü×#Ñ#Ð#rG   c                 ó"   • [         R                  $ rX   )r   Ú
STATIC_URLr’   s    rE   r   Ú _StaticFilesHandler.get_base_urlÇ  ó   € Ü×"Ñ"Ð"rG   rb   N©ru   rv   rw   rx   r…  r  r   ry   rb   rG   rE   r  r  ¾  s   † ñò
$õ#rG   r  c                   ó$   • \ rS rSrSrS rS rSrg)Ú_MediaFilesHandleriË  z|
Handler for serving the media files. A private class that is meant to be
used solely as a convenience by LiveServerThread.
c                 ó"   • [         R                  $ rX   )r   Ú
MEDIA_ROOTr’   s    rE   r  Ú_MediaFilesHandler.get_base_dirÑ  r&  rG   c                 ó"   • [         R                  $ rX   )r   Ú	MEDIA_URLr’   s    rE   r   Ú_MediaFilesHandler.get_base_urlÔ  s   € Ü×!Ñ!Ð!rG   rb   Nr'  rb   rG   rE   r)  r)  Ë  s   † ñò
#õ"rG   r)  c                   óJ   ^ • \ rS rSrSr\rSU 4S jjrS rS	S jr	S r
SrU =r$ )
ÚLiveServerThreadiØ  zBThread for running a live HTTP server while the tests are running.c                 ó”   >• Xl         X@l        [        R                  " 5       U l        S U l        X l        X0l        [        TU ]%  5         g rX   )
ÚhostrJ  Ú	threadingÚEventÚis_readyr°  Ústatic_handlerÚconnections_overrider[   r\   )rL   r3  r7  r8  rJ  r]   s        €rE   r\   ÚLiveServerThread.__init__Ý  s9   ø€ ØŒ	ØŒ	Ü!ŸšÓ)ˆŒØˆŒ
Ø,ÔØ$8Ô!Ü‰ÑÕrG   c                 óÆ  • U R                   (       a,  U R                   R                  5        H  u  pU[        U'   M      U R                  [	        [        5       5      5      nU R                  U R                   S9U l        U R                  S:X  a  U R                  R                  S   U l        U R                  R                  U5        U R                  R                  5         U R                  R                  5         [        R                   " 5         g! [         a*  nX@l        U R                  R                  5          SnANESnAff = f! [        R                   " 5         f = f)zR
Set up the live server and databases, and then loop over handling
HTTP requests.
)r8  r   rh   N)r8  rË  r&   r7  r)  r   Ú_create_serverÚhttpdrJ  Úserver_addressÚset_appr6  r  Úserve_foreverr  r°  Ú	close_all)rL   r   r9  ÚhandlerrQ   s        rE   ÚrunÚLiveServerThread.runæ  s  € ð
 ×$×$ð  $×8Ñ8×>Ñ>Ö@‘�Ø%)”˜EÓ"ñ  Að	$à×)Ñ)Ô*<¼[»]Ó*KÓLˆGØ×,Ñ,Ø%)×%>Ñ%>ð -ð ˆDŒJð �y‰y˜A‹~Ø ŸJ™J×5Ñ5°aÑ8�”	Ø�J‰J×Ñ˜wÔ'Ø�M‰M×ÑÔØ�J‰J×$Ñ$Ô&ô
 ×!Ò!Õ#øô	 ó 	 ØŒJØ�M‰M×Ñ×Ñûð	 ûô ×!Ò!Õ#ús*   ¿B=D Ä
EÄ EÄ<E	 ÅEÅE	 Å	E c                 óZ   • U R                  U R                  U R                  4[        SUS9$ )NF)Úallow_reuse_addressr8  )Úserver_classr3  rJ  rø  )rL   r8  s     rE   r;  ÚLiveServerThread._create_server  s3   € Ø× Ñ Ø�Y‰Y˜Ÿ	™	Ð"Ü#Ø %Ø!5ð	 !ð 
ð 	
rG   c                 ó®   • [        U S5      (       a4  U R                  R                  5         U R                  R                  5         U R	                  5         g )Nr<  )rË   r<  ÚshutdownÚserver_closerm   r’   s    rE   Ú	terminateÚLiveServerThread.terminate
  s8   € Ü�4˜×!Ñ!à�J‰J×ÑÔ!Ø�J‰J×#Ñ#Ô%Ø�	‰	�rG   )r8  r°  r3  r<  r6  rJ  r7  )Nr   rX   )ru   rv   rw   rx   r…  r!   rF  r\   rB  r;  rK  ry   rz   r{   s   @rE   r1  r1  Ø  s$   ø† ÙLà%€L÷ò$ô8
÷ð rG   r1  c                   ó¦   ^ • \ rS rSrSrSrSr\r\	r
\S 5       r\S 5       r\S 5       r\U 4S j5       r\S	 5       r\S
 5       r\S 5       rSrU =r$ )ÚLiveServerTestCasei  aÖ  
Do basically the same as TransactionTestCase but also launch a live HTTP
server in a separate thread so that the tests may use another testing
framework, such as Selenium for example, instead of the built-in dummy
client.
It inherits from TransactionTestCase instead of TestCase because the
threads don't share the same transactions (unless if using in-memory sqlite)
and each thread needs to commit all their transactions so that the other
thread can see the changes.
Ú	localhostr   c                 óR   • SU R                   < SU R                  R                  < 3$ )Nzhttp://Ú:)r3  Úserver_threadrJ  r’  s    rE   Úlive_server_urlÚ"LiveServerTestCase.live_server_url#  s   � à!$§¤¨3×+<Ñ+<×+AÓ+AÐBÐBrG   c                 ó   • U R                   $ rX   )r3  r’  s    rE   Úallowed_hostÚLiveServerTestCase.allowed_host'  s   € à�x‰xˆrG   c                 ó°   • 0 n[         R                  " 5        H:  nUR                  S:X  d  M  UR                  5       (       d  M,  X!UR                  '   M<     U$ )NÚsqlite)r&   rP  ÚvendorÚis_in_memory_dbr   ©rà   r8  r9  s      rE   Ú_make_connections_overrideÚ-LiveServerTestCase._make_connections_override+  sI   € à!ÐÜ—O’OÖ%ˆDð �{‰{˜hÕ&¨4×+?Ñ+?×+AÓ+AØ37 T§Z¡ZÓ0ñ	 &ð
 $Ð#rG   c                 óô   >• [         TU ]  5         [        SU R                  0S9U l        U R                  R                  5         U R                  U R                  R                  5        U R                  5         g )Nrˆ   )r>  )	r[   rï   r5   rV  Ú_live_server_modified_settingsrò   ró   rô   Ú_start_server_threadrù   s    €rE   rï   ÚLiveServerTestCase.setUpClass5  sc   ø€ ä‰ÑÔÜ-<Ø# S×%5Ñ%5Ð6ñ.
ˆÔ*ð 	×*Ñ*×1Ñ1Ô3Ø×Ñ˜C×>Ñ>×FÑFÔGØ× Ñ Õ"rG   c                 óÔ  • U R                  5       nUR                  5        H  nUR                  5         M     U R                  U5      U l        SU R                  l        U R                  R                  5         U R                  U R                  5        U R                  R                  R                  5         U R                  R                  (       a  U R                  R                  eg rI  )r]  ra  Úinc_thread_sharingÚ_create_server_threadrR  Údaemonri   ró   Ú_terminate_threadr6  Úwaitr°  r\  s      rE   ra  Ú'LiveServerTestCase._start_server_thread?  sº   € à"×=Ñ=Ó?ÐØ(×/Ñ/Ö1ˆDà×#Ñ#Ö%ñ 2ð  ×5Ñ5Ð6JÓKˆÔØ#'ˆ×ÑÔ Ø×Ñ×ÑÔ!Ø×Ñ˜C×1Ñ1Ô2ð 	×Ñ×"Ñ"×'Ñ'Ô)Ø×Ñ×"×"Ø×#Ñ#×)Ñ)Ð)ð #rG   c                 ób   • U R                  U R                  U R                  UU R                  S9$ )N)r8  rJ  )Úserver_thread_classr3  r7  rJ  )rà   r8  s     rE   re  Ú(LiveServerTestCase._create_server_threadP  s4   € à×&Ñ&Ø�H‰HØ×ÑØ!5Ø—‘ð	 'ð 
ð 	
rG   c                 ó®   • U R                   R                  5         U R                   R                  R                  5        H  nUR	                  5         M     g rX   )rR  rK  r8  ra  Údec_thread_sharing)rà   r9  s     rE   rg  Ú$LiveServerTestCase._terminate_threadY  sB   € ð 	×Ñ×#Ñ#Ô%à×%Ñ%×:Ñ:×AÑAÖCˆDØ×#Ñ#Ö%ò DrG   rb   )ru   rv   rw   rx   r…  r3  rJ  r1  rk  r  r7  r9   rS  rV  rè   r]  rï   ra  re  rg  ry   rz   r{   s   @rE   rN  rN    s«   ø† ñ	ð €DØ€DØ*ÐØ(€NàñCó ðCð ñó ðð ñ$ó ð$ð ô#ó ð#ð ñ*ó ð*ð  ñ
ó ð
ð ñ&ó ö&rG   rN  c                   óF   ^ • \ rS rSrSrSrU 4S jr\U 4S j5       rSr	U =r
$ )ÚSerializeMixinib  zû
Enforce serialization of TestCases that share a common resource.

Define a common 'lockfile' for each set of TestCases to serialize. This
file must exist on the filesystem.

Place it early in the MRO in order to isolate setUpClass()/tearDownClass().
Nc                óˆ   >• [         TU ]  " S0 UD6  U R                  c$  [        SR	                  U R
                  5      5      eg )NzB{}.lockfile isn't set. Set it to a unique value in the base class.rb   )r[   Ú__init_subclass__ÚlockfilerÚ   Úformatru   )rà   r�   r]   s     €rE   rs  Ú SerializeMixin.__init_subclass__n  sB   ø€ Ü‰Ò!Ñ+ FÒ+Ø�<‰<ÑÜð%ß%+¡V¨C¯L©LÓ%9óð ð  rG   c                 óþ   >• [        U R                  5      U l        U R                  U R                  R                  5        [
        R                  " U R                  [
        R                  5        [        TU ]%  5         g rX   )
Úopenrt  Ú	_lockfileró   rQ  r   ÚlockÚLOCK_EXr[   rï   rù   s    €rE   rï   ÚSerializeMixin.setUpClassv  sL   ø€ ä˜SŸ\™\Ó*ˆŒØ×Ñ˜CŸM™M×/Ñ/Ô0Ü�
Š
�3—=‘=¤%§-¡-Ô0Ü‰ÑÕrG   rb   )ru   rv   rw   rx   r…  rt  rs  rè   rï   ry   rz   r{   s   @rE   rq  rq  b  s(   ø† ñð €Hõð ôó örG   rq  rX   )râ  rÕ   rú  r¼  r  r  r4  rÏ  r½   Úcollectionsr   Ú
contextlibr   r   r   r   Ú	functoolsr	   Úunittest.suiter
   Úunittest.utilr   Úurllib.parser   r   r   r   r   r   r   Úurllib.requestr   Úasgiref.syncr   r   Údjango.appsr   Údjango.confr   Údjango.corer   Údjango.core.exceptionsr   r   Údjango.core.filesr   Údjango.core.handlers.wsgir   r   Údjango.core.managementr   Údjango.core.management.colorr   Údjango.core.management.sqlr    Údjango.core.servers.basehttpr!   r"   Údjango.core.signalsr#   Ú	django.dbr$   r%   r&   r'   Údjango.forms.fieldsr(   r  r)   Údjango.http.requestr*   r+   Údjango.http.responser,   Údjango.test.clientr-   r.   Údjango.test.htmlr/   r0   Údjango.test.signalsr1   Údjango.test.utilsr2   r3   r4   r5   r6   Údjango.utils.deprecationr7   r8   Údjango.utils.functionalr9   Údjango.utils.versionr:   Údjango.views.staticr;   Ú	getLoggerrÁ  rü   rF   rS   rU   r}   rž   rÀ  r¥   r¨   r²   r<   r>   r=   rn  rp  r¹  rÛ  r?   r@   rö  rø  rý  r  r)  ÚThreadr1  rN  rq  rb   rG   rE   Ú<module>rž     sÑ  ðÛ Û Û Û Û Û 
Û Û Û Ý Ý %ß Ý %Ý Ý 'Ý #÷÷ ñ õ (ç ;å Ý  Ý ß HÝ #ß @Ý /Ý 1Ý ?ß OÝ /ß LÓ LÝ )Ý !ß @Ý 1ß 2ß 7Ý 1÷õ ÷ XÝ 1Ý &Ý %à	×	Ò	˜=Ó	)€ð€òòô
Ð4ô 
÷4 ñ  ôF
Ð$>ô 
ô	 ô 	÷7ñ 7÷uñ uôp^A�X×&Ñ&ô ^AôBG"˜.ô G"ôT
F÷#Gñ #GôLM-Ð"ô M-÷`ñ ò,7òtòòôÐ0ô ô.9�[ô .9ôb
#˜.ô 
#ô
"˜ô 
"ô7�y×'Ñ'ô 7ôtM&Ð,ô M&÷`ò rG   