Exemplo n.º 1
0
def image_colors():
    logger_header("/image_colors")
    auth = request.authorization
    user_id = auth.username
    upc = request.args.get('upc')

    product_info = get_product_info_internal(user_id, upc)
    logger.debug("Product info: {0}".format(product_info))
    color_name = product_info["color"]

    product_name = product_info["product_name"]
    points_earned = moot_points(product_name, MAX_POINTS_FOR_PRODUCT)
    db = MootDao()
    try:
        db.award_points(user_id, points_earned)
    except Exception as e:
        logger.critical("Awarding points to user '{0}' failed with exception "
                        "{1}".format(user_id, e))

    response = {}
    response["product_name"] = product_name
    response["product_img"] = product_info["product_img"]
    response["points_earned"] = points_earned
    response["color"] = color_name
    response["status"] = SUCCESS
    logger.debug(response)
    return jsonify(response)
Exemplo n.º 2
0
def image_colors():
    logger_header("/image_colors")
    auth = request.authorization
    user_id = auth.username
    upc = request.args.get('upc')

    product_info = get_product_info_internal(user_id, upc)
    logger.debug("Product info: {0}".format(product_info))
    color_name = product_info["color"]

    product_name = product_info["product_name"]
    points_earned = moot_points(product_name, MAX_POINTS_FOR_PRODUCT)
    db = MootDao()
    try:
        db.award_points(user_id, points_earned)
    except Exception as e:
        logger.critical("Awarding points to user '{0}' failed with exception "
                        "{1}".format(user_id, e))

    response = {}
    response["product_name"] = product_name
    response["product_img"] = product_info["product_img"]
    response["points_earned"] = points_earned
    response["color"] = color_name
    response["status"] = SUCCESS
    logger.debug(response)
    return jsonify(response)
Exemplo n.º 3
0
def get_product_info_internal(user_id, upc):
    logger_header('/get_product_info_internal')

    # Get data from searchupc API
    params = {
        'request_type': UPC_REQUEST_TYPE,
        'access_token': UPC_ACCESS_TOKEN,
        'upc': upc
    }
    barcode_data = requests.get(SEARCH_UPC_URL, params=params)
    barcode_data = barcode_data.json()
    product_name = barcode_data["0"]["productname"]
    product_img_url = barcode_data["0"]["imageurl"]

    # Download product image
    img_response = requests.get(product_img_url)

    # Get dominant color as RGB value
    color_thief = ColorThief(StringIO(img_response.content))
    dominant_color = color_thief.get_color(quality=1)
    dominant_color = tuple([color / 255.0 for color in dominant_color])
    red, green, blue = dominant_color[0], \
                       dominant_color[1], \
                       dominant_color[2]

    # Convert RGB color to HSV color, then increase saturation
    # value to 100%
    hsv_color = colorsys.rgb_to_hsv(red, green, blue)
    hue = hsv_color[0]
    saturation = hsv_color[1]
    value = hsv_color[2]
    new_rgb_color = colorsys.hsv_to_rgb(hue, 1.0, value)
    new_rgb_color = tuple([color * 255 for color in new_rgb_color])

    # Get color name of closest match
    color_name = get_color_name(new_rgb_color)

    logger.debug(new_rgb_color)
    logger.debug(color_name)

    product_info = {
        "product_name": product_name,
        "color": color_name,
        "product_img": product_img_url
    }

    db = MootDao()
    try:
        db.save_product(user_id, upc, product_name, color_name, "")
    except Exception as e:
        logger.critical(
            "Problem saving product info to database: {}".format(e))

    return product_info
Exemplo n.º 4
0
def get_unearned_achievements():
    logger_header('/get_unearned_achievements')
    db = MootDao()
    auth = request.authorization
    user_id = auth.username

    achievements = db.get_unearned_achievements(user_id)
    logger.debug(achievements)

    response = {}
    response["achievements"] = achievements
    response["status"] = SUCCESS
    return jsonify(response)
Exemplo n.º 5
0
def get_unearned_achievements():
    logger_header('/get_unearned_achievements')
    db = MootDao()
    auth = request.authorization
    user_id = auth.username

    achievements = db.get_unearned_achievements(user_id)
    logger.debug(achievements)

    response = {}
    response["achievements"] = achievements
    response["status"] = SUCCESS
    return jsonify(response)
Exemplo n.º 6
0
def get_product_info_internal(user_id, upc):
    logger_header('/get_product_info_internal')

    # Get data from searchupc API
    params = {'request_type': UPC_REQUEST_TYPE,
              'access_token': UPC_ACCESS_TOKEN,
              'upc': upc}
    barcode_data = requests.get(SEARCH_UPC_URL, params=params)
    barcode_data = barcode_data.json()
    product_name = barcode_data["0"]["productname"]
    product_img_url = barcode_data["0"]["imageurl"]

    # Download product image
    img_response = requests.get(product_img_url)

    # Get dominant color as RGB value
    color_thief = ColorThief(StringIO(img_response.content))
    dominant_color = color_thief.get_color(quality=1)
    dominant_color = tuple([color / 255.0 for color in dominant_color])
    red, green, blue = dominant_color[0], \
                       dominant_color[1], \
                       dominant_color[2]

    # Convert RGB color to HSV color, then increase saturation
    # value to 100%
    hsv_color = colorsys.rgb_to_hsv(red, green, blue)
    hue = hsv_color[0]
    saturation = hsv_color[1]
    value = hsv_color[2]
    new_rgb_color = colorsys.hsv_to_rgb(hue, 1.0, value)
    new_rgb_color = tuple([color * 255 for color in new_rgb_color])

    # Get color name of closest match
    color_name = get_color_name(new_rgb_color)

    logger.debug(new_rgb_color)
    logger.debug(color_name)

    product_info = {
        "product_name": product_name,
        "color": color_name,
        "product_img": product_img_url
    }

    db = MootDao()
    try:
        db.save_product(user_id, upc, product_name, color_name, "")
    except Exception as e:
        logger.critical("Problem saving product info to database: {}".format(e))

    return product_info
Exemplo n.º 7
0
def get_points():
    logger_header('/get_points')
    auth = request.authorization
    user_id = auth.username

    db = MootDao()
    response = {}
    try:
        points = db.get_points(user_id)
        response["points"] = points
        response["status"] = SUCCESS
    except Exception:
        response["status"] = FAILURE
    return jsonify(response)
Exemplo n.º 8
0
def get_high_scores():
    logger_header('/get_high_scores')
    num_scores = request.args.get('num_scores')

    db = MootDao()
    response = {}
    try:
        scores = db.get_high_scores(num_scores)
        response["scores"] = scores
        response["status"] = SUCCESS
    except Exception as e:
        response["status"] = FAILURE
        logger.critical("Problem getting high scores: {0}".format(e))
    return jsonify(response)
Exemplo n.º 9
0
def get_high_scores():
    logger_header('/get_high_scores')
    num_scores = request.args.get('num_scores')

    db = MootDao()
    response = {}
    try:
        scores = db.get_high_scores(num_scores)
        response["scores"] = scores
        response["status"] = SUCCESS
    except Exception as e:
        response["status"] = FAILURE
        logger.critical("Problem getting high scores: {0}".format(e))
    return jsonify(response)
Exemplo n.º 10
0
def get_points():
    logger_header('/get_points')
    auth = request.authorization
    user_id = auth.username

    db = MootDao()
    response = {}
    try:
        points = db.get_points(user_id)
        response["points"] = points
        response["status"] = SUCCESS
    except Exception:
        response["status"] = FAILURE
    return jsonify(response)
Exemplo n.º 11
0
def award_points():
    logger_header('/award_points')
    auth = request.authorization
    user_id = auth.username
    points = request.form["points"]

    db = MootDao()
    response = {}
    try:
        db.award_points(user_id, points)
        response["status"] = SUCCESS
    except Exception:
        response["status"] = FAILURE

    return jsonify(response)
Exemplo n.º 12
0
def award_points():
    logger_header('/award_points')
    auth = request.authorization
    user_id = auth.username
    points = request.form["points"]

    db = MootDao()
    response = {}
    try:
        db.award_points(user_id, points)
        response["status"] = SUCCESS
    except Exception:
        response["status"] = FAILURE

    return jsonify(response)
Exemplo n.º 13
0
def login():
    logger_header('/login')
    db = MootDao()
    auth = request.authorization
    user_id = auth.username
    password = auth.password
    name = request.args.get('name')

    response = {}

    if (password == config.get('mootapp', 'moot_password')
            and db.login(user_id, name)):
        response["status"] = SUCCESS
    else:
        response["status"] = FAILURE
    return jsonify(response)
Exemplo n.º 14
0
def get_product_info():
    auth = request.authorization
    user_id = auth.username

    upc = request.args.get("upc")
    product_name = get_product_name(upc)

    db = MootDao()
    response = {}
    try:
        db.get_product_info()
        response["status"] = SUCCESS
    except Exception:
        response["status"] = FAILURE

    return jsonify(response)
Exemplo n.º 15
0
def login():
    logger_header('/login')
    db = MootDao()
    auth = request.authorization
    user_id = auth.username
    password = auth.password
    name = request.args.get('name')

    response = {}

    if (password == config.get('mootapp', 'moot_password') and
            db.login(user_id, name)):
            response["status"] = SUCCESS
    else:
        response["status"] = FAILURE
    return jsonify(response)
Exemplo n.º 16
0
def get_product_info():
    auth = request.authorization
    user_id = auth.username

    upc = request.args.get("upc")
    product_name = get_product_name(upc)


    db = MootDao()
    response = {}
    try:
        db.get_product_info()
        response["status"] = SUCCESS
    except Exception:
        response["status"] = FAILURE

    return jsonify(response)
Exemplo n.º 17
0
def edit_name():
    logger_header('/edit_name')
    auth = request.authorization
    user_id = auth.username

    if request.method == 'POST':
        posted_name = request.form["name"]

    db = MootDao()
    try:
        if request.method == 'POST':
            db.edit_name(user_id, posted_name)
        name = db.get_name(user_id)
    except Exception as e:
        logger.critical("Could not edit name for {0}. Error: {1}".format(
            user_id, e))

    response = {}
    response["status"] = SUCCESS
    response["name"] = name
    return jsonify(response)
Exemplo n.º 18
0
def edit_name():
    logger_header('/edit_name')
    auth = request.authorization
    user_id = auth.username

    if request.method == 'POST':
        posted_name = request.form["name"]

    db = MootDao()
    try:
        if request.method == 'POST':
            db.edit_name(user_id, posted_name)
        name = db.get_name(user_id)
    except Exception as e:
        logger.critical("Could not edit name for {0}. Error: {1}".format(
            user_id, e))

    response = {}
    response["status"] = SUCCESS
    response["name"] = name
    return jsonify(response)
Exemplo n.º 19
0
def play_hangman():
    """
    Checks whether product name first letter is in word

    Returns one of the following game_states:
        0: Letter is in word, and is a correct guess
        1: Letter is in word, but has already been guessed
        2: Letter is not in word

    Request parameters
    upc: product        UPC as string
    target_word:        target word as string
    letters_guessed:    state of current game / all letters guessed as
                        string with underscores (_) representing blanks

    return:             {"guess": letter guessed"
                         "game_state": 0, 1, or 2 (see above)
                         "letters_guessed": state of current game}
    """
    logger_header("/play_hangman")
    auth = request.authorization
    user_id = auth.username

    upc = request.args.get('upc')
    target_word = request.args.get('target_word').upper()
    target_letters = list(target_word)
    letters_guessed = list(request.args.get('letters_guessed'))

    # Get "current letter" corresponding to first letter of scanned object
    product_info = get_product_info_internal(user_id, upc)
    product_name = product_info["product_name"]

    points_earned = moot_points(product_name, MAX_POINTS_FOR_PRODUCT)
    db = MootDao()
    response = {}
    try:
        db.award_points(user_id, points_earned)
    except Exception as e:
        logger.critical("Awarding points to user '{0}' failed with exception "
                        "{1}".format(user_id, e))

    logger.debug(product_name)

    current_letter = product_name[0].upper()
    logger.debug(current_letter)

    response = {}

    db = MootDao()
    try:
        db.save_product(user_id, upc, product_name, "", "")
    except Exception as e:
        logger.critical(e)
        response["status"] = FAILURE
        return jsonify(response)

    logger.debug(points_earned)

    # If character has already been revealed
    if current_letter in letters_guessed:
        response["guess"] = current_letter
        response["status"] = SUCCESS
        response["product_name"] = product_name
        response["color"] = product_info["color"]
        response["product_img"] = product_info["product_img"]
        response["points_earned"] = points_earned
        response["game_state"] = 1
        response["letters_guessed"] = ''.join(letters_guessed)
    # If guess is correct
    elif current_letter in target_letters:
        new_letters = list(letters_guessed)  # create new list
        for i in range(0, len(target_letters)):  # add new guess to list
            if target_letters[i] == current_letter:
                new_letters[i] = current_letter

        response["guess"] = current_letter
        response["status"] = SUCCESS
        response["product_name"] = product_name
        response["color"] = product_info["color"]
        response["product_img"] = product_info["product_img"]
        response["points_earned"] = points_earned
        response["game_state"] = 0
        response["letters_guessed"] = ''.join(new_letters)
    # If guess is incorrect
    else:
        response["guess"] = current_letter
        response["status"] = SUCCESS
        response["product_name"] = product_name
        response["color"] = product_info["color"]
        response["product_img"] = product_info["product_img"]
        response["points_earned"] = points_earned
        response["game_state"] = 2
        response["letters_guessed"] = ''.join(letters_guessed)
    return jsonify(response)
Exemplo n.º 20
0
def play_hangman():
    """
    Checks whether product name first letter is in word

    Returns one of the following game_states:
        0: Letter is in word, and is a correct guess
        1: Letter is in word, but has already been guessed
        2: Letter is not in word

    Request parameters
    upc: product        UPC as string
    target_word:        target word as string
    letters_guessed:    state of current game / all letters guessed as
                        string with underscores (_) representing blanks

    return:             {"guess": letter guessed"
                         "game_state": 0, 1, or 2 (see above)
                         "letters_guessed": state of current game}
    """
    logger_header("/play_hangman")
    auth = request.authorization
    user_id = auth.username

    upc = request.args.get('upc')
    target_word = request.args.get('target_word').upper()
    target_letters = list(target_word)
    letters_guessed = list(request.args.get('letters_guessed'))

    # Get "current letter" corresponding to first letter of scanned object
    product_info = get_product_info_internal(user_id, upc)
    product_name = product_info["product_name"]

    points_earned = moot_points(product_name, MAX_POINTS_FOR_PRODUCT)
    db = MootDao()
    response = {}
    try:
        db.award_points(user_id, points_earned)
    except Exception as e:
        logger.critical("Awarding points to user '{0}' failed with exception "
                        "{1}".format(user_id, e))

    logger.debug(product_name)

    current_letter = product_name[0].upper()
    logger.debug(current_letter)

    response = {}


    db = MootDao()
    try:
        db.save_product(user_id, upc, product_name, "", "")
    except Exception as e:
        logger.critical(e)
        response["status"] = FAILURE
        return jsonify(response)


    logger.debug(points_earned)

    # If character has already been revealed
    if current_letter in letters_guessed:
        response["guess"] = current_letter
        response["status"] = SUCCESS
        response["product_name"] = product_name
        response["color"] = product_info["color"]
        response["product_img"] = product_info["product_img"]
        response["points_earned"] = points_earned
        response["game_state"] = 1
        response["letters_guessed"] = ''.join(letters_guessed)
    # If guess is correct
    elif current_letter in target_letters:
        new_letters = list(letters_guessed)         # create new list
        for i in range (0, len(target_letters)):  # add new guess to list
            if target_letters[i] == current_letter:
                new_letters[i] = current_letter

        response["guess"] = current_letter
        response["status"] = SUCCESS
        response["product_name"] = product_name
        response["color"] = product_info["color"]
        response["product_img"] = product_info["product_img"]
        response["points_earned"] = points_earned
        response["game_state"] = 0
        response["letters_guessed"] = ''.join(new_letters)
    # If guess is incorrect
    else:
        response["guess"] = current_letter
        response["status"] = SUCCESS
        response["product_name"] = product_name
        response["color"] = product_info["color"]
        response["product_img"] = product_info["product_img"]
        response["points_earned"] = points_earned
        response["game_state"] = 2
        response["letters_guessed"] = ''.join(letters_guessed)
    return jsonify(response)