U
    d;                     @   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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)Workbook)ExcelWriterz[\\*?:/\[\]]-c                 C   s   t t|| d d S )N   )resubINVALID_TITLE_REGEX)sreplace r   8/tmp/pip-unpacked-wheel-_3ph8cfy/tablib/formats/_xlsx.pysafe_xlsx_sheet_title   s    r   c                   @   sf   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dS )
XLSXFormatxlsx)r   c                 C   s6   zt |dd}|  W dS  tk
r0   Y dS X dS )z6Returns True if given stream is a readable excel file.F)	read_onlyTN)r   Zread_manifest	Exception)clsstreamreaderr   r   r   detect   s    zXLSXFormat.detectTr
   c                 C   sP   t  }|jd }|jr"t|j|nd|_| j|||d t }|| | S )a  Returns XLSX representation of Dataset.

        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`.
        r   zTablib Datasetfreeze_panes)r   
worksheetstitler   
dset_sheetr   savegetvalue)r   datasetr   invalid_char_substwbwsr   r   r   r   
export_set%   s    

zXLSXFormat.export_setc           
      C   s|   t  }|jD ]}|| qt|jD ]<\}}| }|jrHt|j|nd| |_| j|||d q&t	 }	|
|	 |	 S )a  Returns XLSX representation of DataBook.

        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`.
        zSheet%sr   )r   r   remove	enumerateZ	_datasetsZcreate_sheetr   r   r    r   r!   r"   )
r   Zdatabookr   r$   r%   sheetidsetr&   r   r   r   r   export_book;   s    	

zXLSXFormat.export_bookr   c                 C   sr   |   t||dd}|j}|j|_t|jD ]>\}}	||k r@q.dd |	D }
||krb|rb|
|_q.||
 q.dS )!Returns databook from XLS stream.Tr   Z	data_onlyc                 S   s   g | ]
}|j qS r   value.0cr   r   r   
<listcomp>b   s     z)XLSXFormat.import_set.<locals>.<listcomp>N)wiper   activer   r)   rowsheadersappend)r   r,   	in_streamr9   r   
skip_linesxls_bookr*   r+   rowrow_valsr   r   r   
import_setT   s    zXLSXFormat.import_setc                 C   s   |   t||dd}|jD ]}t }|j|_t|jD ]b\}}	dd |	D }
|dkrd|rd|
|_q:|dkrt	|
|j
k r|
dg|j
t	|
  7 }
||
 q:|| qdS )r.   Tr/   c                 S   s   g | ]
}|j qS r   r0   r2   r   r   r   r5   u   s     z*XLSXFormat.import_book.<locals>.<listcomp>r    N)r6   r   r   tablibZDatasetr   r)   r8   r9   lenwidthr:   Z	add_sheet)r   Zdbookr;   r9   r   r=   r*   datar+   r>   r?   r   r   r   import_bookh   s    
zXLSXFormat.import_bookc                 C   s:  |j dd}t|jD ]&\}}|}||d | |d f qtdd}tdd}	t|D ]\}}
|d }t|
D ]\}}t|d }|| |  }|dkr|jr||_|rd|_	nLt
|
|jk r||_n6zt|}W n tk
r   d	}Y nX d
|kr|	|_z
||_W qr ttfk
r0   t||_Y qrX qrqZdS )z-Completes given worksheet from given Dataset.F)Zdictsr      T)bold)	wrap_textA2rA   
N)_packager)   Z_separatorsinsertr   r   r   r9   fontr   rC   rD   str	TypeError	alignmentr1   
ValueError)r   r#   r&   r   rL   r+   sep_offsetrH   rI   r>   Z
row_numberjcolZcol_idxcellZstr_col_valuer   r   r   r       s6    




zXLSXFormat.dset_sheetN)Tr
   )Tr
   )TTr   )TT)T)__name__
__module____qualname__r   
extensionsclassmethodr   r'   r-   r@   rF   r    r   r   r   r   r      s   
r   )r
   )__doc__r   ior   Zopenpyxl.reader.excelr   r   Zopenpyxl.stylesr   r   Zopenpyxl.utilsr   Zopenpyxl.workbookr   Zopenpyxl.writer.excelr	   rB   compiler   r   r   r   r   r   r   <module>   s   

