+
    i+              	          R t ^ RIHtHtHt ^ RIt]P                  ! ]4      t^ RI	H
t
 ^ RIHtHtHt ^ RIHtHt ^RIHtHtHt ]'       d   ^RIHt R.tRtRt]! R	R
7      '       d   RtEMP]'       Ed;   ^ RIt^ RIt]P8                  P;                  R4      t]'       d   ]P>                  PA                  ]4      '       g   ]!! R],          4      h]";QJ d    R R" 4       F  '       d   K   RM	  RM! R R" 4       4      '       g   ]!! R],          4      h]PG                  R]4       ]P>                  PI                  ]R4      t%]P>                  PM                  ^ ]%4        ^ RI'H(t  ]P>                  PW                  ]%4       M9Rt]! R4      '       d   ]PX                  P[                  R4       M]'       d   RtMRt]'       d1   ^ RI.H/t/ ^ RI0H1t1 ^ RI2H3t3 ^ RI	H4t4  ! R  R]Pj                  ]4      t6R#  ! R! R]4      t6R#   ]) d   t*]
! ]!! R]: R]*: 24      4      hRt*A*ii ; i  ]P>                  PW                  ]%4       i ; i)#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              #      "   T FF  p\         P                  P                  \         P                  P                  \        V4      4      x  KH  	  R # 5iN)ospathexistsjoinsource_path).0names   & b/var/www/html/photoedit/myenv/lib/python3.14/site-packages/passlib/tests/test_ext_django_source.py	<genexpr>r   6   s6      42t 77>>"'',,{D"ABB2s   AAtestsFTzinvalid django source path: %rz'using django tests from source path: %r)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                   v   a a ] tR t^^t oRt]! ]P                  4      tR tV 3R lt	R t
]
t]
t]
t]
tRtVtV ;t# )r   zY
Run django's hasher unittests against passlib's extension
and workalike implementations
c           	     &  aaaa	a
 V P                  \        R R7       ^ RIHo SP                  o^ RIHp R F#  pV P                  \        V\        W4      4       K%  	  ^ RI
Hp V P                  VRR 4       \        4       P                  o	\        \        R R7      VVV	3R l4       pV P!                  \        P"                  V4       V! 4        VV3R lo
R .oVV
3R	 lpR F  pV P                  SW%R
R7       K  	  V P                  SRVR
R7       R# )F)PASSLIB_CONTEXTcheck)adapter)hashers)django_des_cryptuse_duplicate_salt)weakc                  r  < V '       d   V R ,          R8w  d   R# SSP                   J g   Q h\        P                   Uu. uF  pS! \        V4      ! 4       4      NK  	  ppRV9   d   RV9  d   VP	                  R4       VP	                  R4       SP                  VRR7       SP                  4        R# u upi )settingPASSWORD_HASHERSNhex_md5django_salted_md5django_disabledauto)schemes
deprecated)contextr   r0   r#   appendupdatereset_hashers)kwds	hash_pathr5   r)   r7   django_to_passlib_names   ,  r   update_schemes)HashersTest.setUp.<locals>.update_schemes   s    DO/AA'//111 &.%>%>%>	 +=+C+EF%>   ',?w,NNN#6701w6B%%'s   B4c                 ,  < SP                  RR7       F|  p RV P                  9  d   K  SP                  V 4      p\        V\        4      '       d   K?  \        VRR4      ;'       g    \        VRR4      pVf   Kg  V;V n        ;V n        V n        K~  	  R# )z.
sync django hasher config -> passlib hashers
T)resolveroundsN
iterations)	r5   setting_kwdspasslib_to_django
isinstancer   getattrmin_desired_roundsmax_desired_roundsdefault_rounds)handlerhasherrB   r)   r7   s      r   update_rounds(HashersTest.setUp.<locals>.update_rounds   s      't<Gw';';; $66w?F!&*?@@ $VXt< A A$V\4@ ~  hnmG.m1KgNd  =    c                j   < S^ ,          '       g   RS^ &    S! 4        RS^ &   V ! V/ VB #   RS^ &   i ; i)z9
wrapper around arbitrary func, that first triggers sync
TF )wrappedargsr;   
_in_updaterM   s   &*,r   update_wrapper)HashersTest.setUp.<locals>.update_wrapper   sG     "!}}$(JqM.%(-
1--- ).
1s   + 2T)wrapdjango_to_passlibN)make_passwordcheck_passwordidentify_hasheris_password_usable
get_hasher)r5   rK   default_schemehashverifyneeds_updateverify_and_update)load_extensionr   passlib.ext.django.modelsr)   r7   django.contrib.authr*   	patchAttrtest_hashers_modrG   passlib.hashr+   r   r=   r"   r!   
addCleanup
disconnect)selfr*   attrr+   r>   rU   rT   r)   r7   r=   rM   s   &     @@@@@r   setUpHashersTest.setUpn   s     EJ9ooG 4'
 /ww7MN' 6NN+-A5I
 &6%7%N%N"oE2( 3(  OOO66Gn&  J
.Hw4HH
 NN7$7dNSrO   c                L   < V P                  4        \        \        V `  4        R # r   )unload_extensionsuperr   tearDown)rk   	__class__s   &r   rr   HashersTest.tearDown   s    !!#+t-/rO   c                $    V P                  R 4      # )zomitted by passlib)skipTestrk   s   &r   <lambda>HashersTest.<lambda>   s    T]]+?@rO   rQ   )__name__
__module____qualname____firstlineno____doc__r$   r	   rf   rm   rr   _OMITtest_pbkdf2_upgrade_new_hasher(test_check_password_calls_harden_runtimetest_bcrypt_harden_runtimetest_pbkdf2_harden_runtime__static_attributes____classdictcell____classcell__)rs   __classdict__s   @@r   r   r   ^   sP     	 00B0BC	
d	TL	0 A
 */& 490%*"%*""rO   c                   &   a  ] tR t^t o R tRtV tR# )r   c                ,    V P                  \        4      h)zexternal django hasher tests)rv   hashers_skip_msgrw   s   &r   !test_external_django_hasher_tests-HashersTest.test_external_django_hasher_tests   s    -- 011rO   rQ   N)rz   r{   r|   r}   r   r   r   )r   s   @r   r   r      s     	2 	2rO   )djangor   )7r~   
__future__r   r   r   logging	getLoggerrz   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   rQ   rO   r   <module>r      s   A @ g''1 0 \ \ 3  )      8^**..!CDKww~~k**"#E#STT 424sss 424 4 4"#Ck#QRR:KHWW\\+w7
:&	(C HHOOJ' QVJJ ] ^ / . 3(9@K+&88:K K+h2h 2i  	6  "-s"4 56 6	6 HHOOJ's$   !H H$	HH$$H' 'I