o
    w¨Êh®  ã                   @   sF  d Z ddlZddlZddlZddlmZ ddlmZ ddlmZ dd„ Z	dd	„ Z
	d2dd„Zd3d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diZermdee< dee< 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/d0d-d-d/d1œZ$dS )4zÒ
    pyexcel_io.service
    ~~~~~~~~~~~~~~~~~~~

    provide service code to downstream projects

    :copyright: (c) 2014-2017 by Onni Software Ltd.
    :license: New BSD License, see LICENSE for more details
é    N)ÚPY2)Ú	constants)Ú
exceptionsc                 C   s   | t  | ¡kS )z/check if a float value had zero value in digits)ÚmathÚfloor©Úvalue© r	   úD/var/www/html/env/lib/python3.10/site-packages/pyexcel_io/service.pyÚhas_no_digits_in_float   s   r   c                 C   s�   d}z;t | ƒdkrtj | d¡}| ¡ }W |S t | ƒdkr'tj | d¡}W |S t | ƒdkr;tj | dd… d¡}W |S W |S  tyG   Y |S w )	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u }|rd S |rd}t || ¡rd S z'|r-|  ¡ dkr(W d S t| ƒW S |  ¡ dkr?| |kr<tdƒW S W d S t| ƒW S  tyM   Y d S w )NÚ0z0.Fz([0-9]+_)+[0-9]+.[0-9]*$ÚnanÚNaN)Ú
startswithÚreÚmatchÚlowerÚfloatr   )r   Úpep_0515_offÚignore_nan_textÚdefault_float_nanÚshould_we_skip_itÚpatternr	   r	   r
   Údetect_float_value,   s*   ÿ


ÿr%   c                 C   sz   |   d¡rt| ƒdkrd S |rd}t || ¡rd S zt| ƒW S  ty<   d}t || ¡r9|  dd¡}t|ƒ Y S Y d S w )Nr   é   z([0-9]+_)+[0-9]+$z([0-9]+,)*[0-9]+$ú,Ú )r   r   r   r   Úintr   Úreplace)r   r    r$   Úinteger_stringr	   r	   r
   Údetect_int_valueN   s   
ùr,   c                 C   s   t | ƒ}|S )zconvert a value to float)r   ©r   r   r	   r	   r
   Úfloat_valued   s   r.   c                 C   s–   d}z3t | ƒdkrtj | d¡}| ¡ }nt | ƒdkr#tj | d¡}nt | ƒdkr4tj | dd… d¡}W n	 ty>   Y nw |dkrIt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_valuej   s$   
ÿ€ÿr1   c                 C   sˆ   ddl }| d| ¡}|r@t| ¡ ƒdkr@t| d¡ƒ}t| d¡ƒ}t| d¡ƒ}|dk r6t |||¡}|S tj|||d�}|S 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}|S | dkrd}|S | }|S )zget bolean valueÚtrueTÚfalseFr	   r-   r	   r	   r
   Úboolean_value”   s   ûÿrC   )r   r   r:   r;   ÚbooleanÚ
percentageÚcurrencyr   Ústringr   r:   r;   rD   Úthrow_exception)r   r   r:   r;   rD   rE   c                 C   s   t  d|  ¡‚©Nz%s is too big)r   ÚIntegerAccuracyLossErrorr   r	   r	   r
   rH   Ä   s   c                 C   s   | t jkrt d|  ¡‚| S rI   )r   ÚMAX_INTEGERr   rJ   r   r	   r	   r
   Úods_float_valueÈ   s   
rL   c                 C   ó
   |   d¡S )Nr   ©Ústrftimer   r	   r	   r
   Úods_date_valueÎ   ó   
rP   c                 C   rM   )NzPT%HH%MM%SSrN   r   r	   r	   r
   Úods_time_valueÒ   rQ   rR   c                 C   s   | du rdS dS )zconvert a boolean value to textTrA   rB   r	   r   r	   r	   r
   Úods_bool_valueÖ   s   rS   c                 C   s:   | j d | jd  }| jd d }| jd }d|||f S )z"convert a cell value to time deltar4   i  é<   zPT%02dH%02dM%02dS)Údaysr7   )Úcellr5   r6   r7   r	   r	   r
   Úods_timedelta_valueß   s   
rW   )r   r:   rD   r;   r   rH   r   z
date-valuez
time-valuezboolean-value)r   r   r:   rD   rE   rF   r;   )TFN)T)%Ú__doc__r   r   r   Úpyexcel_io._compactr   Ú
pyexcel_ior   r   r   r   r%   r,   r.   r1   r@   rC   r   r   r:   r;   ÚboolÚODS_FORMAT_CONVERSIONr)   ÚstrÚODS_WRITE_FORMAT_COVERSIONÚunicodeÚlongÚVALUE_CONVERTERSrH   rL   rP   rR   rS   rW   ÚODS_VALUE_CONVERTERSÚVALUE_TOKENr	   r	   r	   r
   Ú<module>   s~    	
ÿ
"ùù
ú
		ú
ù