def edit(token, album_id, webhook_id, data, status_code=200):
    print()
    request_url = env.env_var.get("URL") + "/albums/" + str(album_id) + "/webhooks/" + str(webhook_id)
    headers = {"Authorization": "Bearer "+ token, "Accept": "application/json", "Content-Type": "application/x-www-form-urlencoded"}

    data_tmp = data.copy()
    if "event" in data_tmp: del data_tmp["event"]
    if "add_event" in data_tmp: del data_tmp["add_event"]
    if "remove_event" in data_tmp: del data_tmp["remove_event"]
    encoded_data = util.urlencode(data_tmp)

    if "event" in data:
        events = data["event"]
        encoded_events = "".join(map(lambda e:"&event=" + str(e), events))
        encoded_data = encoded_data + encoded_events

    if "add_event" in data:
        add_events = data["add_event"]
        encoded_add_events = "".join(map(lambda e:"&add_event=" + e, add_events))
        encoded_data = encoded_data + encoded_add_events

    if "remove_event" in data:
        remove_events = data["remove_event"]
        encoded_remove_events = "".join(map(lambda e:"&remove_event=" + e, remove_events))
        encoded_data = encoded_data + encoded_remove_events

    if encoded_data.startswith("&"):
        encoded_data = encoded_data[1:]

    response = requests.patch(request_url, headers=headers, data=encoded_data)
    util.print_request("PATCH", response, request_url)
    assert response.status_code == status_code
    if status_code == 200:
        webhook = json.loads(response.content)
        return webhook
def remove(token, album_id, webhook_id, status_code=204):
    print()
    request_url = env.env_var.get("URL") + "/albums/" + str(album_id) + "/webhooks/" + str(webhook_id)
    headers = {"Authorization": "Bearer "+ token}
    response = requests.delete(request_url, headers=headers)
    util.print_request("DELETE", response, request_url)
    assert response.status_code == status_code
def trigger_user(token, album_id, webhook_id, user_id, status_code=202):
    print()
    request_url = env.env_var.get("URL") + "/albums/" + str(album_id) + "/webhooks/" + str(webhook_id) + "/trigger"
    headers = {"Authorization": "Bearer "+ token, "Content-Type": "application/x-www-form-urlencoded"}
    data = {"event":"new_user", "user":user_id}
    response = requests.post(request_url, headers=headers, data=util.urlencode(data))
    util.print_request("POST", response, request_url)
    assert response.status_code == status_code
def add_favorite(token, album_id, status_code=204):
    print()
    request_url = env.env_var.get(
        "URL") + "/albums/" + album_id + "/favorites/"
    headers = {"Authorization": "Bearer " + token}
    response = requests.put(request_url, headers=headers)
    util.print_request("PUT", response, request_url)
    assert response.status_code == status_code
def downgrade_admin_to_user(token, album_id, user_id, status_code=204):
    print()
    request_url = env.env_var.get(
        "URL") + "/albums/" + album_id + "/users/" + user_id + "/admin"
    headers = {"Authorization": "Bearer " + token}
    response = requests.delete(request_url, headers=headers)
    util.print_request("DELETE", response, request_url)
    assert response.status_code == status_code
def get(token, album_id, webhook_id, status_code=200):
    print()
    request_url = env.env_var.get("URL") + "/albums/" + str(album_id) + "/webhooks/" + str(webhook_id)
    headers = {"Authorization": "Bearer "+ token}
    response = requests.get(request_url, headers=headers)
    util.print_request("GET", response, request_url)
    assert response.status_code == status_code
    if status_code == 200:
        webhook = json.loads(response.content)
        return webhook
def get_list(token, album_id, limit=9999, offset=0, status_code=200):
    print()
    request_url = env.env_var.get("URL") + "/albums/" + str(album_id) + "/webhooks"
    headers = {"Authorization": "Bearer "+ token}
    params={"limit":limit, "offset":offset}
    response = requests.get(request_url, headers=headers, params=params)
    util.print_request("GET", response, request_url)
    assert response.status_code == status_code
    if status_code == 200:
        webhooks = json.loads(response.content)
        return webhooks
def get(token, status_code=200, params={}, count=1):
    print()
    request_url = env.env_var.get("URL") + "/users"
    headers = {
        "Authorization": "Bearer " + token,
        "Accept": "application/json"
    }
    response = requests.get(request_url, headers=headers, params=params)
    util.print_request("GET", response, request_url)
    assert response.status_code == status_code
    if status_code == 200:
        albums = json.loads(response.content)
        return albums
def add_in_album(token, params, study_instance_uid, album_id_dest, status_code=201):
    print()
    request_url = env.env_var.get("URL") + "/studies/" + study_instance_uid + "/albums/" + album_id_dest
    if("album" in params and "inbox" in params):
        assert False #no permission
    elif("album" in params):
        request_url +="?album="+params["album"]
    elif("inbox" in params):
        request_url +="?inbox="+str(params["inbox"])

    headers = {"Authorization": "Bearer "+ token}
    response = requests.put(request_url, headers=headers)
    util.print_request("PUT", response, request_url)
    assert response.status_code == status_code
def stow(token, file_name = "series/test1.dcm", params = {}, status_code = 200, link=False):
    print()
    request_url = ""
    headers = {}
    if link:
        request_url = env.env_var.get("URL") + "/link/" + token + "/studies"
        headers = {"Content-Type": "multipart/related; type=\"application/dicom\"; boundary=myboundary"}
    else:
        request_url = env.env_var.get("URL") + "/studies"
        headers = {"Authorization": "Bearer "+ token, "Content-Type": "multipart/related; type=\"application/dicom\"; boundary=myboundary"}
    files = {'file': open(file_name, 'rb')}
    response = requests.post(request_url, headers=headers, files=files, params=params)
    util.print_request("POST", response, request_url)
    assert response.status_code == status_code
def get_events(token, album_id, params={}, count=1, status_code=200):
    print()
    request_url = env.env_var.get("URL") + "/albums/" + album_id + "/events"
    headers = {
        "Authorization": "Bearer " + token,
        "Accept": "application/json"
    }
    response = requests.get(request_url, headers=headers, params=params)
    util.print_request("GET", response, request_url)
    assert response.status_code == status_code
    if status_code == 200:
        assert response.headers.get("X-Total-Count") == str(count)
        album = json.loads(response.content)
        return album
def create(token, data, status_code=201):
    print()
    request_url = env.env_var.get("URL") + "/capabilities"
    headers = {
        "Authorization": "Bearer " + token,
        "Content-Type": "application/x-www-form-urlencoded"
    }
    response = requests.post(request_url,
                             headers=headers,
                             data=util.urlencode(data))
    util.print_request("POST", response, request_url)
    assert response.status_code == status_code
    if status_code == 201:
        capability_token = json.loads(response.content)
        return capability_token
def introspect(token, status_code=200):
    print()
    request_url = env.env_var.get("URL") + "/token/introspect"
    headers = {
        "Accept": "application/json",
        "Content-Type": "application/x-www-form-urlencoded"
    }
    data = {"token": token}
    response = requests.post(request_url,
                             headers=headers,
                             data=util.urlencode(data))
    util.print_request("POST", response, request_url)
    assert response.status_code == status_code
    if status_code == 200:
        introspect = json.loads(response.content)
        return introspect
def edit(token, album_id, data, status_code=200):
    print()
    request_url = env.env_var.get("URL") + "/albums/" + album_id
    headers = {
        "Authorization": "Bearer " + token,
        "Accept": "application/json",
        "Content-Type": "application/x-www-form-urlencoded"
    }
    response = requests.patch(request_url,
                              headers=headers,
                              data=util.urlencode(data))
    util.print_request("PATCH", response, request_url)
    assert response.status_code == status_code
    if status_code == 200:
        album = json.loads(response.content)
        return album
def get_list(token, params={}, count=-1):
    print()
    request_url = env.env_var.get("URL") + "/studies"
    headers = {"Authorization": "Bearer "+ token}
    response = requests.get(request_url, headers=headers, params=params)
    util.print_request("GET", response, request_url)
    if count > 0:
        assert response.status_code == 200
        assert response.headers.get("X-Total-Count") == str(count)
        studiesList = json.loads(response.content)
        return studiesList
    elif count == 0:
        assert response.status_code == 204
        assert response.headers.get("X-Total-Count") == str(count)
    else:
        assert response.status_code == 200 or 204
        if int(response.headers.get("X-Total-Count")) != 0:
            studiesList = json.loads(response.content)
            return studiesList
def post_comment(token,
                 album_id,
                 data={"comment": "default comment"},
                 status_code=204):
    print()
    request_url = env.env_var.get("URL") + "/albums/" + album_id + "/comments"
    headers = {
        "Authorization": "Bearer " + token,
        "Accept": "application/json",
        "Content-Type": "application/x-www-form-urlencoded"
    }
    response = requests.post(request_url,
                             headers=headers,
                             data=util.urlencode(data))
    util.print_request("POST", response, request_url)
    assert response.status_code == status_code
    if status_code == 201:
        album = json.loads(response.content)
        return album