name : isoparser.cpython-39.opt-1.pyc
a

Ö�]*3�@s|dZddlmZmZmZmZddlZddlmZddlm	Z	ddl
Z
ddlZddgZdd	�Z
Gd
d�de�Ze�ZejZdS)z�
This module offers a parser for ISO-8601 strings

It is intended to support all valid date, time and datetime formats per the
ISO-8601 specification.

..versionadded:: 2.7.0
�)�datetime�	timedelta�time�dateN)�tz��wraps�isoparse�	isoparsercst���fdd��}|S)Nc
s�t�d�fdd����t�tj�rjz��d��Wn8tyh}z d}t�t|�|�WYd}~n
d}~00�|�g|�Ri|��S)N�readcs�S�N�r
��str_inr
�=/usr/lib/python3.9/site-packages/dateutil/parser/isoparser.py�<lambda>�z,_takes_ascii.<locals>.func.<locals>.<lambda>�asciiz5ISO-8601 strings should contain only ASCII characters)�getattr�
isinstance�sixZ	text_type�encode�UnicodeEncodeErrorZ
raise_from�
ValueError)�selfr�args�kwargs�e�msg��frr�funcs&z_takes_ascii.<locals>.funcr)r r!r
rr�_takes_asciisr"c@s�eZdZddd�Zedd��Zedd��Zedd	��Zeddd��Zd
Z	dZ
e�d�Z
dd�Zdd�Zdd�Zdd�Zdd�Zddd�ZdS)r
NcCsD|dur:t|�dks(t|�dks(|dvr0td��|�d�}||_dS)z�
        :param sep:
            A single character that separates date and time portions. If
            ``None``, the parser will accept any single character.
            For strict ISO-8601 adherence, pass ``'T'``.
        N���
0123456789z7Separator must be a single, non-numeric ASCII characterr)�len�ordrr�_sep)r�sepr
r
r�__init__+s
 
zisoparser.__init__cCs�|�|�\}}t|�|kr^|jdus:|||d�|jkrV||�||dd��7}ntd��t|�dkr�|ddkr�d|d<t|�tdd�St|�S)u+

        Parse an ISO-8601 datetime string into a :class:`datetime.datetime`.

        An ISO-8601 datetime string consists of a date portion, followed
        optionally by a time portion - the date and time portions are separated
        by a single character separator, which is ``T`` in the official
        standard. Incomplete date formats (such as ``YYYY-MM``) may *not* be
        combined with a time portion.

        Supported date formats are:

        Common:

        - ``YYYY``
        - ``YYYY-MM`` or ``YYYYMM``
        - ``YYYY-MM-DD`` or ``YYYYMMDD``

        Uncommon:

        - ``YYYY-Www`` or ``YYYYWww`` - ISO week (day defaults to 0)
        - ``YYYY-Www-D`` or ``YYYYWwwD`` - ISO week and day

        The ISO week and day numbering follows the same logic as
        :func:`datetime.date.isocalendar`.

        Supported time formats are:

        - ``hh``
        - ``hh:mm`` or ``hhmm``
        - ``hh:mm:ss`` or ``hhmmss``
        - ``hh:mm:ss.ssssss`` (Up to 6 sub-second digits)

        Midnight is a special case for `hh`, as the standard supports both
        00:00 and 24:00 as a representation. The decimal separator can be
        either a dot or a comma.


        .. caution::

            Support for fractional components other than seconds is part of the
            ISO-8601 standard, but is not currently implemented in this parser.

        Supported time zone offset formats are:

        - `Z` (UTC)
        - `±HH:MM`
        - `±HHMM`
        - `±HH`

        Offsets will be represented as :class:`dateutil.tz.tzoffset` objects,
        with the exception of UTC, which will be represented as
        :class:`dateutil.tz.tzutc`. Time zone offsets equivalent to UTC (such
        as `+00:00`) will also be represented as :class:`dateutil.tz.tzutc`.

        :param dt_str:
            A string or stream containing only an ISO-8601 datetime string

        :return:
            Returns a :class:`datetime.datetime` representing the string.
            Unspecified components default to their lowest value.

        .. warning::

            As of version 2.7.0, the strictness of the parser should not be
            considered a stable part of the contract. Any valid ISO-8601 string
            that parses correctly with the default settings will continue to
            parse correctly in future versions, but invalid strings that
            currently fail (e.g. ``2017-01-01T00:00+00:00:00``) are not
            guaranteed to continue failing in future versions if they encode
            a valid date.

        .. versionadded:: 2.7.0
        Nr#z&String contains unknown ISO components��r�Zdays)�_parse_isodater&r(�_parse_isotimerrr)r�dt_str�
components�posr
r
rr	;sK zisoparser.isoparsecCs4|�|�\}}|t|�kr,tdd�|���t|�S)z�
        Parse the date portion of an ISO string.

        :param datestr:
            The string portion of an ISO string, without a separator

        :return:
            Returns a :class:`datetime.date` object
        zString contains unknown ISO zcomponents: {})r.r&r�formatr)rZdatestrr1r2r
r
r�
parse_isodate�s�zisoparser.parse_isodatecCs&|�|�}|ddkrd|d<t|�S)z�
        Parse the time portion of an ISO string.

        :param timestr:
            The time portion of an ISO string, without a separator

        :return:
            Returns a :class:`datetime.time` object
        rr,)r/r)r�timestrr1r
r
r�
parse_isotime�s
zisoparser.parse_isotimeTcCs|j||d�S)a
        Parse a valid ISO time zone string.

        See :func:`isoparser.isoparse` for details on supported formats.

        :param tzstr:
            A string representing an ISO time zone offset

        :param zero_as_utc:
            Whether to return :class:`dateutil.tz.tzutc` for zero-offset zones

        :return:
            Returns :class:`dateutil.tz.tzoffset` for offsets and
            :class:`dateutil.tz.tzutc` for ``Z`` and (if ``zero_as_utc`` is
            specified) offsets equivalent to UTC.
        )�zero_as_utc)�_parse_tzstr)r�tzstrr7r
r
r�parse_tzstr�szisoparser.parse_tzstr�-�:s
[\.,]([0-9]+)cCs.z|�|�WSty(|�|�YS0dSr)�_parse_isodate_commonr�_parse_isodate_uncommon)rr0r
r
rr.�szisoparser._parse_isodatecCst|�}gd�}|dkr td��t|dd��|d<d}||krH||fS|||d�|jk}|rj|d7}||dkr~td��t|||d��|d<|d7}||kr�|r�||fStd��|r�|||d�|jkr�td	��|d7}||dkr�td
��t|||d��|d<||dfS)N)r#r#r#��ISO string too shortrr#�zInvalid common monthzInvalid ISO formatzInvalid separator in ISO stringzInvalid common day)r&r�int�	_DATE_SEP)rr0�len_strr1r2�has_sepr
r
rr=�s6zisoparser._parse_isodate_commonc
Cstt|�dkrtd��t|dd��}|dd�|jk}d|}|||d�dkr�|d7}t|||d��}|d7}d}t|�|kr�|||d�|jk|kr�td��||7}t|||d��}|d7}|�|||�}n�t|�|d	kr�td
��t|||d	��}|d	7}|dk�s.|dt�|�k�rBtd
d�||���t|dd�t	|dd
�}|j
|j|jg}	|	|fS)Nr?r@r�r#�WrAz"Inconsistent use of dash separatorr+zInvalid ordinal dayimz {} for year {}r-)
r&rrBrC�_calculate_weekdate�calendarZisleapr3rr�yearZmonth�day)
rr0rJrEr2ZweeknoZdaynoZ	base_dateZordinal_dayr1r
r
rr>�s8
�z!isoparser._parse_isodate_uncommoncCs�d|krdks$ntd�|���d|kr8dksHntd�|���t|dd�}|t|��ddd	�}|dd
|d}|t|d	�S)a�
        Calculate the day of corresponding to the ISO year-week-day calendar.

        This function is effectively the inverse of
        :func:`datetime.date.isocalendar`.

        :param year:
            The year in the ISO calendar

        :param week:
            The week in the ISO calendar - range is [1, 53]

        :param day:
            The day in the ISO calendar - range is [1 (MON), 7 (SUN)]

        :return:
            Returns a :class:`datetime.date`
        r�6zInvalid week: {}�zInvalid weekday: {}r#r?rAr-�)rr3rrZisocalendar)rrJZweekrKZjan_4Zweek_1Zweek_offsetr
r
rrH)szisoparser._calculate_weekdatec	Cs�t|�}gd�}d}d}t|�dkr,td��|dkoD|dd�|jk}||k�rJ|dk�rJ|d7}|||d�d	vr�|�||d��|d<|}�qJ|dkr�t|||d��||<|d7}|r�||kr�|||d�|jkr�|d7}|dkrF|j�||d��}|�s
qF|�d�dd
�}t|�dd
t|�||<|t|���7}qF||k�r\td��|dd
k�r�tdd�|dd�D���r�td��|S)N)rrrrNr���rAzISO time too shortr+rFr#s-+Zz��
zUnused components in ISO stringr,css|]}|dkVqdS)rNr
)�.0Z	componentr
r
r�	<genexpr>urz+isoparser._parse_isotime.<locals>.<genexpr>r?z#Hour may only be 24 at 24:00:00.000)	r&r�	_TIME_SEPr8rB�_FRACTION_REGEX�match�group�any)	rr5rDr1r2�comprEZfracZus_strr
r
rr/JsB�
zisoparser._parse_isotimecCs|dks|dkrtjSt|�dvr*td��|dd�dkr@d}n|dd�d	krVd}ntd
��t|dd��}t|�dkr�d}n&t||dd�|jkr�dndd��}|r�|dkr�|dkr�tjS|d
kr�td��|dkr�td��t�d||d|d�SdS)N�Z�z>r+rFrPz0Time zone offset must be 1, 3, 5 or 6 charactersrr#r;rO�+zTime zone offset requires signr+r?�;z#Invalid minutes in time zone offset�z!Invalid hours in time zone offset�<)rZUTCr&rrBrTZtzoffset)rr9r7ZmultZhoursZminutesr
r
rr8zs(&zisoparser._parse_tzstr)N)T)T)�__name__�
__module__�__qualname__r*r"r	r4r6r:rCrT�re�compilerUr.r=r>rHr/r8r
r
r
rr
*s$

X


),!0)�__doc__rrrrrIZdateutilr�	functoolsrrcr�__all__r"�objectr
ZDEFAULT_ISOPARSERr	r
r
r
r�<module>sr

© 2025 Cubjrnet7