o
    i                     @   s   d dl Z d dlmZmZmZmZ ddl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mZ G dd dZdS )    N)IOAnyTupleList   )Parser)RecordStart
FieldStartBooleanIntNullStringLongFloatDoubleBytesFieldEnd	RecordEndUnionUnionEndMapStartMapEndMapKeyMarkerFixed
ArrayStartArrayEndEnumItemEndc                   @   s   e Zd ZdZdefddZdd Zdd Zd9d
dZdd Z	dd Z
dd Zdd Zdd Zdd Zd:ddZdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd	S );AvroJSONDecoderzDecoder for the avro JSON format.

    NOTE: All attributes and methods on this class should be considered
    private.

    Parameters
    ----------
    fo
        File-like object to reader from

    foc                 C   sH   || _ g | _dd |D | _| jr| jd| _d| _nd| _d | _d S )Nc                 S   s   g | ]	}t | qS  )jsonloadsstrip).0liner    r    ^/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/fastavro/io/json_decoder.py
<listcomp>/   s    z,AvroJSONDecoder.__init__.<locals>.<listcomp>r   FT)_fo_stack
_json_datapop_currentdone_key)selfr   r    r    r&   __init__,   s   
zAvroJSONDecoder.__init__c                 C   s2   t | jtr| j| jvr| S | j| j S | jS N)
isinstancer,   dictr.   get_defaultr/   symbolr    r    r&   
read_value7   s
   zAvroJSONDecoder.read_valuec                 C   s   | j | j| jf d S r1   )r)   appendr,   r.   r/   r    r    r&   _pushC   s   zAvroJSONDecoder._pushNc                 C   sR   |    t| jtr%| jd ur'| j| jvr| | _d S | j| j | _d S d S d S r1   )r:   r2   r,   r3   r.   r4   r5   r    r    r&   _push_and_adjustF   s   z AvroJSONDecoder._push_and_adjustc                 C   s   | j  \| _| _d S r1   )r)   r+   r,   r.   r9   r    r    r&   _popO   s   zAvroJSONDecoder._popc                 C   s   t ||| j| _d S r1   )r   	do_action_parser)r/   schemanamed_schemasr    r    r&   	configureR   s   zAvroJSONDecoder.configurec                 C   sn   t |tr| | d S t |tr|   d S t |tr$| |j d S t |ts.t |t	r0d S t
d| )Nzcannot handle: )r2   r   r;   r   r<   r	   read_object_key
field_namer   r   	Exception)r/   actionr    r    r&   r=   U   s   


zAvroJSONDecoder.do_actionc                 C   s2   | j   | jr| jd| _d | _d S d| _d S )Nr   T)r>   drain_actionsr*   r+   r,   r.   r-   r9   r    r    r&   drainb   s
   


zAvroJSONDecoder.drainc                 C      | j t }| |S r1   )r>   advancer   r7   r5   r    r    r&   	read_nullj      
zAvroJSONDecoder.read_nullc                 C   rH   r1   )r>   rI   r
   r7   r5   r    r    r&   read_booleann   rK   zAvroJSONDecoder.read_booleanstrictc                 C   sV   | j t }| j jd t kr&| j t  | jD ]}|| _ | jS | jS | |S )N)r>   rI   r   stackr   r,   r.   r7   )r/   handle_unicode_errorsr6   keyr    r    r&   	read_utf8r   s   

zAvroJSONDecoder.read_utf8c                 C   s   | j t }| |dS Nz
iso-8859-1)r>   rI   r   r7   encoder5   r    r    r&   
read_bytes}      zAvroJSONDecoder.read_bytesc                 C   rH   r1   )r>   rI   r   r7   r5   r    r    r&   read_int   rK   zAvroJSONDecoder.read_intc                 C   rH   r1   )r>   rI   r   r7   r5   r    r    r&   	read_long   rK   zAvroJSONDecoder.read_longc                 C   rH   r1   )r>   rI   r   r7   r5   r    r    r&   
read_float   rK   zAvroJSONDecoder.read_floatc                 C   rH   r1   )r>   rI   r   r7   r5   r    r    r&   read_double   rK   zAvroJSONDecoder.read_doublec                 C   s.   | j t }| j  }| |}|j|S r1   )r>   rI   r   
pop_symbolr7   labelsindex)r/   r6   enum_labelslabelr    r    r&   	read_enum   s   

zAvroJSONDecoder.read_enumc                 C   s   | j t }| |dS rS   )r>   rI   r   r7   rT   )r/   sizer6   r    r    r&   
read_fixed   rV   zAvroJSONDecoder.read_fixedc                 C   s   | j t }| | d S r1   )r>   rI   r   r;   r5   r    r    r&   read_map_start   s   zAvroJSONDecoder.read_map_startc                 C   s
   || _ d S r1   )r.   r/   rQ   r    r    r&   rB      s   
zAvroJSONDecoder.read_object_keyc                 c   sP    t | jdkr&|   | jD ]} d V  |   | j|= t | jdksd S d S Nr   )lenr,   r:   r<   rd   r    r    r&   iter_map   s   
zAvroJSONDecoder.iter_mapc                 C      | j t  |   d S r1   )r>   rI   r   r<   r9   r    r    r&   read_map_end      zAvroJSONDecoder.read_map_endc                 C   s"   | j t }| | d | _d S r1   )r>   rI   r   r;   r.   r5   r    r    r&   read_array_start   s   

z AvroJSONDecoder.read_array_startc                 C   rh   r1   )r>   rI   r   r<   r9   r    r    r&   read_array_end   rj   zAvroJSONDecoder.read_array_endc                 c   sX    t | jdkr*|   | jd| _d V  |   | jt  t | jdksd S d S re   )rf   r,   r:   r+   r<   r>   rI   r   r9   r    r    r&   
iter_array   s   zAvroJSONDecoder.iter_arrayc                 C   s   | j t  | j  }| jd u r+| jd u rd}nG| j \}}|| _| j t  n5| j| jvr>|j	d |
 i| j| j< | j| j d u rId}n| j| j  \}}|| j| j< | j t  |j	|}||}| j | |S )Nnullr   )r>   rI   r   r[   r.   r,   popitempush_symbolr   r\   r4   r]   
get_symbol)r/   alternative_symbolr_   datar]   r6   r    r    r&   
read_index   s(   



zAvroJSONDecoder.read_indexr1   )rM   )__name__
__module____qualname____doc__r   r0   r7   r:   r;   r<   rA   r=   rG   rJ   rL   rR   rU   rW   rX   rY   rZ   r`   rb   rc   rB   rg   ri   rk   rl   rm   rt   r    r    r    r&   r      s8    
	
	r   ) r!   typingr   r   r   r   parserr   symbolsr   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&   <module>   s
    `