o
    Ch*!                     @   s  d Z ddlZddlZddlmZ ddlmZmZm	Z	m
Z
mZ ddlZe	jdddZee	jdddd d	d
 Zdd ZejddZee e	jdddddZejddZee e	jdddddZejddZee eejdd ee e	jdddddZG dd dZdS )z Tablib - ODF Support.
    N)BytesIO)numberopendocumentstyletabletextbold	paragraph)namefamily)
fontweightfontweightasianfontweightcomplexc                 C   s^   |  tjdd |  tjdd |  tjdd |  tjdd |  tjdd d S )Nlongr   -r   )
addElementr   YearTextMonthDayr    r   e/var/www/html/myvaluetrips/my_value_trip_new/venv/lib/python3.10/site-packages/tablib/formats/_ods.pyset_date_style   s
   r   c                 C   s`   |  tjdd |  tjdd |  tjdd |  tjdd |  tjddd d S )Nr   r   :r   0)r   decimalplaces)r   r   Hoursr   MinutesSecondsr   r   r   r   set_time_style   s
   r!   zdate-style1r
   ds1Defaultz
table-cell)r
   datastylenameparentstylenamer   ztime-style1ts1zdatetime-style1 r   dts1c                   @   s|   e Zd ZdZdZed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 Zedd ZdS )	ODSFormatods)r+   c                 C   s   t  }|jt |jt |jt |jt |jt	 |jt
 |jt tj|jr6|jndd}|j| | || t }|| | S )z&Returns ODF representation of Dataset.zTablib Datasetr"   )r   OpenDocumentSpreadsheetautomaticstylesr   r   styles
date_styleds
time_styletsdatetime_styledtsr   Tabletitlespreadsheet
dset_sheetr   savegetvalue)clsdatasetwbwsstreamr   r   r   
export_setF   s   
zODSFormat.export_setc                 C   sv   t  }|jt t|jD ]\}}tj|j	r|j	nd| d}|j
| | || qt }|| | S )z'Returns ODF representation of DataBook.Sheetr"   )r   r,   r-   r   r   	enumerate	_datasetsr   r5   r6   r7   r8   r   r9   r:   )r;   databookr=   idsetr>   r?   r   r   r   export_book[   s   
zODSFormat.export_bookTr   c                    s   | d|_dd t|jD ]C\}}|jdkrq||k rq fdd|jD }|s,q||kr6|r6||_q||krMt||jk rM|dg|jt|  7 }|| qdS )	z(Populate dataset `dset` with sheet data.r
   c                 S   s   |   p	| d S )Nnumbercolumnsrepeated)hasChildNodesgetAttribute)cellr   r   r   is_real_cellq   s   z,ODSFormat.import_sheet.<locals>.is_real_cellztable:table-rowc                    s   g | ]}|r  |qS r   )	read_cell).0rK   r;   rL   r   r   
<listcomp>y   s    z*ODSFormat.import_sheet.<locals>.<listcomp> N)	rJ   r6   rB   
childNodestagNameheaderslenwidthappend)r;   rF   sheetrT   
skip_linesrE   rowrow_valsr   rO   r   import_sheetk   s    
zODSFormat.import_sheetNc           	      C   s  dd }|d u r| d}|dkr| d}|r||S |dkrB| d}z
tj|d W S  tyA   tj|d	  Y S w |d
krO| d}|dkS |jsyt|dd }|d u ra| d}|d u rgdS |dkrot|S |dkrw||S |S |jD ]}| 	||}|r|  S q|d S )Nc                 S   s(   d| v rt j| dS t j| d S )NT%Y-%m-%dT%H:%M:%S%Y-%m-%d)dtdatetimestrptimedate)valr   r   r   convert_date   s   z)ODSFormat.read_cell.<locals>.convert_date	valuetyperc   	datevaluetime	timevaluePT%HH%MM%SS%H:%M:%SbooleanbooleanvaluetruedatavaluerQ   float)
rJ   r`   ra   rb   rh   
ValueErrorrR   getattrrq   rM   )	r;   rK   
value_typere   
date_value
time_value
bool_valuerp   subnoder   r   r   rM      sD   





zODSFormat.read_cellc                 C   sB   |   t|}|jjD ]}|jd dkr| |||| qdS )z(Populate dataset `dset` from ODS stream.   r   N)wiper   loadr7   rR   qnamer\   )r;   rF   	in_streamrT   rY   ods_bookrX   r   r   r   
import_set   s   
zODSFormat.import_setc                 C   sT   |   t|}|jjD ]}|jd dkrqt }| ||| |	| qdS )z*Populate databook `dbook` from ODS stream.ry   r   N)
rz   r   r{   r7   rR   r|   tablibDatasetr\   	add_sheet)r;   dbookr}   rT   r~   rX   rF   r   r   r   import_book   s   
zODSFormat.import_bookc                 C   s  |j dd}t|jD ]\}}|}||d | |d f qt|ddD ]\}}|dko/|j}	|	r4tnd}
tj|
d}|| t|D ]\}}t	|t
jrWtjd|d	}nvt	|tjrutjd
|dtd}|tj|dd nXt	|tjr|d}tjd
|td}|tj|d n;t	|tjrtjd|dtd}|tj|dd n|du rtjdd}ntjdd}|tjt||
d || qEq%dS )z-Completes given worksheet from given Dataset.F)dictsr   ry   )startN)	stylenamerq   )rf   rp   rc   r^   )rf   rg   r   z%Y-%m-%d %H:%M:%Sr   r_   rh   rj   )rf   ri   r   rk   void)rf   string)r   r   )_packagerB   _separatorsinsertrT   r   r   TableRowr   
isinstancenumbersNumber	TableCellr`   ra   strftimer4   r   Prc   r0   rh   r2   str)r;   r<   r>   r   rE   sep_offset
row_numberrZ   	is_headerr   odf_rowjcolrK   ru   r   r   r   r8      sJ   

zODSFormat.dset_sheetc                 C   s8   t |tr	t|}zt| W dS  ty   Y dS w )NTF)r   bytesr   r   r{   	Exception)r;   r?   r   r   r   detect   s   

zODSFormat.detect)Tr   )N)T)__name__
__module____qualname__r6   
extensionsclassmethodr@   rG   r\   rM   r   r   r8   r   r   r   r   r   r*   B   s&    

(

)r*   )__doc__ra   r`   r   ior   odfr   r   r   r   r   r   Styler   r   TextPropertiesr   r!   	DateStyler/   r0   r1   r2   r3   r   r4   r*   r   r   r   r   <module>   sR    