o
    _6d+                  
   @   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HashersTestZquick)maxzrequires >= 'default' test modeZ 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   {C:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\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)ZPASSLIB_CONTEXTcheckr   )adapter)hashers)Zmake_passwordZcheck_passwordZidentify_hasherZis_password_usableZ
get_hasher)django_des_cryptZuse_duplicate_salt)Z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 )
NZsettingPASSWORD_HASHERSc                    s   g | ]	} t | qS r   r#   )r   Z	hash_path)django_to_passlib_namer   r   
<listcomp>   s    z=HashersTest.setUp.<locals>.update_schemes.<locals>.<listcomp>Zhex_md5Zdjango_salted_md5Zdjango_disabledauto)schemes
deprecated)contextr   r*   appendupdateZreset_hashers)kwdsr.   )r'   r0   r+   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roundsNZ
iterations)	r.   Zsetting_kwdsZpasslib_to_django
isinstancer   getattrZmin_desired_roundsZmax_desired_roundsZdefault_rounds)handlerZhasherr6   )r'   r0   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argsr3   )
_in_updater:   r   r   update_wrapper   s   z)HashersTest.setUp.<locals>.update_wrapper)r.   r9   Zdefault_schemehashverifyZneeds_updateZverify_and_updateT)wrapZdjango_to_passlib)Zload_extensionr   Zpasslib.ext.django.modelsr'   r0   Zdjango.contrib.authr(   	patchAttrtest_hashers_modr8   Zpasslib.hashr)   r   r+   r"   r!   Z
addCleanupZ
disconnect)selfr(   attrr)   r4   r>   r   )r=   r'   r0   r+   r:   r   setUpn   s&   
zHashersTest.setUpc                    s   |    tt|   d S r   )Zunload_extensionsuperr   tearDownrD   	__class__r   r   rH      s   zHashersTest.tearDownc                 C   s
   |  dS )Nzomitted by passlib)skipTestrI   r   r   r   <lambda>   s   
 zHashersTest.<lambda>)__name__
__module____qualname____doc__r%   r	   rB   rF   rH   Z_OMITZtest_pbkdf2_upgrade_new_hasherZ(test_check_password_calls_harden_runtimeZtest_bcrypt_harden_runtimeZtest_pbkdf2_harden_runtime__classcell__r   r   rJ   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)rL   hashers_skip_msgrI   r   r   r   !test_external_django_hasher_tests   s   
z-HashersTest.test_external_django_hasher_testsN)rN   rO   rP   rT   r   r   r   r   r      s    )7rQ   
__future__r   r   r   logging	getLoggerrN   logZpasslib.utils.compatr   Zpasslib.ext.django.utilsr   r   r   Zpasslib.tests.utilsr	   r
   Ztest_ext_djangor   r   r   r   __all__rC   rS   r   sysenvirongetr   r   r   EnvironmentErrorallinfor   Z
tests_pathinsertZ
auth_testsr   ImportErrorerrremovestderrwriteZdjango.core.signalsr!   Zdjango.dispatchr"   Zdjango.utils.module_loadingr$   r%   ZTestUtilsHashPassr   r   r   r   r   <module>   sp    
 