o
    `jX+                     @   s   d dl Z d dlZddlmZ ddlmZmZmZ ddlm	Z	 ddl
mZmZmZ ddlmZmZ d dlmZ d d	lmZ G d
d deZG dd deeZG dd de	eddZdS )    N   )JsonSchemaData)RequestHeaderResponseHeaderResponseClassRegistry)DataContainer)	BaseFieldStructField	load_json)Int32EncodeBufferPool)	pack_into)classpropertyc                       s,   e Zd Z fddZdd Zdd Z  ZS )VersionSubscriptablec                    sL   t  j|||fi | |ddr"t| dd d u r$d | _i | _d S d S d S )NinitT_class_version)super__init__getgetattrr   	_VERSIONSclsnamebasesattrskw	__class__ X/home/djax/ivt_ai_plugin/venv/lib/python3.10/site-packages/kafka/protocol/api_message.pyr      s   
zVersionSubscriptable.__init__c                 C   s   | j d ur|  d }|d u r|S || S |d u r| S | jd urB|dk r+|d| j 7 }| j|  kr7| jksBn td| j| jf || jv rL| j| S | jd t| }t	|t
|  d|idd| j|< | j| S )Nr   r   zInvalid version! min=%d, max=%d_vr   F)r   )r   mro_valid_versionsmax_versionmin_version
ValueErrorr   __name__strtypetuple)r   versionprimary_cls
klass_namer   r   r    __getitem__   s"   



"
z VersionSubscriptable.__getitem__c                 C   s2   | j d u r	td| jd urtd| j d d S )Nz<Unable to calculate __len__ for class without valid_versionsz=len() only supported on primary message class (not versioned)r   )r#   RuntimeErrorr   	TypeErrorr   r   r   r    __len__.   s
   

zVersionSubscriptable.__len__)r'   
__module____qualname__r   r.   r2   __classcell__r   r   r   r    r      s    
r   c                       s   e Zd Z fddZ  ZS )ApiMessageDatac                    sT   t  j|||fi | |ddr&| jjd dkr(d| jjd f| j_d S d S d S )Nr   Tr   r   )r   r   r   _struct	_versionsr   r   r   r    r   8   s   zApiMessageData.__init__)r'   r3   r4   r   r5   r   r   r   r    r6   7   s    r6   c                       s<  e Zd ZdZ fddZ fddZ fddZedd	 Zed
d Z	edd Z
edd Zedd Zedd Zedd Zedd Zedd Zdd Zedd Zejdd Zedd  Zed!d" Zd7d%d&Zd8d(d)Zd8d*d+Zed9d-d.Zed9d/d0Zd:d1d2Zed:d3d4Z fd5d6Z  Z S );
ApiMessage)_header_min_version_max_versionc                    s   t  jdi | |ddr?| jd usJ | jd dv sJ t| jd | _t| jd | _|  sAt	
t|  d S d S d S )Nr   Tr)   )requestresponseflexibleVersionsvalidVersionsr   )r   __init_subclass__r   _jsonr   parse_versions_flexible_versionsr#   
is_requestr   register_response_classweakrefproxy)r   r   r   r   r    rA   D   s   zApiMessage.__init_subclass__c                    s`   | j d ur*|d| j | j krtd| j |d< t | d  }|j|i | |S t | S )Nr+   z%Version has already been set by class)r   r   r&   r   __new__r   )r   argskwargsinstancer   r   r    rI   O   s   

zApiMessage.__new__c                    s8   d | _ |dd | _|dd | _t j|i | d S )Nr%   r$   )r:   popr;   r<   r   r   )selfrJ   rK   r   r   r    r   Z   s   zApiMessage.__init__c                 C   
   | j d S )Nr   rB   r1   r   r   r    r   `      
zApiMessage.namec                 C   rO   )Nr)   rP   r1   r   r   r    r)   d   rQ   zApiMessage.typec                 C   rO   )NapiKeyrP   r1   r   r   r    API_KEYh   rQ   zApiMessage.API_KEYc                 C      | j S NrP   r1   r   r   r    jsonl      zApiMessage.jsonc                 C   rT   rU   r#   r1   r   r   r    valid_versionsp   rW   zApiMessage.valid_versionsc                 C      dS )Nr   r   r1   r   r   r    r%   t   s   zApiMessage.min_versionc                 C   s   | j d ur
| j d S d S )Nr   rX   r1   r   r   r    r$   x   s   

zApiMessage.max_versionc                 C   s6   | j d ur| j d |  kr| j d krdS  dS dS )Nr   r   TF)rD   )r   r+   r   r   r    flexible_version_q~   s
   
zApiMessage.flexible_version_qc                 C   s
   | j dkS )Nr=   )r)   r1   r   r   r    rE      rQ   zApiMessage.is_requestc                 C   rZ   )NTr   rN   r   r   r    expect_response   s   zApiMessage.expect_responsec                 C   s   | j d ur| j S | jS rU   )_versionr   r\   r   r   r    API_VERSION   s   zApiMessage.API_VERSIONc                 C   sJ   d|  kr| j ksn td|| j f || _| jd ur#|| j_d S d S )Nr   'Invalid version %s (max version is %s).)r$   r&   r^   r:   request_api_version)rN   r+   r   r   r    r_      s   
c                 C   rT   rU   )r:   r\   r   r   r    header   rW   zApiMessage.headerc                 C   s8   | j dkrtS | j dkrtS | j d u rd S td| j  )Nr>   r=   z%Expected request or response type: %s)r)   r   r   r&   r1   r   r   r    header_class   s   


zApiMessage.header_classr   kafka-pythonc                 C   s:   |   r| j| j||d}nd|i}| jdi || _d S )N)request_api_keyra   correlation_id	client_idrf   r   )rE   rS   r_   rc   r:   )rN   rf   rg   rK   r   r   r    with_header   s   zApiMessage.with_headerFc                 C   s   | j j|dS Nflexible)r:   encode)rN   rk   r   r   r    encode_header   s   zApiMessage.encode_headerc                 C   s<   | j |d}t|}||j|j|j| < | j|7  _d S ri   )rm   lenbufpos)rN   outrk   header_bytesnr   r   r    encode_header_into   s   zApiMessage.encode_header_intoNc                 C   sf   |d u r| j n|}|d u rtdd|  kr| jks&n td|| jf | |}| jj||dS )NVersion required to decode datar   r`   rj   )r   r&   r$   r[   rc   decode)r   datar+   rk   r   r   r    parse_header   s   
zApiMessage.parse_headerc                 C   s:   |d u r| j }|d u rtd| |}| jj|||dS )NVersion required to encode datacompacttagged)r   r&   r[   r7   encode_into__optimized_context)r   r+   rk   r   r   r    r}      s   
z)ApiMessage.encode_into__optimized_contextc                 C   s   |d ur|| _ | j d u rtd|r| jd u rtd| | j }t <}|r/| jd7  _|r8| j||d | jj	| j ||d}|| | |rV|jd }t
d|jd| | W  d    S 1 sdw   Y  d S )Nry   zNo header found   rj   rz   z>ir   )r_   r&   r:   r[   r   acquirerp   rt   r7   compiled_encode_intor   ro   result)rN   r+   rb   framedrk   rq   fast_encodepayload_sizer   r   r    rl      s&   



$zApiMessage.encodec                 C   s"  |d u r| j n|}|d u rtdd|  kr| jks&n td|| jf t|tr0t|}nt|tsEt|drAt| }nt|}d}|rQt	||\}}|rlt
t||d  }| j||d}|| 7 }nd }| d  }	| |}
| jj||
|
|	d}|||\}}|d ur||_|S )Nru   r   r`   read)r+   )r{   r|   
data_class)r   r&   r$   
isinstancebytes
memoryviewhasattrr   r   decode_fromioBytesIOrx   tellr[   r7   compiled_decode_fromr:   )r   rw   r+   rb   r   rp   sizehdr_datahdrr   rk   fast_decoderetr   r   r    rv      s4   




zApiMessage.decodec                    s   | j |j krdS t |S )NF)r+   r   __eq__)rN   otherr   r   r    r     s   zApiMessage.__eq__)r   rd   )FrU   )NFF)!r'   r3   r4   	__slots__rA   rI   r   r   r   r)   rS   rV   rY   r%   r$   classmethodr[   rE   r]   propertyr_   setterrb   rc   rh   rm   rt   rx   r}   rl   rv   r   r5   r   r   r   r    r9   A   sV    
















		
&r9   F)	metaclassr   )r   rG   api_datar   
api_headerr   r   r   data_containerr   schemasr   r	   r
   schemas.fields.codecsr   r   structr   
kafka.utilr   r)   r   r6   r9   r   r   r   r    <module>   s    )
