o
    `j                     @   sz   d dl 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
 ddlmZmZ G dd deZG d	d
 d
eeddZdS )    N)classproperty   )DataContainerSlotsBuilder)	BaseFieldStructField	load_json)Int16Int32c                       s(   e Zd Z fddZ fddZ  ZS )JsonSchemaDatac                    s   | ddr?t|| dd}d|v r|d | |}||d< t||d< d|v r8| d	d
d | d |d	< | d|d< t j| |||fi |S )NinitTr   )package
json_patch_json_structdoc__doc__ z
Notes from json schema:
license__license__)getr   __func__r   super__new__)metaclsnamebasesattrskwjson	__class__ U/home/djax/ivt_ai_plugin/venv/lib/python3.10/site-packages/kafka/protocol/api_data.pyr      s   zJsonSchemaData.__new__c                    s>   t  j|||fi | |ddr| jt|  d S d S )Nr   T)r   __init__r   r   set_data_classweakrefproxy)clsr   r   r   r   r    r"   r#   r$      s   zJsonSchemaData.__init__)__name__
__module____qualname__r   r$   __classcell__r"   r"   r    r#   r      s    r   c                       s   e Z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d ddZedd Zd!ddZed!ddZ  ZS )"ApiDatac                    sj   t  jdi | |ddr3| jd usJ | jd dksJ t| jd | _t| jd | _d S d S )Nr   TtypedataflexibleVersionsvalidVersionsr"   )r   __init_subclass__r   r   r   parse_versions_flexible_versions_valid_versions)r(   r   r    r"   r#   r2      s   zApiData.__init_subclass__c                    sT   t |dkrt|d trd|vr|d |d< t|dd  }t j|i | d S )Nr   versionr   )len
isinstanceinttupler   r$   )selfargskwargsr    r"   r#   r$   (   s   "zApiData.__init__c                 C   
   | j d S )Nr   r   r(   r"   r"   r#   r   .      
zApiData.namec                 C   r>   )Nr.   r?   r@   r"   r"   r#   r.   2   rA   zApiData.typec                 C      | j S Nr?   r@   r"   r"   r#   r   6      zApiData.jsonc                 C   rB   rC   r5   r@   r"   r"   r#   valid_versions:   rD   zApiData.valid_versionsc                 C   s   dS )Nr   r"   r@   r"   r"   r#   min_version>      zApiData.min_versionc                 C   s   | j d ur
| j d S d S )Nr   rE   r@   r"   r"   r#   max_versionB   s   

zApiData.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)r4   )r(   r6   r"   r"   r#   flexible_version_qH   s
   
zApiData.flexible_version_qc                 C   s   t S rC   )r	   r@   r"   r"   r#   header_classO   rH   zApiData.header_classFc                 C   s   | j d usJ | j| j S rC   )_versionrK   encode)r;   flexibler"   r"   r#   encode_headerS   s   zApiData.encode_headerc                 C   s   | j |S rC   )rK   decode)r(   r/   r"   r"   r#   parse_headerW   s   zApiData.parse_headerNTc              	   C   s   |d ur|| _ n	| j d u rtd| | j }| jj| | j ||d}|s(|s(|S |g}|r7|d| j|d |rG|dttt	t
| d|S )NzVersion required to encode datar6   compacttaggedr   )rN       )rL   
ValueErrorrJ   r   rM   insertrO   r
   summapr7   join)r;   r6   headerframedrN   encodedbitsr"   r"   r#   rM   [   s   

zApiData.encodec                 C   s   |s|d u r
t dd|  kr| jksn t d|| jf t|tr)t|}|r0t|}|rM| |}|d urG||krGt d||f t	|| j}| 
|}| jj||||dS )NzVersion required to decode datar   z'Invalid version %s (max version is %s).z)Version mismatch: found v%d, expected v%drR   )rV   rI   r8   bytesioBytesIOr
   rP   rQ   minrJ   r   )r(   r/   r6   r[   r\   sizedecoded_versionrN   r"   r"   r#   rP   k   s"   




zApiData.decode)F)NTF)r)   r*   r+   r2   r$   r   r   r.   r   rF   rG   rI   classmethodrJ   rK   rO   rQ   rM   rP   r,   r"   r"   r    r#   r-      s2    	










r-   F)	metaclassr   )r`   r&   
kafka.utilr   data_containerr   r   schemasr   r   r   schemas.fields.codecsr	   r
   r   r-   r"   r"   r"   r#   <module>   s    