U
    d/e                     @   s   d Z ddlmZ ddlZddlmZmZ ddddd	d
dgZddddddddddddgZdd Z	dd Z
dd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) ZdS )*zTime formatter for S3 APIs.    )absolute_importN)datetimetimezoneMonTueWedThuFriSatSunJanFebMarAprMayJunJulAugSepOctNovDecc                 C   s   | j r| tjjddS | S )z*Convert to UTC time if value is not naive.Ntzinfo)r   
astimezoner   utcreplacevalue r   ./tmp/pip-unpacked-wheel-xery97c7/minio/time.py_to_utc   s    r!   c                 C   sL   | dkrdS zt | d}W n  tk
r<   t | d}Y nX |jtjdS )z0Parse UTC ISO-8601 formatted string to datetime.Nz%Y-%m-%dT%H:%M:%S.%fZz%Y-%m-%dT%H:%M:%SZr   )r   strptime
ValueErrorr   r   r   )r   timer   r   r    from_iso8601utc%   s    r%   c                 C   s4   | dkrdS t | } | d| ddd  d S )z3Format datetime into UTC ISO-8601 formatted string.Nz%Y-%m-%dT%H:%M:%S.z%f   Zr!   strftimer   r   r   r    to_iso8601utc1   s
    r*   c                 C   s   t | dkrtd|  d| dd tks8| d dkrHtd|  dt| dd }t| dd d	j}| dd
 tkrtd|  dt| dd
 }t| d
d d}|j||d t	j
d}|| krtd|  d|S )z4Parse HTTP header date formatted string to datetime.   z
time data z" does not match HTTP header formatr   r&   ,       %d    N %Y %H:%M:%S GMT   )daymonthr   )lenr#   
_WEEK_DAYSindexr   r"   r3   _MONTHSr   r   r   weekday)r   r9   r3   r4   r$   r   r   r    from_http_header<   s,    



r:   c                 C   sL   t | } t|   }| d}t| jd  }| d}| d| | | S )z7Format datatime into HTTP header date formatted string.r/   r2   r1   r,   )r!   r6   r9   r)   r8   r4   )r   r9   r3   r4   suffixr   r   r    to_http_headerX   s    

r<   c                 C   s   t | dS )z/Format datetime into AMZ date formatted string.z%Y%m%dT%H%M%SZr(   r   r   r   r    to_amz_dateb   s    r=   c                   C   s   t  jtjdS )z,Timezone-aware wrapper to datetime.utcnow().r   )r   utcnowr   r   r   r   r   r   r    r>   g   s    r>   c                 C   s   t | dS )z7Format datetime into SignatureV4 date formatted string.z%Y%m%dr(   r   r   r   r    to_signer_datel   s    r?   c                 C   s   t |  | jd  S )z"Convert datetime into float value.gư>)ctimemktime	timetuplemicrosecondr   r   r   r    to_floatq   s    rD   )__doc__
__future__r   r$   r@   r   r   r6   r8   r!   r%   r*   r:   r<   r=   r>   r?   rD   r   r   r   r    <module>   s"    
