
    Owg+                        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rd dlmZmZmZmZ d dlmZ  G d	 d
e      Zy)    )annotations)defaultdictN)TYPE_CHECKINGAnyDefaultDictcastoverload)ExcelWriter)combine_kwargsvalidate_freeze_panes)ExcelWriterIfSheetExistsFilePathStorageOptionsWriteExcelBuffer)	ExcelCellc                       e Zd ZdZdZ	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZed        Zedd       ZddZ		 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZ
ddZdd	Zedd
       Zedd       ZddZ	 	 	 	 	 	 ddZ xZS )	ODSWriterodf)z.odsc	                    ddl m}
 |dk(  rt        d      t        ||	      } |
di || _        t
        |   |||||       i | _        y )Nr   )OpenDocumentSpreadsheetaz&Append mode is not supported with odf!)modestorage_optionsif_sheet_existsengine_kwargs )odf.opendocumentr   
ValueErrorr   _booksuper__init___style_dict)selfpathenginedate_formatdatetime_formatr   r   r   r   kwargsr   	__class__s              Q/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/io/excel/_odswriter.pyr!   zODSWriter.__init__#   sa     	=3;EFF&}f=,=}=
++' 	 	
 ,.    c                    | j                   S )z
        Book instance of class odf.opendocument.OpenDocumentSpreadsheet.

        This attribute can be used to access engine-specific features.
        )r   )r#   s    r*   bookzODSWriter.bookA   s     zzr+   c                    ddl m} | j                  j                  |      D ci c]  }|j	                  d      | }}|S c c}w )z(Mapping of sheet names to sheet objects.r   )Tablename)	odf.tabler/   r-   getElementsByTypegetAttribute)r#   r/   sheetresults       r*   sheetszODSWriter.sheetsJ   sQ     	$ 44U;
 v&-
 
 	
s   Ac                    | j                   j                         D ]'  }| j                  j                  j	                  |       ) | j                  j                  | j                  j                         y)z(
        Save workbook to disk.
        N)r6   valuesr-   spreadsheet
addElementsave_handleshandle)r#   r4   s     r*   _savezODSWriter._saveU   sR     [['') 	4EII!!,,U3	4		t}}++,r+   c                   ddl m}m}m} ddlm}	 | j                  |      }|J || j                  v r| j                  |   }
n. ||      }
| j                  j                  j                  |
       t        |      r/t        t        t        t        f   |      }| j                  ||       t!        |      D ]  }|
j                   |               t#        |      }t#        t              }t%        |d       D ]  }||j&                     s3t!        |      D ]%  }||j&                     j                   |              ' t!        |j(                  ||j&                     z
        D ]<  }||j&                     j                   |              ||j&                  xx   dz  cc<   > | j+                  |      \  }}||j&                     j                  |       ||j&                  xx   dz  cc<    |	|	      }|j                  |        t-        |      dkD  r?t!        t/        |j1                               dz         D ]  }|
j                  ||           yy)
z1
        Write the frame cells using odf
        r   )r/   	TableCellTableRow)PNr0   c                2    | j                   | j                  fS N)rowcol)cells    r*   <lambda>z(ODSWriter._write_cells.<locals>.<lambda>   s    DHHdhh3G r+   )key   )text)r1   r/   r@   rA   odf.textrB   _get_sheet_namer6   r-   r9   r:   r   r   tupleint_create_freeze_panesranger   sortedrF   rG   _make_table_celllenmaxkeys)r#   cells
sheet_namestartrowstartcolfreeze_panesr/   r@   rA   rB   wks_rows	col_countrH   pvaluetcprow_nrs                      r*   _write_cellszODSWriter._write_cells]   s	   	
 	

 	))*5
%%%$++j)CZ(CII!!,,S1 .c3h>L%%j,?x 	'ANN8:&	' (1!,S!1	5&GH 	DTXX&x ;AN--ik:; 488i&99: )TXX)))+6$((#q(#) ..t4JFBN%%b)dhh1$vAMM!	$ t9q=DIIK 01 45 -tF|,- r+   c                    i }| j                  |j                        }|||d<   |j                  4|j                  (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
        	stylenamerK   numberrowsspannednumbercolumnsspanned)_process_stylestyle
mergestartmergeendrV   )r#   rH   
attributes
style_names       r*   _make_table_cell_attributesz%ODSWriter._make_table_cell_attributes   sk     ,.
((4
!&0J{#??&4==+D.1!T__.EJ*+15J-.r+   c                   ddl m} | j                  |      }| j                  |j                        \  }}|x}}t        |t              r?t        |      j                         }t        |      j                         }| |d||      fS t        |t        j                        r.|j                         }|j                  d      }| |d||      fS t        |t        j                        rH|j                   d|j                  d	d|j                   d	}|j                  d
      }| |d||      fS t        |t              r| |d||      fS | |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   )r@   boolean)	valuetypebooleanvaluern   z%cdate)rs   	datevaluern   -02dz%xstring)rs   stringvaluern   float)rs   valuern   )r1   r@   rp   _value_with_fmtval
isinstanceboolstrlowerupperdatetime	isoformatstrftimeru   yearmonthday)r#   rH   r@   rn   r~   fmtra   r|   s           r*   rT   zODSWriter._make_table_cell   sl    	(55d;
''1Sc4 HNN$EX^^%F'!&)  X../MMOE\\$'FFe
S  X]]+xxj#))C#''#?E\\$'FFe
S  S!& %)  %) r+   c                     y rE   r   r#   rk   s     r*   rj   zODSWriter._process_style       r+   c                     y rE   r   r   s     r*   rj   zODSWriter._process_style   r   r+   c                   ddl m}m}m}m} |yt        j                  |      }|| j                  v r| j                  |   S dt        | j                        dz    }|| j                  |<    ||d      }d|v r/|d   }	|	j                  d	d
      r|j                   |d	             d|v rA|d   }
|
j                         D ])  \  }}ddi}|j                   |d| ||   i             + d|v r[|d   }|j                  d      }|r|j                   ||             |j                  d      }|r|j                   ||             | j                  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pdrK   z
table-cell)r0   familyfontboldF)
fontweightbordersthinz0.75pt solid #000000border)rn   	alignment
horizontal)	textalignvertical)verticalalign)	odf.styler   r   r   r   jsondumpsr"   rU   getr:   itemsr-   styles)r#   rk   r   r   r   r   	style_keyr0   	odf_styler   r   side	thicknessthickness_translationr   r   r   s                    r*   rj   zODSWriter._process_style   s   	
 	
 =JJu%	(((##I..C(()!+,-&*#tL9	U?=Dxx&$$^v%FGI&G#*==? i)/1G(H%$$'&,TFO5J95U#V %k*I"|4J$$%8:%NO }}Z0H$$%8x%PQ		##I.r+   c           
        ddl m}m}m}m}m}  |d      }| j                  j                  j                  |        |d      }	|j                  |	        |       }
|	j                  |
        |d      }|
j                  |        ||      }
|j                  |
       |
j                   |ddd	
             |
j                   |ddd	
             |
j                   |ddt        |d         
             |
j                   |ddt        |d         
             |
j                   |ddt        |d         
             |
j                   |ddt        |d         
             y)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-settingsrC   ViewsTablesHorizontalSplitModeshort2)r0   typerL   VerticalSplitModeHorizontalSplitPositionrP   VerticalSplitPositionrK   PositionRightPositionBottomN)

odf.configr   r   r   r   r   r-   settingsr:   r   )r#   rY   r\   r   r   r   r   r   config_item_setconfig_item_map_indexedconfig_item_map_entryconfig_item_map_nameds               r*   rQ   zODSWriter._create_freeze_panes,  sm   	
 	
 (-@A		%%o6"6G"D""#:; 2 4**+@A 2 A(()>? 2
 C(()>?((1cJ	
 	((/gCH	
 	((.U\RS_AU	

 	((,5s<PQ??S	

 	((O%c,q/>RS	
 	((,5s<PQ??ST	
r+   )NNNwNNN)r$   z)FilePath | WriteExcelBuffer | ExcelWriterr%   
str | Noner&   r   r   r   r   zStorageOptions | Noner   zExcelWriterIfSheetExists | Noner   dict[str, Any] | NonereturnNone)r   dict[str, Any])r   r   )Nr   r   N)rX   zlist[ExcelCell]rY   r   rZ   rP   r[   rP   r\   ztuple[int, int] | Noner   r   )r   zdict[str, int | str])r   ztuple[object, Any])rk   r   r   r   )rk   r   r   r   )rk   r   r   r   )rY   r   r\   ztuple[int, int]r   r   )__name__
__module____qualname___engine_supported_extensionsr!   propertyr-   r6   r>   re   rp   rT   r	   rj   rQ   __classcell__)r)   s   @r*   r   r      sJ   G%
 ""&15;?/3.7. .  	. . /. 9. -. 
.<    - "&/39-9- 9- 	9-
 9- -9- 
9-v,@D    2h9
9
-<9
	9
r+   r   )
__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*   <module>r      sG    " #    .
   2F
 F
r+   