
    ZTh                        d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	 d dl
Z
d dlZd dlmZmZ d dlmZmZ d dlmZmZmZ d dlmZ d d	lmZmZ  G d
 de      Z G d de      Z G d de      Zedededee   fd       ZdefdZdefdZ y)    N)futures)contextmanager)AnyCallableIteratorcast)MockFixtureMockType)GetDataRequestGetDataResponse)DataServiceServicerDataServiceStub!add_DataServiceServicer_to_server)ServerInterceptor)SiftChannelConfiguse_sift_channelc                   0    e Zd Zdedej
                  fdZy)DataServicerequestcontextc                     t        d      S )Nnext-page-token)next_page_token)r   )selfr   r   s      `/home/www/backend.miabetepe.com/venv/lib/python3.12/site-packages/sift_py/grpc/transport_test.pyGetDatazDataService.GetData   s    /@AA    N)__name__
__module____qualname__r   grpcServicerContextr    r   r   r   r      s    B~ B8L8L Br   r   c            
       `    e Zd Z ej                  d      Zdededej                  de
def
dZy)	AuthInterceptorz^Bearer (.+)$methodrequest_or_iteratorr   method_namereturnc                 ~   d}|j                         D ]c  }|j                  dk(  s| j                  j                  j	                  |j
                        }|t        |j                  d            dkD  rd} n |r	 |||      S |j                  t        j                  j                         |j                  d        )NFauthorization   r   TzInvalid or missing API key)invocation_metadatakey	__class__
AUTH_REGEXmatchvaluelengroupset_coder!   
StatusCodeUNAUTHENTICATEDset_details)r   r&   r'   r   r(   authenticatedmetadataauths           r   	interceptzAuthInterceptor.intercept   s     335 	H||.~~0066x~~F#DJJqM(:Q(>$(M	 -w77T__<<= <=r   N)r   r   r    recompiler0   r   r   r!   r"   strr<   r#   r   r   r%   r%      sN    ,-J ! %%	
  
r   r%   c            
            e Zd ZU dZeed<   eed<   ej                  ed<   ej                  j                  fdedej                  f fdZ	de
dedej                  d	ed
ef
dZ xZS )ForceFailInterceptorz
    Force RPC to fail a few times before letting it pass.

    `failed_attempts`: Count of how many times failed
    `expected_num_fails`: How many times you want call to fail
    failed_attemptsexpected_num_failsfailure_codec                 L    || _         d| _        || _        t        |           y )Nr   )rC   rB   rD   super__init__)r   rC   rD   r/   s      r   rG   zForceFailInterceptor.__init__C   s(     #5 (r   r&   r'   r   r(   r)   c                     | j                   | j                  k  rB| xj                   dz  c_         |j                  | j                         |j	                  d         |||      S )Nr,   zsomething unknown happened)rB   rC   r5   rD   r8   )r   r&   r'   r   r(   s        r   r<   zForceFailInterceptor.interceptK   s]     $"9"99  A% T../ <=)733r   )r   r   r    __doc__int__annotations__r!   r6   UNKNOWNrG   r   r   r"   r?   r<   __classcell__)r/   s   @r   rA   rA   7   s     //! HLG^G^"%59__44 !4 %%	4
 4 
4r   rA   mockerinterceptorsr)   c              '     K   t        j                  t        j                  d      t	        |            }t               }| j                  |d      }t        ||       |j                  d       |j                          	 | |j                  d        |j                          y # |j                  d        |j                          w xY ww)Nr,   )max_workers)thread_poolrO   r   z
[::]:50052)r!   serverr   ThreadPoolExecutorlistr   spyr   add_insecure_portstartstopwait_for_termination)rN   rO   rS   data_servicerV   s        r   
server_spyr\   [   s     [[..1=DQ]L^F =L
**\9
-C%lF;
\*
LLN&	D##% 	D##%s   A>CB' "C'#C

Cc           
         t        | t                     5 }dddd}t        |      5 }t        j                  t
        j                  d      5  t        |      }t        t        |j                  t                           }d d d        |j                          d d d        dddd}t        |      5 }t        |      }t        t        |j                  t                           }|j                  dk(  sJ |j                          d d d        d d d        t        d	      }t        | t               |      5 }dddd}	t        |	      5 }t        |      }t        t        |j                  t                           }|j                  dk(  sJ |j                          d d d        d d d        |j                   d	k(  sJ t        d
      }
t        | t               |
      5 }dddd}t        |      5 }t        |      }t        j                  t"              5  t        t        |j                  t                           }d d d        |j                          d d d        d d d        |
j                   dk(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   }xY w# 1 sw Y   xY w)Nlocalhost:50052 Furiapikeyuse_sslr7   )r1   
some-tokenr            )r\   r%   r   pytestraisesr!   RpcErrorr   r   r   r   r   assert_not_calledr   assert_called_oncerA   rB   	Exception)rN   get_data_spysift_channel_config_achannelstub_sift_channel_config_bresforce_fail_interceptorsift_channel_config_cforce_fail_interceptor_maxsift_channel_config_ds               r   test_sift_channelry   n   s   	FO-	. .,$4
 34 	-t}}4EF J&w/$,,~7G*HIJ **,	- %"4
 34 	."7+D^5E(FGC&&*;;;;++-		.).4 2!4	FO-/E	F .,$"4
 34 	."7+D^5E(FGC&&*;;;;++-	.. "11Q666 "6a!8	FO-/I	J -l$"4
 34 	-"7+D y) L?DLL9I,JKL **,	--" &55:::qJ J	- 	-	. 	.). .D	. 	.. .>L L		- 	-- -s   J&J3I5 JJ1AJJ5J6AJ)J6K.%K(K;KK5I?:JJ	JJ	JJ&)J3	.J66K KKK	KK$c           
      n   t        dt        j                  j                        }t	        | t               |      5 }dddd}t        |      5 }t        |      }t        t        |j                  t                           }|j                  dk(  sJ |j                          d d d        d d d        |j                  dk(  sJ t        d      }t	        | t               |      5 }dddd}t        |      5 }t        |      }t        j                   t"              5  t        t        |j                  t                           }d d d        |j%                          d d d        d d d        |j                  d	k(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   SxY w# 1 sw Y   GxY w# 1 sw Y   KxY w)
Nre   )rD   r^   rd   Fr`   r   rf   rg   )rA   r!   r6   INTERNALr\   r%   r   r   r   r   r   r   r   rl   rB   rh   ri   rm   rk   )	rN   ru   rn   rv   rp   rq   rt   rw   rx   s	            r   test_internal_error_retryr|      s   1!$//BZBZ[	FO-/E	F .,$"4
 34 	."7+D^5E(FGC&&*;;;;++-	.. "11Q666 "6a!8	FO-/I	J -l$"4
 34 	-"7+D y) L?DLL9I,JKL **,	--" &55:::;	. 	.. .<L L		- 	-- -s`   FAE;!F"F+4%F(FFF+;F	 FFFFF(	$F++F4)!r=   
concurrentr   
contextlibr   typingr   r   r   r   r!   rh   pytest_mockr	   r
   sift.data.v2.data_pb2r   r   sift.data.v2.data_pb2_grpcr   r   r   .sift_py._internal.test_util.server_interceptorr   sift_py.grpc.transportr   r   r   r%   rA   r\   ry   r|   r#   r   r   <module>r      s    
  % 0 0   - A  M FB% B
' 8!4, !4H &{ &3D &RZI[ & &$A;k A;H&;k &;r   