Esempio n. 1
0
    def post( self ):
        user = self.get_user( )
        if not user:
            self.redirect( "/" )
            return
        elif user == self.OVER_QUOTA_ERROR:
            self.error( 403 )
            self.render( "403.html" )
            return

        game = self.request.get( 'game' )

        params = dict( user = user, game = game )

        valid = True

        # Make sure the game doesn't already exist under a similar name
        game_code = util.get_code( game )
        game_model = self.get_game_model( game_code )
        if game_model == self.OVER_QUOTA_ERROR:
            self.error( 403 )
            self.render( "403.html", user=user )
            return        
        if not game_code:
            params['game_error'] = "Game cannot be blank"
            valid = False
        elif game_model is not None and game != game_model.game:
            params['game_error'] = ( "Game already exists under [" 
                                     + game_model.game + "] (case sensitive)."
                                     + " Hit submit again to confirm." )
            params['game'] = game_model.game
            valid = False
        elif not games.valid_game_or_category( game ):
            params['game_error'] = ( "Game name must not use any 'funny'"
                                     + " characters and can be up to 100 "
                                     + "characters long" )
            valid = False
            
        if not valid:
            # Grab all of the games for autocompleting
            params['games'] = self.get_static_gamelist( )   
            if params['games'] == self.OVER_QUOTA_ERROR:
                self.error( 403 )
                self.render( "403.html", user=user )
            else:
                self.render( "presubmit.html", **params )
            return

        if game_model is None:
            # Add the game to the database
            valid = self.put_new_game( game )
            if not valid:
                params['game_error'] = ( "Failed to process game with name ["
                                         + game + "] (unknown error)" )

        if valid:
            self.redirect( "/submit/" + game_code + '/' )
        else:
            # Grab all of the games for autocompleting
            params['games'] = self.get_static_gamelist( )
            if params['games'] == self.OVER_QUOTA_ERROR:
                self.error( 403 )
                self.render( "403.html", user=user )
            else:
                self.render( "presubmit.html", **params )
            return
Esempio n. 2
0
    def post( self ):
        # Get the user
        user = self.get_user( )
        if not user:
            self.redirect( "/" )
            return

        # Make sure user is a mod
        if not user.is_mod:
            self.error( 404 )
            self.render( "404.html", user=user )
            return

        old_game = self.request.get( 'old-game' )
        old_category = self.request.get( 'old-category' )
        new_game = self.request.get( 'new-game' )
        new_category = self.request.get( 'new-category' )

        params = dict( user=user, old_game=old_game, old_category=old_category,
                       new_game=new_game, new_category=new_category )

        valid = True

        # Make sure the new game doesn't already exist under a similar name
        new_game_code = util.get_code( new_game )
        new_game_model = self.get_game_model( new_game_code )
        if not new_game_code:
            params['new_game_error'] = "New game cannot be blank"
            valid = False
        elif new_game_model is not None and new_game != new_game_model.game:
            params['new_game_error'] = ( "New game already exists under [" 
                                         + new_game_model.game 
                                         + "] (case sensitive)."
                                         + " Hit submit again to confirm." )
            params['new_game'] = new_game_model.game
            valid = False
        elif not games.valid_game_or_category( new_game ):
            params['new_game_error'] = ( "Game name must not use any 'funny'"
                                         + " characters and can be up to 100 "
                                         + "characters long" )
            valid = False
        params[ 'new_game_code' ] = new_game_code
        params[ 'new_game_model' ] = new_game_model

        # Make sure the category doesn't already exist under a similar name
        new_category_code = util.get_code( new_category )
        new_category_found = False
        if not new_category_code:
            params['new_category_error'] = "Category cannot be blank"
            valid = False
        elif new_game_model is not None:
            infolist = json.loads( new_game_model.info )
            for info in infolist:
                if new_category_code == util.get_code( info['category'] ):
                    new_category_found = True
                    if new_category != info['category']:
                        params['new_category_error'] = ( "Category already exists "
                                                     + "under [" 
                                                     + info['category'] + "] "
                                                     + "(case sensitive). "
                                                     + "Hit submit again to "
                                                     + "confirm." )
                        params['new_category'] = info['category']
                        valid = False
                    break
        if( not new_category_found 
            and not games.valid_game_or_category( new_category ) ):
            params['new_category_error'] = ( "Category must not use any 'funny'"
                                         + " characters and can be up to 100 "
                                         + "characters long" )
            valid = False
        params[ 'new_category_found' ] = new_category_found

        if not valid:
            self.render( "change_categories.html", **params )
            return

        changes = self.change_categories( params )
    
        logging.info( changes )

        # Render changes
        self.write( changes )
Esempio n. 3
0
    def post(self):
        user = self.get_user()
        if not user:
            self.redirect("/")
            return

        game = self.request.get('game')
        category = self.request.get('category')
        time = self.request.get('time')
        datestr = self.request.get('date')
        video = self.request.get('video')
        version = self.request.get('version')
        notes = self.request.get('notes')
        is_bkt = self.request.get('bkt', default_value="no")
        if is_bkt == "yes":
            is_bkt = True
        else:
            is_bkt = False
        run_id = self.request.get('edit')

        params = dict(user=user,
                      game=game,
                      category=category,
                      time=time,
                      datestr=datestr,
                      video=video,
                      version=version,
                      notes=notes,
                      run_id=run_id,
                      is_bkt=is_bkt)

        valid = True

        # Make sure the game doesn't already exist under a similar name
        game_code = util.get_code(game)
        game_model = self.get_game_model(game_code)
        if not game_code:
            params['game_error'] = "Game cannot be blank"
            valid = False
        elif game_model is not None and game != game_model.game:
            params['game_error'] = ("Game already exists under [" +
                                    game_model.game + "] (case sensitive)." +
                                    " Hit submit again to confirm.")
            params['game'] = game_model.game
            valid = False
        elif not games.valid_game_or_category(game):
            params['game_error'] = ("Game name must not use any 'funny'" +
                                    " characters and can be up to 100 " +
                                    "characters long")
            valid = False
        params['game_code'] = game_code
        params['game_model'] = game_model

        # Make sure the category doesn't already exist under a similar name
        category_code = util.get_code(category)
        category_found = False
        if not category_code:
            params['category_error'] = "Category cannot be blank"
            valid = False
        elif game_model is not None:
            infolist = json.loads(game_model.info)
            for info in infolist:
                if category_code == util.get_code(info['category']):
                    category_found = True
                    if category != info['category']:
                        params['category_error'] = (
                            "Category already exists " + "under [" +
                            info['category'] + "] " + "(case sensitive). " +
                            "Hit submit again to " + "confirm.")
                        params['category'] = info['category']
                        valid = False
                    break
        if not category_found and not games.valid_game_or_category(category):
            params['category_error'] = ("Category must not use any 'funny'" +
                                        " characters and can be up to 100 " +
                                        "characters long")
            valid = False
        params['category_found'] = category_found

        # Parse the time into seconds, ensure it is valid
        (seconds, time_error) = util.timestr_to_seconds(time)
        if seconds is None:
            params['time_error'] = "Invalid time: " + time_error
            params['seconds'] = -1
            valid = False
        else:
            time = util.seconds_to_timestr(seconds)  # Enforce standard form
            params['time'] = time
            params['seconds'] = seconds

        # Parse the date, ensure it is valid
        (params['date'], params['date_error']) = util.datestr_to_date(datestr)
        if params['date_error']:
            params['date_error'] = "Invalid date: " + params['date_error']
            valid = False

        # Check that if this is a best known time, then it beats the old
        # best known time.
        if is_bkt and game_model is not None:
            gameinfolist = json.loads(game_model.info)
            for gameinfo in gameinfolist:
                if gameinfo['category'] == params['category']:
                    if (gameinfo.get('bk_seconds') is not None
                            and gameinfo['bk_seconds'] <= seconds):
                        s = ("This time does not beat current best known " +
                             "time of " + util.seconds_to_timestr(
                                 gameinfo.get('bk_seconds')) + " by " +
                             gameinfo['bk_runner'] +
                             " (if best known time is incorrect, you can " +
                             "update best known time after submission)")
                        params['bkt_error'] = s
                        params['is_bkt'] = False
                        valid = False
                    break

        # Check that if this is not the best known time, then it doesn't beat
        # the old best known time
        if not is_bkt and game_model is not None:
            gameinfolist = json.loads(game_model.info)
            for gameinfo in gameinfolist:
                if gameinfo['category'] == params['category']:
                    if (gameinfo.get('bk_seconds') is not None
                            and seconds < gameinfo['bk_seconds']):
                        s = (
                            "This time beats the current best known time of " +
                            util.seconds_to_timestr(gameinfo.get('bk_seconds'))
                            + " by " + gameinfo['bk_runner'] +
                            " (if best known time is incorrect, you can " +
                            "update best known time after submission)")
                        params['bkt_error'] = s
                        params['is_bkt'] = True
                        valid = False
                    break

        # Make sure that the notes are not too long
        if len(notes) > 140:
            params['notes_error'] = "Notes must be at most 140 characters"
            valid = False

        params['valid'] = valid

        if run_id:
            success = self.put_existing_run(params)
        else:
            success = self.put_new_run(params)
        if success:
            self.redirect("/runner/" + util.get_code(user.username) +
                          "?q=view-all")
        else:
            # Grab all of the games for autocompleting
            params['categories'] = self.get_categories()
            params['user'] = user
            self.render("submit.html", **params)
Esempio n. 4
0
    def post( self, game_code ):
        user = self.get_user( )
        if not user:
            self.redirect( "/" )
            return
        elif user == self.OVER_QUOTA_ERROR:
            self.error( 403 )
            self.render( "403.html" )
            return

        category = self.request.get( 'category' )
        time = self.request.get( 'time' )
        datestr = self.request.get( 'date' )
        video = self.request.get( 'video' )
        version = self.request.get( 'version' )
        notes = self.request.get( 'notes' )
        is_bkt = self.request.get( 'bkt', default_value="no" )
        if is_bkt == "yes":
            is_bkt = True
        else:
            is_bkt = False
        run_id = self.request.get( 'edit' )

        params = dict( user = user, game_code = game_code,
                       category = category, 
                       time = time, datestr = datestr, video = video, 
                       version = version, notes = notes, run_id = run_id, 
                       is_bkt = is_bkt )

        valid = True

        # Make sure the game already exists
        game_model = self.get_game_model( game_code )
        game = ''
        if not game_code:
            params['game_error'] = "Game cannot be blank"
            valid = False
        elif game_model is None:
            params['game_error'] = ( "That's weird, we could not find any "
                                     + "records for that game" )
            valid = False
        elif game_model == self.OVER_QUOTA_ERROR:
            params['game_error'] = ( "PB Tracker is currently over its quota"
                                     + " limit for the day. Please try again "
                                     + "tomorrow." )
            valid = False
        else:
            game = game_model.game
        params[ 'game' ] = game
        params[ 'game_model' ] = game_model

        # Make sure the category doesn't already exist under a similar name
        category_code = util.get_code( category )
        category_found = False
        if not category_code:
            params['category_error'] = "Category cannot be blank"
            valid = False
        elif game_model is not None:
            infolist = json.loads( game_model.info )
            for info in infolist:
                if category_code == util.get_code( info['category'] ):
                    category_found = True
                    if category != info['category']:
                        params['category_error'] = ( "Category already exists "
                                                     + "under [" 
                                                     + info['category'] + "] "
                                                     + "(case sensitive). "
                                                     + "Hit submit again to "
                                                     + "confirm." )
                        params['category'] = info['category']
                        valid = False
                    break
        if not category_found and not games.valid_game_or_category( category ):
            params['category_error'] = ( "Category must not use any 'funny'"
                                         + " characters and can be up to 100 "
                                         + "characters long" )
            valid = False
        params[ 'category_found' ] = category_found

        # Parse the time into seconds, ensure it is valid
        ( seconds, time_error ) = util.timestr_to_seconds( time )
        if seconds is None:
            params['time_error'] = "Invalid time: " + time_error
            params['seconds'] = -1
            valid = False
        else:
            time = util.seconds_to_timestr( seconds ) # Enforce standard form
            params[ 'time' ] = time
            params[ 'seconds' ] = seconds

        # Parse the date, ensure it is valid
        ( params['date'], params['date_error'] ) = util.datestr_to_date( 
            datestr )
        if params['date_error']:
            params['date_error'] = "Invalid date: " + params['date_error']
            valid = False
                
        # Check that if this is a best known time, then it beats the old
        # best known time.
        if is_bkt and game_model is not None:
            gameinfolist = json.loads( game_model.info )
            for gameinfo in gameinfolist:
                if gameinfo['category'] == params['category']:
                    if( gameinfo.get( 'bk_seconds' ) is not None
                        and gameinfo['bk_seconds'] <= seconds ):
                        s = ( "This time does not beat current best known "
                              + "time of " + util.seconds_to_timestr( 
                                  gameinfo.get( 'bk_seconds' ) ) 
                              + " by " + gameinfo['bk_runner'] 
                              + " (if best known time is incorrect, you can "
                              + "update best known time after submission)" )
                        params['bkt_error'] = s
                        params['is_bkt'] = False
                        valid = False
                    break
                
        # Check that if this is not the best known time, then it doesn't beat
        # the old best known time
        if not is_bkt and game_model is not None:
            gameinfolist = json.loads( game_model.info )
            for gameinfo in gameinfolist:
                if gameinfo['category'] == params['category']:
                    if( gameinfo.get( 'bk_seconds' ) is not None
                        and seconds < gameinfo['bk_seconds'] ):
                        s = ( "This time beats the current best known time of "
                              + util.seconds_to_timestr( 
                                gameinfo.get( 'bk_seconds' ) )
                              + " by " + gameinfo['bk_runner']
                              + " (if best known time is incorrect, you can "
                              + "update best known time after submission)" )
                        params['bkt_error'] = s
                        params['is_bkt'] = True
                        valid = False
                    break

        # Make sure that the notes are not too long
        if len( notes ) > 140:
            params['notes_error'] = "Notes must be at most 140 characters"
            valid = False

        params['valid'] = valid
        
        if run_id:
            success = self.put_existing_run( params )
        else:
            success = self.put_new_run( params )
        if success:
            self.redirect( "/runner/" + util.get_code( user.username )
                           + "?q=view-all" )
        elif game_model is not None:
            try:
                # Grab all of the categories for autocompleting
                params['categories'] = game_model.categories( )
                params['user'] = user
                self.render( "submit.html", **params )
            except DeadlineExceededError, msg:
                logging.error( msg )
                self.error( 403 )
                self.render( "deadline_exceeded.html", user=user )
Esempio n. 5
0
    def post( self ):
        # Get the user
        user = self.get_user( )
        if not user:
            self.redirect( "/" )
            return
        elif user == self.OVER_QUOTA_ERROR:
            self.error( 403 )
            self.render( "403.html" )
            return

        # Make sure user is a mod
        if not user.is_mod:
            self.error( 404 )
            self.render( "404.html", user=user )
            return

        old_game = self.request.get( 'old-game' )
        old_category = self.request.get( 'old-category' )
        new_game = self.request.get( 'new-game' )
        new_category = self.request.get( 'new-category' )

        params = dict( user=user, old_game=old_game, old_category=old_category,
                       new_game=new_game, new_category=new_category )

        valid = True

        # Make sure the new game doesn't already exist under a similar name
        new_game_code = util.get_code( new_game )
        new_game_model = self.get_game_model( new_game_code )
        if not new_game_code:
            params['new_game_error'] = "New game cannot be blank"
            valid = False
        if new_game_model == self.OVER_QUOTA_ERROR:
            self.error( 403 )
            self.render( "403.html", user=user )
            return
        elif new_game_model is not None and new_game != new_game_model.game:
            params['new_game_error'] = ( "New game already exists under [" 
                                         + new_game_model.game 
                                         + "] (case sensitive)."
                                         + " Hit submit again to confirm." )
            params['new_game'] = new_game_model.game
            valid = False
        elif not games.valid_game_or_category( new_game ):
            params['new_game_error'] = ( "Game name must not use any 'funny'"
                                         + " characters and can be up to 100 "
                                         + "characters long" )
            valid = False
        params[ 'new_game_code' ] = new_game_code
        params[ 'new_game_model' ] = new_game_model

        # Make sure the category doesn't already exist under a similar name
        new_category_code = util.get_code( new_category )
        new_category_found = False
        if not new_category_code:
            params['new_category_error'] = "Category cannot be blank"
            valid = False
        elif new_game_model is not None:
            infolist = json.loads( new_game_model.info )
            for info in infolist:
                if new_category_code == util.get_code( info['category'] ):
                    new_category_found = True
                    if new_category != info['category']:
                        params['new_category_error'] = ( "Category already exists "
                                                     + "under [" 
                                                     + info['category'] + "] "
                                                     + "(case sensitive). "
                                                     + "Hit submit again to "
                                                     + "confirm." )
                        params['new_category'] = info['category']
                        valid = False
                    break
        if( not new_category_found 
            and not games.valid_game_or_category( new_category ) ):
            params['new_category_error'] = ( "Category must not use any 'funny'"
                                         + " characters and can be up to 100 "
                                         + "characters long" )
            valid = False
        params[ 'new_category_found' ] = new_category_found

        if not valid:
            self.render( "change_categories.html", **params )
            return

        changes = self.change_categories( params )
    
        logging.info( changes )

        # Render changes
        self.write( changes )
Esempio n. 6
0
    def post(self):
        user = self.get_user()
        if not user:
            self.redirect("/")
            return
        elif user == self.OVER_QUOTA_ERROR:
            self.error(403)
            self.render("403.html")
            return

        game = self.request.get('game')

        params = dict(user=user, game=game)

        valid = True

        # Make sure the game doesn't already exist under a similar name
        game_code = util.get_code(game)
        game_model = self.get_game_model(game_code)
        if game_model == self.OVER_QUOTA_ERROR:
            self.error(403)
            self.render("403.html", user=user)
            return
        if not game_code:
            params['game_error'] = "Game cannot be blank"
            valid = False
        elif game_model is not None and game != game_model.game:
            params['game_error'] = ("Game already exists under [" +
                                    game_model.game + "] (case sensitive)." +
                                    " Hit submit again to confirm.")
            params['game'] = game_model.game
            valid = False
        elif not games.valid_game_or_category(game):
            params['game_error'] = ("Game name must not use any 'funny'" +
                                    " characters and can be up to 100 " +
                                    "characters long")
            valid = False

        if not valid:
            # Grab all of the games for autocompleting
            params['games'] = self.get_gamelist(get_num_pbs=False)
            if params['games'] == self.OVER_QUOTA_ERROR:
                self.error(403)
                self.render("403.html", user=user)
            else:
                self.render("presubmit.html", **params)
            return

        if game_model is None:
            # Add the game to the database
            valid = self.put_new_game(game)
            if not valid:
                params['game_error'] = ("Failed to process game with name [" +
                                        game + "] (unknown error)")

        if valid:
            self.redirect("/submit/" + game_code + '/')
        else:
            # Grab all of the games for autocompleting
            params['games'] = self.get_gamelist(get_num_pbs=False)
            if params['games'] == self.OVER_QUOTA_ERROR:
                self.error(403)
                self.render("403.html", user=user)
            else:
                self.render("presubmit.html", **params)
            return