o
    `jg                     @   s2   d dl mZ G dd deZG dd dedZdS )    )classpropertyc                       s   e Zd Z fddZ  ZS )SlotsBuilderc                    sB   | dd ur| ddt|d j  |d< t | |||S )N_struct	__slots__ )gettuplefieldskeyssuper__new__)metaclsnamebasesattrskw	__class__r   [/home/djax/ivt_ai_plugin/venv/lib/python3.10/site-packages/kafka/protocol/data_container.pyr      s   "zSlotsBuilder.__new__)__name__
__module____qualname__r   __classcell__r   r   r   r   r      s    r   c                       s   e Zd ZdZdZ fddZddddZdd	 Zed
d Z	dd Z
dd Zedd Zedd Zdd Zdd Zdd Zd"ddZd"ddZd d! Z  ZS )#DataContainer)tagsunknown_tags_versionNc                    sx   t  jdi | | jd ur8| jj D ]%}| s| r7| s/|t	|j
tfd|i t| |j
|j qd S d S )Nr   r   )r   __init_subclass__r   r	   values	is_structis_struct_arrayhas_data_classset_data_classtypetype_strr   setattr
data_class)clskwargsfieldr   r   r   r      s   
zDataContainer.__init_subclass__)versionc                   s  | j d usJ |d ur,| j j|  kr| j jks,n td| d| j j d| j j d|| _t|dkri| jd urA| j | jn| j j t|t krYtdt|t f |	 fddt
|D  d	}d | _d | _| j jD ]9}|j}||v r|jd ur| jd u rt | _| j| t| ||| qs| jd ur|| jrt| ||j qst|D ]}|d
r| jd u ri | _||| j|< q|rtd| j j|f d S )NzInvalid version: z (min=z, max=)r   zCUnable to init DataContainer with %d positional args: unexpected %dc                    s   i | ]
\}} | j |qS r   )r   ).0iarg
field_argsr   r   
<dictcomp>#       z*DataContainer.__init__.<locals>.<dictcomp>r   _z#Unrecognized fields for type %s: %s)r   min_versionmax_version
ValueErrorr   lenuntagged_fields_fieldsRuntimeErrorupdate	enumerater   r   r   _tagsetaddr%   popfor_version_qdefaultlist
startswith)selfr*   args
field_valsr)   r   r   r/   r   __init__   s@   &$ 



zDataContainer.__init__c                 C   s0   | j j}||v r|| jS tdt| j|f )Nz!'%s' object has no attribute '%s')r   r	   rB   AttributeErrorr#   r   )rE   r   	field_mapr   r   r   __getattr__=   s   
zDataContainer.__getattr__c                 C   s   | j S N)r   rE   r   r   r   r*   E   s   zDataContainer.versionc                 O   s   | j j| g|R i |S z9Add version= to kwargs, otherwise pass-through to _struct)r   encode)rE   rF   r(   r   r   r   rO   I   s   zDataContainer.encodec                 O   s    | j j| |g|R i | dS )z8Buffer-based encode, pass-through to _struct.encode_intoN)r   encode_into)rE   outrF   r(   r   r   r   rP   M   s    zDataContainer.encode_intoc                 K   s   | j j|fi |S rN   )r   decode)r'   datar(   r   r   r   rR   Q   s   zDataContainer.decodec                 C   s   | j jS rL   )r   r	   )r'   r   r   r   r	   V   s   zDataContainer.fieldsc              	      s~    j d ur fdd}d j  g}ndd }g }t| jjD ]}|d|jtt |jf  q jj	d d
| d S )	Nc                    s   |   jS rL   )rA   r   r)   rM   r   r   <lambda>\   s    z(DataContainer.__repr__.<locals>.<lambda>z
version=%sc                 S   s   dS )NTr   rT   r   r   r   rU   _   s    z%s=%s(z, r+   )r   filterr   r9   appendr   reprgetattrr   r   join)rE   v_filterkey_valsr)   r   rM   r   __repr__Z   s   
"zDataContainer.__repr__c                 C   s   t |trRt|t| jjk rdS t| jjD ]\}}t| |j|| kr( dS qt|t| jjkr5dS t|t| jjd krPt |d trP|d i krPdS dS | j	|j	krZdS | j|jkrbdS | jjD ]}t| |jt||jkrw dS qfdS )NFT   )

isinstancer   r7   r   r9   r<   rZ   r   dictr   )rE   otherr-   r)   r   r   r   __eq__e   s*   
2zDataContainer.__eq__c                    s2    j d u r	tdt fdd j j D S )Nz6DataContainer Iteration not supported without _versionc                    s   g | ]}t  |jqS r   rZ   r   )r,   r)   rM   r   r   
<listcomp>   s    z*DataContainer.__iter__.<locals>.<listcomp>)r   r:   iterr   r8   rM   r   rM   r   __iter__}   s   
 zDataContainer.__iter__FTc                 #   s    rd| j jfV  d| jfV  dkrd| jjD ]^}| jd ur(|| js(q| rFt| |j}|j|d u r:d nt	|j
 dfV  q| ret| |j}|j|d u rXd n	 fdd|D fV  qt| |j}|j rt||n|fV  qd S )N_typer   allFmetajsonc                    s   g | ]}t |j d qS )rk   rb   _to_dict_vals)r,   vrm   rl   r   r   rf      s    z/DataContainer._to_dict_vals.<locals>.<listcomp>)r   r   r   r   r9   rA   r   rZ   r   rb   ro   r    to_json)rE   rl   rm   r)   valr   rq   r   ro      s$   (*zDataContainer._to_dict_valsc                 C   s   t | j||dS )zUse meta=True to include top-level version; meta='all' to include all internal versions
        json=False to return raw encoding; json=True (default) to convert values to be json-serializable
        rk   rn   )rE   rl   rm   r   r   r   to_dict   s   zDataContainer.to_dictc                    s   j d u r	tdt|trjj | }t|jS t|trAjj  |	t
 \}}} fddt|||D S tdt|j )Nz6DataContainer subscript not supported without _versionc                    s   g | ]
}t  | jqS r   re   )r,   r-   r	   rE   r   r   rf      r2   z-DataContainer.__getitem__.<locals>.<listcomp>z7DataContainer subscript supports int or slices only: %s)r   r:   ra   intr   r8   rZ   r   sliceindicesr7   range	TypeErrorr#   r   )rE   keyr)   startstopstepr   ru   r   __getitem__   s   


zDataContainer.__getitem__)FT)r   r   r   r   r   r   rH   rK   propertyr*   rO   rP   classmethodrR   r   r	   r^   rd   rh   ro   rt   r   r   r   r   r   r   r      s(    
$




r   )	metaclassN)
kafka.utilr   r#   r   r   r   r   r   r   <module>   s    