U
    q\j+                  
   @   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rdZnerddlZddlZejdZerej ese!de e"dd dD se!de e#de ej$edZ%ej&de% zNzddl(m)Z W n8 e*k
rn Z+ ze
e!dee+f W 5 dZ+[+X Y nX W 5 ej'e% X n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Z6n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   [/root/pica-gateway/venv/lib/python3.8/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	|| q0d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 q| 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 ks"tfddtjD }d|krPd|krP|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)contextAssertionErrorr   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 ]Z} d| jkrq | }t|tr2qt|ddpHt|dd}|dkrTq| | _ | _| _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hasherr7   )r'   r0   r   r   update_rounds   s    



z(HashersTest.setUp.<locals>.update_roundsc              	      s0    d s&d d< z
  W 5 d d< X | ||S )zY
                wrapper around arbitrary func, that first triggers sync
                r   TFr   )wrappedargsr4   )
_in_updater;   r   r   update_wrapper   s    

z)HashersTest.setUp.<locals>.update_wrapper)r.   r:   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_modr9   Zpasslib.hashr)   r   r+   r"   r!   Z
addCleanupZ
disconnect)selfr(   attrr)   r5   r?   r   )r>   r'   r0   r+   r;   r   setUpn   s&    
zHashersTest.setUpc                    s   |    tt|   d S r   )Zunload_extensionsuperr   tearDownrE   	__class__r   r   rI      s    zHashersTest.tearDownc                 C   s
   |  dS )Nzomitted by passlib)skipTestrJ   r   r   r   <lambda>       zHashersTest.<lambda>)__name__
__module____qualname____doc__r%   r	   rC   rG   rI   Z_OMITZtest_pbkdf2_upgrade_new_hasherZ(test_check_password_calls_harden_runtimeZtest_bcrypt_harden_runtimeZtest_pbkdf2_harden_runtime__classcell__r   r   rK   r   r   ^   s   

f
c                   @   s   e Zd Zdd ZdS )r   c                 C   s   |  tdS )zexternal django hasher testsN)rM   hashers_skip_msgrJ   r   r   r   !test_external_django_hasher_tests   s    z-HashersTest.test_external_django_hasher_testsN)rP   rQ   rR   rV   r   r   r   r   r      s   )7rS   
__future__r   r   r   logging	getLoggerrP   logZpasslib.utils.compatr   Zpasslib.ext.django.utilsr   r   r   Zpasslib.tests.utilsr	   r
   Ztest_ext_djangor   r   r   r   __all__rD   rU   r   sysenvirongetr   r   r   EnvironmentErrorallinfor   Z
tests_pathinsertremoveZ
auth_testsr   ImportErrorerrstderrwriteZdjango.core.signalsr!   Zdjango.dispatchr"   Zdjango.utils.module_loadingr$   r%   ZTestUtilsHashPassr   r   r   r   r   <module>   sh    


 