o
    FDi                     @   sZ   d dl mZ d dl mZ ddlmZmZ ddlmZm	Z	 G dd dZ
G d	d
 d
e
ZdS )    Struct)error   )ColumnTypeMismatchExceptionStructPackException   )BufferedReaderBufferedWriterc                       s   e Zd ZdZdZdZdZdZdZdZ	d"de
def f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dZdd Zdd Zd d! Z  ZS )$ColumnNFr   readerwriterc                    sL   || _ || _d| _|| _d| _d|v r|d j}|dd| _t   d S )NFcontextinput_format_null_as_default)	r   r   nullabletypes_check_enabledinput_null_as_defaultclient_settingsgetsuper__init__)selfr   r   types_checkkwargssettings	__class__ R/var/www/Datamplify/venv/lib/python3.10/site-packages/asynch/proto/columns/base.pyr      s   
zColumn.__init__c                 C   s   t d| dS )N<Br   r   n_itemsr   r   r   make_null_struct    s   zColumn.make_null_structc                    s&   |  |}|| j|jI d H S N)r#   unpackr   
read_bytessize)r   r"   sr   r   r   _read_nulls_map#   s   
zColumn._read_nulls_mapc                    s:   |  t|}dd |D }| j|j| I d H  d S )Nc                 S   s   g | ]}|d u qS r$   r   ).0xr   r   r   
<listcomp>)   s    z+Column._write_nulls_map.<locals>.<listcomp>)r#   lenr   write_bytespack)r   itemsr(   r   r   r   _write_nulls_map'   s   zColumn._write_nulls_mapc                 C   s   t || js
t|d S r$   )
isinstancepy_typesr   )r   valuer   r   r   check_item_type,   s   zColumn.check_item_typec           
      C   s   | j }| j}| j}| j}| jr| j}nd}| j s#|s#|s#|s#| js#|S | j r-dgt| nd }t|D ]&\}}	|	d u rI|rDd||< |}	n|rH|}	n|rO||	 |rU||	 |	||< q3| jrd| j||d |S )NFT	nulls_map)	r   
null_valuer   
check_itemr   r5   before_write_itemsr-   	enumerate)
r   r0   r   r8   null_as_defaultr9   r5   r7   ir+   r   r   r   prepare_items0   sF   
zColumn.prepare_itemsc                    s,   | j r| |I d H  | |I d H  d S r$   )r   r1   _write_datar   r0   r   r   r   
write_dataZ   s   zColumn.write_datac                    s    |  |}| |I d H  d S r$   )r>   write_items)r   r0   preparedr   r   r   r?   `   s   
zColumn._write_datac                       t r$   NotImplementedErrorr@   r   r   r   rB   g      zColumn.write_itemsc                    s2   | j r| |I d H }nd }| j||dI d H S )Nr6   )r   r)   
_read_datar   r"   r7   r   r   r   	read_dataj   s
   zColumn.read_datac                    sJ   |  |I d H  | jr|  |S |d ur#t fddt|D S  S )Nc                 3   s$    | ]\}}|r
d n | V  qd S r$   r   )r*   r=   is_nullr0   r   r   	<genexpr>z   s   " z$Column._read_data.<locals>.<genexpr>)
read_itemsafter_read_itemstupler;   rI   r   rL   r   rH   r   s   
zColumn._read_datac                    rD   r$   rE   r!   r   r   r   rN   }   rG   zColumn.read_itemsc                       d S r$   r   r   r   r   r   read_state_prefix   rG   zColumn.read_state_prefixc                    rQ   r$   r   rR   r   r   r   write_state_prefix   rG   zColumn.write_state_prefix)Fr$   )__name__
__module____qualname__ch_typer3   r9   rO   r:   r   r8   r	   r
   r   r#   r)   r1   r5   r>   rA   r?   rB   rJ   rH   rN   rS   rT   __classcell__r   r   r   r   r      s,    *
r   c                   @   s,   e Zd ZdZdZdd Zdd Zdd ZdS )	FormatColumnz2
    Uses struct.pack for bulk items writing.
    Nc                 C   s   t d| | j S )Nr   )r   formatr!   r   r   r   make_struct   s   zFormatColumn.make_structc              
      sP   |  t|}z| j|j| I d H  W d S  ty' } zt|d }~ww r$   )r\   r-   r   r.   r/   struct_errorr   )r   r0   r(   er   r   r   rB      s   zFormatColumn.write_itemsc                    s*   |  |}|| j|jI d H }|S r$   )r\   r%   r   r&   r'   )r   r"   r(   unpack_datar   r   r   rN      s   
zFormatColumn.read_items)rU   rV   rW   __doc__r[   r\   rB   rN   r   r   r   r   rZ      s    rZ   N)structr   r   r]   errorsr   r   streams.bufferedr	   r
   r   rZ   r   r   r   r   <module>   s    