def add_site()

in jobs/eam-integrations/scripts/api/XMatters/XMatters.py [0:0]


def add_site(site):
    logger.info("Adding site %s to XMatters" % site)

    # TODO: move this to a config file or something?
    # fixup "bad" data
    if site["country"] == "United States of America":
        site["country"] = "United States"
    elif site["country"] == "Vietnam":
        site["country"] = "Viet Nam"
    elif site["country"] == "Czechia":
        site["country"] = "Czech Republic"
    elif site["country"] == "Tanzania":
        site["country"] = "Tanzania, United Republic of"
    elif site["country"] == "Korea, Republic of":
        site["country"] = "South Korea"
    if site["postal_code"] == "CZECH REPUBLIC":
        site["postal_code"] = ""

    if len(site["postal_code"]) > 10:
        site["postal_code"] = site["postal_code"][:10]

    if "timezone" not in site or "latitude" not in site or "longitude" not in site:
        (coords, tz) = Util.postal_to_coords_and_timezone(
            {"country": site["country"], "postal_code": site["postal_code"]}
        )
        lat = coords[0]
        lng = coords[1]
        if tz is None:
            tz = "America/Los_Angeles"  # arbitrary
        if lat is None:
            lat = 0
        if lng is None:
            lng = 0

    site_data = {
        "name": site["name"],
        "timezone": str(tz),
        # skip address for now as it's mostly bad data (remote sites)
        # 'address1':  site['address'],
        "country": site["country"],
        "city": site["city"],
        # 'state':     site['state'],
        "postalCode": site["postal_code"],
        "latitude": lat,
        "longitude": lng,
        "language": "English",
        "status": "ACTIVE",
    }
    sites_url = _config.base_URL_old_api + "sites"

    headers = {"Content-Type": "application/json"}

    response = requests.post(
        sites_url,
        auth=(_config.xm_username, _config.xm_password),
        headers=headers,
        data=json.dumps(site_data),
        proxies=_config.proxies,
    )
    if response.status_code == 200 or response.status_code == 201:
        rjson = response.json()
        logger.debug(rjson)
        return site_data  # for the unittests
    else:
        logger.critical("Could not create site")
        logger.critical(response.content)
        raise Exception(response.content)