U
    d/e                     @   sx   d dl Z d dlZd dlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZmZmZmZ G d	d
 d
eZdS )    N)time   )defines)errors)OpenTelemetryTraceContext)write_varint)write_binary_strwrite_binary_uint8write_binary_uint64write_binary_uint128c                       sz   e Zd ZG dd deZG dd deZejZej	Z
ejZejZejZdZdZdZ fddZed	d
 Zdd Z  ZS )
ClientInfoc                   @   s   e Zd ZdZdZdS )zClientInfo.Interfacer      N)__name__
__module____qualname__TCPHTTP r   r   @/tmp/pip-unpacked-wheel-mds_o03w/clickhouse_driver/clientinfo.py	Interface   s   r   c                   @   s   e Zd ZdZdZdZdS )zClientInfo.QueryKindr   r   r   N)r   r   r   NO_QUERYZINITIAL_QUERYZSECONDARY_QUERYr   r   r   r   	QueryKind   s   r    z	0.0.0.0:0c                    s   t jj| _zt | _W n tk
r2   d| _Y nX t	 | _
|| _t|jd |jd | _|jd | _d| _tt d | _tt |   d S )Nr   Zopentelemetry_traceparentZopentelemetry_tracestate	quota_keyr   i@B )r   r   r   
query_kindgetpassgetuseros_userKeyErrorsocketgethostnameclient_hostnameclient_namer   Zclient_settingsclient_trace_contextr   distributed_depthintr   %initial_query_start_time_microsecondssuper__init__)selfr"   context	__class__r   r   r(   &   s    

zClientInfo.__init__c                 C   s   | j tjjkS )N)r   r   r   r   )r)   r   r   r   empty;   s    zClientInfo.emptyc                 C   s  |}|t jk rtdt| j| | jr.d S t| j| t| j	| t| j
| |t jkrht| j| t| j| t| j| t| j| t| j| t| j| t| j| t| j| |t jkrt| j| |t jkrt| j| |t jkrt| j| |t jkrf| jjd k	r\td| t| jj| t| jj | t| jj!| t| jj"| n
td| |t j#krtd| td| td| d S )NzAMethod ClientInfo.write is called for unsupported server revisionr   r   )$r   Z"DBMS_MIN_REVISION_WITH_CLIENT_INFOr   ZLogicalErrorr	   r   r-   r   initial_userinitial_query_idinitial_addressZ7DBMS_MIN_PROTOCOL_VERSION_WITH_INITIAL_QUERY_START_TIMEr
   r&   	interfacer   r!   r"   r   client_version_majorclient_version_minorclient_revisionZ/DBMS_MIN_REVISION_WITH_QUOTA_KEY_IN_CLIENT_INFOr   Z0DBMS_MIN_PROTOCOL_VERSION_WITH_DISTRIBUTED_DEPTHr$   Z$DBMS_MIN_REVISION_WITH_VERSION_PATCHclient_version_patchZ$DBMS_MIN_REVISION_WITH_OPENTELEMETRYr#   Ztrace_idr   Zspan_idZ
tracestateZtrace_flagsZ(DBMS_MIN_REVISION_WITH_PARALLEL_REPLICAS)r)   Zserver_revisionZfoutrevisionr   r   r   write?   sX    

 





zClientInfo.write)r   r   r   objectr   r   r   ZCLIENT_VERSION_MAJORr2   ZCLIENT_VERSION_MINORr3   ZCLIENT_VERSION_PATCHr5   ZCLIENT_REVISIONr4   r   r1   r.   r/   r0   r(   propertyr-   r7   __classcell__r   r   r+   r   r      s   

r   )r   r   r   r   r   r   Zopentelemetryr   Zvarintr   writerr   r	   r
   r   r8   r   r   r   r   r   <module>   s   