Coverage for adhoc-cicd-odoo-odoo / odoo / _monkeypatches / pytz.py: 82%

9 statements  

« prev     ^ index     » next       coverage.py v7.13.4, created at 2026-03-09 18:05 +0000

1# Part of Odoo. See LICENSE file for full copyright and licensing details. 

2""" 

3In ubuntu noble, some timezone where removed leading to errors when trying to assign/access them. 

4 

5This was partially fixed in the code by removing all references to old timezones but one issue remains: 

6if a database contains timezones that are not defined in the os, the resolution will fail and break 

7at runtime. 

8 

9This patches proposes to alter timezone to fallback on the new canonical timezone if the timezone was removed. 

10 

11This list was generated by checking all symlink in /usr/share/zoneinfo in ubuntu 22.04 that disapeared in ubuntu 24.04 

12 

13This solutions will work when moving a database from one server to another, even without migration. 

14This list could be improved for other purposes. 

15 

16""" 

17 

18import pytz 

19 

20_tz_mapping = { 

21 "Africa/Asmera": "Africa/Nairobi", 

22 "America/Argentina/ComodRivadavia": "America/Argentina/Catamarca", 

23 "America/Buenos_Aires": "America/Argentina/Buenos_Aires", 

24 "America/Cordoba": "America/Argentina/Cordoba", 

25 "America/Fort_Wayne": "America/Indiana/Indianapolis", 

26 "America/Indianapolis": "America/Indiana/Indianapolis", 

27 "America/Jujuy": "America/Argentina/Jujuy", 

28 "America/Knox_IN": "America/Indiana/Knox", 

29 "America/Louisville": "America/Kentucky/Louisville", 

30 "America/Mendoza": "America/Argentina/Mendoza", 

31 "America/Rosario": "America/Argentina/Cordoba", 

32 "Antarctica/South_Pole": "Pacific/Auckland", 

33 "Asia/Ashkhabad": "Asia/Ashgabat", 

34 "Asia/Calcutta": "Asia/Kolkata", 

35 "Asia/Chungking": "Asia/Shanghai", 

36 "Asia/Dacca": "Asia/Dhaka", 

37 "Asia/Katmandu": "Asia/Kathmandu", 

38 "Asia/Macao": "Asia/Macau", 

39 "Asia/Rangoon": "Asia/Yangon", 

40 "Asia/Saigon": "Asia/Ho_Chi_Minh", 

41 "Asia/Thimbu": "Asia/Thimphu", 

42 "Asia/Ujung_Pandang": "Asia/Makassar", 

43 "Asia/Ulan_Bator": "Asia/Ulaanbaatar", 

44 "Atlantic/Faeroe": "Atlantic/Faroe", 

45 "Australia/ACT": "Australia/Sydney", 

46 "Australia/LHI": "Australia/Lord_Howe", 

47 "Australia/North": "Australia/Darwin", 

48 "Australia/NSW": "Australia/Sydney", 

49 "Australia/Queensland": "Australia/Brisbane", 

50 "Australia/South": "Australia/Adelaide", 

51 "Australia/Tasmania": "Australia/Hobart", 

52 "Australia/Victoria": "Australia/Melbourne", 

53 "Australia/West": "Australia/Perth", 

54 "Brazil/Acre": "America/Rio_Branco", 

55 "Brazil/DeNoronha": "America/Noronha", 

56 "Brazil/East": "America/Sao_Paulo", 

57 "Brazil/West": "America/Manaus", 

58 "Canada/Atlantic": "America/Halifax", 

59 "Canada/Central": "America/Winnipeg", 

60 "Canada/Eastern": "America/Toronto", 

61 "Canada/Mountain": "America/Edmonton", 

62 "Canada/Newfoundland": "America/St_Johns", 

63 "Canada/Pacific": "America/Vancouver", 

64 "Canada/Saskatchewan": "America/Regina", 

65 "Canada/Yukon": "America/Whitehorse", 

66 "Chile/Continental": "America/Santiago", 

67 "Chile/EasterIsland": "Pacific/Easter", 

68 "Cuba": "America/Havana", 

69 "Egypt": "Africa/Cairo", 

70 "Eire": "Europe/Dublin", 

71 "Europe/Kiev": "Europe/Kyiv", 

72 "Europe/Uzhgorod": "Europe/Kyiv", 

73 "Europe/Zaporozhye": "Europe/Kyiv", 

74 "GB": "Europe/London", 

75 "GB-Eire": "Europe/London", 

76 "GMT+0": "Etc/GMT", 

77 "GMT-0": "Etc/GMT", 

78 "GMT0": "Etc/GMT", 

79 "Greenwich": "Etc/GMT", 

80 "Hongkong": "Asia/Hong_Kong", 

81 "Iceland": "Africa/Abidjan", 

82 "Iran": "Asia/Tehran", 

83 "Israel": "Asia/Jerusalem", 

84 "Jamaica": "America/Jamaica", 

85 "Japan": "Asia/Tokyo", 

86 "Kwajalein": "Pacific/Kwajalein", 

87 "Libya": "Africa/Tripoli", 

88 "Mexico/BajaNorte": "America/Tijuana", 

89 "Mexico/BajaSur": "America/Mazatlan", 

90 "Mexico/General": "America/Mexico_City", 

91 "Navajo": "America/Denver", 

92 "NZ": "Pacific/Auckland", 

93 "NZ-CHAT": "Pacific/Chatham", 

94 "Pacific/Enderbury": "Pacific/Kanton", 

95 "Pacific/Ponape": "Pacific/Guadalcanal", 

96 "Pacific/Truk": "Pacific/Port_Moresby", 

97 "Poland": "Europe/Warsaw", 

98 "Portugal": "Europe/Lisbon", 

99 "PRC": "Asia/Shanghai", 

100 "ROC": "Asia/Taipei", 

101 "ROK": "Asia/Seoul", 

102 "Singapore": "Asia/Singapore", 

103 "Türkiye": "Europe/Istanbul", 

104 "UCT": "Etc/UTC", 

105 "Universal": "Etc/UTC", 

106 "US/Alaska": "America/Anchorage", 

107 "US/Aleutian": "America/Adak", 

108 "US/Arizona": "America/Phoenix", 

109 "US/Central": "America/Chicago", 

110 "US/Eastern": "America/New_York", 

111 "US/East-Indiana": "America/Indiana/Indianapolis", 

112 "US/Hawaii": "Pacific/Honolulu", 

113 "US/Indiana-Starke": "America/Indiana/Knox", 

114 "US/Michigan": "America/Detroit", 

115 "US/Mountain": "America/Denver", 

116 "US/Pacific": "America/Los_Angeles", 

117 "US/Samoa": "Pacific/Pago_Pago", 

118 "W-SU": "Europe/Moscow", 

119 "Zulu": "Etc/UTC", 

120} 

121 

122original_pytz_timezone = pytz.timezone 

123 

124 

125def patch_module(): 

126 def timezone(name): 

127 if name not in pytz.all_timezones_set and name in _tz_mapping: 127 ↛ 128line 127 didn't jump to line 128 because the condition on line 127 was never true

128 name = _tz_mapping[name] 

129 return original_pytz_timezone(name) 

130 

131 pytz.timezone = timezone