
    \j                     $   d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	 d dl
 d dlZdZ	 d dlZdZej                   j#                  e d	
      Z G d d      Z G d de      Z G d de      Z G d de      Z G d de      Zy# e$ r Y \w xY w)    )_DynamoDBBigSegmentStore)_DynamoDBFeatureStoreCore_DynamoDBHelpers)DynamoDB)UpdateProcessor)*NFTz=skipping DynamoDB tests because boto3 module is not installed)reasonc                   H    e Zd ZdZdZdddddZed        Zd	 Zed
        Z	y)DynamoDBTestHelperLD_DYNAMODB_TEST_TABLEFkeysecretzhttp://localhost:8000z	us-east-1)aws_access_key_idaws_secret_access_keyendpoint_urlregion_namec                  H    t        j                  di t        j                  S )N)dynamodb)boto3clientr   options     L/root/env/lib/python3.12/site-packages/testing/integrations/test_dynamodb.pymake_clientzDynamoDBTestHelper.make_client   s    ||E*<*D*DEEr   c                 l   t         j                         }g }t         j                  ddt        j                  t        j
                  dd} |j                  d      j                  d	i |D ]!  }|d   D ]  }|j                  dd|ii        # t        j                  |t         j                  |       y )
NTz#namespace, #key)z
#namespacez#key)	TableNameConsistentReadProjectionExpressionExpressionAttributeNamesscanItemsDeleteRequestKeyr   )r   r   
table_namer   PARTITION_KEYSORT_KEYget_paginatorpaginateappendr   batch_write_requests)prefixr   delete_requestsreqrespitems         r   clear_data_for_prefixz(DynamoDBTestHelper.clear_data_for_prefix#   s    #//1+66"$67EE1::)	
 :F((099@C@ 	MDW M&&E4/'KLM	M 	--f6H6S6SUder   c                  x   t         j                  ry dt         _        t         j                         } 	 | j                  t         j                         y # | j
                  j                  $ r Y nw xY wt         j                  t        j                  ddt        j                  ddgt        j                  ddt        j                  ddgddd	d
} | j                  di | 	 	 | j                  t         j                         y # | j
                  j                  $ r t        j                  d       Y nw xY wW)NT)r   HASH)AttributeNameKeyTypeRANGES)r4   AttributeType   )ReadCapacityUnitsWriteCapacityUnits)r   	KeySchemaAttributeDefinitionsProvisionedThroughputg      ?r   )r   table_createdr   describe_tabler%   
exceptionsResourceNotFoundExceptionr   r&   r'   create_tabletimesleep)r   r.   s     r   ensure_table_createdz'DynamoDBTestHelper.ensure_table_created4   s;   +++/(#//1	!!,>,I,I!J  :: 		 ,66 &?%L%L%
 &?%G%G&	 &?%L%L%(
 &?%G%G%(	% &'&'&-
6 	"c" %%0B0M0M%N$$>>  

3 	 s#    A A/.A/& D .D87D8N)
__name__
__module____qualname__r%   r?   r   staticmethodr   r1   rF   r   r   r   r   r      sO    )JM"!)/"	G F Ff" +  + r   r   c                   0     e Zd Z fdZdefdZd Z xZS )DynamoDBFeatureStoreTesterc                 J    t         |           t        j                          y Nsuper__init__r   rF   self	__class__s    r   rQ   z#DynamoDBFeatureStoreTester.__init__d       //1r   returnc                 l    t        j                  t        j                  ||t        j                        S )N)r,   cachingdynamodb_opts)r   new_feature_storer   r%   r   )rS   r,   rX   s      r   create_persistent_feature_storez:DynamoDBFeatureStoreTester.create_persistent_feature_storeh   s.    ))*<*G*G7:L:T:TV 	Vr   c                 .    t         j                  |       y rN   r   r1   rS   r,   s     r   
clear_dataz%DynamoDBFeatureStoreTester.clear_datal       008r   )rG   rH   rI   rQ   FeatureStorer[   r_   __classcell__rT   s   @r   rL   rL   c   s    2V, V9r   rL   c            	       d     e Zd Z fdZdefdZd ZdedefdZ	deded	e
e   d
e
e   fdZ xZS )DynamoDBBigSegmentTesterc                 J    t         |           t        j                          y rN   rO   rR   s    r   rQ   z!DynamoDBBigSegmentTester.__init__q   rU   r   rV   c                 j    t        j                  t        j                  |t        j                        S )N)r,   rY   )r   new_big_segment_storer   r%   r   r^   s     r   create_big_segment_storez1DynamoDBBigSegmentTester.create_big_segment_storeu   s,    --.@.K.K);)C)CE 	Er   c                 .    t         j                  |       y rN   r]   r^   s     r   r_   z#DynamoDBBigSegmentTester.clear_datay   r`   r   r,   metadatac                 T   t         j                         }|r|dz   nd}|t        j                  z   }|j	                  t         j
                  t        j                  d|it        j                  d|it        j                  d|j                  dnt        |j                        ii       y )N: r7   N)r   Item)r   r   r   KEY_METADATAput_itemr%   r&   r'   ATTR_SYNC_TIMElast_up_to_datestr)rS   r,   rk   r   actual_prefixr   s         r   set_metadataz%DynamoDBBigSegmentTester.set_metadata|   s    #//1(.B6CCC(33(66#s(11S#<(77x77?SIaIaEb: 	 		
r   	user_hashincludesexcludesc           	         t         j                         }|r|dz   nd}t        j                  |t        j                  |i}|j                         D ]s  \  }}	t        |	      dkD  s|j                  t         j                  t        j                  d|t        j                  z   it        j                  d|iid|z  dd|	ii       u y )	Nrm   rn   r   r7   zADD %s :valuez:valueSS)r   r$   UpdateExpressionExpressionAttributeValues)r   r   r   ATTR_INCLUDEDATTR_EXCLUDEDitemslenupdate_itemr%   r&   KEY_USER_DATAr'   )
rS   r,   rx   ry   rz   r   rv   sets	attr_namevaluess
             r   set_segmentsz%DynamoDBBigSegmentTester.set_segments   s    #//1(.B$22H$22H
 "& 
	Iv6{Q""0;;0>>#}WoW}W}G}@099S);M '6	&A08D&:J.L # 
	r   )rG   rH   rI   rQ   BigSegmentStoreri   r_   ru   BigSegmentStoreMetadatarw   Listr   rb   rc   s   @r   re   re   p   s[    2E/ E9
3 
2I 
3 3 $s) W[\_W` r   re   c                       e Zd Zed        Zy)TestDynamoDBFeatureStorec                     t         S rN   )rL   rS   s    r   tester_classz%TestDynamoDBFeatureStore.tester_class   s    ))r   NrG   rH   rI   propertyr   r   r   r   r   r      s    * *r   r   c                       e Zd Zed        Zy)TestDynamoDBBigSegmentStorec                     t         S rN   )re   r   s    r   r   z(TestDynamoDBBigSegmentStore.tester_class   s    ''r   Nr   r   r   r   r   r      s    ( (r   r   )>ldclient.impl.integrations.dynamodb.dynamodb_big_segment_storer   :ldclient.impl.integrations.dynamodb.dynamodb_feature_storer   r   ldclient.integrationsr   ldclient.interfacesr   0testing.integrations.big_segment_store_test_base7testing.integrations.persistent_feature_store_test_baserD   have_dynamodbr   ImportErrorpytestmarkskipif
pytestmarkr   PersistentFeatureStoreTesterrL   BigSegmentStoreTesterre   PersistentFeatureStoreTestBaser   BigSegmentStoreTestBaser   r   r   r   <module>r      s    c r * / > E 	M [[M 1:yz
K  K \
9!= 
9,4 ,^*= *("9 (m  		s   B BB