jobs/eam-integrations/scripts/api/Workday/Workday.py (127 lines of code) (raw):

import requests import json import sys import re import logging from api.Workday.secrets_workday import config as wd_config logger = logging.getLogger(__name__) class LocalConfig(object): def __init__(self): self.debug = 3 # TODO: This should move to the XMatters module: self.workday_to_xmatters_tz = { "GMT United Kingdom Time (London)": "GMT", "GMT Western European Time (Casablanca)": "GMT", "GMT+01:00 Central European Time (Amsterdam)": "Europe/Amsterdam", "GMT+01:00 Central European Time (Berlin)": "Europe/Berlin", "GMT+01:00 Central European Time (Oslo)": "Europe/Oslo", "GMT+01:00 Central European Time (Paris)": "Europe/Paris", "GMT+01:00 Central European Time (Prague)": "Europe/Prague", "GMT+01:00 Central European Time (Stockholm)": "Europe/Stockholm", "GMT+02:00 Eastern European Time (Athens)": "Europe/Athens", "GMT+02:00 Eastern European Time (Bucharest)": "Europe/Bucharest", "GMT+02:00 Eastern European Time (Helsinki)": "Europe/Helsinki", "GMT+02:00 Israel Time (Jerusalem)": "Europe/Kaliningrad", "GMT+02:00 South Africa Standard Time (Johannesburg)": "Africa/Johannesburg", "GMT+03:00 East Africa Time (Nairobi)": "Africa/Nairobi", "GMT+03:00 Moscow Standard Time (Moscow)": "Europe/Moscow", "GMT+05:00 Pakistan Standard Time (Karachi)": "Asia/Karachi", "GMT+05:00 Yekaterinburg Standard Time (Yekaterinburg)": "Asia/Yekaterinburg", "GMT+05:30 India Standard Time (Kolkata)": "Asia/Kolkata", "GMT+06:00 East Kazakhstan Time (Almaty)": "Asia/Almaty", "GMT+07:00 Indochina Time (Ho Chi Minh City)": "Asia/Ho_Chi_Minh", "GMT+07:00 Western Indonesia Time (Jakarta)": "Asia/Jakarta", "GMT+08:00 Australian Western Standard Time (Perth)": "Australia/Perth", "GMT+08:00 China Standard Time (Shanghai)": "Asia/Shanghai", "GMT+08:00 Singapore Standard Time (Singapore)": "Asia/Singapore", "GMT+08:00 Taipei Standard Time (Taipei)": "Asia/Taipei", "GMT+08:00 Hong Kong Standard Time (Hong Kong)": "Asia/Hong_Kong", "GMT+09:00 Japan Standard Time (Tokyo)": "Asia/Tokyo", "GMT+09:30 Australian Central Standard Time (Darwin)": "Australia/Darwin", "GMT+10:00 Australian Eastern Standard Time (Brisbane)": "Australia/Brisbane", "GMT+12:00 New Zealand Time (Auckland)": "Australia/Brisbane", "GMT-03:00 Argentina Standard Time (Buenos Aires)": "America/Buenos_Aires", "GMT-03:00 Brasilia Standard Time (Recife)": "America/Recife", "GMT-03:30 Newfoundland Time (St. John's)": "America/St_Johns", "GMT-04:00 Atlantic Time (Halifax)": "America/Halifax", "GMT-05:00 Colombia Standard Time (Bogota)": "America/Bogota", "GMT-05:00 Eastern Time (Indianapolis)": "America/Indiana/Indianapolis", "GMT-05:00 Eastern Time": "America/New_York", "GMT-05:00 Eastern Time (New York)": "America/New_York", "GMT-06:00 Central Standard Time (Regina)": "America/Regina", "GMT-06:00 Central Time": "America/Chicago", "GMT-06:00 Central Time (Chicago)": "America/Chicago", "GMT-06:00 Central Time (Mexico City)": "America/Mexico_City", "GMT-07:00 Mountain Standard Time (Phoenix)": "America/Phoenix", "GMT-07:00 Mountain Time": "America/Phoenix", "GMT-07:00 Mountain Time (Denver)": "America/Denver", "GMT-08:00 Pacific Time": "America/Los_Angeles", "GMT-08:00 Pacific Time (Los Angeles)": "America/Los_Angeles", "GMT-08:00 Pacific Time (Tijuana)": "America/Tijuana", "GMT-10:00 Hawaii-Aleutian Standard Time (Honolulu)": "America/Anchorage", } def __getattr__(self, attr): return wd_config[attr] _config = LocalConfig() def get_users(): """Gets all users from Workday Returns a list of dicts, each dict is an employee: [ { u'User_Home_Country': u'United States of America', u'User_Home_City': u'Portland', u'User_Preferred_First_Name': u'Chris', u'User_Email_Address': u'test@mozilla.com', u'User_Preferred_Last_Name': u'Test', u'User_Employee_ID': u'12345678', u'User_Home_Postal_Code': u'90210', {...}, ... ] """ logger.info("Gathering all Workday people") try: xmatters_integration = getattr(_config, "xmatters_integration") r = requests.get( xmatters_integration["people_url"], auth=( xmatters_integration["username"], xmatters_integration["password"], ), proxies=_config.proxies, ) results = json.loads(r.text) users = [user for user in results["Report_Entry"] if not (user.get("User_Home_Country", "") == "" and user.get("User_Home_Postal_Code", "") == "")] return users except Exception: logger.critical(sys.exc_info()[0]) raise def get_sites(): """Gets all sites from workday Parameters: None Returns: dict: a dict with location names as keys and the values are a dict like: { 'name': 'Location Name', 'timezone': 'Timezone converted to xMatters style', 'address': 'Location Address', 'country': 'Location Country', 'city': 'Location City', 'state': 'Location State', 'postal_code': 'Location Postal Code', } One could successfully argue that the timezone format conversion should not happen here. """ logger.info("Gathering all Workday sites") try: r = requests.get( _config.xmatters_integration["sites_url"], auth=( _config.xmatters_integration["username"], _config.xmatters_integration["password"], ), proxies=_config.proxies, ) results = json.loads(r.text) # return results['Report_Entry'] wd_locations = {} for site in results["Report_Entry"]: name = site["Work_Location_Name"] if name in wd_locations: continue else: if re.search( "^GMT-03:30 Newfoundland Time", site.get("Work_Location_Timezone", ""), ): # fixup a stupid non-ascii character site[ "Work_Location_Timezone" ] = "GMT-03:30 Newfoundland Time (St. John's)" wd_locations[name] = { "name": name, "timezone": _config.workday_to_xmatters_tz[ site.get("Work_Location_Timezone", "") ], "address": site.get("Work_Location_Address", ""), "country": site.get("Work_Location_Country", ""), "city": site.get("Work_Location_City", ""), "state": site.get("Work_Location_State", ""), "postal_code": site.get("Work_Location_Postal_Code", ""), } return wd_locations except Exception: logger.critical(sys.exc_info()[0]) raise