Ë
    àU.j+  ã            	       óÂ  — d Z ddlmZmZmZ ddlZ ej                  e«      Zddl	m
Z
 ddlmZmZmZ ddlmZmZ ddlmZmZmZ erdd	lmZ d
gZdZdZ ed¬«      rdZ�nerùddlZddlZej8                  j;                  d«      Zer®ej>                  jA                  e«      s e!dez  «      ‚ e"d„ dD «       «      s e!dez  «      ‚ejG                  de«       ej>                  jI                  ed«      Z%ej>                  jM                  de%«       	 ddl'm(Z 	 ej>                  jW                  e%«       n-dZ ed«      r#ejX                  j[                  d«       nerdZndZer/ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 dd l	m4Z4  G d!„ d
ejj                  e«      Z6y G d"„ d
e«      Z6y# e)$ rZ* e
 e!de›de*›�«      «      ‚dZ*[*ww xY w# ej>                  jW                  e%«       w xY w)#z5
test passlib.ext.django against django source tests
é    )Úabsolute_importÚdivisionÚprint_functionN)Úsuppress_cause)ÚDJANGO_VERSIONÚDjangoTranslatorÚ_PasslibHasherWrapper)ÚTestCaseÚ	TEST_MODEé   )Úhas_min_djangoÚstock_configÚ_ExtensionSupport)ÚsettingsÚHashersTestÚquick)Úmaxzrequires >= 'default' test modeÚ PASSLIB_TESTS_DJANGO_SOURCE_PATHz django source path not found: %rc              #   óž   K  — | ]E  }t         j                  j                  t         j                  j                  t        |«      «      –— ŒG y ­w©N)ÚosÚpathÚexistsÚjoinÚsource_path)Ú.0Únames     úfC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\passlib/tests/test_ext_django_source.pyÚ	<genexpr>r   6   s4   è ø€ ð 4Ù2�tô —7‘7—>‘>¤"§'¡'§,¡,¬{¸DÓ"A×BÙ2ùs   ‚AA)ÚdjangoÚtestszinvalid django source path: %rz'using django tests from source path: %rr!   )Útest_hashersz6error trying to import django tests from source path (z): z3requires PASSLIB_TESTS_DJANGO_SOURCE_PATH to be setÚfullzt
WARNING: $PASSLIB_TESTS_DJANGO_SOURCE_PATH is not set; can't run Django's own unittests against passlib.ext.django
zdjango version too oldzdjango not installed)Úsetting_changed)Úreceiver)Úimport_string)Úget_unbound_method_functionc                   ób   ‡ — e Zd ZdZ eej                  «      Zd„ Zˆ fd„Zd„ Z	e	Z
e	Ze	Ze	Zˆ xZS )r   zq
        Run django's hasher unittests against passlib's extension
        and workalike implementations
        c           	      ó  ‡‡‡‡	‡
— | j                  t        d¬«       ddlmŠ ‰j                  Šddlm} dD ]#  }| j                  t        |t        ||«      «       Œ% ddl
m} | j                  |dd«       t        «       j                  Š	t        t        d¬	«      ˆˆˆ	fd
„«       }| j!                  t        j"                  |«        |«        ˆˆfd„Š
dgŠˆˆ
fd„}dD ]  }| j                  ‰||d¬«       Œ | j                  ‰d|d¬«       y )NF)ÚPASSLIB_CONTEXTÚcheckr   )Úadapter)Úhashers)Úmake_passwordÚcheck_passwordÚidentify_hasherÚis_password_usableÚ
get_hasher)Údjango_des_cryptÚuse_duplicate_salt)Úweakc            	      óB  •— | r	| d   dk7  ry ‰‰j                   u sJ ‚t        j                  D �cg c]  } ‰ t        |«      «       «      ‘Œ }}d|v rd|vr|j	                  d«       |j	                  d«       ‰j                  |d¬«       ‰j                  «        y c c}w )NÚsettingÚPASSWORD_HASHERSÚhex_md5Údjango_salted_md5Údjango_disabledÚauto)ÚschemesÚ
deprecated)Úcontextr   r8   r&   ÚappendÚupdateÚreset_hashers)ÚkwdsÚ	hash_pathr=   r,   r?   Údjango_to_passlib_names      €€€r   Úupdate_schemesz)HashersTest.setUp.<locals>.update_schemes�   s¬   ø€ á˜D ™OÐ/AÒAØØ '§/¡/Ñ1Ð1Ð1ô &.×%>Ò%>óá%>˜	ñ +Ð+C¬=¸Ó+CÓ+EÕFØ%>ð ð ð  Ñ'Ð,?ÀwÑ,NØ—N‘NÐ#6Ô7Ø—‘Ð0Ô1Ø—‘ w¸6�ÔBØ×%Ñ%Õ'ùòs   ¯Bc                  óþ   •— ‰j                  d¬«      D ]g  } d| j                  vrŒ‰j                  | «      }t        |t        «      rŒ4t        |dd«      xs t        |dd«      }|€ŒS|x| _        x| _        | _        Œi y)zN
                sync django hasher config -> passlib hashers
                T)ÚresolveÚroundsNÚ
iterations)	r=   Úsetting_kwdsÚpasslib_to_djangoÚ
isinstancer	   ÚgetattrÚmin_desired_roundsÚmax_desired_roundsÚdefault_rounds)ÚhandlerÚhasherrI   r,   r?   s      €€r   Úupdate_roundsz(HashersTest.setUp.<locals>.update_rounds«   s�   ø€ ð  'Ÿ™°t˜Ö<�GØ w×';Ñ';Ñ;Ø Ø$×6Ñ6°wÓ?�FÜ! &Ô*?Ô@Ø Ü$ V¨X°tÓ<ò AÜ$ V¨\¸4Ó@ð à�~Ø ð hnÐm�GÔ.Ðm°Ô1KÈgÕNdñ  =ó    c                 óV   •— ‰d   sd‰d<   	  ‰«        d‰d<    | |i |¤ŽS # d‰d<   w xY w)zY
                wrapper around arbitrary func, that first triggers sync
                r   TF© )ÚwrappedÚargsrC   Ú
_in_updaterT   s      €€r   Úupdate_wrapperz)HashersTest.setUp.<locals>.update_wrapperÀ   sE   ø€ ð " !’}Ø$(�J˜q‘Mð.Ù%œà(-˜
 1™Ù Ð-¨Ñ-Ð-øð ).˜
 1šús   �! ¡()r=   rR   Údefault_schemeÚhashÚverifyÚneeds_updateÚverify_and_updateT)ÚwrapÚdjango_to_passlib)Úload_extensionr   Úpasslib.ext.django.modelsr,   r?   Údjango.contrib.authr-   Ú	patchAttrÚtest_hashers_modrN   Úpasslib.hashr3   r   rE   r%   r$   Ú
addCleanupÚ
disconnect)Úselfr-   Úattrr3   rF   r[   rZ   r,   r?   rE   rT   s         @@@@@r   ÚsetUpzHashersTest.setUpn   sù   ü€ ð ×Ñ´ÀEÐÔJÝ9Ø—o‘oˆGõ 4ó'�ð
 —‘Ô/°´w¸wÈÓ7MÕNð'õ 6Ø�N‰NÐ+Ð-AÀ5ÔIô
 &6Ó%7×%NÑ%NÐ"ä”o¨EÔ2õ(ó 3ð(ð  �O‰OœO×6Ñ6¸ÔGáÔõnð&  ˜ˆJõ
.óH�à—‘˜w¨¨nÀ4�ÕHðHð
 �N‰N˜7Ð$7¸ÈdˆNÕSrU   c                 óJ   •— | j                  «        t        t        | �  «        y r   )Úunload_extensionÚsuperr   ÚtearDown)rk   Ú	__class__s    €r   rq   zHashersTest.tearDownÔ   s   ø€ à×!Ñ!Ô#Ü”+˜tÑ-Õ/rU   c                 ó$   — | j                  d«      S )Nzomitted by passlib)ÚskipTest©rk   s    r   Ú<lambda>zHashersTest.<lambda>Þ   s   € ˜TŸ]™]Ð+?Ô@rU   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r'   r
   rf   rm   rq   Ú_OMITÚtest_pbkdf2_upgrade_new_hasherÚ(test_check_password_calls_harden_runtimeÚtest_bcrypt_harden_runtimeÚtest_pbkdf2_harden_runtimeÚ__classcell__)rr   s   @r   r   r   ^   sK   ø„ ñ	ñ 0°×0BÑ0BÓCˆ	ò
d	TôL	0ñ Aˆð
 */Ð&ð 49Ð0Ø%*Ð"Ø%*Ô"rU   c                   ó   — e Zd Zd„ Zy)r   c                 ó,   — | j                  t        «      ‚)zexternal django hasher tests)rt   Úhashers_skip_msgru   s    r   Ú!test_external_django_hasher_testsz-HashersTest.test_external_django_hasher_testsô   s   € à—-‘-Ô 0Ó1Ð1rU   N)rw   rx   ry   r„   rW   rU   r   r   r   ò   s   „ ó	2rU   )7rz   Ú
__future__r   r   r   ÚloggingÚ	getLoggerrw   ÚlogÚpasslib.utils.compatr   Úpasslib.ext.django.utilsr   r   r	   Úpasslib.tests.utilsr
   r   Útest_ext_djangor   r   r   r   Ú__all__rg   rƒ   r   ÚsysÚenvironÚgetr   r   r   ÚEnvironmentErrorÚallÚinfor   Ú
tests_pathÚinsertÚ
auth_testsr"   ÚImportErrorÚerrÚremoveÚstderrÚwriteÚdjango.core.signalsr$   Údjango.dispatchr%   Údjango.utils.module_loadingr&   r'   ÚTestUtilsHashPassr   rW   rU   r   Ú<module>r       sá  ðñ÷ AÑ @ã Ð'�g×'Ñ'¨Ó1�õ 0ß \Ñ \ç 3÷ñ ñ Ý)ð ð€ð Ð ð Ð ñ �ÕØ8ÒáÛÛØ—*‘*—.‘.Ð!CÓD€KáØ�w‰w�~‰~˜kÔ*Ù"Ð#EÈÑ#SÓTÐTÙñ 4Ù2ó4ô 4á"Ð#CÀkÑ#QÓRÐRØ�‰Ð:¸KÔHØ—W‘W—\‘\ +¨wÓ7ˆ
Ø�‰�‰˜˜:Ô&ð	(ÞCð �H‰H�O‰O˜JÕ'ð QÐá�VÔà�J‰J×Ñð ]õ ^ñ Ø/Ñð .Ðñ Ý3Ý(Ý9Ý@ôK+Ð&×8Ñ8Ð:Kõ K+ôh2�hõ 2øði ò 	6Ù Ú â"-©sð"4ó 5ó6ð 6ûð	6ûð �H‰H�O‰O˜JÕ'ús$   ÄF  Æ F>Æ%F9Æ9F>Æ>G ÇG