HEX
Server: LiteSpeed
System: Linux us-phx-web1284.main-hosting.eu 4.18.0-553.109.1.lve.el8.x86_64 #1 SMP Thu Mar 5 20:23:46 UTC 2026 x86_64
User: u300739242 (300739242)
PHP: 8.2.30
Disabled: system, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail
Upload Files
File: //opt/alt/python37/lib/python3.7/site-packages/dateutil/parser/__pycache__/isoparser.cpython-37.pyc
B

�P�e�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
szt�d�fdd����t�tj�rhy��d��Wn6tk
rf}zd}t�t|�|�Wdd}~XYnX�|�f|�|�S)N�readcs�S)N�r)�str_inr�J/opt/alt/python37/lib/python3.7/site-packages/dateutil/parser/isoparser.py�<lambda>�z,_takes_ascii.<locals>.func.<locals>.<lambda>�asciiz5ISO-8601 strings should contain only ASCII characters)�getattr�
isinstance�six�	text_type�encode�UnicodeEncodeError�
raise_from�
ValueError)�selfr�args�kwargs�e�msg)�f)rr
�funcs"z_takes_ascii.<locals>.func)r)rrr)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|dk	r:t|�dks(t|�dks(|dkr0td��|�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�seprrr
�__init__+s
 
zisoparser.__init__cCs�|�|�\}}t|�|kr^|jdks:|||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)�days)�_parse_isodater$r&�_parse_isotimerrr)r�dt_str�
components�posrrr
r;sK zisoparser.isoparsecCs:|�|�\}}|t|�kr2tdd�|�d����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,r$r�format�decoder)rZdatestrr/r0rrr
�
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�timestrr/rrr
�
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�tzstrr6rrr
�parse_tzstr�szisoparser.parse_tzstr�-�:s
[\.,]([0-9]+)cCs*y
|�|�Stk
r$|�|�SXdS)N)�_parse_isodate_commonr�_parse_isodate_uncommon)rr.rrr
r,�s
zisoparser._parse_isodatecCst|�}dddg}|dkr"td��t|dd��|d<d}||krJ||fS|||d�|jk}|rl|d7}||dkr�td��t|||d��|d<|d7}||kr�|r�||fStd��|r�|||d�|jkr�td��|d7}||dkr�td	��t|||d��|d<||dfS)
Nr!�zISO string too shortr�zInvalid common monthzInvalid ISO formatzInvalid separator in ISO stringzInvalid common day)r$r�int�	_DATE_SEP)rr.�len_strr/r0�has_seprrr
r<�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>zISO string too shortr�r!�Wr?z"Inconsistent use of dash separatorr)zInvalid ordinal dayimz {} for year {})r+)
r$rr@rA�_calculate_weekdate�calendar�isleapr1rr�year�month�day)
rr.rIrCr0ZweeknoZdaynoZ	base_dateZordinal_dayr/rrr
r=�s6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>r?)r+�)rr1rr�isocalendar)rrI�weekrKZjan_4Zweek_1Zweek_offsetrrr
rF)szisoparser._calculate_weekdatec	Cs�t|�}dddddg}d}d}|dkr.td��d}�x:||k�rn|dk�rn|d7}|||d�dkr�|�||d��|d<|}P|dkr�|||d�|jkr�d	}|d7}n2|dkr�|r�|||d�|jkr�td
��|d7}|dk�r
t|||d��||<|d7}|dkr6|j�||d��}|�s.q6|�d�dd�}t|�d
dt|�||<|t|���7}q6W||k�r�td��|ddk�r�tdd�|dd�D���r�td��|S)Nr���r?zISO time too shortFrDr!s-+ZzTz#Inconsistent use of colon separatorr)��
zUnused components in ISO stringr*css|]}|dkVqdS)rNr)�.0�	componentrrr
�	<genexpr>zsz+isoparser._parse_isotime.<locals>.<genexpr>r>z#Hour may only be 24 at 24:00:00.000)	r$rr7�	_TIME_SEPr@�_FRACTION_REGEX�match�group�any)	rr4rBr/r0�comprC�fracZus_strrrr
r-JsH


zisoparser._parse_isotimecCs|dks|dkrtjSt|�dkr*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)rDrRz0Time zone offset must be 1, 3, 5 or 6 charactersrr!r:rQ�+zTime zone offset requires signr)r>�;z#Invalid minutes in time zone offset�z!Invalid hours in time zone offset�<)r�UTCr$rr@rW�tzoffset)rr8r6Zmult�hours�minutesrrr
r7s(&zisoparser._parse_tzstr)N)T)T)�__name__�
__module__�__qualname__r(r rr3r5r9rArW�re�compilerXr,r<r=rFr-r7rrrr
r	*s
Y
),!5)�__doc__rrrrrGZdateutilr�	functoolsrrkr�__all__r �objectr	ZDEFAULT_ISOPARSERrrrrr
�<module>	sw