o
    g                     @   sd   d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ G d	d
 d
eZdS )z;Write worksheets to xml representations in an optimized way    )isgenerator)CellWriteOnlyCell)_WorkbookChild   )	WorksheetWorkbookAlreadySaved)WorksheetWriterc                       s   e Zd ZdZdZdZdZejZej	Z	ej
Z
ejZejZejZejZejZejZejZejZejZejZejZejZejZ fddZedd Zdd	 Zd
d Zdd Zdd Zdd Zdd Z dd Z!  Z"S )WriteOnlyWorksheetz
    Streaming worksheet. Optimised to reduce memory by writing rows just in
    time.
    Cells can be styled and have comments Styles for rows and columns
    must be applied before writing cells
    FNc                    s&   t  || d| _d| _|   d S )Nr   )super__init___max_col_max_row_setup)selfparenttitle	__class__ X/var/www/html/api-tag/env/lib/python3.10/site-packages/openpyxl/worksheet/_write_only.pyr   .   s   zWriteOnlyWorksheet.__init__c                 C   s   | j S N)_WriteOnlyWorksheet__savedr   r   r   r   closed4   s   zWriteOnlyWorksheet.closedc              	   c   s    z	| j jd}W n ty   |   Y nw |d+ d}z	 dV }| ||}| j ||| |d7 }q" ty@   Y nw W d   n1 sKw   Y  | j jd dS )z2
        Send rows to the writer's stream
        T	sheetDatar   N)	_writerxfsendStopIteration_already_savedelement_values_to_row	write_rowGeneratorExit)r   r   row_idxrowr   r   r   _write_rows9   s*   zWriteOnlyWorksheet._write_rowsc                 C   s&   | j d u rt| | _ | j   d S d S r   )r   r
   	write_topr   r   r   r   _get_writerP   s   

zWriteOnlyWorksheet._get_writerc                 C   sT   | j r|   |   | jd u r| j  n| j  | j  | j  d| _ d S )NT)r   r!   r*   _rowsr   
write_rowsclose
write_tailr   r   r   r   r-   V   s   




zWriteOnlyWorksheet.closec                 C   sX   t |st|tttfs| | |   | jdu r$|  | _t	| j | j
| dS )z^
        :param row: iterable containing values to append
        :type row: iterable
        N)r   
isinstancelisttuplerange_invalid_rowr*   r+   r(   nextr   )r   r'   r   r   r   appendg   s   



zWriteOnlyWorksheet.appendc              	   c   s    t | }t|dD ]?\}}|du rq
z||_W n ty+   t|tr'|}ntY nw ||_||_|jdur<|j	|j_
|V  |jsE|jrIt | }q
dS )zW
        Convert whatever has been appended into a form suitable for work_rows
        r   N)r   	enumeratevalue
ValueErrorr/   r   columnr'   	hyperlink
coordinateref	has_style)r   valuesr&   cellcol_idxr7   r   r   r   r#   {   s,   



z!WriteOnlyWorksheet._values_to_rowc                 C   s   t d)NzHWorkbook has already been saved and cannot be modified or saved anymore.r   r   r   r   r   r!      s   z!WriteOnlyWorksheet._already_savedc                 C   s   t dt|)NzGValue must be a list, tuple, range or a generator Supplied value is {0})	TypeErrorformattype)r   iterabler   r   r   r3      s   zWriteOnlyWorksheet._invalid_row)#__name__
__module____qualname____doc__r   r   r+   r   	_rel_type_path	mime_type_add_row_add_column	add_chart	add_image	add_tabletablesprint_titlesprint_title_colsprint_title_rowsfreeze_panes
print_area
sheet_viewr   r   propertyr   r(   r*   r-   r5   r#   r!   r3   __classcell__r   r   r   r   r      s>    
r   N)rH   inspectr   openpyxl.cellr   r   openpyxl.workbook.childr   	worksheetr   openpyxl.utils.exceptionsr	   r   r
   r   r   r   r   r   <module>   s   