o
    NDiϾ                     @   s  d dl mZ d dlmZ d dlZd dlZd dlmZ d dlZd dl	m
Z
 d dl	mZmZ d dl	mZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 d d	l6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZB d d
lCmDZD d dl	mEZE d dlFmGZGmHZH d dl	mIZI eJeKZLG dd deMZNG dd deMZOedg dZPdZQdZRdZSdZTdZUdZVdZWeW ZXi ZYeZ Z[dd Z\dd Z]G dd de^Z_G d d! d!eZe_d"Z`d#d$ Zai ZbG d%d& d&e`eMZcG d'd( d(e_ZdG d)d* d*ecedd"ZeG d+d, d,eeZfG d-d. d.eeZgG d/d0 d0eeZhG d1d2 d2eeZiG d3d4 d4eeZjG d5d6 d6efZkG d7d8 d8efZlG d9d: d:efZmG d;d< d<efZnG d=d> d>efZoG d?d@ d@efZpG dAdB dBefZqG dCdD dDefZrG dEdF dFefZsG dGdH dHefZtG dIdJ dJegZuG dKdL dLegZvG dMdN dNegZwG dOdP dPegZxG dQdR dRegZyG dSdT dTexZzG dUdV dVefZ{G dWdX dXe`Z|G dYdZ dZe`Z}G d[d\ d\e`Z~G d]d^ d^e`ZG d_d` d`e`ZG dadb dbe`ZG dcdd dde`ZG dedf dfe`ZG dgdh dhe`ZdZdZdZdZdZdiZdjZdZdZdkZdlZG dmdn dne`ZG dodp dpeZG dqdr dreZeZ ZdZdZdsZdZdtZG dudv dve`ZG dwdx dxe`ZG dydz dze`Zed{ZG d|d} d}e`ZG d~d de`ZG dd de`ZG dd deZZdd ZeGrd dlmZmZ ee Zee ZneZdZeGreHrd dlmZ ee ZndZdd Zdd Zdd ZdddZdddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZddÄ Zddń ZddǄ ZdS )    )absolute_import)
namedtupleN)UUID)ProtocolVersion)
type_codesDriverException)UnavailableWriteTimeoutReadTimeoutWriteFailureReadFailureFunctionFailureAlreadyExistsInvalidRequestUnauthorizedUnsupportedOperationUserFunctionDescriptorUserAggregateDescriptorSchemaTargetType)	AsciiType	BytesTypeBooleanTypeCounterColumnTypeDateTypeDecimalType
DoubleType	FloatType	Int32TypeInetAddressTypeIntegerTypeListTypeLongTypeMapTypeSetTypeTimeUUIDTypeUTF8TypeVarcharTypeUUIDTypeUserType	TupleTypelookup_casstypeSimpleDateTypeTimeTypeByteType	ShortTypeDurationType)
int32_packint32_unpackuint16_packuint16_unpack
uint8_packint8_unpackuint64_packheader_packv3_header_packuint32_packuint32_le_unpackuint32_le_packColDesc)	WriteType)HAVE_CYTHON
HAVE_NUMPY)utilc                   @      e Zd ZdS )NotSupportedErrorN__name__
__module____qualname__ rH   rH   K/var/www/Datamplify/venv/lib/python3.10/site-packages/cassandra/protocol.pyrC   1       rC   c                   @   rB   )InternalErrorNrD   rH   rH   rH   rI   rK   5   rJ   rK   ColumnMetadata)keyspace_name
table_namenametype                  c                 C   s   | t | j< d S N)_message_types_by_opcodeopcode)clsrH   rH   rI   register_classI      r[   c                   C   s   t  S rW   )rX   copyrH   rH   rH   rI   get_registered_classesM      r^   c                   @      e Zd Zdd ZdS )_RegisterMessageTypec                 C   s   | dst|  d S d S )N_)
startswithr[   rZ   rO   basesdctrH   rH   rI   __init__R   s   
z_RegisterMessageType.__init__NrE   rF   rG   rg   rH   rH   rH   rI   ra   Q       ra   c                   @   s(   e Zd ZdZdZdZdd Zdd ZdS )_MessageTypeFNc                 C   s:   |r| j si | _ | j | t| j dkrtdd S d S )Ni  z@Custom payload map exceeds max count allowed by protocol (65535))custom_payloadupdatelen
ValueError)selfotherrH   rH   rI   update_custom_payload]   s   z"_MessageType.update_custom_payloadc                 C   s$   d| j jddd t| D f S )Nz<%s(%s)>z, c                 s   s    | ]}d | V  qdS )z%s=%rNrH   ).0irH   rH   rI   	<genexpr>f   s    z(_MessageType.__repr__.<locals>.<genexpr>)	__class__rE   join_get_paramsro   rH   rH   rI   __repr__e   s   $z_MessageType.__repr__)rE   rF   rG   tracingrk   warningsrq   ry   rH   rH   rH   rI   rj   W   s    rj   )	metaclassc                    s    t t  fdd| j D S )Nc                 3   s6    | ]\}}| vr| d st|s||fV  qdS rb   N)rc   callable)rr   na
base_attrsrH   rI   rt   k   s    z_get_params.<locals>.<genexpr>)dirrj   __dict__items)message_objrH   r   rI   rw   i   s   
rw   c                   @   sT   e Zd ZdZdZdZdd Zedd Zdd	 Z	d
d Z
e
Zedd Zdd ZdS )ErrorMessager   ERRORUnknownc                 C      || _ || _|| _d S rW   codemessageinfo)ro   r   r   r   rH   rH   rI   rg   y      
zErrorMessage.__init__c                 G   s6   t |}t|}t|| }|||}||||dS )Nr   )read_intread_stringerror_classesgetrecv_error_info)rZ   fprotocol_versionargsr   msgsubcls
extra_inforH   rH   rI   	recv_body~   s
   zErrorMessage.recv_bodyc                 C   s   d| j | j| jf }|S )Nz.Error from server: code=%04x [%s] message="%s")r   summaryr   )ro   r   rH   rH   rI   summary_msg   s   zErrorMessage.summary_msgc                 C   s   d|    S )Nz<%s>)r   rx   rH   rH   rI   __str__      zErrorMessage.__str__c                 C      d S rW   rH   r   r   rH   rH   rI   r      s   zErrorMessage.recv_error_infoc                 C   s   | S rW   rH   rx   rH   rH   rI   to_exception      zErrorMessage.to_exceptionN)rE   rF   rG   rY   rO   r   rg   classmethodr   r   r   ry   staticmethodr   r   rH   rH   rH   rI   r   t   s    

r   c                   @   r`   )ErrorMessageSubclassc                 C   s   | j d ur| t| j < d S d S rW   )
error_coder   rd   rH   rH   rI   rg      s   
zErrorMessageSubclass.__init__Nrh   rH   rH   rH   rI   r      ri   r   c                   @   s   e Zd ZdZdS )ErrorMessageSubN)rE   rF   rG   r   rH   rH   rH   rI   r      s    r   c                   @   rB   )RequestExecutionExceptionNrD   rH   rH   rH   rI   r      rJ   r   c                   @   rB   )RequestValidationExceptionNrD   rH   rH   rH   rI   r      rJ   r   c                   @      e Zd ZdZdZdS )ServerErrorzServer errorr   NrE   rF   rG   r   r   rH   rH   rH   rI   r          r   c                   @       e Zd ZdZdZedd ZdS )ProtocolExceptionzProtocol error
   c                 C   s   dt | v S )NzUSE_BETA flag is unset)strrx   rH   rH   rI   is_beta_protocol_error      z(ProtocolException.is_beta_protocol_errorN)rE   rF   rG   r   r   propertyr   rH   rH   rH   rI   r      
    r   c                   @   r   )BadCredentialszBad credentials   Nr   rH   rH   rH   rI   r      r   r   c                   @   (   e Zd ZdZdZedd Zdd ZdS )UnavailableErrorMessagezUnavailable exceptioni   c                 C   s   t | t| t| dS )N)consistencyrequired_replicasalive_replicas)read_consistency_levelr   r   rH   rH   rI   r      s   z'UnavailableErrorMessage.recv_error_infoc                 C      t |  fi | jS rW   )r   r   r   rx   rH   rH   rI   r         z$UnavailableErrorMessage.to_exceptionNrE   rF   rG   r   r   r   r   r   rH   rH   rH   rI   r          
r   c                   @   r   )OverloadedErrorMessagezCoordinator node overloadedi  Nr   rH   rH   rH   rI   r      r   r   c                   @   r   )IsBootstrappingErrorMessagez!Coordinator node is bootstrappingi  Nr   rH   rH   rH   rI   r      r   r   c                   @   r   )TruncateErrorzError during truncatei  Nr   rH   rH   rH   rI   r      r   r   c                   @   r   )WriteTimeoutErrorMessage?Coordinator node timed out waiting for replica nodes' responsesi   c                 C   s$   t | t| t| tjt|  dS )N)r   received_responsesrequired_responses
write_type)r   r   r>   name_to_valuer   r   rH   rH   rI   r      s
   z(WriteTimeoutErrorMessage.recv_error_infoc                 C   r   rW   )r	   r   r   rx   rH   rH   rI   r      r   z%WriteTimeoutErrorMessage.to_exceptionNr   rH   rH   rH   rI   r          
r   c                   @   r   )ReadTimeoutErrorMessager   i   c                 C   s"   t | t| t| tt| dS )N)r   r   r   data_retrieved)r   r   bool	read_byter   rH   rH   rI   r      s
   
z'ReadTimeoutErrorMessage.recv_error_infoc                 C   r   rW   )r
   r   r   rx   rH   rH   rI   r      r   z$ReadTimeoutErrorMessage.to_exceptionNr   rH   rH   rH   rI   r      r   r   c                   @   r   )ReadFailureMessagez!Replica(s) failed to execute readi   c                 C   s^   t | }t| }t| }t|rt| }t|}nd }t| }tt| }||||||dS )N)r   r   r   failureserror_code_mapr   )r   r   r   uses_error_code_mapread_error_code_maprm   r   r   )r   r   r   r   r   r   r   r   rH   rH   rI   r     s    

z"ReadFailureMessage.recv_error_infoc                 C   r   rW   )r   r   r   rx   rH   rH   rI   r     r   zReadFailureMessage.to_exceptionNr   rH   rH   rH   rI   r          
r   c                   @   r   )FunctionFailureMessagezUser Defined Function failurei   c                    s*   t  t   fddtt D dS )Nc                       g | ]}t  qS rH   r   rr   rb   r   rH   rI   
<listcomp>&      z:FunctionFailureMessage.recv_error_info.<locals>.<listcomp>)keyspacefunction	arg_types)r   range
read_shortr   rH   r   rI   r   !  s   z&FunctionFailureMessage.recv_error_infoc                 C   r   rW   )r   r   r   rx   rH   rH   rI   r   )  r   z#FunctionFailureMessage.to_exceptionNr   rH   rH   rH   rI   r     r   r   c                   @   r   )WriteFailureMessagez"Replica(s) failed to execute writei   c                 C   s`   t | }t| }t| }t|rt| }t|}nd }t| }tjt|  }||||||dS )N)r   r   r   r   r   r   )	r   r   r   r   r   rm   r>   r   r   )r   r   r   r   r   r   r   r   rH   rH   rI   r   1  s    

z#WriteFailureMessage.recv_error_infoc                 C   r   rW   )r   r   r   rx   rH   rH   rI   r   I  r   z WriteFailureMessage.to_exceptionNr   rH   rH   rH   rI   r   -  r   r   c                   @   r   )CDCWriteExceptionz4Failed to execute write due to CDC space exhaustion.i   Nr   rH   rH   rH   rI   r   M  r   r   c                   @   r   )SyntaxExceptionzSyntax error in CQL queryi    Nr   rH   rH   rH   rI   r   R  r   r   c                   @      e Zd ZdZdZdd ZdS )UnauthorizedErrorMessager   i !  c                 C      t |  S rW   )r   r   rx   rH   rH   rI   r   [  r   z%UnauthorizedErrorMessage.to_exceptionNrE   rF   rG   r   r   r   rH   rH   rH   rI   r   W      r   c                   @   r   )InvalidRequestExceptionzInvalid queryi "  c                 C   r   rW   )r   r   rx   rH   rH   rI   r   c  r   z$InvalidRequestException.to_exceptionNr   rH   rH   rH   rI   r   _  r   r   c                   @   r   )ConfigurationExceptionz,Query invalid because of configuration issuei #  Nr   rH   rH   rH   rI   r   g  r   r   c                   @   r   )PreparedQueryNotFoundz2Matching prepared statement not found on this nodei %  c                 C      t | S rW   )read_binary_stringr   rH   rH   rI   r   p  s   z%PreparedQueryNotFound.recv_error_infoN)rE   rF   rG   r   r   r   r   rH   rH   rH   rI   r   l  r   r   c                   @   r   )AlreadyExistsExceptionzItem already existsi $  c                 C   s   t | t | dS )N)r   tabler   r   rH   rH   rI   r   z  s   z&AlreadyExistsException.recv_error_infoc                 C   s   t di | jS )NrH   )r   r   rx   rH   rH   rI   r        z#AlreadyExistsException.to_exceptionNr   rH   rH   rH   rI   r   v  s    
r   c                   @   r   )ClientWriteErrorzClient write failure.i   Nr   rH   rH   rH   rI   r     r   r   c                   @   s,   e Zd ZdZdZedZdd Zdd ZdS )	StartupMessagerR   STARTUP)CQL_VERSIONCOMPRESSION
NO_COMPACTc                 C      || _ || _d S rW   )
cqlversionoptions)ro   r   r   rH   rH   rI   rg        
zStartupMessage.__init__c                 C   s"   | j  }| j|d< t|| d S )Nr   )r   r]   r   write_stringmap)ro   r   r   optmaprH   rH   rI   	send_body  s   

zStartupMessage.send_bodyN)	rE   rF   rG   rY   rO   setKNOWN_OPTION_KEYSrg   r   rH   rH   rH   rI   r     s    r   c                   @   r   )ReadyMessagerS   READYc                 G   s   |  S rW   rH   )rZ   r   rH   rH   rI   r     s   zReadyMessage.recv_bodyN)rE   rF   rG   rY   rO   r   r   rH   rH   rH   rI   r    r   r  c                   @   (   e Zd ZdZdZdd Zedd ZdS )AuthenticateMessage   AUTHENTICATEc                 C   
   || _ d S rW   authenticator)ro   r
  rH   rH   rI   rg        
zAuthenticateMessage.__init__c                 G   s   t |}| |dS )Nr	  r   )rZ   r   r   authnamerH   rH   rI   r     s   
zAuthenticateMessage.recv_bodyNrE   rF   rG   rY   rO   rg   r   r   rH   rH   rH   rI   r        r  c                   @   $   e Zd ZdZdZdd Zdd ZdS )CredentialsMessagerT   CREDENTIALSc                 C   r  rW   )creds)ro   r  rH   rH   rI   rg     r  zCredentialsMessage.__init__c                 C   sL   |dkrt dt|t| j | j D ]\}}t|| t|| qd S )NrR   zCredentials-based authentication is not supported with protocol version 2 or higher.  Use the SASL authentication mechanism instead.)r   write_shortrm   r  r   write_string)ro   r   r   credkeycredvalrH   rH   rI   r     s   
zCredentialsMessage.send_bodyNrE   rF   rG   rY   rO   rg   r   rH   rH   rH   rI   r    
    r  c                   @   r  )AuthChallengeMessage   AUTH_CHALLENGEc                 C   r  rW   )	challenge)ro   r  rH   rH   rI   rg     r  zAuthChallengeMessage.__init__c                 G      | t |S rW   )read_binary_longstringrZ   r   r   rH   rH   rI   r     r   zAuthChallengeMessage.recv_bodyNr  rH   rH   rH   rI   r    r  r  c                   @   r  )AuthResponseMessage   AUTH_RESPONSEc                 C   r  rW   )response)ro   r#  rH   rH   rI   rg     r  zAuthResponseMessage.__init__c                 C      t || j d S rW   )write_longstringr#  ro   r   r   rH   rH   rI   r     r   zAuthResponseMessage.send_bodyNr  rH   rH   rH   rI   r     r  r   c                   @   r  )AuthSuccessMessagerV   AUTH_SUCCESSc                 C   r  rW   )token)ro   r)  rH   rH   rI   rg     r  zAuthSuccessMessage.__init__c                 G   r  rW   )read_longstringr  rH   rH   rI   r     r   zAuthSuccessMessage.recv_bodyNr  rH   rH   rH   rI   r'    r  r'  c                   @   r   )OptionsMessage   OPTIONSc                 C   r   rW   rH   r&  rH   rH   rI   r     r   zOptionsMessage.send_bodyN)rE   rF   rG   rY   rO   r   rH   rH   rH   rI   r+    r   r+  c                   @   r  )SupportedMessage   	SUPPORTEDc                 C   r   rW   cql_versionsr   )ro   r2  r   rH   rH   rI   rg     r   zSupportedMessage.__init__c                 G   s   t |}|d}| ||dS )Nr   r1  )read_stringmultimappop)rZ   r   r   r   r2  rH   rH   rI   r     s   
zSupportedMessage.recv_bodyNr  rH   rH   rH   rI   r.    s    r.      @      @        c                   @   s,   e Zd Z			d	ddZdd Zdd ZdS )
_QueryMessageNFc
           
      C   s:   || _ || _|| _|| _|| _|| _|| _|| _|	| _d S rW   )	query_paramsconsistency_levelserial_consistency_level
fetch_sizepaging_state	timestamp	skip_metacontinuous_paging_optionsr   )
ro   r:  r;  r<  r=  r>  r?  r@  rA  r   rH   rH   rI   rg     s   
z_QueryMessage.__init__c                 C   s  t || j d}| jd ur|tO }| jr!|dkr|tO }ntd| jr1|dkr-|tO }ntd| j	rA|dkr=|t
O }ntd| jd urJ|tO }| jr[t|rW|tO }ntd| jd urnt|rj|tO }ntdt|ryt|| nt|| | jd urt|t| j | jD ]}t|| q| jrt|| j | j	rt|| j	 | jrt || j | jd urt|| j | jd urt|| j | jr| || j| d S d S )Nr   rS   Serial consistency levels require the use of protocol version 2 or higher. Consider setting Cluster.protocol_version to 2 to support serial consistency levels.zAutomatic query paging may only be used with protocol version 2 or higher. Consider setting Cluster.protocol_version to 2.zContinuous paging may only be used with protocol version ProtocolVersion.DSE_V1 or higher. Consider setting Cluster.protocol_version to ProtocolVersion.DSE_V1.|Keyspaces may only be set on queries with protocol version 5 or DSE_V2 or higher. Consider setting Cluster.protocol_version.)write_consistency_levelr;  r:  _VALUES_FLAGr<  _WITH_SERIAL_CONSISTENCY_FLAGr   r=  _PAGE_SIZE_FLAGr>  _WITH_PAGING_STATE_FLAGr?  _PROTOCOL_TIMESTAMP_FLAGrA  r   has_continuous_paging_support_PAGING_OPTIONS_FLAGr   uses_keyspace_flag_WITH_KEYSPACE_FLAGuses_int_query_flags
write_uint
write_byter  rm   write_value	write_intr%  
write_longr  _write_paging_options)ro   r   r   flagsparamrH   rH   rI   _write_query_params  sp   















z!_QueryMessage._write_query_paramsc                 C   s6   t ||j t ||j t|rt ||j d S d S rW   )rS  	max_pagesmax_pages_per_secondr    has_continuous_paging_next_pagesmax_queue_size)ro   r   paging_optionsr   rH   rH   rI   rU  g  s
   
z#_QueryMessage._write_paging_optionsNNNNFNN)rE   rF   rG   rg   rX  rU  rH   rH   rH   rI   r9    s    
Hr9  c                       s2   e Zd ZdZdZ		d fdd	Zdd Z  ZS )	QueryMessage   QUERYNc	           	         s*   || _ tt| d |||||d||	 d S )NF)querysuperr_  rg   )	ro   rb  r;  r<  r=  r>  r?  rA  r   ru   rH   rI   rg   r  s   
zQueryMessage.__init__c                 C   s   t || j | || d S rW   )r%  rb  rX  r&  rH   rH   rI   r   x  s   zQueryMessage.send_body)NNNNNN)rE   rF   rG   rY   rO   rg   r   __classcell__rH   rH   rd  rI   r_  n  s    r_  c                       s@   e Zd ZdZdZ			d fdd	Z fddZd	d
 Z  ZS )ExecuteMessager   EXECUTENFc              
      s.   || _ |
| _tt| ||||||||	 d S rW   )query_idresult_metadata_idrc  rf  rg   )ro   rh  r:  r;  r<  r=  r>  r?  r@  rA  ri  rd  rH   rI   rg     s
   zExecuteMessage.__init__c                    sv   |dkr0| j rtd| js| jrtdt|t| j | jD ]}t|| q t|| j	 d S t
t| || d S )NrR   rB  rC  )r<  r   r=  r>  r  rm   r:  rR  rE  r;  rc  rf  rX  )ro   r   r   rW  rd  rH   rI   rX    s   
z"ExecuteMessage._write_query_paramsc                 C   s2   t || j t|rt || j | || d S rW   )r  rh  r   uses_prepared_metadatari  rX  r&  rH   rH   rI   r     s   
zExecuteMessage.send_bodyr^  )	rE   rF   rG   rY   rO   rg   rX  r   re  rH   rH   rd  rI   rf  }  s    	rf  r  r,  c                   @   s   e Zd ZdZdZdZdZdZedd e	j
 D  Z	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ZdZdd Zdd Ze dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&e dd Z'e(dd Z)dS )ResultMessagerU   RESULTNc                 c   s,    | ]\}}| d s|t | fV  qdS r}   )rc   globalsrr   kvrH   rH   rI   rt     s   * zResultMessage.<genexpr>rR   rS   rT   r7  r8  c                 C   r  rW   )kind)ro   rq  rH   rH   rI   rg     r  zResultMessage.__init__c                 C   s   | j tkrd S | j tkr| ||||| d S | j tkr#t|| _d S | j tkr1| ||| d S | j t	kr>| 
|| d S td| j  )NzUnknown RESULT kind: %d)rq  RESULT_KIND_VOIDRESULT_KIND_ROWSrecv_results_rowsRESULT_KIND_SET_KEYSPACEr   new_keyspaceRESULT_KIND_PREPAREDrecv_results_preparedRESULT_KIND_SCHEMA_CHANGErecv_results_schema_changer   )ro   r   r   user_type_mapresult_metadatacolumn_encryption_policyrH   rH   rI   recv  s   




zResultMessage.recvc                 C   s&   t |}| |}|||||| |S rW   )r   r~  )rZ   r   r   r{  r|  r}  rq  r   rH   rH   rI   r     s   zResultMessage.recv_bodyc                    s    | jp
|t}fddt|D }dd D _dd D _dd D  fdd fdd	zfd
d|D _W d S  ty   |D ]3}t| D ]*\}	}
}z|	|
| W q` ty } zt	d|
d |
d 
 t|f d }~ww qXY d S w )Nc                    s   g | ]
} t qS rH   )recv_rowrm   r   )column_metadatar   ro   rH   rI   r     s    z3ResultMessage.recv_results_rows.<locals>.<listcomp>c                 S      g | ]}|d  qS )rS   rH   rr   crH   rH   rI   r     r   c                 S   r  )r  rH   r  rH   rH   rI   r     r   c                 S   s$   g | ]}t |d  |d |d qS )r   rR   rS   r<   )rr   mdrH   rH   rI   r     s   $ c                    sD    o  |}|r |n|d }|r || n| }||S )Nr  )contains_columncolumn_typedecryptfrom_binary)valcol_mdcol_descuses_cecol_type	raw_bytes)r}  r   rH   rI   
decode_val  s   z3ResultMessage.recv_results_rows.<locals>.decode_valc                    s   t fddt|  D S )Nc                 3   s"    | ]\}}} |||V  qd S rW   rH   )rr   r  r  r  )r  rH   rI   rt     s     zFResultMessage.recv_results_rows.<locals>.decode_row.<locals>.<genexpr>)tuplezip)row)	col_descsr  r  rH   rI   
decode_row  s   z3ResultMessage.recv_results_rows.<locals>.decode_rowc                    s   g | ]} |qS rH   rH   )rr   r  )r  rH   rI   r     r   z1Failed decoding result column "%s" of type %s: %srS   r  )recv_results_metadatar  r   r   column_namescolumn_typesparsed_rows	Exceptionr  r   cql_parameterized_typer   )ro   r   r   r{  r|  r}  rowcountrowsr  r  r  r  erH   )r  r}  r  r  r  r   r   ro   rI   rt    s4   


zResultMessage.recv_results_rowsc                 C   s8   t || _t|rt || _nd | _| ||| d S rW   )r   rh  r   rj  ri  recv_prepared_metadata)ro   r   r   r{  rH   rH   rI   rx    s
   

z#ResultMessage.recv_results_preparedc                 C   s   t |}t |}|| j@ rt|| _t|| j@ }|rd S || j@ r-t || _|| j@ | _	|| j
@ r7t|| _t|| j@ }|rHt|}t|}g }	t|D ]$}
|rW|}|}nt|}t|}t|}| ||}|	||||f qN|	| _d S rW   )r   _HAS_MORE_PAGES_FLAGr  r>  r   _NO_METADATA_FLAG_CONTINUOUS_PAGING_FLAGcontinuous_paging_seq_CONTINUOUS_PAGING_LAST_FLAGcontinuous_paging_last_METADATA_ID_FLAGr   ri  _FLAGS_GLOBAL_TABLES_SPECr   r   	read_typeappendr  )ro   r   r{  rV  colcountno_metaglob_tblspecksnamecfnamer  rb   	colksname	colcfnamecolnamecoltyperH   rH   rI   r    s6   






z#ResultMessage.recv_results_metadatac                    s   t  }t  }d }|dkrt  } fddt|D }t|| j@ }|r.t }	t }
g }t|D ]%}|r=|	}|
}nt }t }t }|  |}|t|||| q4|dkrd|  | || _	|| _
d S )NrT   c                    r   rH   r   r   r   rH   rI   r   6  r   z8ResultMessage.recv_prepared_metadata.<locals>.<listcomp>rS   )r   r   r   r  r   r  r  rL   r  bind_metadata
pk_indexes)ro   r   r   r{  rV  r  r  num_pk_indexesr  r  r  r  rb   r  r  r  r  rH   r   rI   r  0  s0   
z$ResultMessage.recv_prepared_metadatac                 C   s   t ||| _d S rW   )EventMessagerecv_schema_changeschema_change_eventr&  rH   rH   rI   rz  N     z(ResultMessage.recv_results_schema_changec                    sT  t }z j| }W n ty   td|f w |ttfv r. }||f}|S |tkrG } }|||f}|S |t	kret }t
 fddt|D }	||	}|S |tkrt}
t}t }t fddt|D  \}}	||
|||	}|
i ||_|}|S |tkrt}t|}|S )Nz>Unknown data type code 0x%04x. Have to skip entire result set.c                 3   s    | ]	}  V  qd S rW   )r  r   rZ   r   r{  rH   rI   rt   b      z*ResultMessage.read_type.<locals>.<genexpr>c                 3   s$    | ]}t  fV  qd S rW   )r   r  r   r  rH   rI   rt   h  s    )r   r   KeyErrorrC   r    r#   r  apply_parametersr"   r)   r  r   r(   r   r  make_udt_classr   mapped_classCUSTOM_TYPEr*   )rZ   r   r{  optid	typeclasssubtype
keysubtype
valsubtype	num_itemstypesksudt_name
num_fieldsnamesspecialized_type	classnamerH   r  rI   r  Q  sJ   
zResultMessage.read_typec                    s    fddt |D S )Nc                    r   rH   )
read_valuer   r   rH   rI   r   u  r   z*ResultMessage.recv_row.<locals>.<listcomp>)r   )r   r  rH   r   rI   r  s  s   zResultMessage.recv_row)*rE   rF   rG   rY   rO   rq  resultsr>  dictr   r   r   _cqltypes_by_coder  r  r  r  r  r  r  r  r  r  r  rv  r  rh  r  r  r  rg   r~  r   r   rt  rx  r  r  rz  r  r   r  rH   rH   rH   rI   rk    sN    
$
!rk  c                   @   s&   e Zd ZdZdZdddZdd ZdS )	PrepareMessage	   PREPARENc                 C   r   rW   )rb  r   )ro   rb  r   rH   rH   rI   rg   |  r   zPrepareMessage.__init__c                 C   s   t || j d}| jd urt|r|tO }ntdt|r&t|| n|r1tdj	||dt|rA| jrCt
|| j d S d S d S )Nr   rD  zAttempted to set flags with value {flags:0=#8x} onprotocol version {pv}, which doesn't support flagsin prepared statements.Consider setting Cluster.protocol_version to 5 or DSE_V2.)rV  pv)r%  rb  r   r   rM  _PREPARED_WITH_KEYSPACE_FLAGr   uses_prepare_flagsrP  formatr  )ro   r   r   rV  rH   rH   rI   r     s*   




zPrepareMessage.send_bodyrW   r  rH   rH   rH   rI   r  x  s
    
r  c                   @   s*   e Zd ZdZdZ		dddZdd ZdS )	BatchMessage   BATCHNc                 C   s(   || _ || _|| _|| _|| _|| _d S rW   )
batch_typequeriesr;  r<  r?  r   )ro   r  r  r;  r<  r?  r   rH   rH   rI   rg     s   
zBatchMessage.__init__c                 C   s`  t || jj t|t| j | jD ]4\}}}|s$t |d t|| nt |d t|t| || t|t| |D ]}t|| q>qt	|| j
 |dkrd}| jrZ|tO }| jd urc|tO }| jrtt|rp|tO }ntdt|rt|| nt || | jrt	|| j | jd urt|| j t|r| jd urt|| j d S d S d S d S )Nr   rR   r  zwKeyspaces may only be set on queries with protocol version 5 or higher. Consider setting Cluster.protocol_version to 5.)rQ  r  valuer  rm   r  r%  writerR  rE  r;  r<  rG  r?  rJ  r   r   rM  rN  r   rO  rS  rT  r  )ro   r   r   preparedstring_or_query_idparamsrW  rV  rH   rH   rI   r     sN   










zBatchMessage.send_body)NNNr  rH   rH   rH   rI   r    s    

r  )TOPOLOGY_CHANGESTATUS_CHANGESCHEMA_CHANGEc                   @   r  )RegisterMessage   REGISTERc                 C   r  rW   )
event_list)ro   r  rH   rH   rI   rg     r  zRegisterMessage.__init__c                 C   r$  rW   )write_stringlistr  r&  rH   rH   rI   r     r   zRegisterMessage.send_bodyNr  rH   rH   rH   rI   r    r  r  c                   @   sL   e Zd ZdZdZdd Zedd Zedd Zed	d
 Z	edd Z
dS )r     EVENTc                 C   r   rW   
event_type
event_args)ro   r  r  rH   rH   rI   rg     r   zEventMessage.__init__c                 G   sD   t | }|tv rt| d|  }| ||||dS td| )Nrecv_r  zUnknown event type %r)r   upperknown_event_typesgetattrlowerrC   )rZ   r   r   r   r  read_methodrH   rH   rI   r     s
   zEventMessage.recv_bodyc                 C      t |}t|}t||dS N)change_typeaddressr   	read_inetr  rZ   r   r   r  r  rH   rH   rI   recv_topology_change     z!EventMessage.recv_topology_changec                 C   r  r  r  r  rH   rH   rI   recv_status_change  r  zEventMessage.recv_status_changec           	         s   t  }|dkrYt  }t  }|||d}|tjkrWt  }|tjkr8t| fddtt D |d< |S |tjkrQt| fddtt D |d< |S |||	 < |S t  }t  }|rmtj
|||d}|S tj||d}|S )	Nr  )target_typer  r   c                    r   rH   r   r   r   rH   rI   r     r   z3EventMessage.recv_schema_change.<locals>.<listcomp>r   c                    r   rH   r   r   r   rH   rI   r     r   	aggregate)r   r  r   r   )r   r   KEYSPACEFUNCTIONr   r   r   	AGGREGATEr   r  TABLE)	rZ   r   r   r  targetr   eventtarget_namer   rH   r   rI   r  	  s,   

$
$
zEventMessage.recv_schema_changeN)rE   rF   rG   rY   rO   rg   r   r   r  r  r  rH   rH   rH   rI   r    s    


r  c                   @   s6   e Zd ZG dd deZdZdZdddZdd	 Zd
S )ReviseRequestMessagec                   @   r   )z!ReviseRequestMessage.RevisionTyperR   rS   N)rE   rF   rG   PAGING_CANCELPAGING_BACKPRESSURErH   rH   rH   rI   RevisionType%  r   r     REVISE_REQUESTr   c                 C   r   rW   )op_typeop_id
next_pages)ro   r  r  r  rH   rH   rI   rg   ,  r   zReviseRequestMessage.__init__c                 C   s^   t || j t || j | jtjjkr-| jdkrtdt	|s%tdt || j d S d S )Nr   z6Continuous paging backpressure requires next_pages > 0zContinuous paging backpressure may only be used with protocol version ProtocolVersion.DSE_V2 or higher. Consider setting Cluster.protocol_version to ProtocolVersion.DSE_V2.)
rS  r  r  r	  r  r  r  r   r   r[  r&  rH   rH   rI   r   1  s   

zReviseRequestMessage.send_bodyN)r   )	rE   rF   rG   objectr  rY   rO   rg   r   rH   rH   rH   rI   r	  #  s    
r	  c                   @   sD   e Zd ZdZe Z	 dZ	 edd Z	e
dd Zedd ZdS )	_ProtocolHandlera  
    _ProtocolHander handles encoding and decoding messages.

    This class can be specialized to compose Handlers which implement alternative
    result decoding or type deserialization. Class definitions are passed to :class:`cassandra.cluster.Cluster`
    on initialization.

    Contracted class methods are :meth:`_ProtocolHandler.encode_message` and :meth:`_ProtocolHandler.decode_message`.
    Nc           	   	   C   s   d}t  }|jr|dk rtd|tO }t||j ||| | }t	|s:|r:t
|dkr:||}|tO }|jrA|tO }|rG|tO }t  }| |||||jt
| || | S )a  
        Encodes a message using the specified frame parameters, and compressor

        :param msg: the message, typically of cassandra.protocol._MessageType, generated by the driver
        :param stream_id: protocol stream id for the frame header
        :param protocol_version: version for the frame header, and used encoding contents
        :param compressor: optional compression function to be used on the body
        r   rT   zLCustom key/value payloads can only be used with protocol version 4 or higher)ioBytesIOrk   r   CUSTOM_PAYLOAD_FLAGwrite_bytesmapr   getvaluer   has_checksumming_supportrm   COMPRESSED_FLAGrz   TRACING_FLAGUSE_BETA_FLAG_write_headerrY   r  )	rZ   r   	stream_idr   
compressorallow_beta_protocol_versionrV  bodybuffrH   rH   rI   encode_messageT  s.   


z_ProtocolHandler.encode_messagec                 C   s2   |dkrt nt}| ||||| t| | dS )z4
        Write a CQL protocol frame header.
        r  N)r8   r7   r  rS  )r   versionrV  r  rY   lengthpackrH   rH   rI   r  z  s   z_ProtocolHandler._write_headerc	                 C   s  t |s|t@ r|du rtd||}|tN }t|}|t@ r/t|dd}	|tN }nd}	|t	@ r>t
|}
|t	N }nd}
|t@ rMt|}|tN }nd}|tM }|r[td| | j| }|||||| j}||_|	|_||_|
|_|jr|jD ]}td| q||S )ay  
        Decodes a native protocol message body

        :param protocol_version: version to use decoding contents
        :param user_type_map: map[keyspace name] = map[type name] = custom type to instantiate when deserializing this type
        :param stream_id: native protocol stream id from the frame header
        :param flags: native protocol flags bitmap from the header
        :param opcode: native protocol opcode from the header
        :param body: frame body
        :param decompressor: optional decompression function to inflate the body
        :return: a message decoded from the body and frame attributes
        Nz0No de-compressor available for compressed frame!rV   )bytesz5Unknown protocol flags set: %02x. May cause problems.zServer warning: %s)r   r  r  RuntimeErrorr  r  r  r   readWARNING_FLAGread_stringlistr  read_bytesmapUSE_BETA_MASKlogwarningmessage_types_by_opcoder   r}  r  trace_idrk   r{   )rZ   r   r{  r  rV  rY   r!  decompressorr|  r1  r{   rk   	msg_classr   wrH   rH   rI   decode_message  sB   






z_ProtocolHandler.decode_message)rE   rF   rG   __doc__rX   r]   r0  r}  r   r#  r   r  r5  rH   rH   rH   rI   r  ?  s    

%
r  c                    s<   ddl m G fdddt G  fdddt}|S )a  
    Given a column parser to deserialize ResultMessages, return a suitable
    Cython-based protocol handler.

    There are three Cython-based protocol handlers:

        - obj_parser.ListParser
            decodes result messages into a list of tuples

        - obj_parser.LazyParser
            decodes result messages lazily by returning an iterator

        - numpy_parser.NumPyParser
            decodes result messages into NumPy arrays

    The default is to use obj_parser.ListParser
    r   )make_recv_results_rowsc                       s0   e Zd ZdZedd ej D Z Z	dS )z2cython_protocol_handler.<locals>.FastResultMessagezp
        Cython version of Result Message that has a faster implementation of
        recv_results_row.
        c                 s   s    | ]	\}}||fV  qd S rW   rH   rn  rH   rH   rI   rt     r  z<cython_protocol_handler.<locals>.FastResultMessage.<genexpr>N)
rE   rF   rG   r6  r  rk  r   r   code_to_typert  rH   )	colparserr7  rH   rI   FastResultMessage  s    r:  c                       s,   e Zd ZdZej Z e j< eZZ	dS )z6cython_protocol_handler.<locals>.CythonProtocolHandlerzP
        Use FastResultMessage to decode query result message messages.
        N)
rE   rF   rG   r6  r  r0  r]   
my_opcodesrY   
col_parserrH   )r:  r9  rH   rI   CythonProtocolHandler  s    

r=  )cassandra.row_parserr7  rk  r  )r9  r=  rH   )r:  r9  r7  rI   cython_protocol_handler  s   	r?  )
ListParser
LazyParser)NumpyParserc                 C      t | dS )NrR   )r5   r)  r   rH   rH   rI   r     r\   r   c                 C      |  t| d S rW   )r  r4   )r   brH   rH   rI   rQ    r  rQ  c                 C   rC  )NrT   )r1   r)  r   rH   rH   rI   r     r\   r   c                 C   sH   |dkrt | d}|S d}t|D ]}|t| d@ d| > O }q|S )zP
    Read a sequence of little endian bytes and return an unsigned integer.
    rT   r   r  rU   )r:   r)  r   r   )r   sizer  rs   rH   rH   rI   read_uint_le  s   rG  c                 C   sF   |dkr|  t| dS t|D ]}|d }t| ||? d@  qdS )zI
    Write an unsigned integer on a sequence of little endian bytes.
    rT   rU   r  N)r  r;   r   rQ  )r   rs   rF  jshiftrH   rH   rI   write_uint_le  s   rJ  c                 C   rD  rW   )r  r0   r   rs   rH   rH   rI   rS  "  r  rS  c                 C   rD  rW   )r  r9   rK  rH   rH   rI   rP  &  r  rP  c                 C   rD  rW   )r  r6   rK  rH   rH   rI   rT  *  r  rT  c                 C   rC  )NrS   )r3   r)  r   rH   rH   rI   r   .  r\   r   c                 C   rD  rW   )r  r2   r   srH   rH   rI   r  2  r  r  c                 C   r   rW   r  r   rH   rH   rI   r   6  r_   r   c                 C   s   t | | d S rW   )r  )r   clrH   rH   rI   rE  :  r\   rE  c                 C   s   t | }| |}|dS Nutf8)r   r)  decoder   rF  contentsrH   rH   rI   r   >  s   

r   c                 C      t | }| |}|S rW   )r   r)  rR  rH   rH   rI   r   D     
r   c                 C   0   t |tr
|d}t| t| | | d S rO  )
isinstancer   encoder  rm   r  rL  rH   rH   rI   r  J     

r  c                 C   rT  rW   r   r)  rR  rH   rH   rI   r  Q  rU  r  c                 C   s   t | dS rO  )r  rQ  r   rH   rH   rI   r*  W  r\   r*  c                 C   rV  rO  )rW  r   rX  rS  rm   r  rL  rH   rH   rI   r%  [  rY  r%  c                    s   t  } fddt|D S )Nc                    r   rH   r   r   r   rH   rI   r   d  r   z#read_stringlist.<locals>.<listcomp>)r   r   )r   numstrsrH   r   rI   r+  b  s   r+  c                 C   s&   t | t| |D ]}t| | q	d S rW   )r  rm   r  )r   
stringlistrM  rH   rH   rI   r  g  s   r  c                 C   s2   t | }i }t|D ]}t| }t| ||< q
|S rW   )r   r   r   )r   numpairsstrmaprb   ro  rH   rH   rI   read_stringmapm     r_  c                 C   s8   t | t| | D ]\}}t| | t| | qd S rW   )r  rm   r   r  )r   r^  ro  rp  rH   rH   rI   r   v  
   
r   c                 C   2   t | }i }t|D ]}t| }t| ||< q
|S rW   )r   r   r   r  )r   r]  bytesmaprb   ro  rH   rH   rI   r,  }  r`  r,  c                 C   8   t | t| | D ]\}}t| | t| | qd S rW   )r  rm   r   r  rR  )r   rc  ro  rp  rH   rH   rI   r    ra  r  c                 C   rb  rW   )r   r   r   r+  )r   numkeysstrmmaprb   ro  rH   rH   rI   r3    r`  r3  c                 C   rd  rW   )r  rm   r   r  r  )r   rf  ro  rp  rH   rH   rI   write_stringmultimap  ra  rg  c                 C   rb  rW   )r   r   read_inet_addr_onlyr   )r   r]  r   rb   endpointrH   rH   rI   r     r`  r   c                 C   s   t | }|dk r
d S | |S )Nr   rZ  )r   rF  rH   rH   rI   r    s   
r  c                 C   sH   |d u rt | d d S |tu rt | d d S t | t| | | d S )N)rS  _UNSET_VALUErm   r  )r   rp  rH   rH   rI   rR    s   rR  c                 C   sL   t | }| |}|dkrtj}n|dkrtj}ntd|f t||S )NrT   rV   zbad inet address: %r)r   r)  socketAF_INETAF_INET6rK   rA   	inet_ntop)r   rF  	addrbytesaddrfamrH   rH   rI   rh    s   
rh  c                 C   s   t | }t| }||fS rW   )rh  r   )r   addrportrH   rH   rI   r    s   r  c                 C   sP   |\}}d|v rt j}nt j}t||}t| t| | | t| | d S )N:)	rm  ro  rn  rA   	inet_ptonrQ  rm   r  rS  )r   	addrtuplers  rt  rr  rq  rH   rH   rI   
write_inet  s   
rx  )rT   )
__future__r   collectionsr   loggingrm  uuidr   r  	cassandrar   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   cassandra.cqltypesr   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   cassandra.marshalr0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   cassandra.policiesr=   r>   cassandra.cython_depsr?   r@   rA   	getLoggerrE   r.  r  rC   rK   rL   HEADER_DIRECTION_TO_CLIENTHEADER_DIRECTION_MASKr  r  r  r*  r  r-  rX   r  rl  r[   r^   rP   ra   rj   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r'  r+  r.  rF  _SKIP_METADATA_FLAGrH  rI  rG  rJ  _NAMES_FOR_VALUES_FLAGrN  r  _PAGE_SIZE_BYTES_FLAGrL  r9  r_  rf  r  rr  rs  ru  rw  ry  rk  r  r  	frozensetr  r  r  r	  r  r?  cassandra.obj_parserr@  rA  ProtocolHandlerLazyProtocolHandlercassandra.numpy_parserrB  NumpyProtocolHandlerr   rQ  r   rG  rJ  rS  rP  rT  r   r  r   rE  r   r   r  r  r*  r%  r+  r  r_  r   r,  r  r3  rg  r   r  rR  rh  r  rx  rH   rH   rH   rI   <module>   s  <t8
#	  
	_& M&;8 +


				
