1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
U
«ý°d±2ã@s ddlmZddlmZddlmZmZmZedƒZddgZdd„Z    e
edƒrZdd    d„Z nGd
d „d eƒZ dd d„Z d d„Z Gdd„deƒZGdd„deƒZdS)é)ÚPY2©Úwraps)ÚdatetimeÚ    timedeltaÚtzinfoÚtzname_in_python2Úenfoldcs$trtˆƒ‡fdd„ƒ}|SˆSdS)zžChange unicode output into bytestrings in Python 2
 
    tzname() API changed in Python 3. It used to return bytes, but was changed
    to unicode strings
    csˆ||Ž}|dk    r| ¡}|S©N)Úencode)ÚargsÚkwargsÚname©Únamefunc©úJd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\dateutil/tz/_common.pyÚadjust_encodings
z*tzname_in_python2.<locals>.adjust_encodingN)rr)rrrrrr s
ÚfoldécCs |j|d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)Údtrrrrr    %sc@s(eZdZdZdZdd„Zedd„ƒZdS)Ú_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
        rcOsvd}t||ƒD]&\}}||kr,td |¡ƒ‚|||<q|D]}||kr:t||ƒ||<q:| dd¡rh|jnt}|f|Ž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Ú microsecondrzDuplicate argument: {}rr)ÚzipÚ    TypeErrorÚformatÚgetattrÚgetÚ    __class__r)Úselfr r ÚargnamesÚargÚargnameZdt_classrrrrDs 
z_DatetimeWithFold.replacecCsdS)Nrr©r)rrrrbsz_DatetimeWithFold.foldN)Ú__name__Ú
__module__Ú __qualname__Ú__doc__Ú    __slots__rÚpropertyrrrrrr:s
rcCsLt|ddƒ|kr|S| ¡dd…}||j|jf7}|r@t|ŽSt|ŽSdS)rrrNé)r&Ú    timetupler"rrr)rrr rrrr    fscstˆƒ‡fdd„ƒ}|S)z
    The CPython version of ``fromutc`` checks that the input is a ``datetime``
    object and that ``self`` is attached as its ``tzinfo``.
    cs.t|tƒstdƒ‚|j|k    r$tdƒ‚ˆ||ƒS)Nú&fromutc() requires a datetime argumentúdt.tzinfo is not self)Ú
isinstancerr$rÚ
ValueError©r)r©ÚfrrÚfromutc‰s
 
 
z)_validate_fromutc_inputs.<locals>.fromutcr)r<r=rr;rÚ_validate_fromutc_inputs„sr>c@s<eZdZdZdd„Zdd„Zdd„Zdd    „Zed
d „ƒZ    d S) Ú_tzinfoz=
    Base class for all ``dateutil`` ``tzinfo`` objects.
    cCsV|j|d}t|dd}t|dd}| ¡| ¡k}|jdd|jddk}|oT| 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
        ©rrrrN)rr    Ú    utcoffset)r)rZwall_0Zwall_1Z same_offsetZsame_dtrrrÚ is_ambiguousšs    z_tzinfo.is_ambiguouscCs4| |¡r,||}t|| ¡| ¡kƒ}nd}|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)rCÚintrBÚdst)r)Údt_utcÚdt_wallZ
delta_wallÚ_foldrrrÚ _fold_status³s
 
z_tzinfo._fold_statuscCs t|ddƒS)Nrr)r&r:rrrrHÌsz _tzinfo._foldcCsh| ¡}|dkrtdƒ‚| ¡}|dkr0tdƒ‚||}||7}t|dd ¡}|dkr`tdƒ‚||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.
        Nz0fromutc() requires a non-None utcoffset() resultz*fromutc() requires a non-None dst() resultrrz;fromutc(): dt.dst gave inconsistent results; cannot convert)rBr9rEr    )r)rZdtoffZdtdstÚdeltarrrÚ_fromutcÏsz_tzinfo._fromutccCs"| |¡}| ||¡}t||dS)rJr)rLrIr    )r)rrGrHrrrr=ôs
 z_tzinfo.fromutcN)
r.r/r0r1rCrIrHrLr>r=rrrrr?•s%r?c@szeZdZdZdd„Zdd„Zdd„Zedd    „ƒZd
d „Z    d d „Z
dd„Z dd„Z e dd„ƒZdZdd„Zdd„ZejZdS)Ú 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
    cCs tdƒ‚dS)Nz%tzrangebase is an abstract base class)ÚNotImplementedErrorr-rrrÚ__init__!sztzrangebase.__init__cCs*| |¡}|dkrdS|r |jS|jSdSr
)Ú_isdstÚ _dst_offsetÚ _std_offset©r)rÚisdstrrrrB$s 
ztzrangebase.utcoffsetcCs(| |¡}|dkrdS|r |jStSdSr
)rPÚ_dst_base_offsetÚZEROrSrrrrE.s 
ztzrangebase.dstcCs| |¡r|jS|jSdSr
)rPZ    _dst_abbrZ    _std_abbrr:rrrÚtzname8s
ztzrangebase.tznamec
Cs¼t|tƒstdƒ‚|j|k    r$tdƒ‚| |j¡}|dkrF|| |¡S|\}}||j8}||j8}||f}|j    dd}| 
||¡}|r’||j }n
||j}t | o¬|  |¡ƒ}    t||    dS)z, Given a datetime in UTC, return local time r6r7NrAr)r8rr$rr9Ú transitionsrrBrRrÚ _naive_isdstrQrDrCr    )
r)rrXÚdstonÚdstoffZutc_transitionsrFrTrGrHrrrr=?s$
 
 
 
 
ztzrangebase.fromutccCsD|js
dS| |j¡\}}|jdd}||ko>||jkSS)r@FNrA)ÚhasdstrXrrrU)r)rÚstartÚendrrrrC`s
 ztzrangebase.is_ambiguouscCsh|js
dS|dkrdS| |j¡}|dkr.dS|jdd}| ||¡}|s`| |¡r`| |¡ S|SdS)NFrA)r\rXrrrYrCrH)r)rrXrTrrrrPvs    ztzrangebase._isdstcCsT|\}}|jdd}||kr6||ko.|kn}n||koH|kn }|S)NrAr)r)rrXrZr[rTrrrrY‹s  ztzrangebase._naive_isdstcCs |j|jSr
)rQrRr-rrrrU—sztzrangebase._dst_base_offsetNcCs
||k Sr
r)r)ÚotherrrrÚ__ne__sztzrangebase.__ne__cCs d|jjS)Nz%s(...))r(r.r-rrrÚ__repr__ sztzrangebase.__repr__)r.r/r0r1rOrBrErrWr=rCrPrYr3rUÚ__hash__r`raÚobjectÚ
__reduce__rrrrrM s 
 
 
! 
rMN)r)r)ÚsixrÚ    functoolsrrrrrVÚ__all__rÚhasattrr    rr>r?rMrrrrÚ<module>s  
 ,
v