
    \j6/                         d dl Z d dlmZ d dlmZ d dlmZ d dlmZ  eddd      Z	 ed	dd      Z
d
 Z G d d      Z G d de      Z G d d      Zy)    N)sleep)CacheConfig)CachingStoreWrapper)VersionedDataKindthings )	namespacerequest_api_pathstream_api_pathwrongc                 b    t        | |rt        d            S t        j                               S )N   
expiration)r   r   disabled)corecacheds     L/root/env/lib/python3.12/site-packages/testing/test_feature_store_helpers.pymake_wrapperr      s'    t6[B%?ff{OcOcOeff    c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)MockCorec                 <    i | _         d| _        d| _        d | _        y )NFr   )datainitedinited_query_counterrorselfs    r   __init__zMockCore.__init__   s    	"#
r   c                     | j                          i | _        |j                         D ]"  \  }}|j                         | j                  |<   $ y N)_maybe_throwr   itemscopy)r   all_datakindr$   s       r   init_internalzMockCore.init_internal   sB    	#>>+ 	+KD%#jjlDIIdO	+r   c                     | j                          | j                  j                  |      }|d S |j                  |      S r"   r#   r   getr   r'   keyr$   s       r   get_internalzMockCore.get_internal   s7    		d#}t8%))C.8r   c                 X    | j                          | j                  j                  |      S r"   r*   )r   r'   s     r   get_all_internalzMockCore.get_all_internal    s!    yy}}T""r   c                    | j                          |j                  d      }| j                  j                  |      }|i }|| j                  |<   |j                  |      }|#|j                  d      |j                  d      k  r|||<   |S |S )Nr-   version)r#   r+   r   )r   r'   itemr-   r$   old_items         r   upsert_internalzMockCore.upsert_internal$   s    hhuo		d#=E#DIIdO99S>x||I6)9LLE#JKr   c                 b    | j                          | j                  dz   | _        | j                  S )N   )r#   r   r   r   s    r   initialized_internalzMockCore.initialized_internal1   s+    "&"9"9A"={{r   c                 4    | j                   | j                   y r"   )r   r   s    r   r#   zMockCore._maybe_throw6   s    ::!** "r   c                     | j                   j                  |      }|i }|| j                   |<   |||j                  d      <   y )Nr-   )r   r+   )r   r'   r3   r$   s       r   	force_setzMockCore.force_set:   s=    		d#=E#DIIdO!%dhhuor   c                 d    | j                   j                  |      }||j                  |d        y y r"   )r   r+   popr,   s       r   force_removezMockCore.force_removeA   s-    		d#IIc4  r   N)__name__
__module____qualname__r    r(   r.   r0   r5   r8   r#   r;   r>    r   r   r   r      s/    +9
#
&!r   r   c                       e Zd Zy)CustomErrorN)r?   r@   rA   rB   r   r   rD   rD   F   s    r   rD   c                       e Zd Zej                  j                  dddg      d        Zej                  j                  dddg      d        Zej                  j                  dddg      d        Zej                  j                  dddg      d        Z	d Z
ej                  j                  dddg      d	        Zej                  j                  dddg      d
        Zej                  j                  dddg      d        Zej                  j                  dddg      d        Zej                  j                  dddg      d        Zd Zej                  j                  dddg      d        Zej                  j                  dddg      d        Zd Zej                  j                  dddg      d        Zej                  j                  dddg      d        Zej                  j                  dddg      d        Zd Zd Zd Zy)TestCachingStoreWrapperr   FTc                    t               }t        ||      }d}|dd}|dd}|j                  t        |       |j	                  t        |      |k(  sJ |j                  t        |       |j	                  t        |      |r|n|k(  sJ y )Nflagr7   r-   r2      r   r   r;   THINGSr+   r   r   r   wrapperr-   itemv1itemv2s          r   test_get_itemz%TestCachingStoreWrapper.test_get_itemJ   s    ztV,!-!-vv&{{63'6111vv&{{63'fF&IIIr   c                    t               }t        ||      }d}|ddd}|dd}|j                  t        |       |j	                  t        |      J |j                  t        |       |j	                  t        |      |rd n|k(  sJ y )NrH   r7   Tr-   r2   deletedrJ   rI   rK   rM   s          r   test_get_deleted_itemz-TestCachingStoreWrapper.test_get_deleted_itemX   s    ztV,!>!-vv&{{63'///vv&{{63'FDGGGr   c                     t               }t        ||      }d}|dd}|j                  t        |      J |j	                  t        |       |j                  t        |      |rd n|k(  sJ y )NrH   r7   rI   )r   r   r+   rL   r;   )r   r   r   rN   r-   r3   s         r   test_get_missing_itemz-TestCachingStoreWrapper.test_get_missing_itemf   sf    ztV,+{{63'///vt${{63'FDEEEr   c                     t               }t        ||      }d}|dd}|dd|j                  t        |       |j	                  t        |fd      k(  sJ y )NrH   r7   rI   c   c                     S r"   rB   )xmodified_items    r   <lambda>z>TestCachingStoreWrapper.test_get_with_lambda.<locals>.<lambda>{   s    - r   rK   )r   r   r   rN   r-   r3   r\   s         @r   test_get_with_lambdaz,TestCachingStoreWrapper.test_get_with_lambdar   sY    ztV,+!$5vt${{63(?@MQQQr   c                     t               }t        |d      }ddd}ddd}|j                  t        |d   ||d   |ii       |j	                  t        |d          |j                  t        |d         |k(  sJ y NTflag1r7   rI   flag2r-   )r   r   initrL   r>   r+   )r   r   rN   item1item2s        r   %test_cached_get_uses_values_from_initz=TestCachingStoreWrapper.test_cached_get_uses_values_from_init}   s|    ztT* Q0 Q0vuueElEKMN&%,/{{65<0E999r   c                     t               }t        ||      }t               |_        t	        j
                  t              5  |j                  t        dd        d d d        y # 1 sw Y   y xY w)Nr-   c                     | S r"   rB   )r[   s    r   r]   zFTestCachingStoreWrapper.test_get_can_throw_exception.<locals>.<lambda>   s     r   )r   r   rD   r   pytestraisesr+   rL   r   r   r   rN   s       r   test_get_can_throw_exceptionz4TestCachingStoreWrapper.test_get_can_throw_exception   sO    ztV, ]
]];' 	4KK{3	4 	4 	4s   A!!A*c                    t               }t        ||      }ddd}ddd}|j                  t        |       |j                  t        |       |j	                  t              |d   ||d   |ik(  sJ |j                  t        |d          |r%|j	                  t              |d   ||d   |ik(  sJ y |j	                  t              |d   |ik(  sJ y )Nra   r7   rI   rb   r-   )r   r   r;   rL   allr>   r   r   r   rN   rd   re   s         r   test_get_allz$TestCachingStoreWrapper.test_get_all   s    ztV, Q0 Q0vu%vu%{{6"eeU5\5&RRRR&%,/;;v&E%L%uu*VVVV;;v&E%L%*AAAAr   c                     t               }t        ||      }ddd}dddd}|j                  t        |       |j                  t        |       |j	                  t              |d   |ik(  sJ y )Nra   r7   rI   rb   TrS   r-   r   r   r;   rL   rn   ro   s         r   "test_get_all_removes_deleted_itemsz:TestCachingStoreWrapper.test_get_all_removes_deleted_items   sg    ztV, Q0 Q4Avu%vu%{{6"ee&====r   c                 d    t               }t        ||      }|j                  t              i k(  sJ y r"   )r   r   rn   WRONG_THINGSrk   s       r   'test_get_all_changes_None_to_empty_dictz?TestCachingStoreWrapper.test_get_all_changes_None_to_empty_dict   s,    ztV,{{<(B...r   c                     t               }t        ||      }ddiddd}ddd}|j                  t        |       |j                  t        |       |j	                  t        fd      |d   ||d   |ddik(  sJ y )	NextraTra   r7   rI   rb   c                     t        | fi S r"   )dict)r[   rx   s    r   r]   zCTestCachingStoreWrapper.test_get_all_iwith_lambda.<locals>.<lambda>   s    T!-=u-= r   r-   rr   )r   r   r   rN   rd   re   rx   s         @r   test_get_all_iwith_lambdaz1TestCachingStoreWrapper.test_get_all_iwith_lambda   s    ztV,4! Q0 Q0vu%vu%{{6#=>%L%uugtC
 
 	
 
r   c                     t               }t        |d      }ddd}ddd}|d   ||d   |i}|j                  t        |i       |j	                  t        |d          |j                  t              |k(  sJ y r`   )r   r   rc   rL   r>   rn   )r   r   rN   rd   re   boths         r   )test_cached_get_all_uses_values_from_initzATestCachingStoreWrapper.test_cached_get_all_uses_values_from_init   s{    ztT* Q0 Q0uueElE;vt%&&%,/{{6"d***r   c                     t               }t        ||      }t               |_        t	        j
                  t              5  |j                  t               d d d        y # 1 sw Y   y xY wr"   )r   r   rD   r   ri   rj   rn   rL   rk   s       r    test_get_all_can_throw_exceptionz8TestCachingStoreWrapper.test_get_all_can_throw_exception   sK    ztV, ]
]];' 	 KK	  	  	 s   AA'c                 |   t               }t        ||      }d}|dd}|dd}|j                  t        |       |j                  t           |   |k(  sJ |j                  t        |       |j                  t           |   |k(  sJ |r|dd}|j                  t        |       |j                  t        |      |k(  sJ y )NrH   r7   rI   rJ      r   r   upsertrL   r   r;   r+   r   r   r   rN   r-   rO   rP   itemv3s           r   test_upsert_successfulz.TestCachingStoreWrapper.test_upsert_successful   s    ztV,!-!-vv&yy %///vv&yy %/// !a1FNN66*{{63'6111r   c                 x   t               }t        |d      }d}|dd}|dd}|j                  t        |       |j                  t           |   |k(  sJ |j                  t        |       |j                  t           |   |k(  sJ |dd}|j                  t        |       |j                  t        |      |k(  sJ y )NTrH   r7   rI   rJ   r   r   )r   r   rN   r-   rO   rP   r   s          r   test_cached_upsert_unsuccessfulz7TestCachingStoreWrapper.test_cached_upsert_unsuccessful   s    
 ztT*!-!-vv&yy %///vv&yy %///!-vv&{{63'6111r   c                     t               }t        ||      }t               |_        t	        j
                  t              5  |j                  t        ddd       d d d        y # 1 sw Y   y xY w)Nr[   r7   rI   )r   r   rD   r   ri   rj   r   rL   rk   s       r   test_upsert_can_throw_exceptionz7TestCachingStoreWrapper.test_upsert_can_throw_exception   sV    ztV, ]
]];' 	ANN6CA#?@	A 	A 	As   A""A+c                    t               }t        ||      }d}|dd}|ddd}|dd}|j                  t        |       |j	                  t        |      |k(  sJ |j                  t        |d       |j                  t           |   |k(  sJ |j                  t        |       |j	                  t        |      |rd n|k(  sJ y )NrH   r7   rI   rJ   TrS   r   )r   r   r;   rL   r+   deleter   r   s           r   test_deletez#TestCachingStoreWrapper.test_delete  s    ztV,!-!>!-vv&{{63'6111vsA&yy %///vv&{{63'FDGGGr   c                     t               }t        ||      }t               |_        t	        j
                  t              5  |j                  t        dd       d d d        y # 1 sw Y   y xY w)Nr[   r7   )r   r   rD   r   ri   rj   r   rL   rk   s       r   test_delete_can_throw_exceptionz7TestCachingStoreWrapper.test_delete_can_throw_exception  sO    ztV, ]
]];' 	+NN63*	+ 	+ 	+s   A  A)c                    t               }t        |d      }|j                  du sJ |j                  dk(  sJ d|_        |j                  du sJ |j                  dk(  sJ d|_        |j                  du sJ |j                  dk(  sJ y )NFr7   TrJ   )r   r   initializedr   r   r   r   rN   s      r   9test_uncached_initialized_queries_state_only_until_initedzQTestCachingStoreWrapper.test_uncached_initialized_queries_state_only_until_inited  s    ztU+""e+++&&!+++""d***&&!+++""d***&&!+++r   c                     t               }t        |d      }|j                  du sJ |j                  dk(  sJ |j	                  i        |j                  du sJ |j                  dk(  sJ y )NFr7   T)r   r   r   r   rc   r   s      r   Atest_uncached_initialized_does_not_query_state_if_init_was_calledzYTestCachingStoreWrapper.test_uncached_initialized_does_not_query_state_if_init_was_called.  sq    ztU+""e+++&&!+++R""d***&&!+++r   c                 p   t               }t        |t        d            }|j                  du sJ |j                  dk(  sJ d|_        |j                  du sJ |j                  dk(  sJ t        d       |j                  du sJ |j                  dk(  sJ |j                  du sJ |j                  dk(  sJ y )Ng?r   Fr7   Tg      ?rJ   )r   r   r   r   r   r   r   r   s      r   .test_cached_initialized_can_cache_false_resultzFTestCachingStoreWrapper.test_cached_initialized_can_cache_false_result:  s    z%dK3,GH""e+++&&!+++""e+++&&!+++c
""d***&&!+++ ""d***&&!+++r   N)r?   r@   rA   ri   markparametrizerQ   rU   rW   r^   rf   rl   rp   rs   rv   r{   r~   r   r   r   r   r   r   r   r   r   rB   r   r   rF   rF   I   sj   [[Xt}5J 6J [[Xt}5H 6H [[Xt}5	F 6	F [[Xt}5R 6R: [[Xt}54 64 [[Xt}5B 6B  [[Xt}5> 6> [[Xt}5/ 6/ [[Xt}5

 6

	+ [[Xt}5  6  [[Xt}52 62*2* [[Xt}5A 6A [[Xt}5H 6H" [[Xt}5+ 6+,
,,r   rF   )ri   timer   ldclient.feature_storer   ldclient.feature_store_helpersr   ldclient.versioned_data_kindr   rL   ru   r   r   	ExceptionrD   rF   rB   r   r   <module>r      s[      . > :	xBZ\	] W_abg6! 6!p	) 	C, C,r   