
    \j                     <   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ dZ	 d dlZdZd	d
gZdZdZdZdZdadadad Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d  Z-da.d! Z/d" Z0y# e$ r Y Xw xY w)#    N)LDClient)Config)InMemoryFeatureStore)Files)FEATURESSEGMENTSFTflag1flag2af  
  {
    "flags": {
      "flag1": {
        "key": "flag1",
        "on": true,
        "fallthrough": {
          "variation": 2
        },
        "variations": [ "fall", "off", "on" ]
      }
    },
    "flagValues": {
      "flag2": "value2"
    },
    "segments": {
      "seg1": {
        "key": "seg1",
        "include": ["user1"]
      }
    }
  }
z
---
flags:
  flag1:
    key: flag1
    "on": true
flagValues:
  flag2: value2
segments:
  seg1:
    key: seg1
    include: ["user1"]
z
  {
    "flags": {
      "flag1": {
        "key": "flag1",
        "on": true,
        "fallthrough": {
          "variation": 2
        },
        "variations": [ "fall", "off", "on" ]
      }
    }
  }
zm
  {
    "segments": {
      "seg1": {
        "key": "seg1",
        "include": ["user1"]
      }
    }
  }
c                  @    t               at        j                         ay N)r   store	threadingEventready     G/root/env/lib/python3.12/site-packages/testing/test_file_data_source.pysetup_functionr   \   s     "EOOEr   c                  :    t         t         j                          y y r   )data_sourcestopr   r   r   teardown_functionr   a   s     r   c                  j     t        j                  di | t        d      t        t              at
        S )NSDK_KEYr   )r   new_data_sourcer   r   r   r   )kwargss    r   make_data_sourcer   e   s+    1%''1&1&2CUERKr   c                     t        j                         \  }}t        j                  || j	                  d             t        j
                  |       |S )Nzlatin-1)tempfilemkstemposwriteencodeclose)contentfpaths      r   make_temp_filer(   j   s;     GAtHHQy)*HHQKKr   c                 h    t        | d      5 }|j                  |       d d d        y # 1 sw Y   y xY w)Nw)openr"   )r'   r%   r&   s      r   replace_filer,   p   s.    	dC A	  s   (1c                     t        d      } 	 t        |       }t        j                         du sJ |j	                         du sJ t
        j                  du sJ 	 t        j                  |        y # t        j                  |        w xY w)Nz{"flagValues":{"key":"value"}}pathsF)r(   r   r   is_setinitializedr   r!   remover'   sources     r   &test_does_not_load_data_prior_to_startr5   t   sr    :;D!$/||~&&&!!#u,,,  E)))
		$		$s   AA0 0Bc                  l   t        t              } 	 t        |       }|j                          t        j
                  du sJ t        t        t        j                  t        d       j                                     t        k(  sJ 	 t        j                  |        y # t        j                  |        w xY w)Nr.   Tc                     | S r   r   xs    r   <lambda>z5test_loads_flags_on_start_from_json.<locals>.<lambda>        r   )r(   all_properties_jsonr   startr   r1   sortedlistallr   keysall_flag_keysr!   r2   r3   s     r   #test_loads_flags_on_start_from_jsonrC   ~   s|    -.D!$/  D(((d599X{;@@BCDUUU
		$		$s   A4B B3c                     t         st        j                  d       t        t              } 	 t        |       }|j                          t        j                  du sJ t        t        t        j                  t        d       j                                     t        k(  sJ 	 t        j                   |        y # t        j                   |        w xY w)NBskipping file source test with YAML because pyyaml isn't availabler.   Tc                     | S r   r   r8   s    r   r:   z5test_loads_flags_on_start_from_yaml.<locals>.<lambda>   r;   r   )	have_yamlpytestskipr(   all_properties_yamlr   r=   r   r1   r>   r?   r@   r   rA   rB   r!   r2   r3   s     r   #test_loads_flags_on_start_from_yamlrK      s    XY-.D!$/  D(((d599X{;@@BCDUUU
		$		$s   A4B7 7Cc                     t        t              } 	 t        |       }|j                          |j	                         du sJ t
        j                         du sJ 	 t        j                  |        y # t        j                  |        w xY w)Nr.   T)	r(   r<   r   r=   r1   r   r0   r!   r2   r3   s     r   8test_sets_ready_event_and_initialized_on_successful_loadrM      sg    -.D!$/!!#t+++||~%%%
		$		$s   AA0 0Bc                      d} t        |       }|j                          |j                         du sJ t        j	                         du sJ y )Nzno-such-filer.   FT)r   r=   r1   r   r0   )bad_file_pathr4   s     r   Gtest_sets_ready_event_and_does_not_set_initialized_on_unsuccessful_loadrP      sE    "Mm4F
LLN5(((<<>T!!!r   c                     t        t              } t        t              }	 t        | |g      }|j	                          t        t        j                  t        d             dk(  sJ t        t        j                  t        d             dk(  sJ 	 t        j                  |        t        j                  |       y # t        j                  |        t        j                  |       w xY w)Nr.   c                     | S r   r   r8   s    r   r:   z.test_can_load_multiple_files.<locals>.<lambda>        r      c                     | S r   r   r8   s    r   r:   z.test_can_load_multiple_files.<locals>.<lambda>   rS   r   )r(   flag_only_jsonsegment_only_jsonr   r=   lenr   r@   r   r   r!   r2   path1path2r4   s      r   test_can_load_multiple_filesr\      s    >*E,-E!E5*:;599X{34999599X{34999
		%
		% 			%
		%s   A0B< <,C(c                     t        t              } t        t              }	 t        | |g      }|j                          t	        t
        j                  t        d             dk(  sJ 	 t        j                  |        t        j                  |       y # t        j                  |        t        j                  |       w xY w)Nr.   c                     | S r   r   r8   s    r   r:   z4test_does_not_allow_duplicate_keys.<locals>.<lambda>   rS   r   r   )
r(   rV   r   r=   rX   r   r@   r   r!   r2   rY   s      r   "test_does_not_allow_duplicate_keysr_      s    >*E>*E!E5*:;599X{34999
		%
		% 			%
		%s   AB ,B?c                     t        t              } 	 t        |       }|j                          t	        t
        j                  t        d             dk(  sJ t        j                  d       t        | t               t        j                  d       t	        t
        j                  t        d             dk(  sJ 	 t        j                  |        y # t        j                  |        w xY w)Nr.   c                     | S r   r   r8   s    r   r:   zJtest_does_not_reload_modified_file_if_auto_update_is_off.<locals>.<lambda>   rS   r   r         ?c                     | S r   r   r8   s    r   r:   zJtest_does_not_reload_modified_file_if_auto_update_is_off.<locals>.<lambda>   rS   r   r(   rV   r   r=   rX   r   r@   r   timesleepr,   rW   r!   r2   r3   s     r   8test_does_not_reload_modified_file_if_auto_update_is_offrg      s    .)D	!$/599X{34999

3T,-

3599X{34999
		$		$s   B(C C'c                 r   t        t              }|| d<   	 t        d
i | }|j                          t	        t
        j                  t        d             dk(  sJ t        j                  d       t        |t               t        j                         dz   }t        j                         |k  rkt        j                  d       t	        t
        j                  t        d             dk(  r	 t        j                  |       y t        j                         |k  rkJ d	       # t        j                  |       w xY w)Nr/   c                     | S r   r   r8   s    r   r:   z%do_auto_update_test.<locals>.<lambda>   rS   r   r   rb   
   皙?c                     | S r   r   r8   s    r   r:   z%do_auto_update_test.<locals>.<lambda>   rS   r   rT   z(Flags were not reloaded after 10 secondsr   rd   )optionsr'   r4   deadlines       r   do_auto_update_testro      s    .)DGG!,G,599X{34999

3T,-99;#iikH$JJsO599X{349 			$ iikH$ 	A@@u
		$s   CD  D D D6c                      t        ddi       y )Nauto_updateTro   r   r   r   /test_reloads_modified_file_if_auto_update_is_onrs      s    -/0r   c                  "    t        dddd       y )NTrk   )rq   force_pollingpoll_intervalrr   r   r   r   *test_reloads_modified_file_in_polling_moderw      s    WZ\]r   c                  d   t        t              } 	 t        j                  |       }t	        t        d|d            }|j                  dddid	      }|d
k(  sJ 	 t        j                  |        ||j                          y y # t        j                  |        |j                          w w xY w)Nr.   r   Fupdate_processor_classsend_eventsconfigr	   keyuser on
r(   r<   r   r   r   r   	variationr!   r2   r$   r'   factoryclientvalues       r   0test_evaluates_full_flag_with_client_as_expectedr      s    -.D''5	Gch!ij  E6*;R@}}
		$LLN  			$LLN    A
B *B/c                  d   t        t              } 	 t        j                  |       }t	        t        d|d            }|j                  dddid	      }|d
k(  sJ 	 t        j                  |        ||j                          y y # t        j                  |        |j                          w w xY w)Nr.   r   Fry   r|   r
   r~   r   r   value2r   r   s       r   6test_evaluates_simplified_flag_with_client_as_expectedr      s    -.D''5	Gch!ij  E6*;R@   
		$LLN  			$LLN r   c                     da y )NT)&unsafe_yaml_caused_method_to_be_calledr8   s    r   !arbitrary_method_called_from_yamlr      s    -1*r   c                  r   t         st        j                  d       d} t        |       }	 t	        j
                  |      }t        t        d|d            }t        j                  |       ||j                          	 t        dk(  sJ y # t        j                  |       |j                          w w xY w)NrE   z^
!!python/object/apply:testing.test_file_data_source.arbitrary_method_called_from_yaml ["hi"]
r.   r   Fry   r|   )rG   rH   rI   r(   r   r   r   r   r!   r2   r$   r   )unsafe_yamlr'   r   r   s       r   test_does_not_allow_unsafe_yamlr      s    XYK +&D''5	Gch!ij
		$LLN1U::: 			$LLN s   .B *B6)1jsonr!   rH   r   r   re   ldclient.clientr   ldclient.configr   ldclient.feature_storer   ldclient.integrationsr   ldclient.versioned_data_kindr   r   rG   yamlImportErrorrB   r<   rJ   rV   rW   r   r   r   r   r   r   r(   r,   r5   rC   rK   rM   rP   r\   r_   rg   ro   rs   rw   r   r   r   r   r   r   r   r   <module>r      s     	     $ " 7 ' ;		I
 7$ 0 	  


"
	$1^

 */ &2;[  		s   B BB