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

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

22 statements  

1""" 

2 babel.localtime._fallback 

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

4 

5 Emulated fallback local timezone when all else fails. 

6 

7 :copyright: (c) 2013-2024 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 

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

24 if self._isdst(dt): 

25 return DSTOFFSET 

26 else: 

27 return STDOFFSET 

28 

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

30 if self._isdst(dt): 

31 return DSTDIFF 

32 else: 

33 return ZERO 

34 

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

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

37 

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

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

40 dt.hour, dt.minute, dt.second, 

41 dt.weekday(), 0, -1) 

42 stamp = time.mktime(tt) 

43 tt = time.localtime(stamp) 

44 return tt.tm_isdst > 0