a
    Of+                     @  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rd 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d-dddddd	d
dd fddZedd ZeddddZddddZ	d.dddddddddZ
dddd Zd!dd"d#Zeddd$d%d&Zeddd$d'd&Zd
dd$d(d&Zdd)dd*d+d,Z  ZS )/	ODSWriterZodf)z.odsNwz)FilePath | WriteExcelBuffer | ExcelWriterz
str | NonestrzStorageOptions | NonezExcelWriterIfSheetExists | Nonezdict[str, Any] | NoneNone)pathenginedate_formatmodestorage_optionsif_sheet_existsengine_kwargsreturnc	                   sV   ddl m}
 |dkrtdt||	}|
f i || _t j|||||d i | _d S )Nr   )OpenDocumentSpreadsheetaz&Append mode is not supported with odf!)r   r   r   r   )Zodf.opendocumentr   
ValueErrorr
   _booksuper__init___style_dict)selfr   r   r   Zdatetime_formatr   r   r   r   kwargsr   	__class__ S/var/www/ai-form-bot/venv/lib/python3.9/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(   r)   bookA   s    zODSWriter.bookzdict[str, Any])r   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)ZgetAttribute).0sheetr(   r(   r)   
<dictcomp>O   s   z$ODSWriter.sheets.<locals>.<dictcomp>)	odf.tabler+   r*   ZgetElementsByType)r$   r+   resultr(   r(   r)   sheetsJ   s
    
zODSWriter.sheetsc                 C  s2   | j  D ]}| jj| q
| j| jj dS )z(
        Save workbook to disk.
        N)r3   valuesr*   spreadsheet
addElementsaveZ_handleshandle)r$   r/   r(   r(   r)   _saveU   s    zODSWriter._saver   zlist[ExcelCell]intztuple[int, int] | None)cells
sheet_namestartrowstartcolfreeze_panesr   c                 C  s  ddl m}m}m} ddlm}	 | |}|dus6J || jv rL| j| }
n||d}
| jj	
|
 t|rttttf |}| || t|D ]}|

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

||  qdS )z1
        Write the frame cells using odf
        r   )r+   	TableCellTableRow)PNr,   c                 S  s   | j | jfS N)rowcol)cellr(   r(   r)   <lambda>       z(ODSWriter._write_cells.<locals>.<lambda>)key   )text)r1   r+   r@   rA   Zodf.textrB   Z_get_sheet_namer3   r*   r5   r6   r   r   tupler:   _create_freeze_panesranger   sortedrD   rE   _make_table_celllenmaxkeys)r$   r;   r<   r=   r>   r?   r+   r@   rA   rB   Zwks_rowsZ	col_countrF   pvalueZtcpZrow_nrr(   r(   r)   _write_cells]   s<    




zODSWriter._write_cellszdict[str, int | str]c                 C  sR   i }|  |j}|dur ||d< |jdurN|jdurNt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
        NZ	stylenamerJ   ZnumberrowsspannedZnumbercolumnsspanned)_process_stylestyleZ
mergestartZmergeendrR   )r$   rF   
attributes
style_namer(   r(   r)   _make_table_cell_attributes   s    
z%ODSWriter._make_table_cell_attributesztuple[object, Any]c                 C  s
  ddl m} | |}| |j\}}| }}t|trbt| }t|	 }||d||dfS t|t
j
r| }|d}||d||dfS t|t
jr|j d|jd	d|jd	}|d
}||d||dfS t|tr||d||dfS ||d||dfS d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   )r@   boolean)	valuetypeZbooleanvaluer[   z%cdate)r_   Z	datevaluer[   -02dz%xstring)r_   Zstringvaluer[   float)r_   valuer[   N)r1   r@   r]   Z_value_with_fmtval
isinstanceboolr   lowerupperdatetime	isoformatstrftimer`   yearmonthday)r$   rF   r@   r[   rf   fmtrV   re   r(   r(   r)   rP      sR    





zODSWriter._make_table_cell)rZ   r   c                 C  s   d S rC   r(   r$   rZ   r(   r(   r)   rY      s    zODSWriter._process_stylec                 C  s   d S rC   r(   rr   r(   r(   r)   rY      s    c                 C  sD  ddl m}m}m}m} |du r$dS t|}|| jv rB| j| S dt| jd  }|| j|< ||dd}d|v r|d }	|		d	d
r|
|d	d d|v r|d }
|
 D ].\}}ddi}|
|d| || id qd|v r2|d }|	d}|r|
||d |	d}|r2|
||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pdrJ   z
table-cell)r-   familyfontboldF)Z
fontweightbordersZthinz0.75pt solid #000000border)r[   	alignment
horizontal)Z	textalignvertical)Zverticalalign)Z	odf.stylers   rt   ru   rv   jsondumpsr#   rQ   getr6   itemsr*   styles)r$   rZ   rs   rt   ru   rv   Z	style_keyr-   Z	odf_stylery   r{   ZsideZ	thicknessZthickness_translationr}   r~   r   r(   r(   r)   rY      s@    






ztuple[int, int])r<   r?   r   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-settingsr,   ZViewsZTablesZHorizontalSplitModeshort2)r-   typerK   ZVerticalSplitModeZHorizontalSplitPositionr:   ZVerticalSplitPositionrJ   ZPositionRightZPositionBottomN)
Z
odf.configr   r   r   r   r   r*   settingsr6   r   )r$   r<   r?   r   r   r   r   r   Zconfig_item_setZconfig_item_map_indexedZconfig_item_map_entryZconfig_item_map_namedr(   r(   r)   rM   ,  sB    







zODSWriter._create_freeze_panes)NNNr   NNN)Nr   r   N)__name__
__module____qualname__Z_engineZ_supported_extensionsr"   propertyr*   r3   r9   rX   r]   rP   r   rY   rM   __classcell__r(   r(   r&   r)   r      s8          "

    ;B4r   )
__future__r   collectionsr   rk   r   typingr   r   r   r   r   Zpandas.io.excel._baser	   Zpandas.io.excel._utilr
   r   Zpandas._typingr   r   r   r   Zpandas.io.formats.excelr   r   r(   r(   r(   r)   <module>   s   