
    fh+(                        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 j#        d             Z$ddZ% G d d          Z&dS )    N)defaultdict)BytesIO)NamedTemporaryFile)warn)xmlfile)SHEET_MAIN_NS)CommentRecord)RelationshipRelationshipList)DifferentialStyle   )SheetDimension)HyperlinkList)	MergeCell
MergeCells)Related)TablePartList)
write_cellc                      t           D ]5} t          j                            |           rt          j        |            6d S N)ALL_TEMP_FILESospathexistsremove)r   s    Q/var/www/histauto/venv/lib/python3.11/site-packages/openpyxl/worksheet/_writer.py_openpyxl_shutdownr      s?      7>>$ 	IdOOO      c                     t          d| dd          }|j        }|                                 t                              |           |S )Nzw+z	openpyxl.F)modesuffixprefixdelete)r   namecloser   append)r"   fobjfilenames      r   create_temporary_filer*   #   sO    4%0@ @ @DyHJJLLL(###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"dS )#WorksheetWriterNc                     || _         g | j         _        g | j         _        |t                      }|| _        t                      | _        |                                 | _        t          | j                   d S r   )
ws_hyperlinks	_commentsr*   outr   _rels
get_streamxfnext)selfr.   r1   s      r   __init__zWorksheetWriter.__init__/   sc     ;'))C%''
//##TWr   c                 v    | j         j        }| j                            |                                           d S r   )r.   sheet_propertiesr4   sendto_tree)r6   propss     r   write_propertiesz WorksheetWriter.write_properties;   s.    (U]]__%%%%%r   c                     t          | j        dd          }|rEt           |                      }| j                            |                                           dS dS )z/
        Write worksheet size if known
        calculate_dimensionN)getattrr.   r   r4   r:   r;   )r6   refdims      r   write_dimensionsz WorksheetWriter.write_dimensions@   s_     dg4d;; 	( ''CGLL'''''	( 	(r   c                     | j         j        j        | j         j        _        | j         j        }| j                            |                                           d S r   )r.   column_dimensionsmax_outlinesheet_formatoutlineLevelColr4   r:   r;   )r6   fmts     r   write_formatzWorksheetWriter.write_formatJ   sC    /3w/H/T,g"S[[]]#####r   c                 v    | j         j        }| j                            |                                           d S r   )r.   viewsr4   r:   r;   )r6   rL   s     r   write_viewszWorksheetWriter.write_viewsP   s-    U]]__%%%%%r   c                 v    | j         j        }| j                            |                                           d S r   )r.   rE   r4   r:   r;   )r6   colss     r   
write_colszWorksheetWriter.write_colsU   s.    w(T\\^^$$$$$r   c                     |                                   |                                  |                                  |                                  |                                  dS )z
        Write all elements up to rows:
        properties
        dimensions
        views
        format
        cols
        N)r=   rC   rM   rJ   rP   r6   s    r   	write_topzWorksheetWriter.write_topZ   sb     	r   c                    t          t                    }t          | j        j                                                  D ]#\  \  }}}||                             |           $| j        j                                        |                                z
  D ]}g ||<   t          |                                          S )z0Return all rows, and any cells that they contain)	r   listsortedr.   _cellsitemsr'   row_dimensionskeys)r6   rowsrowcolcells        r   r[   zWorksheetWriter.rowsj   s     4   &tw~';';'='= > > 	# 	#JS#IT"""" 7)..00499;;> 	 	CDIIdjjll###r   c                 ,   | j                             d          }|                    d          5  |                                 D ]\  }}|                     |||           	 d d d            n# 1 swxY w Y   | j                             d            d S )NT	sheetData)r4   r:   elementr[   	write_row)r6   r4   row_idxr\   s       r   
write_rowszWorksheetWriter.write_rowsx   s    W\\$ZZ$$ 	1 	1 $		 1 1r300001	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	Ts   2A//A36A3c                    d| i}| j         j        }|                    |                    |i                      |                    d|          5  |D ]n}|j        3t          j        |          }| j         j        	                    |           |j
        |j        s|j        sRt          || j         ||j                   o	 d d d            d S # 1 swxY w Y   d S )Nrr\   )r.   rY   updategetra   _commentr	   	from_cellr0   r'   _value	has_styler   )r6   r4   r\   rc   attrsdimsr^   comments           r   rb   zWorksheetWriter.write_row   s1   l#w%TXXgr**+++ZZu%% 	> 	> 
> 
>=,+5d;;GG%,,W555K' N ( M ( 2twdn====
>	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   A2CCCc                 ~    | j         j        }|r.| j                            |                                           d S d S r   )r.   
protectionr4   r:   r;   )r6   prots     r   write_protectionz WorksheetWriter.write_protection   s@    w! 	)GLL(((((	) 	)r   c                 ~    | j         j        }|r.| j                            |                                           d S d S r   )r.   	scenariosr4   r:   r;   )r6   ru   s     r   write_scenarioszWorksheetWriter.write_scenarios   sD    G%	 	.GLL**,,-----	. 	.r   c                 ~    | j         j        }|r.| j                            |                                           d S d S r   )r.   auto_filterr4   r:   r;   )r6   flts     r   write_filterzWorksheetWriter.write_filter   s@    g! 	(GLL'''''	( 	(r   c                     dS )z
        As per discusion with the OOXML Working Group global sort state is not required.
        openpyxl never reads it from existing files
        N rR   s    r   
write_sortzWorksheetWriter.write_sort   s	    
 	r   c                     | j         j        }|rRd | j         j        D             }| j                            t	          |                                                     d S d S )Nc                 F    g | ]}t          t          |                    S r|   )r   str).0rA   s     r   
<listcomp>z6WorksheetWriter.write_merged_cells.<locals>.<listcomp>   s&    IIISYs3xx((IIIr   )	mergeCell)r.   merged_cellsr4   r:   r   r;   )r6   mergedcellss      r   write_merged_cellsz"WorksheetWriter.write_merged_cells   sj    % 	@IIDG4HIIIEGLLe444<<>>?????	@ 	@r   c                 0   t                      }| j        j        }| j        j        D ]n}|j        D ]8}|j        r/|j        |k    r$|j                            |j                  |_        9| j	        
                    |                                           od S r   )r   r.   parentconditional_formattingrulesdxf_differential_stylesadddxfIdr4   r:   r;   )r6   dfwbcfrules        r   write_formattingz WorksheetWriter.write_formatting   s      W^'0 	' 	'B G G8 GB!#!8!<!<TX!F!FDJGLL&&&&		' 	'r   c                 ~    | j         j        }|r.| j                            |                                           d S d S r   )r.   data_validationsr4   r:   r;   )r6   dvs     r   write_validationsz!WorksheetWriter.write_validations   s@    W% 	'GLL&&&&&	' 	'r   c                 *   | j         j        }|D ]F}|j        r=t          dd|j                  }| j                            |           |j        |_        G|r;| j                            t          |          
                                           d S d S )N	hyperlinkExternal)type
TargetModeTarget)r.   r/   targetr
   r2   r'   idr4   r:   r   r;   )r6   linkslinkrels       r   write_hyperlinksz WorksheetWriter.write_hyperlinks   s    # 	! 	!D{ !"
SWS^___
!!#&&&& 	9GLLu--557788888	9 	9r   c                 ~    | j         j        }|r.| j                            |                                           d S d S r   )r.   print_optionsr4   r:   r;   )r6   r   s     r   write_printzWorksheetWriter.write_print   sD    - 	2GLL..0011111	2 	2r   c                 ~    | j         j        }|r.| j                            |                                           d S d S r   )r.   page_marginsr4   r:   r;   )r6   marginss     r   write_marginszWorksheetWriter.write_margins   sB    '& 	,GLL**+++++	, 	,r   c                 ~    | j         j        }|r.| j                            |                                           d S d S r   )r.   
page_setupr4   r:   r;   )r6   setups     r   
write_pagezWorksheetWriter.write_page   s@    " 	*GLL)))))	* 	*r   c                 ~    | j         j        }|r.| j                            |                                           d S d S r   )r.   HeaderFooterr4   r:   r;   )r6   hfs     r   write_headerzWorksheetWriter.write_header   s@    W! 	'GLL&&&&&	' 	'r   c                     | j         j        | j         j        f}|D ]0}|r,| j                            |                                           1d S r   )r.   
row_breaks
col_breaksr4   r:   r;   )r6   brksbrks      r   write_breakszWorksheetWriter.write_breaks   sT    "DG$67 	, 	,C ,S[[]]+++	, 	,r   c                    | j         j        s| j         j        rtt          dd          }| j                            |           t                      }|j        |_        | j        	                    |
                    d                     d S d S )Ndrawingr   )r   r   )r.   _charts_imagesr
   r2   r'   r   r   r4   r:   r;   )r6   r   r   s      r   write_drawingszWorksheetWriter.write_drawings   s    7? 	5dgo 	5Ib999CJc"""iiGGJGLL3344444	5 	5r   c                     | j         j        | j         j        r?t          d          }| j                            |                    d                     dS dS )z
        Comments & VBA controls use VML and require an additional element
        that is no longer in the specification.
        Nanysvmlr   legacyDrawing)r.   legacy_drawingr0   r   r4   r:   r;   )r6   legacys     r   write_legacyzWorksheetWriter.write_legacy   sW    
 G".$'2C.	***FGLL8899999 /.r   c                    t                      }| j        j                                        D ]}|j        s|                                 |j        r	 | j        |j                 d         }t          ||j                  D ]8\  }}|j	        dk    rt          d           t          |j                  |_        9n# t          $ r t          d           Y nw xY wt          |j        d          }| j                            |           |j        |_        |                    t+          |j                             |r.| j                            |                                           d S d S )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headerRowCountrA   zip	data_typer   r   valuer%   	TypeErrorr
   	_rel_typer2   r'   Id_rel_idr   r4   r:   r;   )r6   r   tabler\   r^   r]   r   s          r   write_tableszWorksheetWriter.write_tables  s   W^**,, 	. 	.E% 
V))+++' VV"gei03),S%2D)E)E 7 7ID##~44 $%a b b b'*4:CHH7 % V V VTUUUUUVEOB???CJc"""FEMMM'SV,,,---- 	+GLL))*****	+ 	+s   A&B::CCc              #   >  K   t          | j                  5 }|                    dt                    5  	 	 d V }|du r|V  n||                    |           &# t
          $ r Y nw xY w	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )N	worksheet)xmlnsT)r   r1   ra   r   writeGeneratorExit)r6   r4   els      r   r3   zWorksheetWriter.get_stream  sJ     TX 	"K}==  
)#ee::"$HHHHZ$HHRLLL) %   D              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sQ   BA:'A
A*'A:)A**A:.B:A>	>BA>	BBBc                 ^   |                                   |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  | 	                                 | 
                                 |                                  |                                  |                                  |                                  dS )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)rs   rv   rz   r   r   r   r   r   r   r   r   r   r   r   r   rR   s    r   
write_tailzWorksheetWriter.write_tail/  s   D 	!!!   r   c                     |                                   |                                  |                                  |                                  dS )z
        High level
        N)rS   rd   r   r&   rR   s    r   r   zWorksheetWriter.writeb  sE     	

r   c                 J    | j         r| j                                          dS dS )z+
        Close the context manager
        N)r4   r&   rR   s    r   r&   zWorksheetWriter.closel  s+     7 	GMMOOOOO	 	r   c                    |                                   t          | j        t                    r| j                                        S t          | j        d          5 }|                                }ddd           n# 1 swxY w Y   |S )zE
        Close the context manager and return serialised XML
        rbN)r&   
isinstancer1   r   getvalueopenread)r6   srcr1   s      r   r   zWorksheetWriter.readt  s     	

dh(( 	'8$$&&&$(D!! 	S((**C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 
s   A>>BBc                 v    t          j        | j                   t                              | j                   dS )z!
        Remove tempfile
        N)r   r   r1   r   rR   s    r   cleanupzWorksheetWriter.cleanup  s2     		$(dh'''''r   r   )#__name__
__module____qualname__r7   r=   rC   rJ   rM   rP   rS   r[   rd   rb   rs   rv   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r3   r   r   r&   r   r   r|   r   r   r,   r,   ,   s       	 	 	 	& & &
( ( ($ $ $& & &
% % %
   $ $ $  > > >() ) ). . .( ( (  @ @ @' ' '' ' '9 9 92 2 2, , ,* * *' ' ', , ,5 5 5: : :+ + +0   0 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      s    # # # # # #       				 ' ' ' ' ' '       * * * * * * 0 0 0 0 0 0 9 9 9 9 9 9 J J J J J J J J : : : : : : & & & & & & $ $ $ $ $ $ ( ( ( ( ( ( ( (                   , , , , , ,      Z( Z( Z( Z( Z( Z( Z( Z( Z( Z(r   