Skip to content

Commit a3e92dd

Browse files
committed
Give _FallbackLocalTimezone its own module
1 parent e66f74b commit a3e92dd

File tree

3 files changed

+59
-36
lines changed

3 files changed

+59
-36
lines changed

babel/localtime/__init__.py

Lines changed: 11 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -11,47 +11,21 @@
1111

1212
import datetime
1313
import sys
14-
import time
1514

1615
if sys.platform == 'win32':
1716
from babel.localtime._win32 import _get_localzone
1817
else:
1918
from babel.localtime._unix import _get_localzone
2019

21-
STDOFFSET = datetime.timedelta(seconds=-time.timezone)
22-
if time.daylight:
23-
DSTOFFSET = datetime.timedelta(seconds=-time.altzone)
24-
else:
25-
DSTOFFSET = STDOFFSET
26-
27-
DSTDIFF = DSTOFFSET - STDOFFSET
28-
ZERO = datetime.timedelta(0)
29-
30-
31-
class _FallbackLocalTimezone(datetime.tzinfo):
32-
33-
def utcoffset(self, dt: datetime.datetime) -> datetime.timedelta:
34-
if self._isdst(dt):
35-
return DSTOFFSET
36-
else:
37-
return STDOFFSET
38-
39-
def dst(self, dt: datetime.datetime) -> datetime.timedelta:
40-
if self._isdst(dt):
41-
return DSTDIFF
42-
else:
43-
return ZERO
44-
45-
def tzname(self, dt: datetime.datetime) -> str:
46-
return time.tzname[self._isdst(dt)]
47-
48-
def _isdst(self, dt: datetime.datetime) -> bool:
49-
tt = (dt.year, dt.month, dt.day,
50-
dt.hour, dt.minute, dt.second,
51-
dt.weekday(), 0, -1)
52-
stamp = time.mktime(tt)
53-
tt = time.localtime(stamp)
54-
return tt.tm_isdst > 0
20+
from babel.localtime._fallback import (
21+
_FallbackLocalTimezone,
22+
# TODO(3.0): these are not part of the public API
23+
# and should be removed
24+
STDOFFSET,
25+
DSTOFFSET,
26+
DSTDIFF,
27+
ZERO,
28+
)
5529

5630

5731
def get_localzone() -> datetime.tzinfo:
@@ -65,4 +39,6 @@ def get_localzone() -> datetime.tzinfo:
6539
try:
6640
LOCALTZ = get_localzone()
6741
except LookupError:
42+
from babel.localtime._fallback import _FallbackLocalTimezone
43+
6844
LOCALTZ = _FallbackLocalTimezone()

babel/localtime/_fallback.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
"""
2+
babel.localtime._fallback
3+
~~~~~~~~~~~~~~~~~~~~~~~~~
4+
5+
Emulated fallback local timezone when all else fails.
6+
7+
:copyright: (c) 2013-2023 by the Babel Team.
8+
:license: BSD, see LICENSE for more details.
9+
"""
10+
11+
import datetime
12+
import time
13+
14+
STDOFFSET = datetime.timedelta(seconds=-time.timezone)
15+
if time.daylight:
16+
DSTOFFSET = datetime.timedelta(seconds=-time.altzone)
17+
else:
18+
DSTOFFSET = STDOFFSET
19+
20+
DSTDIFF = DSTOFFSET - STDOFFSET
21+
ZERO = datetime.timedelta(0)
22+
23+
24+
class _FallbackLocalTimezone(datetime.tzinfo):
25+
26+
def utcoffset(self, dt: datetime.datetime) -> datetime.timedelta:
27+
if self._isdst(dt):
28+
return DSTOFFSET
29+
else:
30+
return STDOFFSET
31+
32+
def dst(self, dt: datetime.datetime) -> datetime.timedelta:
33+
if self._isdst(dt):
34+
return DSTDIFF
35+
else:
36+
return ZERO
37+
38+
def tzname(self, dt: datetime.datetime) -> str:
39+
return time.tzname[self._isdst(dt)]
40+
41+
def _isdst(self, dt: datetime.datetime) -> bool:
42+
tt = (dt.year, dt.month, dt.day,
43+
dt.hour, dt.minute, dt.second,
44+
dt.weekday(), 0, -1)
45+
stamp = time.mktime(tt)
46+
tt = time.localtime(stamp)
47+
return tt.tm_isdst > 0

babel/util.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,10 +255,10 @@ def dst(self, dt: datetime.datetime) -> datetime.timedelta:
255255

256256
# Export the localtime functionality here because that's
257257
# where it was in the past.
258+
# TODO(3.0): remove these aliases
258259
UTC = dates.UTC
259260
LOCALTZ = dates.LOCALTZ
260261
get_localzone = localtime.get_localzone
261-
262262
STDOFFSET = localtime.STDOFFSET
263263
DSTOFFSET = localtime.DSTOFFSET
264264
DSTDIFF = localtime.DSTDIFF

0 commit comments

Comments
 (0)