Takes a color like #87c95f and produces a lighter or darker variant.
    Code adapted from method proposed by Chase Seibert at:
    http://chase-seibert.github.io/blog/2011/07/29/python-calculate-lighterdarker-rgb-colors.html.
    
    Args:
        hex_color (str): The original hex color.
        brightness_offset (int): The amount to shift the color by.

    Returns:
        new_color (str): The new hex color variant.

    Raises:
        Exception: if the len of the hex_color isn't the appropriate length (7).

def _color_variant(hex_color, brightness_offset=1):
    """Takes a color like #87c95f and produces a lighter or darker variant.
    Code adapted from method proposed by Chase Seibert at:
    http://chase-seibert.github.io/blog/2011/07/29/python-calculate-lighterdarker-rgb-colors.html.
    
    Args:
        hex_color (str): The original hex color.
        brightness_offset (int): The amount to shift the color by.

    Returns:
        new_color (str): The new hex color variant.

    Raises:
        Exception: if the len of the hex_color isn't the appropriate length (7).
    """
    if len(hex_color) != 7:
        raise Exception("Passed %s into color_variant(), needs to be in #87c95f format." % hex_color)
    rgb_hex = [hex_color[x:x+2] for x in [1, 3, 5]]
    new_rgb_int = [int(hex_value, 16) + brightness_offset for hex_value in rgb_hex]
    new_rgb_int = [min([255, max([0, i])]) for i in new_rgb_int] # make sure new values are between 0 and 255
    # hex() produces "0x88", we want just "88"
    new_color = "#"
    for i in new_rgb_int:
        if len(hex(i)[2:]) == 2:
            new_color += hex(i)[2:]
        else:
            new_color += hex(i)[2:] + "0"

    return new_color