|
11 | 11 |
|
12 | 12 | import datetime |
13 | 13 | import sys |
14 | | -import time |
15 | | -from threading import RLock |
16 | 14 |
|
17 | 15 | if sys.platform == 'win32': |
18 | 16 | from babel.localtime._win32 import _get_localzone |
19 | 17 | else: |
20 | 18 | from babel.localtime._unix import _get_localzone |
21 | 19 |
|
22 | 20 |
|
23 | | -_cached_tz = None |
24 | | -_cache_lock = RLock() |
25 | | - |
26 | | -STDOFFSET = datetime.timedelta(seconds=-time.timezone) |
27 | | -if time.daylight: |
28 | | - DSTOFFSET = datetime.timedelta(seconds=-time.altzone) |
29 | | -else: |
30 | | - DSTOFFSET = STDOFFSET |
31 | | - |
32 | | -DSTDIFF = DSTOFFSET - STDOFFSET |
33 | | -ZERO = datetime.timedelta(0) |
34 | | - |
35 | | - |
36 | | -class _FallbackLocalTimezone(datetime.tzinfo): |
37 | | - |
38 | | - def utcoffset(self, dt: datetime.datetime) -> datetime.timedelta: |
39 | | - if self._isdst(dt): |
40 | | - return DSTOFFSET |
41 | | - else: |
42 | | - return STDOFFSET |
43 | | - |
44 | | - def dst(self, dt: datetime.datetime) -> datetime.timedelta: |
45 | | - if self._isdst(dt): |
46 | | - return DSTDIFF |
47 | | - else: |
48 | | - return ZERO |
49 | | - |
50 | | - def tzname(self, dt: datetime.datetime) -> str: |
51 | | - return time.tzname[self._isdst(dt)] |
52 | | - |
53 | | - def _isdst(self, dt: datetime.datetime) -> bool: |
54 | | - tt = (dt.year, dt.month, dt.day, |
55 | | - dt.hour, dt.minute, dt.second, |
56 | | - dt.weekday(), 0, -1) |
57 | | - stamp = time.mktime(tt) |
58 | | - tt = time.localtime(stamp) |
59 | | - return tt.tm_isdst > 0 |
| 21 | +# TODO(3.0): the offset constants are not part of the public API |
| 22 | +# and should be removed |
| 23 | +from babel.localtime._fallback import ( |
| 24 | + DSTDIFF, # noqa: F401 |
| 25 | + DSTOFFSET, # noqa: F401 |
| 26 | + STDOFFSET, # noqa: F401 |
| 27 | + ZERO, # noqa: F401 |
| 28 | + _FallbackLocalTimezone, |
| 29 | +) |
60 | 30 |
|
61 | 31 |
|
62 | 32 | def get_localzone() -> datetime.tzinfo: |
|
0 commit comments