U
    
ڲgu                     @   s0   d Z ddlmZmZ ddlZdd Zdd ZdS )zParse RFC3339 date strings    )datetimetimezoneNc                 C   s   t |  S )a  Parse an RFC3339 date string and return the number of seconds since the
    epoch (as a float).

    In particular, this method is meant to parse the strings returned by the
    JSON mapping of protobuf google.protobuf.timestamp.Timestamp instances:
    https://github.com/protocolbuffers/protobuf/blob/4cf5bfee9546101d98754d23ff378ff718ba8438/src/google/protobuf/timestamp.proto#L99

    This method has microsecond precision; nanoseconds will be truncated.

    Args:
        datestr: A string in RFC3339 format.
    Returns:
        Float: The number of seconds since the Unix epoch.
    Raises:
        ValueError: Raised if the `datestr` is not a valid RFC3339 date string.
    )_parse_to_datetime	timestamp)datestr r   ;/tmp/pip-unpacked-wheel-p0r7i5ii/firebase_admin/_rfc3339.pyparse_to_epoch   s    r	   c                 C   s   t dd| }zt|djtjdW S  tk
r:   Y nX zt|djtjdW S  tk
rh   Y nX t dd|}zt|dW S  tk
r   Y nX zt|d	W S  tk
r   Y nX td
| dS )a5  Parse an RFC3339 date string and return a python datetime instance.

    Args:
        datestr: A string in RFC3339 format.
    Returns:
        datetime: The corresponding `datetime` (with timezone information).
    Raises:
        ValueError: Raised if the `datestr` is not a valid RFC3339 date string.
    z(\.\d{6})\d*z\1z%Y-%m-%dT%H:%M:%S.%fZ)tzinfoz%Y-%m-%dT%H:%M:%SZz(\d\d):(\d\d)$z\1\2z%Y-%m-%dT%H:%M:%S.%f%zz%Y-%m-%dT%H:%M:%S%zz+time data {0} does not match RFC3339 formatN)	resubr   strptimereplacer   utc
ValueErrorformat)r   Zdatestr_modifiedr   r   r   r   (   s:      r   )__doc__r   r   r   r	   r   r   r   r   r   <module>   s   