Skip to content

Commit 2c1875e

Browse files
authored
Clean up babel.localtime (#952)
* Remove vestigial babel.localtime cache bits * Give _FallbackLocalTimezone its own module
1 parent 79bcdf2 commit 2c1875e

File tree

3 files changed

+57
-40
lines changed

3 files changed

+57
-40
lines changed

babel/localtime/__init__.py

Lines changed: 9 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -11,52 +11,22 @@
1111

1212
import datetime
1313
import sys
14-
import time
15-
from threading import RLock
1614

1715
if sys.platform == 'win32':
1816
from babel.localtime._win32 import _get_localzone
1917
else:
2018
from babel.localtime._unix import _get_localzone
2119

2220

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+
)
6030

6131

6232
def get_localzone() -> datetime.tzinfo:

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)