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)
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
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)
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
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)
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)
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)
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)
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)
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)
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)
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)