o
    g+                     @  s   d dl mZ d dlmZ d dlZd dlZd dlmZmZm	Z	m
Z
mZ d dlmZ d dlmZmZ erDd dlmZmZmZmZ d dlmZ G d	d
 d
eZdS )    )annotations)defaultdictN)TYPE_CHECKINGAnyDefaultDictcastoverload)ExcelWriter)combine_kwargsvalidate_freeze_panes)ExcelWriterIfSheetExistsFilePathStorageOptionsWriteExcelBuffer)	ExcelCellc                      s   e Zd ZdZdZ							d6d7 fddZedd Zed8ddZd9ddZ					d:d;d&d'Z
d<d)d*Zd=d,d-Zed>d/d0Zed?d1d0Zd@d2d0ZdAd4d5Z  ZS )B	ODSWriterodf)z.odsNwpath)FilePath | WriteExcelBuffer | ExcelWriterengine
str | Nonedate_formatmodestrstorage_optionsStorageOptions | Noneif_sheet_existsExcelWriterIfSheetExists | Noneengine_kwargsdict[str, Any] | NonereturnNonec	                   sV   ddl m}
 |dkrtdt||	}|
di || _t j|||||d i | _d S )Nr   )OpenDocumentSpreadsheetaz&Append mode is not supported with odf!)r   r   r   r    )odf.opendocumentr#   
ValueErrorr
   _booksuper__init___style_dict)selfr   r   r   datetime_formatr   r   r   r   kwargsr#   	__class__r%   T/var/www/html/api-tag/env/lib/python3.10/site-packages/pandas/io/excel/_odswriter.pyr*   #   s   

zODSWriter.__init__c                 C  s   | j S )z
        Book instance of class odf.opendocument.OpenDocumentSpreadsheet.

        This attribute can be used to access engine-specific features.
        )r(   )r,   r%   r%   r1   bookA   s   zODSWriter.bookdict[str, Any]c                 C  s&   ddl m} dd | j|D }|S )z(Mapping of sheet names to sheet objects.r   )Tablec                 S  s   i | ]}| d |qS name)getAttribute).0sheetr%   r%   r1   
<dictcomp>O   s    
z$ODSWriter.sheets.<locals>.<dictcomp>)	odf.tabler4   r2   getElementsByType)r,   r4   resultr%   r%   r1   sheetsJ   s
   
zODSWriter.sheetsc                 C  s2   | j  D ]	}| jj| q| j| jj dS )z(
        Save workbook to disk.
        N)r>   valuesr2   spreadsheet
addElementsave_handleshandle)r,   r9   r%   r%   r1   _saveU   s   zODSWriter._saver   cellslist[ExcelCell]
sheet_namestartrowintstartcolfreeze_panestuple[int, int] | Nonec                 C  s  ddl m}m}m} ddlm}	 | |}|dusJ || jv r&| j| }
n||d}
| jj	
|
 t|rEttttf |}| || t|D ]}|

|  qIt|}tt}t|dd dD ]X}||j syt|D ]}||j 
|  qmt|j||j  D ]}||j 
|  ||j  d	7  < q| |\}}||j 
| ||j  d	7  < |	|d
}|
| qbt|dkrtt| d	 D ]}|

||  qdS dS )z1
        Write the frame cells using odf
        r   )r4   	TableCellTableRow)PNr5   c                 S  s   | j | jfS N)rowcol)cellr%   r%   r1   <lambda>   s    z(ODSWriter._write_cells.<locals>.<lambda>)key   )text)r;   r4   rN   rO   odf.textrP   _get_sheet_namer>   r2   r@   rA   r   r   tuplerJ   _create_freeze_panesranger   sortedrR   rS   _make_table_celllenmaxkeys)r,   rF   rH   rI   rK   rL   r4   rN   rO   rP   wks_rows	col_countrT   pvaluetcprow_nrr%   r%   r1   _write_cells]   s@   




zODSWriter._write_cellsdict[str, int | str]c                 C  sR   i }|  |j}|dur||d< |jdur'|jdur'td|j|d< |j|d< |S )a*  Convert cell attributes to OpenDocument attributes

        Parameters
        ----------
        cell : ExcelCell
            Spreadsheet cell data

        Returns
        -------
        attributes : Dict[str, Union[int, str]]
            Dictionary with attributes and attribute values
        N	stylenamerW   numberrowsspannednumbercolumnsspanned)_process_stylestyle
mergestartmergeendra   )r,   rT   
attributes
style_namer%   r%   r1   _make_table_cell_attributes   s   
z%ODSWriter._make_table_cell_attributestuple[object, Any]c                 C  s  ddl m} | |}| |j\}}| }}t|tr1t| }t|	 }||d||dfS t|t
j
rI| }|d}||d||dfS t|t
jrl|j d|jd	d|jd	}|d
}||d||dfS t|trz||d||dfS ||d||dfS )a  Convert cell data to an OpenDocument spreadsheet cell

        Parameters
        ----------
        cell : ExcelCell
            Spreadsheet cell data

        Returns
        -------
        pvalue, cell : Tuple[str, TableCell]
            Display value, Cell value
        r   )rN   boolean)	valuetypebooleanvaluert   z%cdate)ry   	datevaluert   -02dz%xstring)ry   stringvaluert   float)ry   valuert   )r;   rN   rv   _value_with_fmtval
isinstanceboolr   lowerupperdatetime	isoformatstrftimer{   yearmonthday)r,   rT   rN   rt   r   fmtrg   r   r%   r%   r1   r_      sR   





zODSWriter._make_table_cellrq   c                 C     d S rQ   r%   r,   rq   r%   r%   r1   rp         zODSWriter._process_stylec                 C  r   rQ   r%   r   r%   r%   r1   rp      r   c                 C  s>  ddl m}m}m}m} |du rdS t|}|| jv r!| j| S dt| jd  }|| j|< ||dd}d|v rL|d }	|		d	d
rL|
|d	d d|v rp|d }
|
 D ]\}}ddi}|
|d| || id qXd|v r|d }|	d}|r|
||d |	d}|r|
||d | jj
| |S )a  Convert a style dictionary to a OpenDocument style sheet

        Parameters
        ----------
        style : Dict
            Style dictionary

        Returns
        -------
        style_key : str
            Unique style key for later reference in sheet
        r   )ParagraphPropertiesStyleTableCellPropertiesTextPropertiesNpdrW   z
table-cell)r6   familyfontboldF)
fontweightbordersthinz0.75pt solid #000000border)rt   	alignment
horizontal)	textalignvertical)verticalalign)	odf.styler   r   r   r   jsondumpsr+   r`   getrA   itemsr2   styles)r,   rq   r   r   r   r   	style_keyr6   	odf_styler   r   side	thicknessthickness_translationr   r   r   r%   r%   r1   rp      s@   





tuple[int, int]c                 C  s  ddl m}m}m}m}m} |dd}| jj| |dd}	||	 | }
|	|
 |dd}|
| ||d}
||
 |
|ddd	d
 |
|ddd	d
 |
|ddt	|d d
 |
|ddt	|d d
 |
|ddt	|d d
 |
|ddt	|d d
 dS )z
        Create freeze panes in the sheet.

        Parameters
        ----------
        sheet_name : str
            Name of the spreadsheet
        freeze_panes : tuple of (int, int)
            Freeze pane location x and y
        r   )
ConfigItemConfigItemMapEntryConfigItemMapIndexedConfigItemMapNamedConfigItemSetzooo:view-settingsr5   ViewsTablesHorizontalSplitModeshort2)r6   typerX   VerticalSplitModeHorizontalSplitPositionrJ   VerticalSplitPositionrW   PositionRightPositionBottomN)

odf.configr   r   r   r   r   r2   settingsrA   r   )r,   rH   rL   r   r   r   r   r   config_item_setconfig_item_map_indexedconfig_item_map_entryconfig_item_map_namedr%   r%   r1   r\   ,  sB   







zODSWriter._create_freeze_panes)NNNr   NNN)r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   )r!   r3   )r!   r"   )Nr   r   N)rF   rG   rH   r   rI   rJ   rK   rJ   rL   rM   r!   r"   )r!   rl   )r!   rw   )rq   r3   r!   r   )rq   r"   r!   r"   )rq   r    r!   r   )rH   r   rL   r   r!   r"   )__name__
__module____qualname___engine_supported_extensionsr*   propertyr2   r>   rE   rk   rv   r_   r   rp   r\   __classcell__r%   r%   r/   r1   r      s:    



;
B
4r   )
__future__r   collectionsr   r   r   typingr   r   r   r   r   pandas.io.excel._baser	   pandas.io.excel._utilr
   r   pandas._typingr   r   r   r   pandas.io.formats.excelr   r   r%   r%   r%   r1   <module>   s    