o
    e\                     @   s~   d Z ddlZddlmZ ddlmZmZ ddlmZm	Z	 ddl
mZ ddlmZ ddlZedZdd
dZG dd dZdS )z Tablib - XLSX Support.
    N)BytesIO)ExcelReaderload_workbook)	AlignmentFont)get_column_letter)Workbookz[\\*?:/\[\]]-c                 C   s   t t|| d d S )N   )resubINVALID_TITLE_REGEX)sreplace r   G/var/www/html/venv/lib/python3.10/site-packages/tablib/formats/_xlsx.pysafe_xlsx_sheet_title   s   r   c                   @   st   e Zd ZdZdZedd Zeddd	Zedd
dZedddZ	edddZ
edddZedddZdS )
XLSXFormatxlsx)r   c                 C   s0   zt |dd}|  W dS  ty   Y dS w )z6Returns True if given stream is a readable excel file.F)	read_onlyT)r   read_manifest	Exception)clsstreamreaderr   r   r   detect   s   zXLSXFormat.detectTr	   Fc                 C   sR   t  }|jd }|jrt|j|nd|_| j||||d t }|| | S )a?  Returns XLSX representation of Dataset.

        If ``freeze_panes`` is True, Export will freeze panes only after first line.

        If ``dataset.title`` contains characters which are considered invalid for an XLSX file
        sheet name (http://www.excelcodex.com/2012/06/worksheets-naming-conventions/), they will
        be replaced with ``invalid_char_subst``.

        If ``escape`` is True, formulae will have the leading '=' character removed.
        This is a security measure to prevent formulae from executing by default
        in exported XLSX files.
        r   zTablib Datasetfreeze_panesescape)r   
worksheetstitler   
dset_sheetr   savegetvalue)r   datasetr   invalid_char_substr   wbwsr   r   r   r   
export_set%   s   

zXLSXFormat.export_setc                 C   s~   t  }|jD ]}|| qt|jD ]\}}| }	|jr$t|j|nd| |	_| j||	||d qt	 }
|
|
 |
 S )zKReturns XLSX representation of DataBook.
        See export_set().
        zSheet%sr   )r   r   remove	enumerate	_datasetscreate_sheetr    r   r!   r   r"   r#   )r   databookr   r%   r   r&   sheetidsetr'   r   r   r   r   export_bookA   s   

zXLSXFormat.export_bookr   c                 C   s   |j |_ t|jD ]6\}}||k rq	dd |D }||kr#|r#||_q	||kr:t||jk r:|dg|jt|  7 }|| q	dS )zPopulates dataset with sheet.c                 S   s   g | ]}|j qS r   )value).0cr   r   r   
<listcomp>`   s    z+XLSXFormat.import_sheet.<locals>.<listcomp> N)r    r*   rowsheaderslenwidthappend)r   r0   r.   r8   
skip_linesr/   rowrow_valsr   r   r   import_sheetW   s   zXLSXFormat.import_sheetc                 C   s0   |   t||dd}|j}| |||| dS z!Returns databook from XLS stream.T)r   	data_onlyN)wiper   activer?   )r   r0   	in_streamr8   r   r<   xls_bookr.   r   r   r   
import_seth   s   zXLSXFormat.import_setc                 C   sF   |   t||dd}|jD ]}t }| ||| || qdS r@   )rB   r   r   tablibDatasetr?   	add_sheet)r   dbookrD   r8   r   rE   r.   r0   r   r   r   import_bookr   s   
zXLSXFormat.import_bookc              
   C   s8  |j dd}t|jD ]\}}|}||d | |d f qtdd}	tdd}
t|D ]l\}}|d }t|D ]_\}}t|d }|| |  }|dkr[|jr[|	|_|rZd|_	nt
||jk rf|	|_n	d	t|v ro|
|_z||_W n ty   t||_Y nw |r|jd
kr|jdr|jdd|_q9q-dS )z-Completes given worksheet from given Dataset.F)dictsr      T)bold)	wrap_textA2
f=r6   N)_packager*   _separatorsinsertr   r   r   r8   fontr   r9   r:   str	alignmentr2   
ValueError	data_type
startswithr   )r   r$   r'   r   r   rT   r/   sep_offsetrN   rO   r=   
row_numberjcolcol_idxcellr   r   r   r!      s<   


zXLSXFormat.dset_sheetN)Tr	   F)Tr   )TTr   )TT)TF)__name__
__module____qualname__r    
extensionsclassmethodr   r(   r1   r?   rF   rK   r!   r   r   r   r   r      s"    
	r   )r	   )__doc__r   ior   openpyxl.reader.excelr   r   openpyxl.stylesr   r   openpyxl.utilsr   openpyxl.workbookr   rG   compiler   r   r   r   r   r   r   <module>   s    

