U
    [e                     @   s"  d Z ddlZddlZddlZddlmZmZ dd Zdd Zd1d
dZ	d2ddZ
dd Zdd Zdd Zdd ZeejejejeeedZedededejdejdejdejdediZeeeeeedZdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zeeeeeed+Zd,d-d.d/d,d,d.d0Z dS )3z
    pyexcel_io.service
    ~~~~~~~~~~~~~~~~~~~

    provide service code to downstream projects

    :copyright: (c) 2014-2022 by Onni Software Ltd.
    :license: New BSD License, see LICENSE for more details
    N)	constants
exceptionsc                 C   s   | t | kS )z/check if a float value had zero value in digits)mathfloorvalue r   T/var/www/html/services/stratfitenv/lib/python3.8/site-packages/pyexcel_io/service.pyhas_no_digits_in_float   s    r
   c                 C   s   d}zft | dkr*tj| d}| }n>t | dkrFtj| d}n"t | dkrhtj| dd d}W n tk
r~   Y nX |S )	z?
    Read the date formats that were written by csv.writer
    N
   %Y-%m-%d   z%Y-%m-%d %H:%M:%Sr      z%Y-%m-%d %H:%M:%S.%f)lendatetimestrptimedate
ValueError)	cell_textretr   r   r	   detect_date_value   s    

 r   TFc                 C   s   |  do|  ddk}|r d S |r8d}t|| r8d S zV|r\|  dkrPW d S t| W S n0|  dkr| |krztdW S W d S n
t| W S W n tk
r   Y d S X d S )N0z0.Fz([0-9]+_)+[0-9]+.[0-9]*$nanNaN)
startswithrematchlowerfloatr   )r   pep_0515_offZignore_nan_textZdefault_float_nanZshould_we_skip_itpatternr   r   r	   detect_float_value*   s(    
r!   c                 C   s   |  drt| dkrd S |r2d}t|| r2d S z
t| W S  tk
r~   d}t|| rt| dd}t| Y S Y d S Y nX d S )Nr      z([0-9]+_)+[0-9]+$z([0-9]+,)*[0-9]+$, )r   r   r   r   intr   replace)r   r   r    Zinteger_stringr   r   r	   detect_int_valueL   s    
r'   c                 C   s   t | }|S )zconvert a value to float)r   r   r   r   r   r	   float_valueb   s    r)   c                 C   s   d}zft | dkr*tj| d}| }n>t | dkrFtj| d}n"t | dkrhtj| dd d}W n tk
r~   Y nX |dkrtd	|  |S )
z1convert to data value accroding ods specificationinvalidr   r   r   z%Y-%m-%dT%H:%M:%Sr   r   z%Y-%m-%dT%H:%M:%S.%fzBad date value %s)r   r   r   r   r   	Exceptionr(   r   r   r	   
date_valueh   s"    

 r,   c                 C   s   ddl }|d| }|r|t| dkr|t|d}t|d}t|d}|dk rjt|||}qtj|||d}nd}|S )	z1convert to time value accroding the specificationr   NzPT(\d+)H(\d+)M(\d+)S   r"         )hoursminutesseconds)	r   r   r   groupsr%   groupr   time	timedelta)r   r   resultshourminutesecondr   r   r   r	   
time_value~   s      r;   c                 C   s$   | dkrd}n| dkrd}n| }|S )zget bolean valuetrueTfalseFr   r(   r   r   r	   boolean_value   s    r>   )r   r   r5   r6   boolean
percentagecurrencyr   stringr   r5   r6   r   r?   )r   r   r5   r6   r?   r@   c                 C   s   t d|  d S Nz%s is too big)r   IntegerAccuracyLossErrorr   r   r   r	   throw_exception   s    rE   c                 C   s   | t jkrtd|  | S rC   )r   ZMAX_INTEGERr   rD   r   r   r   r	   ods_float_value   s    
rF   c                 C   s
   |  dS )Nr   strftimer   r   r   r	   ods_date_value   s    rI   c                 C   s
   |  dS )NzPT%HH%MM%SSrG   r   r   r   r	   ods_time_value   s    rJ   c                 C   s   | dkrdS dS dS )zconvert a boolean value to textTr<   r=   Nr   r   r   r   r	   ods_bool_value   s    rK   c                 C   s:   | j d | jd  }| jd d }| jd }d|||f S )z"convert a cell value to time deltar/   i  <   zPT%02dH%02dM%02dS)daysr2   )cellr0   r1   r2   r   r   r	   ods_timedelta_value   s    
rO   )r   r5   r?   r6   r   longr   z
date-valuez
time-valuezboolean-value)r   r   r5   r?   r@   rA   r6   )TFN)T)!__doc__r   r   r   Z
pyexcel_ior   r   r
   r   r!   r'   r)   r,   r;   r>   r   r   r5   r6   boolZODS_FORMAT_CONVERSIONr%   strZODS_WRITE_FORMAT_COVERSIONZVALUE_CONVERTERSrE   rF   rI   rJ   rK   rO   ZODS_VALUE_CONVERTERSZVALUE_TOKENr   r   r   r	   <module>   s   	     
"
        
		