
    x7#h2                         d dl mZ d dlmZ d dlmZmZmZ  ed       ZddgZd Z	 e
ed      rddZn G d	 d
e      ZddZd Z G d de      Z G d de      Zy)    )PY2wraps)datetime	timedeltatzinfotzname_in_python2enfoldc                 >     t         rt                fd       }|S  S )zChange unicode output into bytestrings in Python 2

    tzname() API changed in Python 3. It used to return bytes, but was changed
    to unicode strings
    c                  <     | i |}||j                         }|S N)encode)argskwargsnamenamefuncs      S/var/www/api/v1/venv_getwork_v1/lib/python3.12/site-packages/dateutil/tz/_common.pyadjust_encodingz*tzname_in_python2.<locals>.adjust_encoding   s(    T,V,D{{}K    )r   r   )r   r   s   ` r   r	   r	      s+     	x	 
	 r   foldc                 &    | j                  |      S )  
        Provides a unified interface for assigning the ``fold`` attribute to
        datetimes both before and after the implementation of PEP-495.

        :param fold:
            The value for the ``fold`` attribute in the returned datetime. This
            should be either 0 or 1.

        :return:
            Returns an object for which ``getattr(dt, 'fold', 0)`` returns
            ``fold`` for all versions of Python. In versions prior to
            Python 3.6, this is a ``_DatetimeWithFold`` object, which is a
            subclass of :py:class:`datetime.datetime` with the ``fold``
            attribute added, if ``fold`` is 1.

        .. versionadded:: 2.6.0
        r   replace)dtr   s     r   r
   r
   %   s    $ zztz$$r   c                   *    e Zd ZdZdZd Zed        Zy)_DatetimeWithFoldz
        This is a class designed to provide a PEP 495-compliant interface for
        Python versions before 3.6. It is used only for dates in a fold, so
        the ``fold`` attribute is fixed at ``1``.

        .. versionadded:: 2.6.0
         c                    d}t        ||      D ](  \  }}||v rt        dj                  |            |||<   * |D ]  }||vst        | |      ||<    |j	                  dd      r| j
                  nt        } |di |S )a  
            Return a datetime with the same attributes, except for those
            attributes given new values by whichever keyword arguments are
            specified. Note that tzinfo=None can be specified to create a naive
            datetime from an aware datetime with no conversion of date and time
            data.

            This is reimplemented in ``_DatetimeWithFold`` because pypy3 will
            return a ``datetime.datetime`` even if ``fold`` is unchanged.
            )yearmonthdayhourminutesecondmicrosecondr   zDuplicate argument: {}r      r   )zip	TypeErrorformatgetattrget	__class__r   )selfr   r   argnamesargargnamedt_classs          r   r   z_DatetimeWithFold.replaceD   s    H
 !$D( 3Wf$#$<$C$CG$LMM"%w	 !4 $&(&-dG&<F7O $ *0FA)>t~~HH%f%%r   c                      y)Nr(   r   r/   s    r   r   z_DatetimeWithFold.foldb   s    r   N)__name__
__module____qualname____doc__	__slots__r   propertyr   r   r   r   r   r   :   s'    	 		&< 
	 
	r   r   c                     t        | dd      |k(  r| S | j                         dd }|| j                  | j                  fz  }|rt	        | S t        | S )r   r   r   N   )r,   	timetupler'   r   r   r   )r   r   r   s      r   r
   r
   f   s[    $ 2vq!T)I||~bq!++$d++T?"r   c                 .     t                fd       }|S )z
    The CPython version of ``fromutc`` checks that the input is a ``datetime``
    object and that ``self`` is attached as its ``tzinfo``.
    c                 ~    t        |t              st        d      |j                  | urt	        d       | |      S )N&fromutc() requires a datetime argumentdt.tzinfo is not self)
isinstancer   r*   r   
ValueError)r/   r   fs     r   fromutcz)_validate_fromutc_inputs.<locals>.fromutc   s=    "h'DEE99D 455r{r   r   )rE   rF   s   ` r   _validate_fromutc_inputsrG      s"    
 1X  Nr   c                   8    e Zd ZdZd Zd Zd Zd Zed        Z	y)_tzinfoz=
    Base class for all ``dateutil`` ``tzinfo`` objects.
    c                     |j                  |       }t        |d      }t        |d      }|j                         |j                         k(  }|j                  d      |j                  d      k(  }|xr | S )6  
        Whether or not the "wall time" of a given datetime is ambiguous in this
        zone.

        :param dt:
            A :py:class:`datetime.datetime`, naive or time zone aware.


        :return:
            Returns ``True`` if ambiguous, ``False`` otherwise.

        .. versionadded:: 2.6.0
        r   r   r   r(   N)r   r
   	utcoffset)r/   r   wall_0wall_1same_offsetsame_dts         r   is_ambiguousz_tzinfo.is_ambiguous   su     ZZtZ$##&&(F,<,<,>>...-t1LL*{?*r   c                     | j                  |      r4||z
  }t        ||j                         |j                         z
  k(        }|S d}|S )a  
        Determine the fold status of a "wall" datetime, given a representation
        of the same datetime as a (naive) UTC datetime. This is calculated based
        on the assumption that ``dt.utcoffset() - dt.dst()`` is constant for all
        datetimes, and that this offset is the actual number of hours separating
        ``dt_utc`` and ``dt_wall``.

        :param dt_utc:
            Representation of the datetime as UTC

        :param dt_wall:
            Representation of the datetime as "wall time". This parameter must
            either have a `fold` attribute or have a fold-naive
            :class:`datetime.tzinfo` attached, otherwise the calculation may
            fail.
        r   )rR   intrM   dst)r/   dt_utcdt_wall
delta_wall_folds        r   _fold_statusz_tzinfo._fold_status   sR    " W% 6)J
v'7'7'9FJJL'HIJE  Er   c                     t        |dd      S )Nr   r   )r,   r/   r   s     r   rY   z_tzinfo._fold   s    r61%%r   c                     |j                         }|t        d      |j                         }|t        d      ||z
  }||z  }t        |d      j                         }|t        d      ||z   S )  
        Given a timezone-aware datetime in a given timezone, calculates a
        timezone-aware datetime in a new timezone.

        Since this is the one time that we *know* we have an unambiguous
        datetime object, we take this opportunity to determine whether the
        datetime is ambiguous and in a "fold" state (e.g. if it's the first
        occurrence, chronologically, of the ambiguous datetime).

        :param dt:
            A timezone-aware :class:`datetime.datetime` object.
        z0fromutc() requires a non-None utcoffset() resultz*fromutc() requires a non-None dst() resultr(   r   z;fromutc(): dt.dst gave inconsistent results; cannot convert)rM   rD   rU   r
   )r/   r   dtoffdtdstdeltas        r   _fromutcz_tzinfo._fromutc   s     = & ' ' =IJJ
e r"&&(= 7 8 8Ezr   c                 b    | j                  |      }| j                  ||      }t        ||      S )r^   r   )rb   rZ   r
   )r/   r   rW   rY   s       r   rF   z_tzinfo.fromutc   s5     --# !!"g. gE**r   N)
r6   r7   r8   r9   rR   rZ   rY   rb   rG   rF   r   r   r   rI   rI      s0    +22&#J + +r   rI   c                       e Zd ZdZd Zd Zd Zed        Zd Z	d Z
d Zd	 Zed
        ZdZd Zd Zej&                  Zy)tzrangebasea  
    This is an abstract base class for time zones represented by an annual
    transition into and out of DST. Child classes should implement the following
    methods:

        * ``__init__(self, *args, **kwargs)``
        * ``transitions(self, year)`` - this is expected to return a tuple of
          datetimes representing the DST on and off transitions in standard
          time.

    A fully initialized ``tzrangebase`` subclass should also provide the
    following attributes:
        * ``hasdst``: Boolean whether or not the zone uses DST.
        * ``_dst_offset`` / ``_std_offset``: :class:`datetime.timedelta` objects
          representing the respective UTC offsets.
        * ``_dst_abbr`` / ``_std_abbr``: Strings representing the timezone short
          abbreviations in DST and STD, respectively.
        * ``_hasdst``: Whether or not the zone has DST.

    .. versionadded:: 2.6.0
    c                     t        d      )Nz%tzrangebase is an abstract base class)NotImplementedErrorr5   s    r   __init__ztzrangebase.__init__!  s    !"IJJr   c                 ^    | j                  |      }|y |r| j                  S | j                  S r   )_isdst_dst_offset_std_offsetr/   r   isdsts      r   rM   ztzrangebase.utcoffset$  s2    B=######r   c                 R    | j                  |      }|y |r| j                  S t        S r   )rj   _dst_base_offsetZEROrm   s      r   rU   ztzrangebase.dst.  s+    B=(((Kr   c                 T    | j                  |      r| j                  S | j                  S r   )rj   	_dst_abbr	_std_abbrr\   s     r   tznameztzrangebase.tzname8  s!    ;;r?>>!>>!r   c                    t        |t              st        d      |j                  | urt	        d      | j                  |j                        }||| j                  |      z   S |\  }}|| j                  z  }|| j                  z  }||f}|j                  d      }| j                  ||      }|r|| j                  z   }n|| j                  z   }t        | xr | j                  |            }	t        ||	      S )z, Given a datetime in UTC, return local time rA   rB   NrL   r   )rC   r   r*   r   rD   transitionsr!   rM   rl   r   _naive_isdstrk   rT   rR   r
   )
r/   r   rw   dstondstoffutc_transitionsrV   rn   rW   rY   s
             r   rF   ztzrangebase.fromutc?  s   "h'DEE99D 455 &&rww/r*** $v!!!$""" &/4(!!&/:4+++G4+++GI<$"3"3G"<=gE**r   c                     | j                   sy| j                  |j                        \  }}|j                  d      }||cxk  xr || j                  z   k  S c S )rK   FNrL   )hasdstrw   r!   r   rp   )r/   r   startends       r   rR   ztzrangebase.is_ambiguous`  sW     {{%%bgg.
sZZtZ$r7C$"7"777878r   c                     | j                   sy|y | j                  |j                        }|y|j                  d       }| j	                  ||      }|s#| j                  |      r| j                  |       S |S )NFrL   )r}   rw   r!   r   rx   rR   rY   )r/   r   rw   rn   s       r   rj   ztzrangebase._isdstv  s{    {{Z&&rww/ZZtZ$!!"k2 **2.zz"~%%Lr   c                     |\  }}|j                  d       }||k  r||cxk  xr |k  }|S c }|S ||cxk  xr |k  nc  }|S )NrL   r   )r/   r   rw   ry   rz   rn   s         r   rx   ztzrangebase._naive_isdst  s_    #vZZtZ$6>R(&(E 	 )E  ",u,,Er   c                 4    | j                   | j                  z
  S r   )rk   rl   r5   s    r   rp   ztzrangebase._dst_base_offset  s    $"2"222r   Nc                     | |k(   S r   r   )r/   others     r   __ne__ztzrangebase.__ne__  s    EM""r   c                 4    d| j                   j                  z  S )Nz%s(...))r.   r6   r5   s    r   __repr__ztzrangebase.__repr__  s    4>>2222r   )r6   r7   r8   r9   rh   rM   rU   r	   ru   rF   rR   rj   rx   r;   rp   __hash__r   r   object
__reduce__r   r   r   re   re     sr    *K$ " "+B9,*
 3 3 H#3 ""Jr   re   N)r(   )sixr   	functoolsr   r   r   r   rq   __all__r	   hasattrr
   r   rG   rI   re   r   r   r   <module>r      sp      0 0 |
), 8V%**H *X#<"s+f s+lX#' X#r   