o
    i                     @  s  d 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 ddlmZ dd	lmZ dd
lmZmZ ddlmZ eddG dd deZeddG dd deZeddG dd deZeddG dd deZeddG dd deZeddG dd deZeddG dd deZeddG dd deZeddG dd deZeddG d d! d!eZeddG d"d# d#eZ eddG d$d% d%eZ!eddG d&d' d'eZ"eddG d(d) d)eZ#eddG d*d+ d+eZ$eddG d,d- d-eZ%eddG d.d/ d/eZ&eddG d0d1 d1eZ'eddG d2d3 d3eZ(eddG d4d5 d5eZ)eddG d6d7 d7eZ*eddG d8d9 d9eZ+d:S );z
Classes for building the Writer tree.

Constructing a writer tree from the schema makes it easy
to decouple the writing implementation from the schema.
    )annotations)abstractmethod)	dataclass)field)Any)UUID)BinaryEncoder)Record)decimal_required_bytesdecimal_to_bytes)	SingletonT)frozenc                   @  s$   e Zd ZedddZdd	d
ZdS )Writerencoderr   valr   returnc                 C  s   d S N selfr   r   r   r   S/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/pyiceberg/avro/writer.pywrite*   s   zWriter.writestrc                 C  s   | j j dS ),Return string representation of this object.z())	__class____name__r   r   r   r   __repr__-      zWriter.__repr__N)r   r   r   r   r   r   r   r   )r   
__module____qualname__r   r   r   r   r   r   r   r   (   s    r   c                   @     e Zd Zd
ddZd	S )BooleanWriterr   r   r   boolr   Nonec                 C     | | d S r   )write_booleanr   r   r   r   r   4      zBooleanWriter.writeN)r   r   r   r$   r   r%   r   r    r!   r   r   r   r   r   r#   2       r#   c                   @     e Zd ZdZddd	Zd
S )IntegerWriterzHLongs and ints are encoded the same way, and there is no long in Python.r   r   r   intr   r%   c                 C  r&   r   	write_intr   r   r   r   r   <   r(   zIntegerWriter.writeNr   r   r   r-   r   r%   r   r    r!   __doc__r   r   r   r   r   r,   8       r,   c                   @  r"   )FloatWriterr   r   r   floatr   r%   c                 C  r&   r   )write_floatr   r   r   r   r   B   r(   zFloatWriter.writeNr   r   r   r5   r   r%   r)   r   r   r   r   r4   @   r*   r4   c                   @  r"   )DoubleWriterr   r   r   r5   r   r%   c                 C  r&   r   )write_doubler   r   r   r   r   H   r(   zDoubleWriter.writeNr7   r)   r   r   r   r   r8   F   r*   r8   c                   @  r"   )
DateWriterr   r   r   r-   r   r%   c                 C  r&   r   r.   r   r   r   r   r   N   r(   zDateWriter.writeNr0   r)   r   r   r   r   r:   L   r*   r:   c                   @  r"   )
TimeWriterr   r   r   r-   r   r%   c                 C  r&   r   r.   r   r   r   r   r   T   r(   zTimeWriter.writeNr0   r)   r   r   r   r   r;   R   r*   r;   c                   @  r"   )TimestampWriterr   r   r   r-   r   r%   c                 C  r&   r   r.   r   r   r   r   r   Z   r(   zTimestampWriter.writeNr0   r)   r   r   r   r   r<   X   r*   r<   c                   @  r"   )TimestampNanoWriterr   r   r   r-   r   r%   c                 C  r&   r   r.   r   r   r   r   r   `   r(   zTimestampNanoWriter.writeNr0   r)   r   r   r   r   r=   ^   r*   r=   c                   @  r"   )TimestamptzWriterr   r   r   r-   r   r%   c                 C  r&   r   r.   r   r   r   r   r   f   r(   zTimestamptzWriter.writeNr0   r)   r   r   r   r   r>   d   r*   r>   c                   @  r"   )TimestamptzNanoWriterr   r   r   r-   r   r%   c                 C  r&   r   r.   r   r   r   r   r   l   r(   zTimestamptzNanoWriter.writeNr0   r)   r   r   r   r   r?   j   r*   r?   c                   @  r"   )StringWriterr   r   r   r   r   r%   c                 C  r&   r   )
write_utf8r   r   r   r   r   r   r(   zStringWriter.writeNr   r   r   r   r   r%   r)   r   r   r   r   r@   p   r*   r@   c                   @  r"   )
UUIDWriterr   r   r   UUID | bytesr   r%   c                 C  s(   t |tr||j d S || d S r   )
isinstancer   r   bytesr   r   r   r   r   x   s   
zUUIDWriter.writeN)r   r   r   rD   r   r%   r)   r   r   r   r   rC   v   r*   rC   c                   @  r"   )UnknownWriterr   r   r   r   r   r%   c                 C  r&   r   )write_unknownr   r   r   r   r      r(   zUnknownWriter.writeNrB   r)   r   r   r   r   rG      r*   rG   c                   @  s:   e Zd ZU e Zded< dd	d
ZdddZdddZdS )FixedWriterr-   _lenr   r   r   rF   r   r%   c                 C  s6   t || jkrtd| j dt | || d S )Nz	Expected z bytes, got )lenrJ   
ValueErrorr   r   r   r   r   r      s   zFixedWriter.writec                 C  s   | j S )z!Return the length of this object.rJ   r   r   r   r   __len__   s   zFixedWriter.__len__r   c                 C  s   d| j  dS )r   zFixedWriter()rM   r   r   r   r   r      r   zFixedWriter.__repr__N)r   r   r   rF   r   r%   r   r-   r   )	r   r    r!   dataclassfieldrJ   __annotations__r   rN   r   r   r   r   r   rI      s
   
 

rI   c                   @  r+   )BinaryWriterzVariable byte length writer.r   r   r   r   r   r%   c                 C  r&   r   )write_bytesr   r   r   r   r      r(   zBinaryWriter.writeNrB   r1   r   r   r   r   rS      r3   rS   c                   @  s>   e Zd ZU e Zded< e Zded< dd
dZdddZdS )DecimalWriterr-   	precisionscaler   r   r   r   r   r%   c                 C  s   | t|t| jdS )N)byte_length)r   r   r
   rV   r   r   r   r   r      s   zDecimalWriter.writer   c                 C  s   d| j  d| j dS )r   zDecimalWriter(z, rO   )rV   rW   r   r   r   r   r      s   zDecimalWriter.__repr__NrB   r   )	r   r    r!   rQ   rV   rR   rW   r   r   r   r   r   r   rU      s
   
 
rU   c                   @  s&   e Zd ZU e Zded< dd	d
ZdS )OptionWriterr   optionr   r   r   r   r   r%   c                 C  s2   |d ur| d | j|| d S | d d S )N   r   )r/   rZ   r   r   r   r   r   r      s   
zOptionWriter.writeNrB   )r   r    r!   rQ   rZ   rR   r   r   r   r   r   rY      s   
 rY   c                   @  sD   e Zd ZU e Zded< dd	d
ZdddZdddZdddZ	dS )StructWriterz%tuple[tuple[int | None, Writer], ...]field_writersr   r   r   r	   r   r%   c                 C  s0   | j D ]\}}|||d ur|| nd  qd S r   )r]   r   )r   r   r   poswriterr   r   r   r      s   zStructWriter.writeotherr   r$   c                 C  s   t |tr| j|jkS dS )z0Implement the equality operator for this object.F)rE   r\   r]   )r   r`   r   r   r   __eq__   s   zStructWriter.__eq__r   c                 C  s   dd dd | jD  dS )r   zStructWriter(tuple((,c                 s  s    | ]}t |V  qd S r   )repr).0r   r   r   r   	<genexpr>   s    z(StructWriter.__repr__.<locals>.<genexpr>z))))joinr]   r   r   r   r   r      s   zStructWriter.__repr__r-   c                 C  s
   t | jS )z5Return the hash of the writer as hash of this object.)hashr]   r   r   r   r   __hash__   s   
zStructWriter.__hash__N)r   r   r   r	   r   r%   )r`   r   r   r$   r   rP   )
r   r    r!   rQ   r]   rR   r   ra   r   rh   r   r   r   r   r\      s   
 


r\   c                   @  s    e Zd ZU ded< dd	d
ZdS )
ListWriterr   element_writerr   r   r   	list[Any]r   r%   c                 C  sD   | t| |D ]	}| j|| q	t|dkr | d d S d S Nr   )r/   rK   rj   r   )r   r   r   vr   r   r   r      s   zListWriter.writeN)r   r   r   rk   r   r%   r   r    r!   rR   r   r   r   r   r   ri      s   
 ri   c                   @  s(   e Zd ZU ded< ded< dd
dZdS )	MapWriterr   
key_writervalue_writerr   r   r   dict[Any, Any]r   r%   c                 C  sZ   | t| | D ]\}}| j|| | j|| qt|dkr+| d d S d S rl   )r/   rK   itemsrp   r   rq   )r   r   r   krm   r   r   r   r      s   zMapWriter.writeN)r   r   r   rr   r   r%   rn   r   r   r   r   ro         
 ro   c                   @  s(   e Zd ZU ded< ded< dd
dZdS )DefaultWriterr   r_   r   valuer   r   _r   r%   c                 C  s   | j || j d S r   )r_   r   rw   )r   r   rx   r   r   r   r      s   zDefaultWriter.writeN)r   r   rx   r   r   r%   rn   r   r   r   r   rv      ru   rv   N),r2   
__future__r   abcr   dataclassesr   r   rQ   typingr   uuidr   pyiceberg.avro.encoderr   pyiceberg.typedefr	   pyiceberg.utils.decimalr
   r   pyiceberg.utils.singletonr   r   r#   r,   r4   r8   r:   r;   r<   r=   r>   r?   r@   rC   rG   rI   rS   rU   rY   r\   ri   ro   rv   r   r   r   r   <module>   sn   	