a fŸWc+ã @sdZddlmZmZmZddlZe e¡Zddl m Z ddl m Z m Z mZddlmZmZddlmZmZmZer~dd lmZd gZdZdZed d �ržd Z�n e�r®ddlZddlZej d¡Ze�r’ej  e¡sÞe!deƒ‚e"dd„dDƒƒsüe!deƒ‚e #de¡ej $ed¡Z%ej &de%¡z\zddl'm(ZWn:e)�ypZ*z e e!dee*fƒƒ‚WYdZ*[*n dZ*[*00Wej +e%¡nej +e%¡0ndZedƒ�r¾ej, -d¡ne �rºdZndZe�r ddl.m/Z/ddl0m1Z1ddl2m3Z3dd l m4Z4Gd!d „d ej5eƒZ6nGd"d „d eƒZ6dS)#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Ú HashersTestZquick)Úmaxzrequires >= 'default' test modeZ PASSLIB_TESTS_DJANGO_SOURCE_PATHz django source path not found: %rccs$|]}tj tj t|¡¡VqdS©N)ÚosÚpathÚexistsÚjoinÚ source_path)Ú.0Úname©rúH/usr/lib/python3.9/site-packages/passlib/tests/test_ext_django_source.pyÚ 6sÿr)ZdjangoÚtestszinvalid django source path: %rz'using django tests from source path: %rr)Ú test_hashersz=error trying to import django tests from source path (%r): %rz3requires PASSLIB_TESTS_DJANGO_SOURCE_PATH to be setZfullzt WARNING: $PASSLIB_TESTS_DJANGO_SOURCE_PATH is not set; can't run Django's own unittests against passlib.ext.django zdjango version too oldzdjango not installed)Úsetting_changed)Úreceiver©Ú import_string)Úget_unbound_method_functioncsJeZdZdZeejƒZdd„Z‡fdd„Zdd„Z e Z e Z e Z e Z ‡ZS)rzq Run django's hasher unittests against passlib's extension and workalike implementations csð|jtdd�ddlm‰ˆj‰ddlm}dD]}| t|t ||ƒ¡q0ddl m }| |dd¡t ƒj ‰ttdd �‡‡‡fd d „ƒ}| tj|¡|ƒ‡‡fd d „‰dg‰‡‡fdd„}dD]}|jˆ||dd�qÂ|jˆd|dd�dS)NF)ZPASSLIB_CONTEXTÚcheckr)Úadapter)Úhashers)Z make_passwordZcheck_passwordZidentify_hasherZis_password_usableZ get_hasher)Údjango_des_cryptZuse_duplicate_salt)Zweakcst|r|ddkrdSˆˆjus"J‚‡fdd„tjDƒ}d|vrPd|vrP| d¡| d¡ˆj|dd �ˆ ¡dS) NZsettingÚPASSWORD_HASHERScsg|]}ˆt|ƒƒƒ‘qSrr!)rZ hash_path)Údjango_to_passlib_namerrÚ ’sÿz=HashersTest.setUp..update_schemes..Zhex_md5Zdjango_salted_md5Zdjango_disabledÚauto)ÚschemesZ deprecated)Úcontextrr(ÚappendÚupdateZ reset_hashers)Úkwdsr,)r%r-r)rrÚupdate_schemes�s þ  z)HashersTest.setUp..update_schemescslˆjdd�D]Z}d|jvrq ˆ |¡}t|tƒr2q t|ddƒpHt|ddƒ}|durTq ||_|_|_q dS)zN sync django hasher config -> passlib hashers T)ÚresolveÚroundsNZ iterations) r,Z setting_kwdsZpasslib_to_djangoÚ isinstancerÚgetattrZmin_desired_roundsZmax_desired_roundsZdefault_rounds)ÚhandlerZhasherr3)r%r-rrÚ update_rounds«s     ÿz(HashersTest.setUp..update_roundsc s<ˆds.dˆd<zˆƒWdˆd<n dˆd<0||i|¤ŽS)zY wrapper around arbitrary func, that first triggers sync rTFr)ÚwrappedÚargsr0)Ú _in_updater7rrÚupdate_wrapperÀs z)HashersTest.setUp..update_wrapper)r,r6Zdefault_schemeÚhashZverifyZ needs_updateZverify_and_updateT)ÚwrapZdjango_to_passlib)Zload_extensionr Zpasslib.ext.django.modelsr%r-Zdjango.contrib.authr&Ú patchAttrÚtest_hashers_modr5Z passlib.hashr'rr)r rZ addCleanupZ disconnect)Úselfr&Úattrr'r1r;r)r:r%r-r)r7rÚsetUpns&      zHashersTest.setUpcs| ¡tt|ƒ ¡dSr)Zunload_extensionÚsuperrÚtearDown©r@©Ú __class__rrrDÔszHashersTest.tearDowncCs | d¡S)Nzomitted by passlib)ÚskipTestrErrrÚÞózHashersTest.)Ú__name__Ú __module__Ú __qualname__Ú__doc__r#r r>rBrDZ_OMITZtest_pbkdf2_upgrade_new_hasherZ(test_check_password_calls_harden_runtimeZtest_bcrypt_harden_runtimeZtest_pbkdf2_harden_runtimeÚ __classcell__rrrFrr^s f c@seZdZdd„ZdS)rcCs| t¡‚dS)zexternal django hasher testsN)rHÚhashers_skip_msgrErrrÚ!test_external_django_hasher_testsôsz-HashersTest.test_external_django_hasher_testsN)rKrLrMrQrrrrròs)7rNZ __future__rrrZloggingZ getLoggerrKÚlogZpasslib.utils.compatrZpasslib.ext.django.utilsrrrZpasslib.tests.utilsr r Ztest_ext_djangor r rrÚ__all__r?rPrÚsysÚenvironÚgetrrrÚEnvironmentErrorÚallÚinforZ tests_pathÚinsertZ auth_testsrÚ ImportErrorÚerrÚremoveÚstderrÚwriteZdjango.core.signalsrZdjango.dispatchr Zdjango.utils.module_loadingr"r#ZTestUtilsHashPassrrrrrÚsf  ÿ     ÿ  þÿ