]> git.ipfire.org Git - thirdparty/babel.git/commitdiff
Clean up babel.localtime (#952)
authorAarni Koskela <akx@iki.fi>
Wed, 25 Jan 2023 18:37:51 +0000 (20:37 +0200)
committerGitHub <noreply@github.com>
Wed, 25 Jan 2023 18:37:51 +0000 (20:37 +0200)
* Remove vestigial babel.localtime cache bits
* Give _FallbackLocalTimezone its own module

babel/localtime/__init__.py
babel/localtime/_fallback.py [new file with mode: 0644]
babel/util.py

index 1d65fb2070755926bf9efb1560da0f9ddc2d50f6..29577fa37168ad281974a37de3a4cd8dcf118fbf 100644 (file)
@@ -11,8 +11,6 @@
 
 import datetime
 import sys
-import time
-from threading import RLock
 
 if sys.platform == 'win32':
     from babel.localtime._win32 import _get_localzone
@@ -20,43 +18,15 @@ else:
     from babel.localtime._unix import _get_localzone
 
 
-_cached_tz = None
-_cache_lock = RLock()
-
-STDOFFSET = datetime.timedelta(seconds=-time.timezone)
-if time.daylight:
-    DSTOFFSET = datetime.timedelta(seconds=-time.altzone)
-else:
-    DSTOFFSET = STDOFFSET
-
-DSTDIFF = DSTOFFSET - STDOFFSET
-ZERO = datetime.timedelta(0)
-
-
-class _FallbackLocalTimezone(datetime.tzinfo):
-
-    def utcoffset(self, dt: datetime.datetime) -> datetime.timedelta:
-        if self._isdst(dt):
-            return DSTOFFSET
-        else:
-            return STDOFFSET
-
-    def dst(self, dt: datetime.datetime) -> datetime.timedelta:
-        if self._isdst(dt):
-            return DSTDIFF
-        else:
-            return ZERO
-
-    def tzname(self, dt: datetime.datetime) -> str:
-        return time.tzname[self._isdst(dt)]
-
-    def _isdst(self, dt: datetime.datetime) -> bool:
-        tt = (dt.year, dt.month, dt.day,
-              dt.hour, dt.minute, dt.second,
-              dt.weekday(), 0, -1)
-        stamp = time.mktime(tt)
-        tt = time.localtime(stamp)
-        return tt.tm_isdst > 0
+# TODO(3.0): the offset constants are not part of the public API
+#            and should be removed
+from babel.localtime._fallback import (
+    DSTDIFF,  # noqa: F401
+    DSTOFFSET,  # noqa: F401
+    STDOFFSET,  # noqa: F401
+    ZERO,  # noqa: F401
+    _FallbackLocalTimezone,
+)
 
 
 def get_localzone() -> datetime.tzinfo:
diff --git a/babel/localtime/_fallback.py b/babel/localtime/_fallback.py
new file mode 100644 (file)
index 0000000..836f596
--- /dev/null
@@ -0,0 +1,47 @@
+"""
+    babel.localtime._fallback
+    ~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    Emulated fallback local timezone when all else fails.
+
+    :copyright: (c) 2013-2023 by the Babel Team.
+    :license: BSD, see LICENSE for more details.
+"""
+
+import datetime
+import time
+
+STDOFFSET = datetime.timedelta(seconds=-time.timezone)
+if time.daylight:
+    DSTOFFSET = datetime.timedelta(seconds=-time.altzone)
+else:
+    DSTOFFSET = STDOFFSET
+
+DSTDIFF = DSTOFFSET - STDOFFSET
+ZERO = datetime.timedelta(0)
+
+
+class _FallbackLocalTimezone(datetime.tzinfo):
+
+    def utcoffset(self, dt: datetime.datetime) -> datetime.timedelta:
+        if self._isdst(dt):
+            return DSTOFFSET
+        else:
+            return STDOFFSET
+
+    def dst(self, dt: datetime.datetime) -> datetime.timedelta:
+        if self._isdst(dt):
+            return DSTDIFF
+        else:
+            return ZERO
+
+    def tzname(self, dt: datetime.datetime) -> str:
+        return time.tzname[self._isdst(dt)]
+
+    def _isdst(self, dt: datetime.datetime) -> bool:
+        tt = (dt.year, dt.month, dt.day,
+              dt.hour, dt.minute, dt.second,
+              dt.weekday(), 0, -1)
+        stamp = time.mktime(tt)
+        tt = time.localtime(stamp)
+        return tt.tm_isdst > 0
index a5403e6533924d2b31aa2ce49efb77ad04d097a8..100e37dd1b05a3a959de7e06f112fa41bfbd951e 100644 (file)
@@ -255,10 +255,10 @@ class FixedOffsetTimezone(datetime.tzinfo):
 
 # Export the localtime functionality here because that's
 # where it was in the past.
+# TODO(3.0): remove these aliases
 UTC = dates.UTC
 LOCALTZ = dates.LOCALTZ
 get_localzone = localtime.get_localzone
-
 STDOFFSET = localtime.STDOFFSET
 DSTOFFSET = localtime.DSTOFFSET
 DSTDIFF = localtime.DSTDIFF