U
    H4f                     @   s|   d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	 ddl
mZ ddlmZmZ g Zdd	 Zd
d Zee	 fddZdS )z
This modules provides a method to parse an ISO 8601:2004 time string to a
Python datetime.time instance.

It supports all basic and extended formats including time zone specifications
as described in the ISO standard.
    N)Decimal)time)strftimeTIME_EXT_COMPLETETZ_EXT)ISO8601Error)TZ_REGEXbuild_tzinfoc                   C   sl   t sht tdt  t tdt  t tdt  t tdt  t tdt  t S )z
    Build regular expressions to parse ISO time string.

    The regular expressions are compiled and stored in TIME_REGEX_CACHE
    for later reuse.
    zKT?(?P<hour>[0-9]{2}):(?P<minute>[0-9]{2}):(?P<second>[0-9]{2}([,.][0-9]+)?)zIT?(?P<hour>[0-9]{2})(?P<minute>[0-9]{2})(?P<second>[0-9]{2}([,.][0-9]+)?)z6T?(?P<hour>[0-9]{2}):(?P<minute>[0-9]{2}([,.][0-9]+)?)z5T?(?P<hour>[0-9]{2})(?P<minute>[0-9]{2}([,.][0-9]+)?)z!T?(?P<hour>[0-9]{2}([,.][0-9]+)?))TIME_REGEX_CACHEappendrecompiler    r   r   3/tmp/pip-unpacked-wheel-giipsm8b/isodate/isotime.pybuild_time_regexps.   s"    




r   c                 C   s  t  }|D ]}|| }|r
| }| D ] \}}|dk	r.|dd||< q.t|d |d t|d pjdt|d pxd}d	|krt|d	 td
}|t| td }	t	t|d t|d t|t|	
 |  S d|krFt|d }
|
t|
 d }|t| td }	t	t|d t|
t|t|	
 |  S d\}	}}
t|d }|t| d }
|
t|
 d }|t| td }	t	t|t|
t|t|	
 |  S q
td|  dS )a  
    Parses ISO 8601 times into datetime.time objects.

    Following ISO 8601 formats are supported:
      (as decimal separator a ',' or a '.' is allowed)
      hhmmss.ssTZD    basic complete time
      hh:mm:ss.ssTZD  extended compelte time
      hhmm.mmTZD      basic reduced accuracy time
      hh:mm.mmTZD     extended reduced accuracy time
      hh.hhTZD        basic reduced accuracy time
    TZD is the time zone designator which can be in the following format:
              no designator indicates local time zone
      Z       UTC
      +-hhmm  basic hours and minutes
      +-hh:mm extended hours and minutes
      +-hh    hours
    N,.tznametzsignZtzhourr   Ztzminsecondz.000001g    .Ahourminute<   )r   r   r   z%Unrecognised ISO 8601 time format: %r)r   match	groupdictitemsreplacer	   intr   quantizer   to_integralr   )Z
timestringZisotimespatternr   groupskeyvaluetzinfor   microsecondr   r   r   r   r   
parse_time`   sL    

 


 

 
r&   c                 C   s
   t | |S )z
    Format time strings.

    This method is just a wrapper around isodate.isostrf.strftime and uses
    Time-Extended-Complete with extended time zone as default format.
    )r   )Zttimeformatr   r   r   time_isoformat   s    r(   )__doc__r   decimalr   datetimer   Zisodate.isostrfr   r   r   Zisodate.isoerrorr   Zisodate.isotzinfor   r	   r
   r   r&   r(   r   r   r   r   <module>   s   27