def add_rating(rating):
    rating_object = Rating(rating=rating)
    session.add(rating_object)
    session.commit()
예제 #2
0
    db.create_all()

    user_filename = "seed_data/u.user"
    movie_filename = "seed_data/u.item"
    rating_filename = "seed_data/u.data"
    load_users(user_filename)
    load_movies(movie_filename)
    load_ratings(rating_filename)

    # Mimic what we did in the interpreter, and add the Eye and some ratings
    eye = User(email="*****@*****.**", password="******")
    db.session.add(eye)
    db.session.commit()

    # Toy Story
    r = Rating(user_id=eye.user_id, movie_id=1, score=1)
    db.session.add(r)

    # Robocop 3
    r = Rating(user_id=eye.user_id, movie_id=1274, score=5)
    db.session.add(r)

    # Judge Dredd
    r = Rating(user_id=eye.user_id, movie_id=373, score=5)
    db.session.add(r)

    # 3 Ninjas
    r = Rating(user_id=eye.user_id, movie_id=314, score=5)
    db.session.add(r)

    # Aladdin
예제 #3
0
def create_rating(user, movie, score):
    """ Creates movie rating"""
    rating = Rating(user=user, movie=movie, score=score)
    db.session.add(rating)
    db.session.commit()
    return rating
예제 #4
0
def display_movie(movie_id):
    """Displays details for specified movie and allow user to add rating."""

    # Prevents unlogged in users from adding ratings
    user_has_rated = None

    # Find current user if logged in
    if session.get('username'):
        user_id = session.get('user_id')

        # Determine if user has previously rated this movie
        user_has_rated = Rating.query.filter_by(user_id=user_id, movie_id=movie_id).first()

    # Return movie ratings on GET request
    if request.method == 'GET':
        movie = Movie.query.filter_by(movie_id=movie_id).first()
        rating_scores = [r.score for r in movie.ratings]

        avg_rating = float(sum(rating_scores)) / len(rating_scores)

        prediction = None

        if (not user_has_rated) and user_id:
            user = User.query.get(user_id)
            if user:
                prediction = user.predict_rating(movie)

        # Either use the prediction or their real rating
        if prediction:

            # User hasn't scored; use our prediction if we made one
            effective_rating = prediction

        elif user_has_rated:

            # User has already scored for real; use that
            effective_rating = user_has_rated.score

        else:

            # User hasn't scored, and we couldn't get a prediction
            effective_rating = None

        # Get the eye's rating, either by predicting or using real rating

        the_eye = (User.query.filter_by(email="*****@*****.**")
                             .first())
        eye_rating = Rating.query.filter_by(
            user_id=the_eye.user_id, movie_id=movie.movie_id).first()

        if eye_rating is None:
            eye_rating = the_eye.predict_rating(movie)

        else:
            eye_rating = eye_rating.score

        if eye_rating and effective_rating:
            difference = abs(eye_rating - effective_rating)

        else:
            # We couldn't get an eye rating, so we'll skip difference
            difference = None

        if difference is not None:
            beratement = BERATEMENT_MESSAGES[int(difference)]

        else:
            beratement = None

        return render_template("movie_details.html",
                               movie=movie,
                               user_has_rated=user_has_rated,
                               average=avg_rating,
                               prediction=prediction,
                               beratement=beratement)

    # Handle new movie rating on POST request
    else:
        # Get form input
        score = request.form.get("score")

        # If user has already rated, update the score
        if user_has_rated:
            user_has_rated.score = score

        # Else add new rating to database
        else:
            rating = Rating(movie_id=movie_id, user_id=user_id, score=score)
            db.session.add(rating)

        # Commit changes to database
        db.session.commit()

        flash("Your rating of {} has been added.".format(score))
        return redirect("/movies/" + movie_id)
예제 #5
0
파일: test_dao.py 프로젝트: ripgarpr/garpr
    def setUp(self):
        self.mongo_client.drop_database(DATABASE_NAME)

        self.player_1_id = ObjectId()
        self.player_2_id = ObjectId()
        self.player_3_id = ObjectId()
        self.player_4_id = ObjectId()
        self.player_5_id = ObjectId()
        self.player_1 = Player(name='gaR',
                               aliases=['gar', 'garr'],
                               ratings={
                                   'norcal': Rating(),
                                   'texas': Rating()
                               },
                               regions=['norcal', 'texas'],
                               id=self.player_1_id)
        self.player_2 = Player(name='sfat',
                               aliases=['sfat', 'miom | sfat'],
                               ratings={'norcal': Rating()},
                               regions=['norcal'],
                               id=self.player_2_id)
        self.player_3 = Player(name='mango',
                               aliases=['mango', 'gar'],
                               ratings={'norcal': Rating(mu=2, sigma=3)},
                               regions=['socal'],
                               id=self.player_3_id)
        self.player_4 = Player(name='shroomed',
                               aliases=['shroomed'],
                               ratings={'norcal': Rating()},
                               regions=['norcal'],
                               id=self.player_4_id)
        self.player_5 = Player(name='pewpewu',
                               aliases=['pewpewu'],
                               ratings={'norcal': Rating()},
                               regions=['norcal', 'socal'],
                               id=self.player_5_id)

        self.merge_player_1 = Player(name='CLGsFaT',
                                     aliases=['clg | sfat'],
                                     ratings={'norcal': Rating()},
                                     regions=['norcal'],
                                     id=ObjectId())

        # only includes players 1-3
        self.players = [self.player_1, self.player_2, self.player_3]

        self.tournament_id_1 = ObjectId()
        self.tournament_type_1 = 'tio'
        self.tournament_raw_id_1 = ObjectId()
        self.tournament_date_1 = datetime(2013, 10, 16)
        self.tournament_name_1 = 'tournament 1'
        self.tournament_players_1 = [
            self.player_1_id, self.player_2_id, self.player_3_id,
            self.player_4_id
        ]
        self.tournament_matches_1 = [
            Match(winner=self.player_1_id, loser=self.player_2_id),
            Match(winner=self.player_3_id, loser=self.player_4_id)
        ]
        self.tournament_regions_1 = ['norcal']

        # tournament 2 is earlier than tournament 1, but inserted after
        self.tournament_id_2 = ObjectId()
        self.tournament_type_2 = 'challonge'
        self.tournament_raw_id_2 = ObjectId()
        self.tournament_date_2 = datetime(2013, 10, 10)
        self.tournament_name_2 = 'tournament 2'
        self.tournament_players_2 = [
            self.player_5_id, self.player_2_id, self.player_3_id,
            self.player_4_id
        ]
        self.tournament_matches_2 = [
            Match(winner=self.player_5_id, loser=self.player_2_id),
            Match(winner=self.player_3_id, loser=self.player_4_id)
        ]
        self.tournament_regions_2 = ['norcal', 'texas']

        self.tournament_1 = Tournament(id=self.tournament_id_1,
                                       name=self.tournament_name_1,
                                       type=self.tournament_type_1,
                                       date=self.tournament_date_1,
                                       regions=self.tournament_regions_1,
                                       raw_id=self.tournament_raw_id_1,
                                       players=self.tournament_players_1,
                                       matches=self.tournament_matches_1)

        self.tournament_2 = Tournament(id=self.tournament_id_2,
                                       name=self.tournament_name_2,
                                       type=self.tournament_type_2,
                                       date=self.tournament_date_2,
                                       regions=self.tournament_regions_2,
                                       raw_id=self.tournament_raw_id_2,
                                       players=self.tournament_players_2,
                                       matches=self.tournament_matches_2)

        self.tournament_ids = [self.tournament_id_1, self.tournament_id_2]
        self.tournaments = [self.tournament_1, self.tournament_2]

        self.pending_tournament_id_1 = ObjectId()
        self.pending_tournament_type_1 = 'tio'
        self.pending_tournament_raw_id_1 = ObjectId()
        self.pending_tournament_date_1 = datetime(2013, 10, 11)
        self.pending_tournament_name_1 = 'pending tournament 1'
        self.pending_tournament_players_1 = [
            self.player_1.name, self.player_2.name, self.player_3.name,
            self.player_4.name
        ]
        self.pending_tournament_matches_1 = [
            AliasMatch(winner=self.player_1.name, loser=self.player_2.name),
            AliasMatch(winner=self.player_3.name, loser=self.player_4.name)
        ]
        self.pending_tournament_regions_1 = ['norcal']

        self.pending_tournament_1 = PendingTournament(
            id=self.pending_tournament_id_1,
            name=self.pending_tournament_name_1,
            type=self.pending_tournament_type_1,
            date=self.pending_tournament_date_1,
            regions=self.pending_tournament_regions_1,
            raw_id=self.pending_tournament_raw_id_1,
            players=self.pending_tournament_players_1,
            matches=self.pending_tournament_matches_1)

        self.pending_tournaments = [self.pending_tournament_1]

        self.ranking_entry_1 = RankingEntry(rank=1,
                                            player=self.player_1_id,
                                            rating=20)
        self.ranking_entry_2 = RankingEntry(rank=2,
                                            player=self.player_2_id,
                                            rating=19)
        self.ranking_entry_3 = RankingEntry(rank=3,
                                            player=self.player_3_id,
                                            rating=17.5)
        self.ranking_entry_4 = RankingEntry(rank=3,
                                            player=self.player_4_id,
                                            rating=16.5)

        self.ranking_time_1 = datetime(2013, 4, 20)
        self.ranking_time_2 = datetime(2013, 4, 21)
        self.ranking_1 = Ranking(id=ObjectId(),
                                 region='norcal',
                                 time=self.ranking_time_1,
                                 tournaments=self.tournament_ids,
                                 ranking=[
                                     self.ranking_entry_1,
                                     self.ranking_entry_2, self.ranking_entry_3
                                 ])
        self.ranking_2 = Ranking(id=ObjectId(),
                                 region='norcal',
                                 time=self.ranking_time_2,
                                 tournaments=self.tournament_ids,
                                 ranking=[
                                     self.ranking_entry_1,
                                     self.ranking_entry_2, self.ranking_entry_4
                                 ])
        self.ranking_3 = Ranking(
            id=ObjectId(),
            region='norcal',
            time=self.ranking_time_2,
            tournaments=self.tournament_ids,
            ranking=[self.ranking_entry_1, self.ranking_entry_2])

        self.rankings = [self.ranking_1, self.ranking_2, self.ranking_3]

        self.user_id_1 = 'abc123'
        self.user_admin_regions_1 = ['norcal', 'texas']
        self.user_1 = User(id=self.user_id_1,
                           admin_regions=self.user_admin_regions_1,
                           username='******',
                           salt='nacl',
                           hashed_password='******',
                           admin_level='REGION')

        self.user_id_2 = 'asdfasdf'
        self.user_full_name_2 = 'Full Name'
        self.user_admin_regions_2 = []
        self.user_2 = User(id=self.user_id_2,
                           admin_regions=self.user_admin_regions_2,
                           username=self.user_full_name_2,
                           salt='nacl',
                           hashed_password='******',
                           admin_level='REGION')

        self.superadmin_id = '123456'
        self.superadmin_full_name = 'superadmin'
        self.superadmin_admin_regions = []
        self.superadmin = User(
            id=self.superadmin_id,
            user_admin_regions=self.superadmin_admin_regions,
            username=self.superadmin_full_name,
            salt='nacl',
            hashed_password='******',
            admin_level='SUPER')

        self.users = [self.user_1, self.user_2, self.superadmin]

        self.region_1 = Region(id='norcal', display_name='Norcal')
        self.region_2 = Region(id='texas', display_name='Texas')

        self.regions = [self.region_1, self.region_2]

        for region in self.regions:
            Dao.insert_region(region,
                              self.mongo_client,
                              database_name=DATABASE_NAME)

        self.norcal_dao = Dao('norcal',
                              self.mongo_client,
                              database_name=DATABASE_NAME)

        for player in self.players:
            self.norcal_dao.insert_player(player)

        for tournament in self.tournaments:
            self.norcal_dao.insert_tournament(tournament)

        for pending_tournament in self.pending_tournaments:
            self.norcal_dao.insert_pending_tournament(pending_tournament)

        for ranking in self.rankings:
            self.norcal_dao.insert_ranking(ranking)

        for user in self.users:
            self.norcal_dao.insert_user(user)