o
    g+(                     @   s   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d Z$dddZ%G d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                  C   s$   t D ]} tj| rt|  qd S N)ALL_TEMP_FILESospathexistsremove)r    r   T/var/www/html/api-tag/env/lib/python3.10/site-packages/openpyxl/worksheet/_writer.py_openpyxl_shutdown   s
   
r    c                 C   s,   t d| ddd}|j}|  t| |S )Nzw+z	openpyxl.F)modesuffixprefixdelete)r   namecloser   append)r   fobjfilenamer   r   r   create_temporary_file#   s   
r'   c                   @   s  e Zd ZdBddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Z d>d? Z!d@dA Z"dS )CWorksheetWriterNc                 C   sJ   || _ g | j _g | j _|d u rt }|| _t | _|  | _t	| j d S r   )
ws_hyperlinks	_commentsr'   outr
   _rels
get_streamxfnext)selfr)   r,   r   r   r   __init__/   s   
zWorksheetWriter.__init__c                 C      | j j}| j|  d S r   )r)   sheet_propertiesr/   sendto_tree)r1   propsr   r   r   write_properties;      z WorksheetWriter.write_propertiesc                 C   s4   t | jdd}|rt| }| j|  dS dS )z/
        Write worksheet size if known
        calculate_dimensionN)getattrr)   r   r/   r5   r6   )r1   refdimr   r   r   write_dimensions@   s
   
z WorksheetWriter.write_dimensionsc                 C   s,   | j jj| j j_| j j}| j|  d S r   )r)   column_dimensionsmax_outlinesheet_formatoutlineLevelColr/   r5   r6   )r1   fmtr   r   r   write_formatJ   s   zWorksheetWriter.write_formatc                 C   r3   r   )r)   viewsr/   r5   r6   )r1   rE   r   r   r   write_viewsP   r9   zWorksheetWriter.write_viewsc                 C   r3   r   )r)   r?   r/   r5   r6   )r1   colsr   r   r   
write_colsU   r9   zWorksheetWriter.write_colsc                 C   s,   |    |   |   |   |   dS )z
        Write all elements up to rows:
        properties
        dimensions
        views
        format
        cols
        N)r8   r>   rF   rD   rH   r1   r   r   r   	write_topZ   s
   	zWorksheetWriter.write_topc                 C   sb   t t}t| jj D ]\\}}}|| | q| jj |  D ]}g ||< q$t| S )z0Return all rows, and any cells that they contain)	r   listsortedr)   _cellsitemsr$   row_dimensionskeys)r1   rowsrowcolcellr   r   r   rQ   j   s   
zWorksheetWriter.rowsc                 C   sf   | j d}|d |  D ]\}}| ||| qW d    n1 s&w   Y  | j d  d S )NT	sheetData)r/   r5   elementrQ   	write_row)r1   r/   row_idxrR   r   r   r   
write_rowsx   s   zWorksheetWriter.write_rowsc                 C   s   d| i}| j j}|||i  |d|4 |D ](}|jd ur.t|}| j j	| |j
d u r:|js:|js:qt|| j ||j qW d    d S 1 sOw   Y  d S )NrrR   )r)   rO   updategetrV   _commentr   	from_cellr+   r$   _value	has_styler   )r1   r/   rR   rX   attrsdimsrT   commentr   r   r   rW      s"   



"zWorksheetWriter.write_rowc                 C   $   | j j}|r| j|  d S d S r   )r)   
protectionr/   r5   r6   )r1   protr   r   r   write_protection      z WorksheetWriter.write_protectionc                 C   rd   r   )r)   	scenariosr/   r5   r6   )r1   ri   r   r   r   write_scenarios   rh   zWorksheetWriter.write_scenariosc                 C   rd   r   )r)   auto_filterr/   r5   r6   )r1   fltr   r   r   write_filter   rh   zWorksheetWriter.write_filterc                 C   s   dS )z
        As per discusion with the OOXML Working Group global sort state is not required.
        openpyxl never reads it from existing files
        Nr   rI   r   r   r   
write_sort   s   zWorksheetWriter.write_sortc                 C   s<   | j j}|rdd | j jD }| jt|d  d S d S )Nc                 S   s   g | ]}t t|qS r   )r   str).0r<   r   r   r   
<listcomp>   s    z6WorksheetWriter.write_merged_cells.<locals>.<listcomp>)	mergeCell)r)   merged_cellsr/   r5   r   r6   )r1   mergedcellsr   r   r   write_merged_cells   s
   z"WorksheetWriter.write_merged_cellsc                 C   s\   t  }| jj}| jjD ] }|jD ]}|jr"|j|kr"|j|j|_q| j	
|  qd S r   )r   r)   parentconditional_formattingrulesdxf_differential_stylesadddxfIdr/   r5   r6   )r1   dfwbcfruler   r   r   write_formatting   s   
z WorksheetWriter.write_formattingc                 C   rd   r   )r)   data_validationsr/   r5   r6   )r1   dvr   r   r   write_validations   rh   z!WorksheetWriter.write_validationsc                 C   s\   | j j}|D ]}|jrtdd|jd}| j| |j|_q|r,| jt	|
  d S d S )N	hyperlinkExternal)type
TargetModeTarget)r)   r*   targetr	   r-   r$   idr/   r5   r   r6   )r1   linkslinkrelr   r   r   write_hyperlinks   s   z WorksheetWriter.write_hyperlinksc                 C   rd   r   )r)   print_optionsr/   r5   r6   )r1   r   r   r   r   write_print   rh   zWorksheetWriter.write_printc                 C   rd   r   )r)   page_marginsr/   r5   r6   )r1   marginsr   r   r   write_margins   rh   zWorksheetWriter.write_marginsc                 C   rd   r   )r)   
page_setupr/   r5   r6   )r1   setupr   r   r   
write_page   rh   zWorksheetWriter.write_pagec                 C   rd   r   )r)   HeaderFooterr/   r5   r6   )r1   hfr   r   r   write_header   rh   zWorksheetWriter.write_headerc                 C   s2   | j j| j jf}|D ]}|r| j|  q
d S r   )r)   
row_breaks
col_breaksr/   r5   r6   )r1   brksbrkr   r   r   write_breaks   s   zWorksheetWriter.write_breaksc                 C   sP   | j js| j jr&tddd}| j| t }|j|_| j	|
d d S d S )Ndrawingr   )r   r   )r)   _charts_imagesr	   r-   r$   r   r   r/   r5   r6   )r1   r   r   r   r   r   write_drawings   s   zWorksheetWriter.write_drawingsc                 C   s8   | j jdus
| j jrtd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_drawingr+   r   r/   r5   r6   )r1   legacyr   r   r   write_legacy   s   
zWorksheetWriter.write_legacyc              	   C   s   t  }| jj D ]X}|jsG|  |jrGz$| j|j d }t||jD ]\}}|j	dkr1t
d t|j|_q$W n tyF   t
d Y nw t|jdd}| j| |j|_|t|jd q	|rn| 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headerRowCountr<   zip	data_typer   ro   valuer"   	TypeErrorr	   	_rel_typer-   r$   Id_rel_idr   r/   r5   r6   )r1   r   tablerR   rT   rS   r   r   r   r   write_tables  s,   
zWorksheetWriter.write_tablesc              
   c   s    t | jI}|jdtd) z	 d V }|du r|V  n
|d u r!q|| q ty/   Y nw W d    n1 s:w   Y  W d    d S W d    d S 1 sRw   Y  d S )N	worksheet)xmlnsT)r   r,   rV   r   writeGeneratorExit)r1   r/   elr   r   r   r.     s(   
"zWorksheetWriter.get_streamc                 C   s|   |    |   |   |   |   |   |   |   |   | 	  | 
  |   |   |   |   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)rg   rj   rm   rv   r   r   r   r   r   r   r   r   r   r   r   rI   r   r   r   
write_tail/  s   "zWorksheetWriter.write_tailc                 C   s$   |    |   |   |   dS )z
        High level
        N)rJ   rY   r   r#   rI   r   r   r   r   b  s   zWorksheetWriter.writec                 C   s   | j r
| j   dS dS )z+
        Close the context manager
        N)r/   r#   rI   r   r   r   r#   l  s   zWorksheetWriter.closec                 C   sX   |    t| jtr| j S t| jd}| }W d   |S 1 s%w   Y  |S )zE
        Close the context manager and return serialised XML
        rbN)r#   
isinstancer,   r   getvalueopenread)r1   srcr,   r   r   r   r   t  s   


zWorksheetWriter.readc                 C   s   t | j t| j dS )z!
        Remove tempfile
        N)r   r   r,   r   rI   r   r   r   cleanup  s   zWorksheetWriter.cleanupr   )#__name__
__module____qualname__r2   r8   r>   rD   rF   rH   rJ   rQ   rY   rW   rg   rj   rm   rn   rv   r   r   r   r   r   r   r   r   r   r   r   r.   r   r   r#   r   r   r   r   r   r   r(   ,   sB    



	
3
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   r   <module>   s,   

	