o
    uyi                     @  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
mZmZmZmZ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Z0d: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DictListOptionalTupleUnion)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   X/home/ubuntu/maya3_transcribe/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__2      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   9      zBooleanWriter.writeN)r   r   r   r)   r   r*   r    r%   r&   r   r   r   r   r   r(   7       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   A   r-   zIntegerWriter.writeNr   r   r   r2   r   r*   r    r%   r&   __doc__r   r   r   r   r   r1   =       r1   c                   @  r'   )FloatWriterr   r   r   floatr   r*   c                 C  r+   r   )write_floatr   r   r   r   r   G   r-   zFloatWriter.writeNr   r   r   r:   r   r*   r.   r   r   r   r   r9   E   r/   r9   c                   @  r'   )DoubleWriterr   r   r   r:   r   r*   c                 C  r+   r   )write_doubler   r   r   r   r   M   r-   zDoubleWriter.writeNr<   r.   r   r   r   r   r=   K   r/   r=   c                   @  r'   )
DateWriterr   r   r   r2   r   r*   c                 C  r+   r   r3   r   r   r   r   r   S   r-   zDateWriter.writeNr5   r.   r   r   r   r   r?   Q   r/   r?   c                   @  r'   )
TimeWriterr   r   r   r2   r   r*   c                 C  r+   r   r3   r   r   r   r   r   Y   r-   zTimeWriter.writeNr5   r.   r   r   r   r   r@   W   r/   r@   c                   @  r'   )TimestampWriterr   r   r   r2   r   r*   c                 C  r+   r   r3   r   r   r   r   r   _   r-   zTimestampWriter.writeNr5   r.   r   r   r   r   rA   ]   r/   rA   c                   @  r'   )TimestampNanoWriterr   r   r   r2   r   r*   c                 C  r+   r   r3   r   r   r   r   r   e   r-   zTimestampNanoWriter.writeNr5   r.   r   r   r   r   rB   c   r/   rB   c                   @  r'   )TimestamptzWriterr   r   r   r2   r   r*   c                 C  r+   r   r3   r   r   r   r   r   k   r-   zTimestamptzWriter.writeNr5   r.   r   r   r   r   rC   i   r/   rC   c                   @  r'   )TimestamptzNanoWriterr   r   r   r2   r   r*   c                 C  r+   r   r3   r   r   r   r   r   q   r-   zTimestamptzNanoWriter.writeNr5   r.   r   r   r   r   rD   o   r/   rD   c                   @  r'   )StringWriterr   r   r   r   r   r*   c                 C  r+   r   )
write_utf8r   r   r   r   r   w   r-   zStringWriter.writeNr   r   r   r   r   r*   r.   r   r   r   r   rE   u   r/   rE   c                   @  r'   )
UUIDWriterr   r   r   Union[UUID, bytes]r   r*   c                 C  s(   t |tr||j d S || d S r   )
isinstancer   r   bytesr   r   r   r   r   }   s   
zUUIDWriter.writeN)r   r   r   rI   r   r*   r.   r   r   r   r   rH   {   r/   rH   c                   @  r'   )UnknownWriterr   r   r   r   r   r*   c                 C  r+   r   )write_unknownr   r   r   r   r      r-   zUnknownWriter.writeNrG   r.   r   r   r   r   rL      r/   rL   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 )FixedWriterr2   _lenr   r   r   rK   r   r*   c                 C  s6   t || jkrtd| j dt | || d S )Nz	Expected z bytes, got )lenrO   
ValueErrorr   r   r   r   r   r      s   zFixedWriter.writec                 C  s   | j S )z!Return the length of this object.rO   r!   r   r   r   __len__   s   zFixedWriter.__len__r   c                 C  s   d| j  dS )r   zFixedWriter()rR   r!   r   r   r   r"      r#   zFixedWriter.__repr__N)r   r   r   rK   r   r*   r   r2   r$   )	r    r%   r&   dataclassfieldrO   __annotations__r   rS   r"   r   r   r   r   rN      s
   
 

rN   c                   @  r0   )BinaryWriterzVariable byte length writer.r   r   r   r   r   r*   c                 C  r+   r   )write_bytesr   r   r   r   r      r-   zBinaryWriter.writeNrG   r6   r   r   r   r   rX      r8   rX   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 )DecimalWriterr2   	precisionscaler   r   r   r   r   r*   c                 C  s   | t|t| jdS )N)byte_length)r   r   r   r[   r   r   r   r   r      s   zDecimalWriter.writer   c                 C  s   d| j  d| j dS )r   zDecimalWriter(z, rT   )r[   r\   r!   r   r   r   r"      s   zDecimalWriter.__repr__NrG   r$   )	r    r%   r&   rV   r[   rW   r\   r   r"   r   r   r   r   rZ      s
   
 
rZ   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   )r4   r_   r   r   r   r   r   r      s   
zOptionWriter.writeNrG   )r    r%   r&   rV   r_   rW   r   r   r   r   r   r^      s   
 r^   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[Optional[int], Writer], ...]field_writersr   r   r   r   r   r*   c                 C  s0   | j D ]\}}|||d ur|| nd  qd S r   )rb   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)rJ   ra   rb   )r   re   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))))joinrb   r!   r   r   r   r"      s   zStructWriter.__repr__r2   c                 C  s
   t | jS )z5Return the hash of the writer as hash of this object.)hashrb   r!   r   r   r   __hash__   s   
zStructWriter.__hash__N)r   r   r   r   r   r*   )re   r   r   r)   r$   rU   )
r    r%   r&   rV   rb   rW   r   rf   r"   rm   r   r   r   r   ra      s   
 


ra   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   )r4   rP   ro   r   )r   r   r   vr   r   r   r      s   zListWriter.writeN)r   r   r   rp   r   r*   r    r%   r&   rW   r   r   r   r   r   rn      s   
 rn   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 rq   )r4   rP   itemsru   r   rv   )r   r   r   krr   r   r   r   r      s   zMapWriter.writeN)r   r   r   rw   r   r*   rs   r   r   r   r   rt         
 rt   c                   @  s(   e Zd ZU ded< ded< dd
dZdS )DefaultWriterr   rd   r   valuer   r   _r   r*   c                 C  s   | j || j d S r   )rd   r   r|   )r   r   r}   r   r   r   r      s   zDefaultWriter.writeN)r   r   r}   r   r   r*   rs   r   r   r   r   r{      rz   r{   N)1r7   
__future__r   abcr   dataclassesr   r   rV   typingr   r   r   r	   r
   r   uuidr   pyiceberg.avro.encoderr   pyiceberg.typedefr   pyiceberg.utils.decimalr   r   pyiceberg.utils.singletonr   r   r(   r1   r9   r=   r?   r@   rA   rB   rC   rD   rE   rH   rL   rN   rX   rZ   r^   ra   rn   rt   r{   r   r   r   r   <module>   sn    	