Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/babel/localtime/_fallback.py: 52%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

23 statements  

1""" 

2babel.localtime._fallback 

3~~~~~~~~~~~~~~~~~~~~~~~~~ 

4 

5Emulated fallback local timezone when all else fails. 

6 

7:copyright: (c) 2013-2025 by the Babel Team. 

8:license: BSD, see LICENSE for more details. 

9""" 

10 

11import datetime 

12import time 

13 

14STDOFFSET = datetime.timedelta(seconds=-time.timezone) 

15DSTOFFSET = datetime.timedelta(seconds=-time.altzone) if time.daylight else STDOFFSET 

16 

17DSTDIFF = DSTOFFSET - STDOFFSET 

18ZERO = datetime.timedelta(0) 

19 

20 

21class _FallbackLocalTimezone(datetime.tzinfo): 

22 def utcoffset(self, dt: datetime.datetime) -> datetime.timedelta: 

23 if self._isdst(dt): 

24 return DSTOFFSET 

25 else: 

26 return STDOFFSET 

27 

28 def dst(self, dt: datetime.datetime) -> datetime.timedelta: 

29 if self._isdst(dt): 

30 return DSTDIFF 

31 else: 

32 return ZERO 

33 

34 def tzname(self, dt: datetime.datetime) -> str: 

35 return time.tzname[self._isdst(dt)] 

36 

37 def _isdst(self, dt: datetime.datetime) -> bool: 

38 tt = (dt.year, dt.month, dt.day, 

39 dt.hour, dt.minute, dt.second, 

40 dt.weekday(), 0, -1) # fmt: skip 

41 stamp = time.mktime(tt) 

42 tt = time.localtime(stamp) 

43 return tt.tm_isdst > 0