From 68b78ffaa8cb18e5d5652e8a99bfefa28339e50f Mon Sep 17 00:00:00 2001 From: David Gonzalez Date: Tue, 29 Jan 2019 19:07:07 -0800 Subject: [PATCH] Added Support for Timezone in XML Added Support for addition for event Timezone --- pyexchange/base/soap.py | 7 +- pyexchange/exchange2010/__init__.py | 2 +- pyexchange/exchange2010/soap_request.py | 129 ++++--- pyexchange/utils.py | 435 ++++++++++++++++++++++++ 4 files changed, 516 insertions(+), 57 deletions(-) mode change 100644 => 100755 pyexchange/base/soap.py mode change 100644 => 100755 pyexchange/exchange2010/__init__.py mode change 100644 => 100755 pyexchange/exchange2010/soap_request.py mode change 100644 => 100755 pyexchange/utils.py diff --git a/pyexchange/base/soap.py b/pyexchange/base/soap.py old mode 100644 new mode 100755 index ae27d3c..7badd90 --- a/pyexchange/base/soap.py +++ b/pyexchange/base/soap.py @@ -28,8 +28,11 @@ class ExchangeServiceSOAP(object): def __init__(self, connection): self.connection = connection - def send(self, xml, headers=None, retries=4, timeout=30, encoding="utf-8"): - request_xml = self._wrap_soap_xml_request(xml) + def send(self, xml, headers=None, retries=4, timeout=30, encoding="utf-8", event=False): + if not event: + request_xml = self._wrap_soap_xml_request(xml) + else: + request_xml = xml log.info(etree.tostring(request_xml, encoding=encoding, pretty_print=True)) response = self._send_soap_request(request_xml, headers=headers, retries=retries, timeout=timeout, encoding=encoding) return self._parse(response, encoding=encoding) diff --git a/pyexchange/exchange2010/__init__.py b/pyexchange/exchange2010/__init__.py old mode 100644 new mode 100755 index d27d939..99a3288 --- a/pyexchange/exchange2010/__init__.py +++ b/pyexchange/exchange2010/__init__.py @@ -261,7 +261,7 @@ def create(self): self.validate() body = soap_request.new_event(self) - response_xml = self.service.send(body) + response_xml = self.service.send(body, event=True) self._id, self._change_key = self._parse_id_and_change_key_from_response(response_xml) return self diff --git a/pyexchange/exchange2010/soap_request.py b/pyexchange/exchange2010/soap_request.py old mode 100644 new mode 100755 index 5de16e9..3099c88 --- a/pyexchange/exchange2010/soap_request.py +++ b/pyexchange/exchange2010/soap_request.py @@ -5,13 +5,20 @@ Unless required by applicable law or agreed to in writing, software?distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. """ from lxml.builder import ElementMaker -from ..utils import convert_datetime_to_utc +from ..utils import convert_datetime_to_utc, convert_to_win32time from ..compat import _unicode MSG_NS = u'http://schemas.microsoft.com/exchange/services/2006/messages' TYPE_NS = u'http://schemas.microsoft.com/exchange/services/2006/types' SOAP_NS = u'http://schemas.xmlsoap.org/soap/envelope/' +soap = ElementMaker(namespace='http://schemas.xmlsoap.org/soap/envelope/', nsmap={ + 'xsi': 'http://www.w3.org/2001/XMLSchema-instance', + 'm': 'http://schemas.microsoft.com/exchange/services/2006/messages', + 't': 'http://schemas.microsoft.com/exchange/services/2006/types', + 'soap': 'http://schemas.xmlsoap.org/soap/envelope/' +}) + NAMESPACES = {u'm': MSG_NS, u't': TYPE_NS, u's': SOAP_NS} M = ElementMaker(namespace=MSG_NS, nsmap=NAMESPACES) @@ -282,71 +289,80 @@ def new_event(event): Requests a new event be created in the store. http://msdn.microsoft.com/en-us/library/aa564690(v=exchg.140).aspx - - - - - - + http://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-create-appointments-and-meetings-by-using-ews-in-exchange-2013 + + + + + + + + + + + + - {event.subject} - {event.subject} - - - - - {% for attendee_email in meeting.required_attendees %} - - - {{ attendee_email }} - - - HTTPretty {% endfor %} - - {% if meeting.optional_attendees %} - - {% for attendee_email in meeting.optional_attendees %} - - - {{ attendee_email }} - - - {% endfor %} - - {% endif %} - {% if meeting.conference_room %} - - - - {{ meeting.conference_room.email }} - - - - {% endif %} - - - + Team building exercise + Let's learn to really work as a team and then have lunch! + 60 + 2013-09-21T16:00:00.000Z + 2013-09-21T20:00:00.000Z + Conference Room 12 + + + + Mack.Chaves@contoso.com + + + + + Sadie.Daniels@contoso.com + + + + + + + Magdalena.Kemp@contoso.com + + + + + + + + + """ - id = T.DistinguishedFolderId(Id=event.calendar_id) if event.calendar_id in DISTINGUISHED_IDS else T.FolderId(Id=event.calendar_id) + envelope = soap('Envelope') + header = soap('Header') + body = soap('Body') start = convert_datetime_to_utc(event.start) end = convert_datetime_to_utc(event.end) + timezone = convert_to_win32time(event.start) - root = M.CreateItem( - M.SavedItemFolderId(id), - M.Items( - T.CalendarItem( + header.append(T.RequestServerVersion(Version="Exchange2007_SP1")) + header.append(T.TimeZoneContext(T.TimeZoneDefinition(Id=timezone))) + + calendar_node = T.CalendarItem( T.Subject(event.subject), T.Body(event.body or u'', BodyType="HTML"), ) + + root = M.CreateItem( + M.Items( + calendar_node ), SendMeetingInvitations="SendToAllAndSaveCopy" ) - calendar_node = root.xpath(u'/m:CreateItem/m:Items/t:CalendarItem', namespaces=NAMESPACES)[0] + body.append(root) + envelope.append(header) + envelope.append(body) if event.reminder_minutes_before_start: calendar_node.append(T.ReminderIsSet('true')) @@ -357,10 +373,14 @@ def new_event(event): calendar_node.append(T.Start(start.strftime(EXCHANGE_DATETIME_FORMAT))) calendar_node.append(T.End(end.strftime(EXCHANGE_DATETIME_FORMAT))) + + if event.is_all_day: calendar_node.append(T.IsAllDayEvent('true')) - calendar_node.append(T.Location(event.location or u'')) + if event.location: + calendar_node.append(T.Location(event.location or u'')) + if event.required_attendees: calendar_node.append(resource_node(element=T.RequiredAttendees(), resources=event.required_attendees)) @@ -403,7 +423,8 @@ def new_event(event): ) ) - return root + calendar_node.append(T.MeetingTimeZone(TimeZoneName=timezone)) + return envelope def delete_event(event): diff --git a/pyexchange/utils.py b/pyexchange/utils.py old mode 100644 new mode 100755 index 0f6821c..7a388bd --- a/pyexchange/utils.py +++ b/pyexchange/utils.py @@ -15,3 +15,438 @@ def convert_datetime_to_utc(datetime_to_convert): return datetime_to_convert.astimezone(utc) else: return utc.localize(datetime_to_convert) + +def convert_to_win32time(timezone_to_convert): + timezone_lookup = { + "Atlantic/Canary": "GMT Standard Time", + "Europe/Lisbon": "GMT Standard Time", + "Antarctica/Mawson": "West Asia Standard Time", + "Etc/GMT+3": "SA Eastern Standard Time", + "Etc/GMT+2": "UTC-02", + "Etc/GMT+1": "Cape Verde Standard Time", + "Etc/GMT+7": "US Mountain Standard Time", + "Etc/GMT+6": "Central America Standard Time", + "Etc/GMT+5": "SA Pacific Standard Time", + "Etc/GMT+4": "SA Western Standard Time", + "Pacific/Wallis": "UTC+12", + "Europe/Skopje": "Central European Standard Time", + "America/Coral_Harbour": "SA Pacific Standard Time", + "Asia/Dhaka": "Bangladesh Standard Time", + "America/St_Lucia": "SA Western Standard Time", + "Asia/Kashgar": "China Standard Time", + "America/Phoenix": "US Mountain Standard Time", + "Asia/Kuwait": "Arab Standard Time", + "America/Nipigon": "Eastern Standard Time", + "Asia/Hong_Kong": "China Standard Time", + "Arctic/Longyearbyen": "W. Europe Standard Time", + "Europe/Guernsey": "GMT Standard Time", + "Europe/Paris": "Romance Standard Time", + "Europe/Stockholm": "W. Europe Standard Time", + "Pacific/Fiji": "Fiji Standard Time", + "Pacific/Apia": "Samoa Standard Time", + "Pacific/Pago_Pago": "UTC-11", + "Asia/Rangoon": "Myanmar Standard Time", + "America/Mexico_City": "Central Standard Time (Mexico)", + "America/Puerto_Rico": "SA Western Standard Time", + "Pacific/Midway": "UTC-11", + "Europe/Berlin": "W. Europe Standard Time", + "Europe/Zurich": "W. Europe Standard Time", + "America/Belem": "SA Eastern Standard Time", + "Antarctica/Davis": "SE Asia Standard Time", + "Asia/Krasnoyarsk": "North Asia Standard Time", + "Atlantic/Bermuda": "Atlantic Standard Time", + "America/Araguaina": "SA Eastern Standard Time", + "Asia/Tehran": "Iran Standard Time", + "Asia/Saigon": "SE Asia Standard Time", + "Asia/Baku": "Azerbaijan Standard Time", + "America/St_Barthelemy": "SA Western Standard Time", + "America/Santarem": "SA Eastern Standard Time", + "America/Danmarkshavn": "UTC", + "America/Scoresbysund": "Azores Standard Time", + "America/Eirunepe": "SA Western Standard Time", + "America/Caracas": "Venezuela Standard Time", + "Asia/Baghdad": "Arabic Standard Time", + "Africa/Monrovia": "Greenwich Standard Time", + "America/St_Vincent": "SA Western Standard Time", + "America/Vancouver": "Pacific Standard Time", + "Asia/Thimphu": "Bangladesh Standard Time", + "Africa/Accra": "Greenwich Standard Time", + "America/Belize": "Central America Standard Time", + "America/Port_of_Spain": "SA Western Standard Time", + "Asia/Tashkent": "West Asia Standard Time", + "Asia/Tokyo": "Tokyo Standard Time", + "Australia/Sydney": "AUS Eastern Standard Time", + "Europe/Riga": "FLE Standard Time", + "Asia/Dili": "Tokyo Standard Time", + "Africa/Mbabane": "South Africa Standard Time", + "Asia/Oral": "West Asia Standard Time", + "Asia/Aden": "Arab Standard Time", + "Europe/Isle_of_Man": "GMT Standard Time", + "Europe/Istanbul": "Turkey Standard Time", + "Europe/Mariehamn": "FLE Standard Time", + "Australia/Lindeman": "E. Australia Standard Time", + "Pacific/Galapagos": "Central America Standard Time", + "America/Bogota": "SA Pacific Standard Time", + "America/Dawson": "Pacific Standard Time", + "America/Chicago": "Central Standard Time", + "Pacific/Kwajalein": "UTC+12", + "Australia/Broken_Hill": "Cen. Australia Standard Time", + "America/Cuiaba": "Central Brazilian Standard Time", + "Indian/Christmas": "SE Asia Standard Time", + "Asia/Vladivostok": "Vladivostok Standard Time", + "Europe/Brussels": "Romance Standard Time", + "Asia/Chongqing": "China Standard Time", + "America/Noronha": "UTC-02", + "Europe/Madrid": "Romance Standard Time", + "Africa/Algiers": "W. Central Africa Standard Time", + "Africa/Harare": "South Africa Standard Time", + "Africa/Ndjamena": "W. Central Africa Standard Time", + "America/Costa_Rica": "Central America Standard Time", + "Europe/Ljubljana": "Central Europe Standard Time", + "Indian/Mayotte": "E. Africa Standard Time", + "Asia/Phnom_Penh": "SE Asia Standard Time", + "America/Managua": "Central America Standard Time", + "America/Pangnirtung": "Eastern Standard Time", + "Asia/Nicosia": "E. Europe Standard Time", + "America/Tijuana": "Pacific Standard Time", + "Pacific/Fakaofo": "Tonga Standard Time", + "America/Martinique": "SA Western Standard Time", + "America/Antigua": "SA Western Standard Time", + "America/Argentina/La_Rioja": "Argentina Standard Time", + "Pacific/Tahiti": "Hawaiian Standard Time", + "Asia/Brunei": "Singapore Standard Time", + "Europe/Zagreb": "Central European Standard Time", + "America/Asuncion": "Paraguay Standard Time", + "Europe/Vienna": "W. Europe Standard Time", + "Australia/Hobart": "Tasmania Standard Time", + "America/Juneau": "Alaskan Standard Time", + "America/Inuvik": "Mountain Standard Time", + "America/Ojinaga": "Mountain Standard Time", + "America/Montreal": "Eastern Standard Time", + "Asia/Seoul": "Korea Standard Time", + "Indian/Comoro": "E. Africa Standard Time", + "Antarctica/Rothera": "SA Eastern Standard Time", + "Europe/Tallinn": "FLE Standard Time", + "Indian/Mahe": "Mauritius Standard Time", + "Asia/Calcutta": "India Standard Time", + "America/Creston": "US Mountain Standard Time", + "Asia/Singapore": "Singapore Standard Time", + "Africa/Nairobi": "E. Africa Standard Time", + "Asia/Pontianak": "SE Asia Standard Time", + "America/Maceio": "SA Eastern Standard Time", + "Africa/Cairo": "Egypt Standard Time", + "Europe/Moscow": "Russian Standard Time", + "Asia/Pyongyang": "Korea Standard Time", + "Asia/Ulaanbaatar": "Ulaanbaatar Standard Time", + "America/Rainy_River": "Central Standard Time", + "Africa/Kampala": "E. Africa Standard Time", + "Asia/Colombo": "Sri Lanka Standard Time", + "Australia/Adelaide": "Cen. Australia Standard Time", + "America/Cambridge_Bay": "Mountain Standard Time", + "Africa/Luanda": "W. Central Africa Standard Time", + "America/Indiana/Winamac": "Eastern Standard Time", + "America/Cordoba": "Argentina Standard Time", + "Asia/Tbilisi": "Georgian Standard Time", + "Europe/Gibraltar": "W. Europe Standard Time", + "Asia/Karachi": "Pakistan Standard Time", + "Asia/Harbin": "China Standard Time", + "Etc/GMT-9": "Tokyo Standard Time", + "Etc/GMT-8": "Singapore Standard Time", + "America/Bahia_Banderas": "Central Standard Time (Mexico)", + "Etc/GMT-1": "W. Central Africa Standard Time", + "Etc/GMT-3": "E. Africa Standard Time", + "Etc/GMT-2": "South Africa Standard Time", + "Etc/GMT-5": "West Asia Standard Time", + "Etc/GMT-4": "Arabian Standard Time", + "Etc/GMT-7": "SE Asia Standard Time", + "Etc/GMT-6": "Central Asia Standard Time", + "America/Boa_Vista": "SA Western Standard Time", + "Africa/Tripoli": "W. Europe Standard Time", + "Indian/Reunion": "Mauritius Standard Time", + "Atlantic/Stanley": "SA Eastern Standard Time", + "Etc/GMT-13": "Tonga Standard Time", + "America/Blanc-Sablon": "SA Western Standard Time", + "America/Santo_Domingo": "SA Western Standard Time", + "Antarctica/Syowa": "E. Africa Standard Time", + "America/Jamaica": "SA Pacific Standard Time", + "Europe/Kiev": "FLE Standard Time", + "Europe/Budapest": "Central Europe Standard Time", + "Indian/Mauritius": "Mauritius Standard Time", + "America/Goose_Bay": "Atlantic Standard Time", + "Asia/Amman": "Jordan Standard Time", + "Asia/Sakhalin": "Vladivostok Standard Time", + "Africa/Windhoek": "Namibia Standard Time", + "America/Sitka": "Alaskan Standard Time", + "Asia/Katmandu": "Nepal Standard Time", + "America/Guyana": "SA Western Standard Time", + "America/Sao_Paulo": "E. South America Standard Time", + "America/Lower_Princes": "SA Western Standard Time", + "Australia/Perth": "W. Australia Standard Time", + "Africa/Djibouti": "E. Africa Standard Time", + "Asia/Jakarta": "SE Asia Standard Time", + "Antarctica/Palmer": "Pacific SA Standard Time", + "EST5EDT": "Eastern Standard Time", + "Africa/Johannesburg": "South Africa Standard Time", + "Asia/Irkutsk": "North Asia East Standard Time", + "Africa/Niamey": "W. Central Africa Standard Time", + "Pacific/Kosrae": "Central Pacific Standard Time", + "Africa/Casablanca": "Morocco Standard Time", + "Asia/Bishkek": "Central Asia Standard Time", + "Africa/Nouakchott": "Greenwich Standard Time", + "Europe/Vilnius": "FLE Standard Time", + "America/Cayenne": "SA Eastern Standard Time", + "Africa/Mogadishu": "E. Africa Standard Time", + "America/Kentucky/Monticello": "Eastern Standard Time", + "America/Rio_Branco": "SA Western Standard Time", + "America/Cancun": "Central Standard Time (Mexico)", + "Pacific/Guam": "West Pacific Standard Time", + "Antarctica/Macquarie": "Central Pacific Standard Time", + "Atlantic/Azores": "Azores Standard Time", + "Asia/Shanghai": "China Standard Time", + "America/Godthab": "Greenland Standard Time", + "Asia/Beirut": "Middle East Standard Time", + "Africa/Maputo": "South Africa Standard Time", + "Asia/Bahrain": "Arab Standard Time", + "Asia/Ashgabat": "West Asia Standard Time", + "Asia/Riyadh": "Arab Standard Time", + "Atlantic/Faeroe": "GMT Standard Time", + "America/Monterrey": "Central Standard Time (Mexico)", + "America/Anguilla": "SA Western Standard Time", + "Asia/Damascus": "Syria Standard Time", + "America/North_Dakota/Center": "Central Standard Time", + "America/Indiana/Vevay": "US Eastern Standard Time", + "Atlantic/St_Helena": "Greenwich Standard Time", + "America/Barbados": "SA Western Standard Time", + "Europe/Vatican": "W. Europe Standard Time", + "America/Indiana/Vincennes": "Eastern Standard Time", + "Asia/Almaty": "Central Asia Standard Time", + "Africa/Lome": "Greenwich Standard Time", + "Africa/Brazzaville": "W. Central Africa Standard Time", + "America/Nome": "Alaskan Standard Time", + "Europe/Dublin": "GMT Standard Time", + "America/Yakutat": "Alaskan Standard Time", + "America/Tortola": "SA Western Standard Time", + "Europe/Vaduz": "W. Europe Standard Time", + "Africa/Asmera": "E. Africa Standard Time", + "Europe/Minsk": "Kaliningrad Standard Time", + "America/Buenos_Aires": "Argentina Standard Time", + "Africa/Maseru": "South Africa Standard Time", + "America/St_Johns": "Newfoundland Standard Time", + "America/Santa_Isabel": "Pacific Standard Time (Mexico)", + "Asia/Kuching": "Singapore Standard Time", + "Africa/Libreville": "W. Central Africa Standard Time", + "Africa/Freetown": "Greenwich Standard Time", + "Africa/Bissau": "Greenwich Standard Time", + "Europe/Samara": "Russian Standard Time", + "Europe/Amsterdam": "W. Europe Standard Time", + "Europe/Tirane": "Central Europe Standard Time", + "Pacific/Saipan": "West Pacific Standard Time", + "Africa/Abidjan": "Greenwich Standard Time", + "Europe/Zaporozhye": "FLE Standard Time", + "America/El_Salvador": "Central America Standard Time", + "Europe/Podgorica": "Central Europe Standard Time", + "Africa/Juba": "E. Africa Standard Time", + "America/Santiago": "Pacific SA Standard Time", + "America/Argentina/San_Luis": "Argentina Standard Time", + "America/Aruba": "SA Western Standard Time", + "America/Indianapolis": "US Eastern Standard Time", + "America/Regina": "Canada Central Standard Time", + "Pacific/Truk": "West Pacific Standard Time", + "Pacific/Funafuti": "UTC+12", + "America/Merida": "Central Standard Time (Mexico)", + "America/Guatemala": "Central America Standard Time", + "Asia/Magadan": "Magadan Standard Time", + "Africa/Sao_Tome": "Greenwich Standard Time", + "Asia/Makassar": "Singapore Standard Time", + "Africa/Bujumbura": "South Africa Standard Time", + "Europe/Chisinau": "GTB Standard Time", + "Europe/Warsaw": "Central European Standard Time", + "Asia/Yekaterinburg": "Ekaterinburg Standard Time", + "Antarctica/Casey": "W. Australia Standard Time", + "Pacific/Enderbury": "Tonga Standard Time", + "America/Thule": "Atlantic Standard Time", + "America/Louisville": "Eastern Standard Time", + "America/Moncton": "Atlantic Standard Time", + "Europe/Helsinki": "FLE Standard Time", + "Atlantic/Cape_Verde": "Cape Verde Standard Time", + "America/Tegucigalpa": "Central America Standard Time", + "Indian/Cocos": "Myanmar Standard Time", + "America/Boise": "Mountain Standard Time", + "America/Guadeloupe": "SA Western Standard Time", + "America/Nassau": "Eastern Standard Time", + "Europe/Prague": "Central Europe Standard Time", + "America/Halifax": "Atlantic Standard Time", + "Asia/Hovd": "SE Asia Standard Time", + "America/Manaus": "SA Western Standard Time", + "America/Rankin_Inlet": "Central Standard Time", + "America/Catamarca": "Argentina Standard Time", + "America/North_Dakota/Beulah": "Central Standard Time", + "America/Chihuahua": "Mountain Standard Time (Mexico)", + "America/Iqaluit": "Eastern Standard Time", + "America/Argentina/Rio_Gallegos": "Argentina Standard Time", + "Europe/Volgograd": "Russian Standard Time", + "Africa/Bamako": "Greenwich Standard Time", + "Asia/Novokuznetsk": "N. Central Asia Standard Time", + "Europe/Uzhgorod": "FLE Standard Time", + "Africa/Banjul": "Greenwich Standard Time", + "Asia/Aqtau": "West Asia Standard Time", + "Pacific/Palau": "Tokyo Standard Time", + "Africa/Malabo": "W. Central Africa Standard Time", + "PST8PDT": "Pacific Standard Time", + "Atlantic/Madeira": "GMT Standard Time", + "Pacific/Noumea": "Central Pacific Standard Time", + "Africa/Kinshasa": "W. Central Africa Standard Time", + "Europe/Malta": "W. Europe Standard Time", + "America/Argentina/Ushuaia": "Argentina Standard Time", + "Asia/Bangkok": "SE Asia Standard Time", + "Pacific/Niue": "UTC-11", + "Australia/Brisbane": "E. Australia Standard Time", + "America/Recife": "SA Eastern Standard Time", + "Asia/Yerevan": "Caucasus Standard Time", + "America/La_Paz": "SA Western Standard Time", + "Asia/Urumqi": "China Standard Time", + "Africa/Lusaka": "South Africa Standard Time", + "Pacific/Guadalcanal": "Central Pacific Standard Time", + "America/Yellowknife": "Mountain Standard Time", + "Asia/Vientiane": "SE Asia Standard Time", + "Europe/Kaliningrad": "Kaliningrad Standard Time", + "Africa/Conakry": "Greenwich Standard Time", + "America/Argentina/Tucuman": "Argentina Standard Time", + "Europe/Oslo": "W. Europe Standard Time", + "Australia/Currie": "Tasmania Standard Time", + "America/St_Kitts": "SA Western Standard Time", + "America/Panama": "SA Pacific Standard Time", + "America/Hermosillo": "US Mountain Standard Time", + "Asia/Hebron": "Egypt Standard Time", + "America/Guayaquil": "SA Pacific Standard Time", + "Asia/Kuala_Lumpur": "Singapore Standard Time", + "Europe/London": "GMT Standard Time", + "America/Menominee": "Central Standard Time", + "Asia/Kamchatka": "Magadan Standard Time", + "Asia/Jayapura": "Tokyo Standard Time", + "America/Matamoros": "Central Standard Time", + "Asia/Qatar": "Arab Standard Time", + "Asia/Dushanbe": "West Asia Standard Time", + "Asia/Yakutsk": "Yakutsk Standard Time", + "Asia/Omsk": "N. Central Asia Standard Time", + "Africa/Bangui": "W. Central Africa Standard Time", + "America/Paramaribo": "SA Eastern Standard Time", + "Etc/GMT-11": "Central Pacific Standard Time", + "Etc/GMT-10": "West Pacific Standard Time", + "Africa/Lubumbashi": "South Africa Standard Time", + "Etc/GMT-12": "UTC+12", + "Europe/Bratislava": "Central Europe Standard Time", + "Asia/Anadyr": "Magadan Standard Time", + "America/New_York": "Eastern Standard Time", + "CST6CDT": "Central Standard Time", + "Pacific/Rarotonga": "Hawaiian Standard Time", + "America/Dominica": "SA Western Standard Time", + "Africa/Porto-Novo": "W. Central Africa Standard Time", + "Asia/Samarkand": "West Asia Standard Time", + "America/Toronto": "Eastern Standard Time", + "America/Bahia": "Bahia Standard Time", + "Indian/Maldives": "West Asia Standard Time", + "Africa/Ouagadougou": "Greenwich Standard Time", + "Antarctica/South_Pole": "New Zealand Standard Time", + "Asia/Muscat": "Arabian Standard Time", + "America/Edmonton": "Mountain Standard Time", + "Pacific/Wake": "UTC+12", + "America/Indiana/Tell_City": "Central Standard Time", + "Australia/Darwin": "AUS Central Standard Time", + "America/Whitehorse": "Pacific Standard Time", + "America/Swift_Current": "Canada Central Standard Time", + "Europe/Copenhagen": "Romance Standard Time", + "America/Argentina/Salta": "Argentina Standard Time", + "America/Montserrat": "SA Western Standard Time", + "America/Mendoza": "Argentina Standard Time", + "Europe/Simferopol": "FLE Standard Time", + "Africa/Blantyre": "South Africa Standard Time", + "America/Detroit": "Eastern Standard Time", + "America/Shiprock": "Mountain Standard Time", + "America/Grenada": "SA Western Standard Time", + "America/Indiana/Petersburg": "Eastern Standard Time", + "Asia/Dubai": "Arabian Standard Time", + "Europe/Athens": "GTB Standard Time", + "America/Port-au-Prince": "SA Pacific Standard Time", + "America/Cayman": "SA Pacific Standard Time", + "Africa/Dar_es_Salaam": "E. Africa Standard Time", + "America/Curacao": "SA Western Standard Time", + "Indian/Kerguelen": "West Asia Standard Time", + "Africa/Khartoum": "E. Africa Standard Time", + "Asia/Manila": "Singapore Standard Time", + "Europe/Sarajevo": "Central European Standard Time", + "America/Jujuy": "Argentina Standard Time", + "Africa/Douala": "W. Central Africa Standard Time", + "Europe/Rome": "W. Europe Standard Time", + "America/Argentina/San_Juan": "Argentina Standard Time", + "America/North_Dakota/New_Salem": "Central Standard Time", + "America/Kralendijk": "SA Western Standard Time", + "Pacific/Port_Moresby": "West Pacific Standard Time", + "Europe/Jersey": "GMT Standard Time", + "Europe/Andorra": "W. Europe Standard Time", + "Europe/Luxembourg": "W. Europe Standard Time", + "Pacific/Honolulu": "Hawaiian Standard Time", + "America/St_Thomas": "SA Western Standard Time", + "Pacific/Majuro": "UTC+12", + "America/Mazatlan": "Mountain Standard Time (Mexico)", + "Asia/Macau": "China Standard Time", + "MST7MDT": "Mountain Standard Time", + "Europe/Belgrade": "Central Europe Standard Time", + "Asia/Choibalsan": "Ulaanbaatar Standard Time", + "Antarctica/McMurdo": "New Zealand Standard Time", + "America/Thunder_Bay": "Eastern Standard Time", + "America/Los_Angeles": "Pacific Standard Time", + "Asia/Kabul": "Afghanistan Standard Time", + "Indian/Antananarivo": "E. Africa Standard Time", + "Atlantic/Reykjavik": "Greenwich Standard Time", + "Etc/GMT+12": "Dateline Standard Time", + "Etc/GMT+11": "UTC-11", + "Etc/GMT+10": "Hawaiian Standard Time", + "Pacific/Ponape": "Central Pacific Standard Time", + "Pacific/Tongatapu": "Tonga Standard Time", + "America/Marigot": "SA Western Standard Time", + "Atlantic/South_Georgia": "UTC-02", + "Africa/El_Aaiun": "Greenwich Standard Time", + "America/Campo_Grande": "Central Brazilian Standard Time", + "America/Dawson_Creek": "US Mountain Standard Time", + "Antarctica/Vostok": "Central Asia Standard Time", + "Europe/Bucharest": "GTB Standard Time", + "America/Porto_Velho": "SA Western Standard Time", + "Europe/Monaco": "W. Europe Standard Time", + "America/Indiana/Marengo": "US Eastern Standard Time", + "Africa/Ceuta": "Romance Standard Time", + "America/Winnipeg": "Central Standard Time", + "Asia/Aqtobe": "West Asia Standard Time", + "Africa/Dakar": "Greenwich Standard Time", + "America/Fortaleza": "SA Eastern Standard Time", + "Pacific/Tarawa": "UTC+12", + "Africa/Addis_Ababa": "E. Africa Standard Time", + "Pacific/Efate": "Central Pacific Standard Time", + "Pacific/Johnston": "Hawaiian Standard Time", + "Asia/Qyzylorda": "Central Asia Standard Time", + "Europe/San_Marino": "W. Europe Standard Time", + "Asia/Jerusalem": "Israel Standard Time", + "Pacific/Auckland": "New Zealand Standard Time", + "America/Denver": "Mountain Standard Time", + "Indian/Chagos": "Central Asia Standard Time", + "America/Glace_Bay": "Atlantic Standard Time", + "Africa/Gaborone": "South Africa Standard Time", + "Africa/Tunis": "W. Central Africa Standard Time", + "America/Montevideo": "Montevideo Standard Time", + "America/Resolute": "Central Standard Time", + "Australia/Melbourne": "AUS Eastern Standard Time", + "Etc/GMT": "UTC", + "Asia/Gaza": "Egypt Standard Time", + "Asia/Taipei": "Taipei Standard Time", + "Antarctica/DumontDUrville": "West Pacific Standard Time", + "America/Indiana/Knox": "Central Standard Time", + "Asia/Novosibirsk": "N. Central Asia Standard Time", + "Africa/Kigali": "South Africa Standard Time", + "America/Grand_Turk": "Eastern Standard Time", + "Africa/Lagos": "W. Central Africa Standard Time", + "Europe/Sofia": "FLE Standard Time", + "America/Lima": "SA Pacific Standard Time", + "America/Anchorage": "Alaskan Standard Time", + "Pacific/Nauru": "UTC+12" + } + return timezone_lookup[str(timezone_to_convert.tzinfo)]