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