133 lines
4.8 KiB
Python
133 lines
4.8 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
"""
|
|
In ubuntu noble, some timezone where removed leading to errors when trying to assign/access them.
|
|
|
|
This was partially fixed in the code by removing all references to old timezones but one issue remains:
|
|
if a database contains timezones that are not defined in the os, the resolution will fail and break
|
|
at runtime.
|
|
|
|
This patches proposes to alter timezone to fallback on the new canonical timezone if the timezone was removed.
|
|
|
|
This list was generated by checking all symlink in /usr/share/zoneinfo in ubuntu 22.04 that disapeared in ubuntu 24.04
|
|
|
|
This solutions will work when moving a database from one server to another, even without migration.
|
|
This list could be improved for other purposes.
|
|
|
|
"""
|
|
|
|
import pytz
|
|
|
|
_tz_mapping = {
|
|
"Africa/Asmera": "Africa/Nairobi",
|
|
"America/Argentina/ComodRivadavia": "America/Argentina/Catamarca",
|
|
"America/Buenos_Aires": "America/Argentina/Buenos_Aires",
|
|
"America/Cordoba": "America/Argentina/Cordoba",
|
|
"America/Fort_Wayne": "America/Indiana/Indianapolis",
|
|
"America/Indianapolis": "America/Indiana/Indianapolis",
|
|
"America/Jujuy": "America/Argentina/Jujuy",
|
|
"America/Knox_IN": "America/Indiana/Knox",
|
|
"America/Louisville": "America/Kentucky/Louisville",
|
|
"America/Mendoza": "America/Argentina/Mendoza",
|
|
"America/Rosario": "America/Argentina/Cordoba",
|
|
"Antarctica/South_Pole": "Pacific/Auckland",
|
|
"Asia/Ashkhabad": "Asia/Ashgabat",
|
|
"Asia/Calcutta": "Asia/Kolkata",
|
|
"Asia/Chungking": "Asia/Shanghai",
|
|
"Asia/Dacca": "Asia/Dhaka",
|
|
"Asia/Katmandu": "Asia/Kathmandu",
|
|
"Asia/Macao": "Asia/Macau",
|
|
"Asia/Rangoon": "Asia/Yangon",
|
|
"Asia/Saigon": "Asia/Ho_Chi_Minh",
|
|
"Asia/Thimbu": "Asia/Thimphu",
|
|
"Asia/Ujung_Pandang": "Asia/Makassar",
|
|
"Asia/Ulan_Bator": "Asia/Ulaanbaatar",
|
|
"Atlantic/Faeroe": "Atlantic/Faroe",
|
|
"Australia/ACT": "Australia/Sydney",
|
|
"Australia/LHI": "Australia/Lord_Howe",
|
|
"Australia/North": "Australia/Darwin",
|
|
"Australia/NSW": "Australia/Sydney",
|
|
"Australia/Queensland": "Australia/Brisbane",
|
|
"Australia/South": "Australia/Adelaide",
|
|
"Australia/Tasmania": "Australia/Hobart",
|
|
"Australia/Victoria": "Australia/Melbourne",
|
|
"Australia/West": "Australia/Perth",
|
|
"Brazil/Acre": "America/Rio_Branco",
|
|
"Brazil/DeNoronha": "America/Noronha",
|
|
"Brazil/East": "America/Sao_Paulo",
|
|
"Brazil/West": "America/Manaus",
|
|
"Canada/Atlantic": "America/Halifax",
|
|
"Canada/Central": "America/Winnipeg",
|
|
"Canada/Eastern": "America/Toronto",
|
|
"Canada/Mountain": "America/Edmonton",
|
|
"Canada/Newfoundland": "America/St_Johns",
|
|
"Canada/Pacific": "America/Vancouver",
|
|
"Canada/Saskatchewan": "America/Regina",
|
|
"Canada/Yukon": "America/Whitehorse",
|
|
"Chile/Continental": "America/Santiago",
|
|
"Chile/EasterIsland": "Pacific/Easter",
|
|
"Cuba": "America/Havana",
|
|
"Egypt": "Africa/Cairo",
|
|
"Eire": "Europe/Dublin",
|
|
"Europe/Kiev": "Europe/Kyiv",
|
|
"Europe/Uzhgorod": "Europe/Kyiv",
|
|
"Europe/Zaporozhye": "Europe/Kyiv",
|
|
"GB": "Europe/London",
|
|
"GB-Eire": "Europe/London",
|
|
"GMT+0": "Etc/GMT",
|
|
"GMT-0": "Etc/GMT",
|
|
"GMT0": "Etc/GMT",
|
|
"Greenwich": "Etc/GMT",
|
|
"Hongkong": "Asia/Hong_Kong",
|
|
"Iceland": "Africa/Abidjan",
|
|
"Iran": "Asia/Tehran",
|
|
"Israel": "Asia/Jerusalem",
|
|
"Jamaica": "America/Jamaica",
|
|
"Japan": "Asia/Tokyo",
|
|
"Kwajalein": "Pacific/Kwajalein",
|
|
"Libya": "Africa/Tripoli",
|
|
"Mexico/BajaNorte": "America/Tijuana",
|
|
"Mexico/BajaSur": "America/Mazatlan",
|
|
"Mexico/General": "America/Mexico_City",
|
|
"Navajo": "America/Denver",
|
|
"NZ": "Pacific/Auckland",
|
|
"NZ-CHAT": "Pacific/Chatham",
|
|
"Pacific/Enderbury": "Pacific/Kanton",
|
|
"Pacific/Ponape": "Pacific/Guadalcanal",
|
|
"Pacific/Truk": "Pacific/Port_Moresby",
|
|
"Poland": "Europe/Warsaw",
|
|
"Portugal": "Europe/Lisbon",
|
|
"PRC": "Asia/Shanghai",
|
|
"ROC": "Asia/Taipei",
|
|
"ROK": "Asia/Seoul",
|
|
"Singapore": "Asia/Singapore",
|
|
"Turkey": "Europe/Istanbul",
|
|
"UCT": "Etc/UTC",
|
|
"Universal": "Etc/UTC",
|
|
"US/Alaska": "America/Anchorage",
|
|
"US/Aleutian": "America/Adak",
|
|
"US/Arizona": "America/Phoenix",
|
|
"US/Central": "America/Chicago",
|
|
"US/Eastern": "America/New_York",
|
|
"US/East-Indiana": "America/Indiana/Indianapolis",
|
|
"US/Hawaii": "Pacific/Honolulu",
|
|
"US/Indiana-Starke": "America/Indiana/Knox",
|
|
"US/Michigan": "America/Detroit",
|
|
"US/Mountain": "America/Denver",
|
|
"US/Pacific": "America/Los_Angeles",
|
|
"US/Samoa": "Pacific/Pago_Pago",
|
|
"W-SU": "Europe/Moscow",
|
|
"Zulu": "Etc/UTC",
|
|
}
|
|
|
|
|
|
original_pytz_timezone = pytz.timezone
|
|
|
|
|
|
def timezone(name):
|
|
if name not in pytz.all_timezones_set and name in _tz_mapping:
|
|
name = _tz_mapping[name]
|
|
return original_pytz_timezone(name)
|
|
|
|
|
|
pytz.timezone = timezone
|