
    lg+              	          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nXerNddlZddlZej                            d          Zerej                             e          s e!dez             e"d dD                       s e!dez            e#                    de           ej        $                    ed          Z%ej        &                    de%           	 ddl'm(Z n'# e)$ rZ* e
 e!dede*                    dZ*[*ww xY w	 ej        +                    e%           nN# ej        +                    e%           w xY wdZ ed          re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j5        e          Z6dS  G d" d
e          Z6dS )#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   | ]F}t           j                            t           j                            t          |                    V  Gd S N)ospathexistsjoinsource_path).0names     _/var/www/html/nourish/venv/lib/python3.11/site-packages/passlib/tests/test_ext_django_source.py	<genexpr>r   6   sT       4 4 7>>"',,{D"A"ABB 4 4 4 4 4 4    )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                   ^     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           	      R  	
 |                      t          d           ddlm j        ddlm} dD ],}|                     t          |t          ||                     -ddl
m} |                     |dd           t                      j        	t          t          d	          	fd
            }|                     t          j        |            |             fd
dg
fd}dD ]}|                     ||d           |                     d|d           d S )NF)PASSLIB_CONTEXTcheckr   )adapter)hashers)make_passwordcheck_passwordidentify_hasheris_password_usable
get_hasher)django_des_cryptuse_duplicate_salt)weakc                  (   | r| d         dk    rd S j         u sJ fdt          j        D             }d|v rd|vr|                    d           |                    d                               |d                                            d S )	NsettingPASSWORD_HASHERSc                 P    g | ]"}  t          |                                #S  r'   )r   	hash_pathdjango_to_passlib_names     r   
<listcomp>z=HashersTest.setUp.<locals>.update_schemes.<locals>.<listcomp>   sE       ! +*+C=+C+C+E+EFF  r    hex_md5django_salted_md5django_disabledauto)schemes
deprecated)contextr   r:   appendupdatereset_hashers)kwdsrD   r.   rF   r>   s     r   update_schemesz)HashersTest.setUp.<locals>.update_schemes   s     DO/AAAF'/1111   %-%>   '',?w,N,NNN#67770111w6BBB%%'''''r    c                                          d          D ]q} d| j        vr                    |           }t          |t                    r7t          |dd          pt          |dd          }|\|x| _        x| _        | _        rdS )zN
                sync django hasher config -> passlib hashers
                T)resolveroundsN
iterations)	rD   setting_kwdspasslib_to_django
isinstancer	   getattrmin_desired_roundsmax_desired_roundsdefault_rounds)handlerhasherrN   r.   rF   s      r   update_roundsz(HashersTest.setUp.<locals>.update_rounds   s      't<< n nGw';;; $66w??F!&*?@@ ! $VXt<< A$V\4@@ ~  hnmG.m1KgNdNdn nr    c                 d    d         s dd<   	               dd<   n
# dd<   w xY w | |i |S )zY
                wrapper around arbitrary func, that first triggers sync
                r   TFr<   )wrappedargsrJ   
_in_updaterY   s      r   update_wrapperz)HashersTest.setUp.<locals>.update_wrapper   s_     "!} .$(JqM.%(-
1
1----w----s   
  ')rD   rW   default_schemehashverifyneeds_updateverify_and_updateT)wrapdjango_to_passlib)load_extensionr   passlib.ext.django.modelsr.   rF   django.contrib.authr/   	patchAttrtest_hashers_modrS   passlib.hashr5   r   r>   r&   r%   
addCleanup
disconnect)selfr/   attrr5   rK   r^   r]   r.   rF   r>   rY   s         @@@@@r   setUpzHashersTest.setUpn   s    EJJJ999999oG 433333' O O
 /ww7M7MNNNN
 655555NN+-A5III
 &6%7%7%N"oE222( ( ( ( ( ( 32(  OOO6GGGNn n n n n n&  J
. 
. 
. 
. 
. 
.H I Iwn4HHHH NN7$7dNSSSSSr    c                 ~    |                                   t          t          |                                            d S r   )unload_extensionsuperr   tearDown)rn   	__class__s    r   rt   zHashersTest.tearDown   s7    !!###+t$$--/////r    c                 ,    |                      d          S )Nzomitted by passlib)skipTestrn   s    r   <lambda>zHashersTest.<lambda>   s    T]]+?@@ r    )__name__
__module____qualname____doc__r)   r
   ri   rp   rt   _OMITtest_pbkdf2_upgrade_new_hasher(test_check_password_calls_harden_runtimetest_bcrypt_harden_runtimetest_pbkdf2_harden_runtime__classcell__)ru   s   @r   r   r   ^   s        	 	 0/0BCC	
d	T d	T d	TL	0 	0 	0 	0 	0 A@
 */& 490%*"%*"""""r    c                       e Zd Zd ZdS )r   c                 6    |                      t                    )zexternal django hasher tests)rw   hashers_skip_msgrx   s    r   !test_external_django_hasher_testsz-HashersTest.test_external_django_hasher_tests   s    -- 0111r    N)rz   r{   r|   r   r<   r    r   r   r      s#        	2 	2 	2 	2 	2r    )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__rj   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   r<   r    r   <module>r      s    A @ @ @ @ @ @ @ @ @ 'g'11 0 / / / / / \ \ \ \ \ \ \ \ \ \ 3 3 3 3 3 3 3 3           *))))))      9 '.8 $.IIIJJJ*..!CDDK ^w~~k** 	U""#E#STTTs 4 424 4 4 4 4 	S""#Ck#QRRR:KHHHW\\+w77
:&&&	(CCCCCCC 	6 	6 	6 .   "-++ss"4 5 56 6 6	6 D HOOJ''''CHOOJ'''' Q9V 	^J ] ^ ^ ^  ./ .  ^2333333((((((999999@@@@@@K+ K+ K+ K+ K+&8:K K+ K+ K+ K+ K+h2 2 2 2 2h 2 2 2 2 2s*   "D) (E, )E.EEE, ,F