
    Mwg+(                        d dl Z d dlmZ d dlmZ d dlZd dlmZ d dlm	Z	 d dl
mZ d dlm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mZ ddlmZ ddlmZ d dl m!Z! g Z"e jF                  d        Z$ddZ% G d d      Z&y)    N)defaultdict)BytesIO)NamedTemporaryFile)warn)xmlfile)SHEET_MAIN_NS)CommentRecord)RelationshipRelationshipList)DifferentialStyle   )SheetDimension)HyperlinkList)	MergeCell
MergeCells)Related)TablePartList)
write_cellc                      t         D ]7  } t        j                  j                  |       s#t        j                  |        9 y N)ALL_TEMP_FILESospathexistsremove)r   s    Q/var/www/horilla/myenv/lib/python3.12/site-packages/openpyxl/worksheet/_writer.py_openpyxl_shutdownr      s,     77>>$IIdO    c                     t        d| dd      }|j                  }|j                          t        j	                  |       |S )Nzw+z	openpyxl.F)modesuffixprefixdelete)r   namecloser   append)r!   fobjfilenames      r   create_temporary_filer)   #   s;    4%0@DyyHJJL(#Or   c                       e Zd Zd"dZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d  Z!d! Z"y)#WorksheetWriterNc                     || _         g | j                   _        g | j                   _        |
t               }|| _        t               | _        | j                         | _        t        | j                         y r   )
ws_hyperlinks	_commentsr)   outr   _rels
get_streamxfnext)selfr-   r0   s      r   __init__zWorksheetWriter.__init__/   sX     ;')C%'
//#TWWr   c                     | j                   j                  }| j                  j                  |j	                                y r   )r-   sheet_propertiesr3   sendto_tree)r5   propss     r   write_propertiesz WorksheetWriter.write_properties;   s'    ((U]]_%r   c                     t        | j                  dd      }|r:t         |             }| j                  j	                  |j                                yy)z/
        Write worksheet size if known
        calculate_dimensionN)getattrr-   r   r3   r9   r:   )r5   refdims      r   write_dimensionsz WorksheetWriter.write_dimensions@   sA     dgg4d; 'CGGLL' r   c                     | j                   j                  j                  | j                   j                  _        | j                   j                  }| j
                  j                  |j                                y r   )r-   column_dimensionsmax_outlinesheet_formatoutlineLevelColr3   r9   r:   )r5   fmts     r   write_formatzWorksheetWriter.write_formatJ   sI    /3ww/H/H/T/T,gg""S[[]#r   c                     | j                   j                  }| j                  j                  |j	                                y r   )r-   viewsr3   r9   r:   )r5   rK   s     r   write_viewszWorksheetWriter.write_viewsP   s%    U]]_%r   c                     | j                   j                  }| j                  j                  |j	                                y r   )r-   rD   r3   r9   r:   )r5   colss     r   
write_colszWorksheetWriter.write_colsU   s'    ww((T\\^$r   c                     | j                          | j                          | j                          | j                          | j	                          y)z
        Write all elements up to rows:
        properties
        dimensions
        views
        format
        cols
        N)r<   rB   rL   rI   rO   r5   s    r   	write_topzWorksheetWriter.write_topZ   s>     	r   c                 h   t        t              }t        | j                  j                  j                               D ]  \  \  }}}||   j                  |        | j                  j                  j                         |j                         z
  D ]  }g ||<   	 t        |j                               S )z0Return all rows, and any cells that they contain)	r   listsortedr-   _cellsitemsr&   row_dimensionskeys)r5   rowsrowcolcells        r   rZ   zWorksheetWriter.rowsj   s     4  &tww~~';';'= > 	#JS#IT"	# 77))..0499;> 	CDI	 djjl##r   c                    | j                   j                  d      }|j                  d      5  | j                         D ]  \  }}| j	                  |||        	 d d d        | j                   j                  d        y # 1 sw Y   %xY w)NT	sheetData)r3   r9   elementrZ   	write_row)r5   r3   row_idxr[   s       r   
write_rowszWorksheetWriter.write_rowsx   sp    WW\\$ZZ$ 	1 $		 1r301	1 	T		1 	1s   ,A>>Bc                    d| i}| j                   j                  }|j                  |j                  |i              |j	                  d|      5  |D ]  }|j
                  :t        j                  |      }| j                   j                  j                  |       |j                  |j                  s|j
                  snt        || j                   ||j                          	 d d d        y # 1 sw Y   y xY w)Nrr[   )r-   rX   updategetr`   _commentr	   	from_cellr/   r&   _value	has_styler   )r5   r3   r[   rb   attrsdimsr]   comments           r   ra   zWorksheetWriter.write_row   s    	#ww%%TXXgr*+ZZu% 	> 
>==,+55d;GGG%%,,W5KK' NN MM2twwdnn=
>	> 	> 	>s   BC..C7c                     | j                   j                  }|r*| j                  j                  |j	                                y y r   )r-   
protectionr3   r9   r:   )r5   prots     r   write_protectionz WorksheetWriter.write_protection   s/    ww!!GGLL( r   c                     | j                   j                  }|r*| j                  j                  |j	                                y y r   )r-   	scenariosr3   r9   r:   )r5   rt   s     r   write_scenarioszWorksheetWriter.write_scenarios   s2    GG%%	GGLL**,- r   c                     | j                   j                  }|r*| j                  j                  |j	                                y y r   )r-   auto_filterr3   r9   r:   )r5   flts     r   write_filterzWorksheetWriter.write_filter   s/    gg!!GGLL' r   c                      y)z
        As per discusion with the OOXML Working Group global sort state is not required.
        openpyxl never reads it from existing files
        N rQ   s    r   
write_sortzWorksheetWriter.write_sort   s    
 	r   c                    | j                   j                  }|ri| j                   j                  D cg c]  }t        t        |             }}| j                  j                  t        |      j                                y y c c}w )N)	mergeCell)r-   merged_cellsr   strr3   r9   r   r:   )r5   mergedr@   cellss       r   write_merged_cellsz"WorksheetWriter.write_merged_cells   s`    %%48GG4H4HISYs3x(IEIGGLLe4<<>? Is   Bc                 |   t               }| j                  j                  }| j                  j                  D ]  }|j                  D ]I  }|j
                  s|j
                  |k7  s |j                  j                  |j
                        |_        K | j                  j                  |j                                 y r   )r   r-   parentconditional_formattingrulesdxf_differential_stylesadddxfIdr3   r9   r:   )r5   dfwbcfrules        r   write_formattingz WorksheetWriter.write_formatting   s     WW^^''00 	'B G88B!#!8!8!<!<TXX!FDJG GGLL&		'r   c                     | j                   j                  }|r*| j                  j                  |j	                                y y r   )r-   data_validationsr3   r9   r:   )r5   dvs     r   write_validationsz!WorksheetWriter.write_validations   s/    WW%%GGLL& r   c                 J   | j                   j                  }|D ]S  }|j                  st        dd|j                        }| j                  j                  |       |j                  |_        U |r3| j                  j                  t        |      j                                y y )N	hyperlinkExternal)type
TargetModeTarget)r-   r.   targetr
   r1   r&   idr3   r9   r   r:   )r5   linkslinkrels       r   write_hyperlinksz WorksheetWriter.write_hyperlinks   s    ## 	!D{{"
SWS^S^_

!!#&&&		! GGLLu-5578 r   c                     | j                   j                  }|r*| j                  j                  |j	                                y y r   )r-   print_optionsr3   r9   r:   )r5   r   s     r   write_printzWorksheetWriter.write_print   s2    --GGLL..01 r   c                     | j                   j                  }|r*| j                  j                  |j	                                y y r   )r-   page_marginsr3   r9   r:   )r5   marginss     r   write_marginszWorksheetWriter.write_margins   s0    ''&&GGLL*+ r   c                     | j                   j                  }|r*| j                  j                  |j	                                y y r   )r-   
page_setupr3   r9   r:   )r5   setups     r   
write_pagezWorksheetWriter.write_page   s/    ""GGLL) r   c                     | j                   j                  }|r*| j                  j                  |j	                                y y r   )r-   HeaderFooterr3   r9   r:   )r5   hfs     r   write_headerzWorksheetWriter.write_header   s/    WW!!GGLL& r   c                     | j                   j                  | j                   j                  f}|D ].  }|s| j                  j	                  |j                                0 y r   )r-   
row_breaks
col_breaksr3   r9   r:   )r5   brksbrks      r   write_breakszWorksheetWriter.write_breaks   sH    ""DGG$6$67 	,CS[[]+	,r   c                 8   | j                   j                  s| j                   j                  rnt        dd      }| j                  j                  |       t               }|j                  |_        | j                  j                  |j                  d             y y )Ndrawing )r   r   )r-   _charts_imagesr
   r1   r&   r   r   r3   r9   r:   )r5   r   r   s      r   write_drawingszWorksheetWriter.write_drawings   se    77??dggooIb9CJJc"iGGJGGLL34 .r   c                     | j                   j                  | j                   j                  r7t        d      }| j                  j                  |j                  d             yy)z
        Comments & VBA controls use VML and require an additional element
        that is no longer in the specification.
        Nanysvmlr   legacyDrawing)r-   legacy_drawingr/   r   r3   r9   r:   )r5   legacys     r   write_legacyzWorksheetWriter.write_legacy   sI    
 GG"".$''2C2C	*FGGLL89 3Dr   c                    t               }| j                  j                  j                         D ]  }|j                  s|j                          |j                  rp	 | j                  |j                     d   }t        ||j                        D ]9  \  }}|j                  dk7  rt        d       t        |j                        |_        ; 	 t        |j                   d      }| j"                  j%                  |       |j&                  |_        |j%                  t+        |j&                                |r*| j,                  j/                  |j1                                y y # t        $ r t        d       Y w xY w)Nr   sz:File may not be readable: column headings must be strings.z5Column headings are missing, file may not be readabler   )Typer   r   )r   r-   tablesvaluestableColumns_initialise_columnsheaderRowCountr@   zip	data_typer   r   valuer$   	TypeErrorr
   	_rel_typer1   r&   Id_rel_idr   r3   r9   r:   )r5   r   tabler[   r]   r\   r   s          r   write_tableszWorksheetWriter.write_tables  s)   WW^^**, 	.E%%))+''V"ggeii03),S%2D2D)E 7ID##~~4 $%a b'*4::CH7 EOOB?CJJc"FFEMMM'SVV,-	." GGLL)*  % VTUVs   A.E##E:9E:c              #   "  K   t        | j                        5 }|j                  dt              5  	 	 d }|du r| n||j	                  |       "# t
        $ r Y nw xY w	 d d d        n# 1 sw Y   nxY wd d d        y # 1 sw Y   y xY ww)N	worksheet)xmlnsT)r   r0   r`   r   writeGeneratorExit)r5   r3   els      r   r2   zWorksheetWriter.get_stream  s     TXX 	"K}= 
#:"$HZ$HHRL  %   	 	 	sP   BBA.#A	A!A. A!!A.%	B.A7	3B:	BBBc                    | j                          | j                          | j                          | j                          | j	                          | j                          | j                          | j                          | j                          | j                          | j                          | j                          | j                          | j                          | j                          y)a  
        Write all elements after the rows
        calc properties
        protection
        protected ranges #
        scenarios
        filters
        sorts # always ignored
        data consolidation #
        custom views #
        merged cells
        phonetic properties #
        conditional formatting
        data validation
        hyperlinks
        print options
        page margins
        page setup
        header
        row breaks
        col breaks
        custom properties #
        cell watches #
        ignored errors #
        smart tags #
        drawing
        drawingHF #
        background #
        OLE objects #
        controls #
        web publishing #
        tables
        N)rr   ru   ry   r   r   r   r   r   r   r   r   r   r   r   r   rQ   s    r   
write_tailzWorksheetWriter.write_tail/  s    D 	! r   c                     | j                          | j                          | j                          | j                          y)z
        High level
        N)rR   rc   r   r%   rQ   s    r   r   zWorksheetWriter.writeb  s+     	

r   c                 R    | j                   r| j                   j                          yy)z+
        Close the context manager
        N)r3   r%   rQ   s    r   r%   zWorksheetWriter.closel  s     77GGMMO r   c                    | j                          t        | j                  t              r| j                  j	                         S t        | j                  d      5 }|j                         }ddd       |S # 1 sw Y   S xY w)zE
        Close the context manager and return serialised XML
        rbN)r%   
isinstancer0   r   getvalueopenread)r5   srcr0   s      r   r   zWorksheetWriter.readt  sg     	

dhh(88$$&&$((D! 	S((*C	 
	 
s   A66B c                     t        j                  | j                         t        j                  | j                         y)z!
        Remove tempfile
        N)r   r   r0   r   rQ   s    r   cleanupzWorksheetWriter.cleanup  s&     			$((dhh'r   r   )#__name__
__module____qualname__r6   r<   rB   rI   rL   rO   rR   rZ   rc   ra   rr   ru   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   r2   r   r   r%   r   r   r{   r   r   r+   r+   ,   s    	&
($&
%
 $>().(@''92,*',5:+0 0f
(r   r+   )r   )'atexitcollectionsr   ior   r   tempfiler   warningsr   openpyxl.xml.functionsr   openpyxl.xml.constantsr   openpyxl.comments.comment_sheetr	   openpyxl.packaging.relationshipr
   r   openpyxl.styles.differentialr   
dimensionsr   r   r   merger   r   relatedr   r   r   openpyxl.cell._writerr   r   registerr   r)   r+   r{   r   r   <module>r      sh     #  	 '  * 0 9 J : & $ (    ,  Z( Z(r   