o
    [h+                  
   @   s  d Z ddlmZmZmZ ddlZe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drNdZnerddlZddlZejdZerej esle!de e"dd dD s{e!de e#de ej$edZ%ej&de% z'zddl'm(Z W n e)y Z* z
e
e!dee*f dZ*[*ww W ej+e% nej+e% w dZedrej,-d nerdZndZerddl.m/Z/ ddl0m1Z1 ddl2m3Z3 dd l	m4Z4 G d!d
 d
ej5eZ6dS G d"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                 c   s&    | ]}t jt jt|V  qd S N)ospathexistsjoinsource_path).0name r   f/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/passlib/tests/test_ext_django_source.py	<genexpr>6   s    r   )djangotestszinvalid 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 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                       sJ   e Zd ZdZeejZdd Z fddZdd Z	e	Z
e	Ze	Ze	Z  ZS )r   zq
        Run django's hasher unittests against passlib's extension
        and workalike implementations
        c                    s   | j tdd ddlm jddlm} dD ]}| t|t	|| qddl
m} | |dd t jttdd	fd
d}| tj| |  fdddg  fdd}dD ]}| j||dd qa| j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                     st   | r
| d dkr
d S  j u sJ fddtjD }d|v r(d|vr(|d |d j|dd	    d S )
NsettingPASSWORD_HASHERSc                    s   g | ]	} t | qS r   r%   )r   	hash_path)django_to_passlib_namer   r   
<listcomp>   s    z=HashersTest.setUp.<locals>.update_schemes.<locals>.<listcomp>hex_md5django_salted_md5django_disabledauto)schemes
deprecated)contextr   r5   appendupdatereset_hashers)kwdsr=   )r*   r?   r7   r   r   update_schemes   s   


z)HashersTest.setUp.<locals>.update_schemesc                     sl   j ddD ]-} d| jvrq | }t|trqt|ddp$t|dd}|du r*q| | _ | _| _qdS )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hasherrF   )r*   r?   r   r   update_rounds   s   



z(HashersTest.setUp.<locals>.update_roundsc              	      s<    d sd d< z	  W d d< nd d< w | |i |S )zY
                wrapper around arbitrary func, that first triggers sync
                r   TFr   )wrappedargsrC   )
_in_updaterQ   r   r   update_wrapper   s   z)HashersTest.setUp.<locals>.update_wrapper)r=   rO   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_modrK   passlib.hashr1   r   r7   r$   r#   
addCleanup
disconnect)selfr+   attrr1   rD   rU   r   )rT   r*   r?   r7   rQ   r   setUpn   s&   
zHashersTest.setUpc                    s   |    tt|   d S r   )unload_extensionsuperr   tearDownre   	__class__r   r   rj      s   zHashersTest.tearDownc                 C   s
   |  dS )Nzomitted by passlib)skipTestrk   r   r   r   <lambda>   s   
 zHashersTest.<lambda>)__name__
__module____qualname____doc__r'   r	   r`   rg   rj   _OMITtest_pbkdf2_upgrade_new_hasher(test_check_password_calls_harden_runtimetest_bcrypt_harden_runtimetest_pbkdf2_harden_runtime__classcell__r   r   rl   r   r   ^   s    

f
c                   @   s   e Zd Zdd ZdS )r   c                 C   s
   |  t)zexternal django hasher tests)rn   hashers_skip_msgrk   r   r   r   !test_external_django_hasher_tests   s   
z-HashersTest.test_external_django_hasher_testsN)rp   rq   rr   r{   r   r   r   r   r      s    )7rs   
__future__r   r   r   logging	getLoggerrp   logpasslib.utils.compatr   passlib.ext.django.utilsr   r   r   passlib.tests.utilsr	   r
   test_ext_djangor   r   r   r   __all__ra   rz   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   r   <module>   sp    
 