
    +Jf)                         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Zd dlZd dlm	Z	 d dl
mZ ddlmZmZ d dlmZ  ej        e          Z	 d dlmZ n#  d dlmZ Y nxY w G d d	e          ZdS )
    N)	b64decode)SSLError   )_gen_auth_jwt_header_ensure_unicode)ConnectionError)IncompleteReadc                   z    e Zd ZddZd ZddZd Zd Zd Zd	 Z	d
 Z
d Zd Zed             Zed             ZdS )PubSubMonitorNc                 L   |dd          dk    r|dz  }|dz   | _         |dz   | _        d | _        |r|| _        n"|r t	          j        |          | _        || _        || _        t          j	                    | _
        t          j                    | _        d | _        t                      | _        d | _        d| _        d| _        d | _        t          j                    | _        t          j        | j                  | _        d| j        _        | j                                         d S )N/zsubscriptions/stream/zsubscriptions/items/FtargetT)_stream_uri
_items_uri_auth_jwt_claim_auth_bearercopydeepcopy_auth_jwt_key	_callback	threadingLock_lockrequestssession_requests_session_stream_responseset	_channels_last_cursor_closed_historical_fetch_thread_result_historical_fetch_threadEvent_thread_eventThread_run_stream_stream_threaddaemonstart)selfbase_stream_uriauth_jwt_claimauth_jwt_keycallbackauth_bearers         [/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/pubcontrol/pubsubmonitor.py__init__zPubSubMonitor.__init__!   s    RSSS  c?$'>>$#&<<$/$ %"4 %-774$4$.~$*#+--$$55$.$$,).$&"&$ (($!(0@AAA$#$    c                     d}| j                                          || j        v rd}| j                                          |S )NFT)r   acquirer!   release)r-   channelfound_channels      r3   is_channel_subscribed_toz&PubSubMonitor.is_channel_subscribed_to;   sG    -*=*	r5   Fc                     | j                                          d| _        d | _        | j        }d | _        | j                                          |r|r|                                 d S d S d S )NT)r   r7   r#   r   r*   r8   join)r-   blockingstream_threads      r3   closezPubSubMonitor.closeD   s    *$,$.%-$* -    r5   c                     | j         S )N)r#   r-   s    r3   	is_closedzPubSubMonitor.is_closedO   s
    	r5   c                    t                               d           | j        sd}d}|rt          j        |           t
                              |          }	 t                               d| j        z             d}i }| j        rd| j        z   |d<   nt          | j
        | j                  |d<   | j                            | j        |d|          | _        | j        j        d	k    r| j        j        d
k     rd}nb| j        j        dk     s | j        j        dk    s| j        j        dk    r0|                                  t#          d| j        j        z            7t                               d           |                                  n'# t&          j        t*          j        j        f$ r Y w xY wd}| j        s	 | j                                         |s	| j        rd}|sn|                                  n# t&          j        t*          j        j        t:          f$ r t                               d           Y nyt<          t>          t@          f$ r=}dtC          |          v rt                               d           Y d }~n3d | _"         d }~w t           #                    d           Y nxY w| j        | j                                         || j        t                               d           d S )Nzstream thread startedr   Tzstream get %s)   <   Bearer Authorization)headersstreamtimeout   ,  F    X  z;pubsubmonitor stream connection resulted in status code: %dzstream openzstream timed outz	timed outzerror processing streamzstream thread ended)$loggerdebugr#   timesleepr   _increase_wait_intervalr   r   r   r   r   r   getr   status_coder@   
ValueError_try_historical_fetchsocketrK   r   
exceptionsRequestExceptionr'   waitr$   _monitorTimeoutr	   r   OSErrorr   strr   	exception)r-   wait_intervalretry_connectionrK   rI   got_subscriberses          r3   r)   zPubSubMonitor._run_streamS   s7   ,,&'''L ;"=	 8"J}!99-HHM\\/D$44555WW 2!*T->!>go!5d0"2 "2go!377 8  T 
		*c	1	1(3.. ,s22(C//(C//
jjlllE)	*+ + + \\-   	!!!!NH/@A   XOl 22
 !E  
mmooo^X08.I   ll%&&&ew0   	A		||&'''uuuudn2011111' l 2( 	!!!q 
 8" L ;"x 	,,$%%%%%sD   DF .F  F10F1>&G: %G: :A J+<J++J
J

J+c                    | j                             d          D ]}| j        r d S t          j                    }| j        r+|| j        dz   k    rt                              d            d S |sUt          j	        t          |                    }t                              | j                  }d }d|v r t                              |d                   }| j        r*|r||k    rt                              d           d| _        |r^||k    rXt                              d|d	|           |                                  | j                                         | j        s d S n|                     |d
         g           |d         | _        t                              dt                              | j                  z             d S )Nr   )
chunk_sizerF   ztimed out waiting to catch upprev_cursorzstream caught up to last cursorFzstream cursor mismatch: got=z
 expected=itemcursorlast cursor: %s)r   
iter_linesr#   rS   _catch_stream_up_to_last_cursor_catch_stream_up_start_timerQ   rR   jsonloadsr   r   _parse_cursorr"   rY   r'   r]   r$   _parse_items)r-   linenowcontentlast_cursor_parsedprev_cursor_parseds         r3   r^   zPubSubMonitor._monitor   s   #..!.<< *5 *5d
l 
	EE	3+ 
D,r111
LL0111	EE
 Z--..7%33	  w&44m  * 1 ...
LL2333+0D( 	)---
LLL,,. / / /   / 
UU 	wv'(((x(4	<<!  !2334 5 5 5 5S*5 *5r5   c                     | j                                          d| _        t          j        | j                  | _        d| j        _        | j                                         d S )NFr   T)	r'   clearr$   r   r(   _run_historical_fetchr%   r+   r,   rB   s    r3   rY   z#PubSubMonitor._try_historical_fetch   s^    ).$&"+"2$:T"U"U"U$)-$&%%'''''r5   c                 $   	 d | _         t                              d           g }d}|r| j        }| j        re	 |dt          j        dd| j        z  i          z   z  }n?# t          $ r2 |dt
          j                            dd| j        z  i          z   z  }Y nw xY wd}d}|r|dk    r#d| _	        	 | j
                                         d S t          j        |           t                              |          }	 | j        r?t                              d	|d
t                              | j                  d           nt                              d|z             i }| j        rd| j        z   |d<   nt%          | j        | j                  |d<   | j                            ||d          }|j        dk    r|j        dk     rd}n|j        dk    r7|                                  d| _	        	 | j
                                         d S |j        dk     s|j        dk    s|j        dk    r2d| _	        |                                  t5          d|j        z            n&# t6          j        t:          j        j        f$ r Y nw xY w|tA          j!        tE          |j#                            }|d         | _        |d         sd}n|$                    |d                    || %                    |           d| _	        d| _&        t          j                    | _'        t                              dt                              | j                  z             | j
                                         d S # | j
                                         w xY w)Nzcatching upT?sincez	cursor:%sr   @   Fzhistory get z ()zhistory get %srG   rH      )rI   rK   rL   rM   i  rN   rO   rP   zEpubsubmonitor historical fetch connection resulted in status code: %dlast_cursoritemsrl   )(_last_stream_cursorrQ   rR   r   r"   urllib	urlencodeAttributeErrorparser$   r'   r    rS   rT   r   rU   rr   r   r   r   r   r   rV   rW   _unsub_and_clear_channelsr@   rX   rZ   rK   r   r[   r\   rp   rq   r   rv   extendrs   rn   ro   )	r-   r   more_items_availableurirc   rd   rI   resrv   s	            r3   r{   z#PubSubMonitor._run_historical_fetch   s   @"4	<<5	 4$
/C VV	S6#WkD<M.M$NOOOOcc V V V	S6<))7K$BS4S*TUUUUcccVM
 %-2d*^ ] 
Z"::=II]		 ,|||	m))		        ||$s*+++g		 3"+d.?"?w"6		t1#3 #3w"&&sG '  c
/S
 
 #?c!!%%'''.3t+. - Oc!!33.3t+zz|||	P	
   ^X0AB   
dI  %L j5566G.D7 $!
\\''"###i 
 4$j U*.4'*.4'&*ikk4#	<<!M$?$?@Q$R$RRSSS4sa   6M4 $A M4 9BM4 BM4 .M4 <C3I AI M4  J?M4 JCM4 4Nc                    t                               d           | j        rK| j        D ]C}	 |                     d|           # t          $ r t                               d           Y @w xY w| j                                         | j                                         d | _	        | j        
                                 d S )Nzunsubbing and clearing channelsunsuberror calling callback)rQ   rR   r   r!   	Exceptionrb   r   r7   rz   r"   r8   )r-   r9   s     r3   r   z'PubSubMonitor._unsub_and_clear_channels  s    ,,0111	^ 0. 0 0w0	^^GW%%%% 0 0 0./////0*.$*s   A$A*)A*c                    |D ]}|d         dk    r|d         | j         vrt                              d|d         z             | j        rH	 |                     d|d                    n*# t          $ r t                              d           Y nw xY w| j                                         | j                             |d                    | j        	                                 |d         dk    r|d         | j         v rt                              d|d         z             | j        rH	 |                     d	|d                    n*# t          $ r t                              d           Y nw xY w| j                                         | j         
                    |d                    | j        	                                 d S )
Nstate
subscribedr9   zadded %ssubr   unsubscribedz
removed %sr   )r!   rQ   rR   r   r   rb   r   r7   addr8   remove)r-   r   rj   s      r3   rs   zPubSubMonitor._parse_items  s     dG}$$	)_DN**
LLd9o-...~ 11
nnUDO,,,, 1 1 1/000001JNtI'''J	g.	(	(	)_&&
LLY/000~ 11
nnWd9o.... 1 1 1/000001JN$y/***J- s$   A))$BB,E		$E0/E0c                     t          |                               d          }||                    d          dz   d          S )NzUTF-8_r   )r   decodeindex)
raw_cursordecoded_cursors     r3   rr   zPubSubMonitor._parse_cursor6  sA    Z((//88.	,,S11!344	55r5   c                 2    | dk    r| dz   S | dk    r| S | dz  S )Nr   r       )rc   s    r3   rU   z%PubSubMonitor._increase_wait_interval<  s4    a
!

		r5   )NNNN)F)__name__
__module____qualname__r4   r;   r@   rC   r)   r^   rY   r{   r   rs   staticmethodrr   rU   r   r5   r3   r   r      s           4       >& >& >&B+5 +5 +5\( ( (A A AH    4 6 6 ,6
   ,  r5   r   )r   r   rp   r   r   rS   rZ   loggingbase64r   sslr   	utilitiesr   r   requests.exceptionsr   	getLoggerr   rQ   http.clientr	   httplibobjectr   r   r5   r3   <module>r      s+                          < < < < < < < < / / / / / /		8	$	$$'''''''$########e e e e eF e e e e es   A A