
     h+              	          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rddlZddlZej8                  j;                  d      Zere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     f/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/passlib/tests/test_ext_django_source.py	<genexpr>r   6   s4      4 77>>"'',,{D"AB 4s   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 &.%>%>! ++C=+C+EF  ',?w,NNN#6701w6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< nGw';';; $66w?F!&*?@ $VXt< A$V\4@ ~  hnmG.m1KgNdn    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     "!}$(JqM.%(-
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ooG 4' O
 /ww7MNO 6NN+-A5I
 &6%7%N%N"oE2( 3(  OOO66Gn&  J
.H Iwn4HI
 NN7$7dN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0B0B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DKww~~k*"#E#STT 42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$   F   F>%F99F>>G G