Example #1
0
    def test_get_similar_users(self):
        user_id_21 = db_user.create(21, "twenty_one")
        user_id_22 = db_user.create(22, "twenty_two")
        user_id_23 = db_user.create(23, "twenty_three")

        similar_users_21 = {"twenty_two": 0.4, "twenty_three": 0.7}
        similar_users_22 = {"twenty_one": 0.4}
        similar_users_23 = {"twenty_one": 0.7}

        similar_users = {
            "twenty_one": similar_users_21,
            "twenty_two": similar_users_22,
            "twenty_three": similar_users_23,
        }

        import_user_similarities(similar_users)

        self.assertDictEqual(
            similar_users_21,
            db_user.get_similar_users(user_id_21).similar_users)
        self.assertDictEqual(
            similar_users_22,
            db_user.get_similar_users(user_id_22).similar_users)
        self.assertDictEqual(
            similar_users_23,
            db_user.get_similar_users(user_id_23).similar_users)
    def test_get_similar_users(self):
        user_id_21 = db_user.create(21, "twenty_one")
        user_id_22 = db_user.create(22, "twenty_two")
        user_id_23 = db_user.create(23, "twenty_three")

        similar_users_21 = {
            str(user_id_22): [0.4, .01],
            str(user_id_23): [0.7, 0.001]
        }
        similar_users_22 = {str(user_id_21): [0.4, .01]}
        similar_users_23 = {str(user_id_21): [0.7, .02]}

        similar_users = {
            str(user_id_21): similar_users_21,
            str(user_id_22): similar_users_22,
            str(user_id_23): similar_users_23,
        }

        import_user_similarities(similar_users)

        self.assertDictEqual(
            {
                "twenty_two": 0.4,
                "twenty_three": 0.7
            },
            db_user.get_similar_users(user_id_21).similar_users)
        self.assertDictEqual(
            {"twenty_one": 0.4},
            db_user.get_similar_users(user_id_22).similar_users)
        self.assertDictEqual(
            {"twenty_one": 0.7},
            db_user.get_similar_users(user_id_23).similar_users)
Example #3
0
def get_similar_to_user(user_name, other_user_name):
    """
    Get the similarity of the user and the other user, based on their listening history.
    Returns a single dict:

    {
      "user_name": "other_user",
      "similarity": 0.1938480256
    }

    :param user_name: the MusicBrainz ID of the the one user
    :param other_user_name: the MusicBrainz ID of the other user whose similar users are 
    :statuscode 200: Yay, you have data!
    :resheader Content-Type: *application/json*
    :statuscode 404: The requested user was not found.
    """
    user = db_user.get_by_mb_id(user_name)
    if not user:
        raise APINotFound("User %s not found" % user_name)

    similar_users = db_user.get_similar_users(user['id'])
    try:
        return jsonify({
            'payload': {
                "user_name": other_user_name,
                "similarity": similar_users.similar_users[other_user_name]
            }
        })
    except KeyError:
        raise APINotFound("Similar-to user not found")
Example #4
0
def get_similar_users(user_name):
    """
    Get list of users who have similar music tastes (based on their listen history)
    for a given user. Returns an array of dicts like these:

    {
      "user_name": "hwnrwx",
      "similarity": 0.1938480256
    }

    :param user_name: the MusicBrainz ID of the user whose similar users are being requested.
    :statuscode 200: Yay, you have data!
    :resheader Content-Type: *application/json*
    :statuscode 404: The requested user was not found.
    """

    user = db_user.get_by_mb_id(user_name)
    if not user:
        raise APINotFound("User %s not found" % user_name)
    similar_users = db_user.get_similar_users(user['id'])

    response = []
    for user_name in similar_users.similar_users:
        response.append({
            'user_name': user_name,
            'similarity': similar_users.similar_users[user_name]
        })
    return jsonify({
        'payload':
        sorted(response, key=itemgetter('similarity'), reverse=True)
    })