
    i*                         d dl Z d dlZ d dlmZ d dl mZ d dlZ d dlmZ d dlZd dlZd dl	m
Z
mZmZmZ  ej        e          Z edd           G d	 d
e
                      ZdS )    N)Queue)socket)
deprecated)
ConnectionConnectionShutdownTimerTimerManagerz3.30.0zVThe gevent event loop is deprecated and will be removed in 3.31.0.  See CASSPYTHON-12.)versionreasonc                       e Zd ZdZdZdZej        Zej	        Z
dZdZdZed             Zed             Zed             Zd Zd Zd Zd	 Zd
 Zd ZdS )GeventConnectionz
    An implementation of :class:`.Connection` that utilizes ``gevent``.

    This implementation assumes all gevent monkey patching is active. It is not tested with partial patching.
    Nc                     | j         sVt                      | _         t          j        | j                  | _        t          j                                        | _        d S d S N)	_timersr	   geventspawnservice_timeouts_timeout_watchereventEvent
_new_timer)clss    l/Users/user/workspace/sujinbaek/cqa-test-app/venv/lib/python3.11/site-packages/cassandra/io/geventreactor.pyinitialize_reactorz#GeventConnection.initialize_reactor0   sO    { 	2&..CK#)<0D#E#EC #\//11CNNN	2 	2    c                     t          ||          }| j                            |           | j                                         |S r   )r   r   	add_timerr   set)r   timeoutcallbacktimers       r   create_timerzGeventConnection.create_timer7   s@    gx((e$$$r   c                     | j         }| j        }	 |                                }|r$t          |t	          j                    z
  d          nd}|                    |           |                                 f)NTr   i'  )r   r   r   maxtimewaitclear)r   timer_managertimer_eventnext_end
sleep_times        r   r   z!GeventConnection.service_timeouts>   su    n	 $5577H;CNX	3Q777JZ(((		 r   c                    t          j        | g|R i | t                      | _        |                                  t          j        | j                  | _        t          j        | j	                  | _
        |                                  d S r   )r   __init__r   _write_queue_connect_socketr   r   handle_read_read_watcherhandle_write_write_watcher_send_options_message)selfargskwargss      r   r-   zGeventConnection.__init__H   s    D242226222!GG#\$*:;;$l4+<==""$$$$$r   c                    | j         5  | j        r	 d d d            d S d| _        d d d            n# 1 swxY w Y   t                              dt	          |           d| j                   | j        r| j                            d           | j        r| j                            d           | j	        r| j	        
                                 t                              d| j                   | j        sE|                     t          d| j        z                       | j                                         d S d S )NTzClosing connection (z) to F)blockzClosed socket to zConnection to %s was closed)lock	is_closedlogdebugidendpointr1   killr3   _socketclose
is_defuncterror_all_requestsr   connected_eventr   r5   s    r   rB   zGeventConnection.closeS   s   Y 	" 	"~ 	" 	" 	" 	" 	" 	" 	" 	" "DN	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"
 				RXXXXt}}MNNN 	1##%#000 	2$$5$111< 	!L   			4==:;;; 	'##"#@4=#PQQS S S  $$&&&&&		' 	's   	1155c                 b    t                               d           |                                  d S )Nzconnection closed by server)r<   r=   rB   rF   s    r   handle_closezGeventConnection.handle_closeh   s&    		/000

r   c                    	 	 | j                                         }| j                            |           nN# t          j        $ r<}t                              d| |           |                     |           Y d }~d S d }~ww xY w)NTzException in send for %s: %s)	r.   getrA   sendallr   errorr<   r=   defunct)r5   next_msgerrs      r   r2   zGeventConnection.handle_writel   s    	,0022$$X....<   		8$DDDS!!!		s   37 B1A==Bc                    	 	 | j                             | j                  }| j                            |           nN# t
          j        $ r<}t                              d| |           | 	                    |           Y d }~d S d }~ww xY w|r.| j        
                                r|                                  n1t                              d|            |                                  d S )NTzException in read for %s: %szConnection %s closed by server)rA   recvin_buffer_size_iobufwriter   rL   r<   r=   rM   tellprocess_io_bufferrB   )r5   bufrO   s      r   r0   zGeventConnection.handle_readv   s    	l''(;<<!!#&&&&<   		8$DDDS!!!
  t{'')) &&((((		:DAAA

	s   9= B1BBc                     | j         }t          dt          |          |          D ]'}| j                            ||||z                       (d S )Nr   )out_buffer_sizerangelenr.   put)r5   data
chunk_sizeis       r   pushzGeventConnection.push   s]    )
q#d))Z00 	: 	:A!!$qZ'7"89999	: 	:r   )__name__
__module____qualname____doc__r1   r3   r   r   _socket_implssl	_ssl_implr   r   r   classmethodr   r"   r   r-   rB   rH   r2   r0   r`    r   r   r   r      s          MN=L
IGJ2 2 [2   [     [ 	% 	% 	%' ' '*      ": : : : :r   r   )r   gevent.eventgevent.queuer   r   
gevent.sslr   loggingr%   cassandra.connectionr   r   r   r	   	getLoggerra   r<   r   ri   r   r   <module>rp      s                          ! ! ! ! ! !   T T T T T T T T T T T Tg!!H%}~~~k: k: k: k: k:z k: k: ~k: k: k:r   