Example #1
0
    def post( self, username_code ):
        user = self.get_user( )

        # Make sure this is the correct user
        if user is None:
            self.error( 404 )
            self.render( "404.html", user=user )
            return
        elif user == self.OVER_QUOTA_ERROR:
            self.error( 403 )
            self.render( "403.html" )
            return
        elif util.get_code( user.username ) != username_code:
            self.error( 404 )
            self.render( "404.html", user=user )
            return

        # Get the visible columns
        visible_columns = util.get_default_visible_columns( )
        for key in visible_columns:
            checked = self.request.get( key + '_visible', default_value="no" )
            if checked == "yes":
                visible_columns[ key ] = True
            else:
                visible_columns[ key ] = False
        
        # Store
        user.visible_columns = json.dumps( visible_columns )
        user.put( )

        # Update memcache
        self.update_cache_runner( username_code, user )

        # That's all
        self.redirect( "/runner/" + username_code )
Example #2
0
    def get( self, username_code ):
        user = self.get_user( )

        # Make sure this is the correct user
        if user is None:
            self.error( 404 )
            self.render( "404.html", user=user )
            return
        elif user == self.OVER_QUOTA_ERROR:
            self.error( 403 )
            self.render( "403.html" )
            return
        elif util.get_code( user.username ) != username_code:
            self.error( 404 )
            self.render( "404.html", user=user )
            return

        # Get the stored visible columns, or get the default ones 
        if user.visible_columns:
            visible_columns = json.loads( user.visible_columns )
        else:
            visible_columns = util.get_default_visible_columns( )

        self.render( "edit_table.html", user=user, username_code=username_code,
                     visible_columns=visible_columns )
Example #3
0
    def post(self, username_code):
        user = self.get_user()

        # Make sure this is the correct user
        if user is None or util.get_code(user.username) != username_code:
            self.error(404)
            self.render("404.html", user=user)
            return

        # Get the visible columns
        visible_columns = util.get_default_visible_columns()
        for key in visible_columns:
            checked = self.request.get(key + '_visible', default_value="no")
            if checked == "yes":
                visible_columns[key] = True
            else:
                visible_columns[key] = False

        # Store
        user.visible_columns = json.dumps(visible_columns)
        user.put()

        # Update memcache
        self.update_cache_runner(username_code, user)

        # That's all
        self.redirect("/runner/" + username_code)
Example #4
0
    def get(self, username_code):
        user = self.get_user()

        # Make sure this is the correct user
        if user is None:
            self.error(404)
            self.render("404.html", user=user)
            return
        elif user == self.OVER_QUOTA_ERROR:
            self.error(403)
            self.render("403.html")
            return
        elif util.get_code(user.username) != username_code:
            self.error(404)
            self.render("404.html", user=user)
            return

        # Get the stored visible columns, or get the default ones
        if user.visible_columns:
            visible_columns = json.loads(user.visible_columns)
        else:
            visible_columns = util.get_default_visible_columns()

        self.render("edit_table.html",
                    user=user,
                    username_code=username_code,
                    visible_columns=visible_columns)
Example #5
0
    def get(self, username_code):
        user = self.get_user()
        q = self.request.get('q', default_value=None)

        # Make sure the runner exists
        runner = self.get_runner(username_code)
        if runner is None:
            self.error(404)
            self.render("404.html", user=user)
            return
        username = runner.username
        gravatar = util.get_gravatar_url(runner.gravatar, size=120)

        if q == 'view-all':
            # List all runs for this runner
            runlist = self.get_runlist_for_runner(username)
            if self.format == 'html':
                self.render("listruns.html",
                            user=user,
                            runner=runner,
                            username_code=username_code,
                            runlist=runlist,
                            gravatar=gravatar)
            elif self.format == 'json':
                self.render_json(runlist)
        else:
            # By default, list pbs for this runner
            pblist = self.get_pblist(username)
            # We are also going to list the best known times for each game.
            # Let's gather those times here and add them to the pblist info.
            for pb in pblist:
                game_model = self.get_game_model(pb['game_code'])
                if game_model is None:
                    logging.error("No game_model for game " + pb['game'])
                    continue
                gameinfolist = json.loads(game_model.info)
                for runinfo in pb['infolist']:
                    # Find the matching gameinfo
                    for gameinfo in gameinfolist:
                        if gameinfo['category'] == runinfo['category']:
                            runinfo['bk_runner'] = gameinfo.get('bk_runner')
                            runinfo['bk_time'] = util.seconds_to_timestr(
                                gameinfo.get('bk_seconds'))
                            runinfo['bk_video'] = gameinfo.get('bk_video')
                            break

            if runner.visible_columns:
                visible_columns = json.loads(runner.visible_columns)
            else:
                visible_columns = util.get_default_visible_columns()

            if self.format == 'html':
                self.render("runnerpage.html",
                            user=user,
                            runner=runner,
                            username_code=username_code,
                            pblist=pblist,
                            gravatar=gravatar,
                            visible_columns=visible_columns)
            elif self.format == 'json':
                self.render_json(pblist)
Example #6
0
    def get( self, username_code ):
        try:
            user = self.get_user( )
            if user == self.OVER_QUOTA_ERROR:
                user = None
            q = self.request.get( 'q', default_value=None )
            t = self.request.get( 't', default_value=None )
            show_all = False
            page_num = 1
            if t == 'show-all':
                show_all = True
            else:
                # Grab the page num
                page_num = self.request.get( 'page', default_value=1 )
                try:
                    page_num = int( page_num )
                except ValueError:
                    page_num = 1

            # Make sure the runner exists
            runner = self.get_runner( username_code )
            if runner is None:
                self.error( 404 )
                self.render( "404.html", user=user )
                return
            if runner == self.OVER_QUOTA_ERROR:
                self.error( 403 )
                if self.format == 'html':
                    self.render( "403.html", user=user )
                return
            username = runner.username
            gravatar = util.get_gravatar_url( runner.gravatar, size=120 )

            if q == 'view-all':
                # List all runs for this runner
                res = self.get_runlist_for_runner( username, page_num )
                if res == self.OVER_QUOTA_ERROR:
                    self.error( 403 )
                    self.render( "403.html", user=user )
                elif self.format == 'html':
                    self.render( "listruns.html", user=user, runner=runner,
                                 username_code=username_code,
                                 runlist=res['runlist'],
                                 page_num=res['page_num'],
                                 has_next=res['has_next'],
                                 has_prev=(res['page_num'] > 1),
                                 gravatar=gravatar )
                elif self.format == 'json':
                    self.render_json( res['runlist'] )
            else:
                # By default, list pbs for this runner
                res = self.get_pblist( username, page_num, show_all )
                if res == self.OVER_QUOTA_ERROR:
                    self.error( 403 )
                    self.render( "403.html", user=user )
                    return
                # We are also going to list the best known times for each game.
                # Let's gather those times here and add them to the pblist
                # info.
                pblist = res['pblist']
                for pb in pblist:
                    game_model = self.get_game_model( pb['game_code'] )
                    if game_model is None:
                        logging.error( "No game_model for game " + pb['game'] )
                        continue
                    if game_model == self.OVER_QUOTA_ERROR:
                        self.error( 403 )
                        self.render( "403.html", user=user )
                        return
                    gameinfolist = json.loads( game_model.info )
                    for runinfo in pb['infolist']:
                        # Find the matching gameinfo
                        for gameinfo in gameinfolist:
                            if gameinfo['category'] == runinfo['category']:
                                runinfo['bk_runner'] = gameinfo.get(
                                    'bk_runner' )
                                runinfo['bk_time'] = util.seconds_to_timestr(
                                    gameinfo.get( 'bk_seconds' ) )
                                runinfo['bk_video'] = gameinfo.get(
                                    'bk_video' )
                                break

                if runner.visible_columns:
                    visible_columns = json.loads( runner.visible_columns )
                else:
                    visible_columns = util.get_default_visible_columns( )

                if self.format == 'html':
                    self.render( "runnerpage.html", user=user, runner=runner,
                                 username_code=username_code, pblist=pblist,
                                 gravatar=gravatar, page_num=res['page_num'],
                                 has_next=res['has_next'],
                                 has_prev=( res['page_num'] > 1 ),
                                 visible_columns=visible_columns,
                                 show_all=res['show_all'] )
                elif self.format == 'json':
                    self.render_json( pblist )

        except DeadlineExceededError, msg:
            logging.error( msg )
            self.error( 403 )
            self.render( "deadline_exceeded.html", user=user )