예제 #1
0
    def get(self):
        # Checks for active Google account session
        user = users.get_current_user()

        #Check if user is logged in
        if user is None:
            #Send html data to browser
            template_values = {'logged_out': users.create_login_url('/')}
            template = JINJA_ENVIRONMENT.get_template('templates/index.html')
            self.response.write(template.render(template_values))
        else:
            logout_url = users.create_logout_url('/')

            account = globals.get_or_create_account(user)
            league_id = account.league

            if league_id != '0':
                if league_key(league_id).get().draft_current_position == 0:
                    league_name = league_key(league_id).get().name
                else:
                    league_name = globals.draft_started_sentinel
            else:
                league_name = ""

            #Send html data to browser
            template_values = {
                        'user': user.nickname(),
                        'logout_url': logout_url,
                        'league_name': league_name
                        }
            template = JINJA_ENVIRONMENT.get_template('templates/index.html')
            self.response.write(template.render(template_values))
예제 #2
0
def remove_from_league(user_id):
    """
        Remove a certain user_id from their league, only if the draft hasn't already started
    """
    #Current user's id, used to identify their data
    account = Account.get_or_insert(user_id)

    if league_key(account.league).get() and league_key(
            account.league).get().draft_current_position == 0:
        #Remove user's choices and lineup for the league
        choice = choice_key(account_key(user_id), account.league).get()
        if choice:
            lineup_query = Lineup.query(ancestor=choice.key).fetch()
            for lineup in lineup_query:
                lineup.key.delete()
            choice.key.delete()

        #If this is the last person in the league, or this is the commissioner, delete it after they leave
        players = Account.query().filter(
            Account.league == account.league).fetch()
        if len(players) == 1 or account.league == account.key.id():
            past_league = account.league
            #Remove User's association with league
            account.league = '0'
            account.put()
            delete_league(past_league)

        #Remove User's association with league
        account.league = '0'
        account.put()
예제 #3
0
    def get(self):
        # Checks for active Google account session
        user = users.get_current_user()

        logout_url = users.create_logout_url('/')

        account = globals.get_or_create_account(user)
        league_id = account.league

        if league_id != '0':
            if league_key(league_id).get().draft_current_position == 0:
                league_name = league_key(league_id).get().name
            else:
                league_name = globals.draft_started_sentinel
        else:
            league_name = ""

        #Send html data to browser
        template_values = {
            'user': user.nickname(),
            'logout_url': logout_url,
            'league_name': league_name
        }
        template = JINJA_ENVIRONMENT.get_template(
            'templates/create_league.html')
        self.response.write(template.render(template_values))
    def get(self):
        # Checks for active Google account session
        user = users.get_current_user()

        #Current user's id, used to identify their data
        user_id = user.user_id()
        logout_url = users.create_logout_url('/')

        account = globals.get_or_create_account(user)
        league_id = account.league
        draft_over = league_key(league_id).get().draft_current_position == -1

        if draft_over:
            if league_id != '0':
                league_name = league_key(league_id).get().name
            else:
                league_name = ""

            total_points = 0
            week_table = []
            for weeknum in range(1, globals.number_of_official_weeks + 1):
                teams = get_team_lists(user_id, weeknum)[0]
                points = 0
                lineup = []
                for team in teams:
                    event_key = get_team_schedule(int(team['number']))[int(weeknum) - 1]['event_key']#-1 to convert to 0-based index
                    if event_key: #Check if the team is competing that week
                        points += get_team_points_at_event(team['number'], event_key)
                    lineup.append(team['number'])

                if is_week_editable(weeknum):
                    points = "<i>No Data</i>"
                else:
                    total_points += points

                week_row = {'week': str(weeknum), 'active_lineup': lineup, 'points': points}
                week_table.append(week_row)

            leader_board = get_leader_board(league_id)
            league_schedule = get_readable_schedule(league_id)

            template_values = {
                            'user': user.nickname(),
                            'logout_url': logout_url,
                            'league_name': league_name,
                            'week_table': week_table,
                            'total_points': total_points,
                            'leader_board': leader_board,
                            'schedule': league_schedule,
                            }

            template = JINJA_ENVIRONMENT.get_template('templates/alliance_management_portal.html')
            self.response.write(template.render(template_values))
        else:
            template = JINJA_ENVIRONMENT.get_template('templates/error_page.html')
            self.response.write(template.render({'Message':"This page requires that the draft be completed before accessing it"}))
예제 #5
0
    def get(self, page):
        """
            Display a certain page of the free agent list

            :param page: The page to display

            The free agent list is a list of teams that have not been drafted by any player.
            They are sorted by the total points of each team
            Users have the option to pick up teams or "flag" them to get updates about them
        """
        # Checks for active Google account session
        user = users.get_current_user()

        logout_url = users.create_logout_url('/')

        #Display update text for the status of the last choice update
        update_text = self.request.get('updated')

        account = globals.get_or_create_account(user)
        league_id = account.league

        if league_id != '0':
            if not page:
                page = 1
            else:
                page = int(page)

            if league_key(league_id).get().draft_current_position == 0:
                league_name = league_key(league_id).get().name
            else:
                league_name = globals.draft_started_sentinel

            free_agent_list = get_free_agent_list(league_id, page)

            #Send html data to browser
            template_values = {
                'user': user.nickname(),
                'logout_url': logout_url,
                'league_name': league_name,
                'update_text': update_text,
                'free_agent_list': free_agent_list,
                'page': page,
                'max_page': get_max_free_agent_pages(league_id),
            }
            template = JINJA_ENVIRONMENT.get_template('templates/falist.html')
            self.response.write(template.render(template_values))

        else:
            globals.display_error_page(
                self, self.request.referer,
                error_messages.need_to_be_a_member_of_a_league)
예제 #6
0
    def get(self, page):
        """
            Display a certain page of the free agent list

            :param page: The page to display

            The free agent list is a list of teams that have not been drafted by any player.
            They are sorted by the total points of each team
            Users have the option to pick up teams or "flag" them to get updates about them
        """
        # Checks for active Google account session
        user = users.get_current_user()

        logout_url = users.create_logout_url('/')

        #Display update text for the status of the last choice update
        update_text = self.request.get('updated')

        account = globals.get_or_create_account(user)
        league_id = account.league

        if league_id != '0':
            if not page:
                page = 1
            else:
                page = int(page)

            if league_key(league_id).get().draft_current_position == 0:
                league_name = league_key(league_id).get().name
            else:
                league_name = globals.draft_started_sentinel

            free_agent_list = get_free_agent_list(league_id, page)

            #Send html data to browser
            template_values = {
                'user': user.nickname(),
                'logout_url': logout_url,
                'league_name': league_name,
                'update_text': update_text,
                'free_agent_list': free_agent_list,
                'page': page,
                'max_page': get_max_free_agent_pages(league_id),
            }
            template = JINJA_ENVIRONMENT.get_template('templates/falist.html')
            self.response.write(template.render(template_values))

        else:
            globals.display_error_page(self, self.request.referer, error_messages.need_to_be_a_member_of_a_league)
예제 #7
0
    def get(self):
        # Checks for active Google account session
        user = users.get_current_user()

        logout_url = users.create_logout_url('/')

        account = globals.get_or_create_account(user)
        league_id = account.league

        league_query = League.query()
        league_list = league_query.fetch()

        league_output = []
        for league in league_list:
            number_of_players = len(Account.query().filter(
                Account.league == league.key.id()).fetch())
            commissioner = "None"
            if account_key(league.key.id()).get():
                commissioner = account_key(league.key.id()).get().nickname
            league_output.append({
                'name':
                league.name,
                'id':
                league.key.id(),
                'size':
                number_of_players,
                'commissioner':
                commissioner,
                'join_url':
                '/leagueManagement/joinLeague/' + league.key.id()
            })

        if league_id != '0':
            if league_key(league_id).get().draft_current_position == 0:
                league_name = league_key(league_id).get().name
            else:
                league_name = globals.draft_started_sentinel
        else:
            league_name = ""

        #Send html data to browser
        template_values = {
            'user': user.nickname(),
            'logout_url': logout_url,
            'league_list': league_output,
            'league_name': league_name
        }
        template = JINJA_ENVIRONMENT.get_template('templates/league_list.html')
        self.response.write(template.render(template_values))
    def get(self, week_number):
        # Checks for active Google account session
        user = users.get_current_user()

        #Current user's id, used to identify their data
        user_id = user.user_id()
        logout_url = users.create_logout_url('/')

        account = globals.get_or_create_account(user)
        league_id = account.league
        draft_over = league_key(league_id).get().draft_current_position == -1

        if league_id != '0':
            league_name = league_key(league_id).get().name
        else:
            league_name = ""

        if draft_over:
            team_lists = get_team_lists(user_id, week_number)
            point_total = 0
            for team in team_lists[0]:
                point_total += team['total_points']

            opponent_team_lists = get_team_lists(get_opponent(user_id, week_number), week_number)
            opponent_point_total = 0
            for team in opponent_team_lists[0]:
                opponent_point_total += team['total_points']



            #Send html data to browser
            template_values = {
                            'user': user.nickname(),
                            'logout_url': logout_url,
                            'league_name': league_name,
                            'week_number': int(week_number),
                            'point_totals': [point_total, opponent_point_total],
                            'team_listss': [team_lists, opponent_team_lists],
                            'opponent_name': get_opponent_name(user_id, week_number),
                            }

            if is_week_editable(week_number):
                template = JINJA_ENVIRONMENT.get_template('templates/alliance_management.html')
            else:
                template = JINJA_ENVIRONMENT.get_template('templates/past_alliances.html')
            self.response.write(template.render(template_values))
        else:
            template = JINJA_ENVIRONMENT.get_template('templates/error_page.html')
            self.response.write(template.render({'Message':"This page requires that the draft be completed before accessing it"}))
예제 #9
0
def close_draft(league_id):
    """
        Preform all of the operations necessary to finish the drafting process
        :param league_id: The league to do this in

        Called at the end of the draft
        Initialize lineup items
        Generate schedule
    """
    league = league_key(league_id).get()
    league.draft_current_position = -1  # Indicate the draft is over
    league.draft_current_timeout = None
    league.put()

    #Build a schedule
    generate_schedule(league_id)

    #Initialize requirements for bench/active system and distribute a schedule
    league_player_query = Account.query(Account.league == league_id)
    league_players = league_player_query.fetch()
    for player in league_players:
        #For the active system
        choice = Choice.get_or_insert(league_id, parent=player.key)
        for i in range(1, globals.number_of_official_weeks + 1):
            initialize_lineup(i, choice)  # Initialize weekly lineups
            player.record.append('')
        player.put()
예제 #10
0
    def get(self):
        """
            When visited by the league commissioner, the draft is started
            The commissioner is then redirected to the draft page
        """
        # Checks for active Google account session
        user = users.get_current_user()

        #Current user's id, used to identify their data
        user_id = user.user_id()

        account = globals.get_or_create_account(user)
        league_id = account.league
        league = league_key(league_id).get()

        league_comissioner = league.key.id()
        if league_comissioner == user_id:
            league_player_query = Account.query(Account.league == league_id)
            league_players = league_player_query.fetch()
            if len(league_players) > 1:
                if league.draft_current_position == 0:
                    start_draft(league_id)
                    setup_for_next_pick(league_id)
                    self.redirect('/draft/')
                else:
                    globals.display_error_page(
                        self, self.request.referer,
                        error_messages.draft_already_completed)
            else:
                globals.display_error_page(self, self.request.referer,
                                           error_messages.league_too_small)
        else:
            globals.display_error_page(self, self.request.referer,
                                       error_messages.access_denied)
예제 #11
0
    def post(self):
        user = users.get_current_user()
        account = globals.get_or_create_account(user)

        commissioner_account_key = account.key

        current_league = league_key(
            commissioner_account_key.get().league).get()

        #Get data from the post header
        name = self.request.get('name')
        snake = self.request.get('snake_draft') == 'on'

        if not current_league or current_league.draft_current_position == 0:
            if name != globals.draft_started_sentinel:
                #Create/Update the league
                new_league = League.get_or_insert(
                    commissioner_account_key.id())
                new_league.name = name
                new_league.snake_draft = snake
                new_league.draft_current_position = 0
                new_league.put()

                add_to_league(user.user_id(), new_league.key.id())

            self.redirect('/')
        else:
            globals.display_error_page(
                self, self.request.referer,
                error_messages.league_already_started_leaving)
예제 #12
0
    def get(self):
        # Checks for active Google account session
        user = users.get_current_user()

        #Check if user is logged in
        if user is None:
            #Send html data to browser
            template_values = {'logged_out': users.create_login_url('/help/points')}
            template = JINJA_ENVIRONMENT.get_template('templates/points_detail.html')
            self.response.write(template.render(template_values))
        else:
            #Current user's id, used to identify their data
            user_id = user.user_id()
            logout_url = users.create_logout_url('/')

            account = globals.get_or_create_account(user)
            league_id = account.league

            logging.info(account)
            if league_id != '0':
                league_name = league_key(league_id).get().name
            else:
                league_name = ""

            #Send html data to browser
            template_values = {
                        'user': user.nickname(),
                        'logout_url': logout_url,
                        'league_name': league_name
                        }
            template = JINJA_ENVIRONMENT.get_template('templates/points_detail.html')
            self.response.write(template.render(template_values))
예제 #13
0
    def get(self):
        """
            When visited by the league commissioner, the draft is started
            The commissioner is then redirected to the draft page
        """
        # Checks for active Google account session
        user = users.get_current_user()

        #Current user's id, used to identify their data
        user_id = user.user_id()

        account = globals.get_or_create_account(user)
        league_id = account.league
        league = league_key(league_id).get()

        league_comissioner = league.key.id()
        if league_comissioner == user_id:
            league_player_query = Account.query(Account.league == league_id)
            league_players = league_player_query.fetch()
            if len(league_players) > 1:
                if league.draft_current_position == 0:
                    start_draft(league_id)
                    setup_for_next_pick(league_id)
                    self.redirect('/draft/')
                else:
                    globals.display_error_page(self, self.request.referer, error_messages.draft_already_completed)
            else:
                globals.display_error_page(self, self.request.referer, error_messages.league_too_small)
        else:
            globals.display_error_page(self, self.request.referer,error_messages.access_denied)
예제 #14
0
def close_draft(league_id):
    """
        Preform all of the operations necessary to finish the drafting process
        :param league_id: The league to do this in

        Called at the end of the draft
        Initialize lineup items
        Generate schedule
    """
    league = league_key(league_id).get()
    league.draft_current_position = -1  # Indicate the draft is over
    league.draft_current_timeout = None
    league.put()

    #Build a schedule
    generate_schedule(league_id)

    #Initialize requirements for bench/active system and distribute a schedule
    league_player_query = Account.query(Account.league == league_id)
    league_players = league_player_query.fetch()
    for player in league_players:
        #For the active system
        choice = Choice.get_or_insert(league_id, parent=player.key)
        for i in range(1, globals.number_of_official_weeks + 1):
            initialize_lineup(i, choice)  # Initialize weekly lineups
            player.record.append('')
        player.put()
예제 #15
0
 def get(self):
     user_id = users.get_current_user().user_id()
     if league_key(account_key(
             user_id).get().league).get().draft_current_position == 0:
         remove_from_league(user_id)
         self.redirect('/')
     else:
         globals.display_error_page(
             self, self.request.referer,
             error_messages.league_already_started_leaving)
예제 #16
0
def delete_league(league_id):
    if league_id != '0': #Don't ever delete the default league
        league = league_key(league_id).get()
        players = Account.query().filter(Account.league == league_id).fetch()
        draft_picks = DraftPick.query(ancestor=league.key).fetch()
        for player in players:
            remove_from_league(player.key.id())
        for draft_pick in draft_picks:
            draft_pick.key.delete()
        league.key.delete()
예제 #17
0
    def get(self, league_id):
        user_id = users.get_current_user().user_id()

        if league_key(league_id).get().draft_current_position == 0:
            remove_from_league(user_id) #Remove from old league
            add_to_league(user_id, league_id) #Add to new one
            self.redirect('/')
        else:
            template = JINJA_ENVIRONMENT.get_template('templates/error_page.html')
            self.response.write(template.render({'Message':'This league has already begun, or has finished its draft'}))
예제 #18
0
 def get(self, league_id):
     """
         Adds a user to the specified league
         :param league_id: Collected from url, the league to join
     """
     user_id = users.get_current_user().user_id()
     current_league = league_key(account_key(user_id).get().league).get()
     if not current_league or current_league.draft_current_position == 0:
         if league_key(league_id).get().draft_current_position == 0:
             remove_from_league(user_id)  #Remove from old league
             add_to_league(user_id, league_id)  #Add to new one
             self.redirect('/')
         else:
             globals.display_error_page(
                 self, self.request.referer,
                 error_messages.league_already_started)
     else:
         globals.display_error_page(
             self, self.request.referer,
             error_messages.league_already_started_leaving)
예제 #19
0
def delete_league(league_id):
    """Delete a particular league"""
    if league_id != '0':  #Don't ever delete the default league
        league = league_key(league_id).get()
        players = Account.query().filter(Account.league == league_id).fetch()
        draft_picks = DraftPick.query(ancestor=league.key).fetch()
        for player in players:
            remove_from_league(player.key.id())
        for draft_pick in draft_picks:
            draft_pick.key.delete()
        league.key.delete()
예제 #20
0
    def get(self):
        # Checks for active Google account session
        user = users.get_current_user()

        #Check if user is logged in
        if user is None:
            #Send html data to browser
            template_values = {
                'logged_out': users.create_login_url('/help/points')
            }
            template = JINJA_ENVIRONMENT.get_template(
                'templates/points_detail.html')
            self.response.write(template.render(template_values))
        else:
            #Current user's id, used to identify their data
            user_id = user.user_id()
            logout_url = users.create_logout_url('/')

            account = globals.get_or_create_account(user)
            league_id = account.league

            if league_id != '0':
                if league_key(league_id).get().draft_current_position == 0:
                    league_name = league_key(league_id).get().name
                else:
                    league_name = globals.draft_started_sentinel
            else:
                league_name = ""

            #Send html data to browser
            template_values = {
                'user': user.nickname(),
                'logout_url': logout_url,
                'league_name': league_name
            }
            template = JINJA_ENVIRONMENT.get_template(
                'templates/points_detail.html')
            self.response.write(template.render(template_values))
예제 #21
0
    def get(self):
        # Checks for active Google account session
        user = users.get_current_user()

        #Check if user is logged in
        if user is None:
            #Send html data to browser
            template_values = {'logged_out': users.create_login_url('/about')}
            template = JINJA_ENVIRONMENT.get_template('templates/about.html')
            self.response.write(template.render(template_values))
        else:
            #Current user's id, used to identify their data
            user_id = user.user_id()
            logout_url = users.create_logout_url('/')

            #Make call to global method to id a user
            account = globals.get_or_create_account(user)
            league_id = account.league

            #Proccess the league info
            if league_id != '0':
                if league_key(league_id).get().draft_current_position == 0:
                    league_name = league_key(league_id).get().name
                else:
                    league_name = globals.draft_started_sentinel
            else:
                league_name = ""

            #Send html data to browser
            template_values = {
                        'user': user.nickname(),
                        'logout_url': logout_url,
                        'league_name': league_name
                        }
            template = JINJA_ENVIRONMENT.get_template('templates/about.html')
            self.response.write(template.render(template_values))
예제 #22
0
    def post(self):
        # Checks for active Google account session
        user = users.get_current_user()

        account = globals.get_or_create_account(user)
        league_id = account.league

        league_entity = league_key(league_id).get()
        current_position = league_entity.draft_current_position
        current_timeout = league_entity.draft_current_timeout
        current_time = datetime.datetime.utcnow()

        if current_position != 0 and current_position != -1:  #Don't process if draft is over or yet to begin
            current_pick = draft_pick_key(league_entity.key,
                                          current_position).get()
            if current_pick.player == account.key.urlsafe(
            ):  #Check that the calling player is actually within their turn
                if current_time < current_timeout:  #Check that the calling player is within their time constraints
                    #Get the new team from the post header
                    new_team = self.request.get('team')

                    #Validate the selection
                    selection_error = is_valid_team(new_team, league_id)
                    if selection_error == "Good":
                        #S'all good, update the datastore
                        current_pick.team = int(new_team)
                        current_pick.put()
                        #Add the team to the user's roster
                        user_choice = Choice.get_or_insert(league_id,
                                                           parent=account.key)
                        if not user_choice.current_team_roster:  # Make sure to use [] for an empty roster, not None
                            user_choice.current_team_roster = []
                        user_choice.current_team_roster.append(int(new_team))
                        user_choice.put()
                        #Move the draft along
                        setup_for_next_pick(league_id)
                else:
                    selection_error = "The time for your selection has expired"
            else:
                selection_error = "It is not your turn to make a selection"
        else:
            selection_error = "Draft is not currently in session"

        #Display the draft main page with status
        self.redirect('/draft/?updated=' + selection_error)
예제 #23
0
def setup_for_next_pick(league_id):
    """
        Set the database so that the next person can make a selection

        :param league_id: League to do this in
        If the draft is finished, appropriately call lose_draft
        If the draft is still in progress, increase the current draft_position by one and reset the timeout
    """
    league = league_key(league_id).get()
    league_player_query = Account.query(Account.league == league_id)
    league_players = league_player_query.fetch()
    number_of_picks = len(league_players) * globals.draft_rounds
    if league.draft_current_position == number_of_picks:  # See if the draft is over
        close_draft(league_id)
    else:
        league.draft_current_position += 1
        league.draft_current_timeout = datetime.datetime.utcnow() \
                                       + datetime.timedelta(minutes=globals.draft_time_minutes)
        league.put()
예제 #24
0
def setup_for_next_pick(league_id):
    """
        Set the database so that the next person can make a selection

        :param league_id: League to do this in
        If the draft is finished, appropriately call lose_draft
        If the draft is still in progress, increase the current draft_position by one and reset the timeout
    """
    league = league_key(league_id).get()
    league_player_query = Account.query(Account.league == league_id)
    league_players = league_player_query.fetch()
    number_of_picks = len(league_players) * globals.draft_rounds
    if league.draft_current_position == number_of_picks:  # See if the draft is over
        close_draft(league_id)
    else:
        league.draft_current_position += 1
        league.draft_current_timeout = datetime.datetime.utcnow() \
                                       + datetime.timedelta(minutes=globals.draft_time_minutes)
        league.put()
예제 #25
0
    def post(self):
        # Checks for active Google account session
        user = users.get_current_user()

        account = globals.get_or_create_account(user)
        league_id = account.league

        league_entity = league_key(league_id).get()
        current_position = league_entity.draft_current_position
        current_timeout = league_entity.draft_current_timeout
        current_time = datetime.datetime.utcnow()

        if current_position != 0 and current_position != -1:  #Don't process if draft is over or yet to begin
            current_pick = draft_pick_key(league_entity.key, current_position).get()
            if current_pick.player == account.key.urlsafe():  #Check that the calling player is actually within their turn
                if current_time < current_timeout:  #Check that the calling player is within their time constraints
                    #Get the new team from the post header
                    new_team = self.request.get('team')

                    #Validate the selection
                    selection_error = is_valid_team(new_team, league_id)
                    if selection_error == "Good":
                        #S'all good, update the datastore
                        current_pick.team = int(new_team)
                        current_pick.put()
                        #Add the team to the user's roster
                        user_choice = Choice.get_or_insert(league_id, parent=account.key)
                        if not user_choice.current_team_roster:  # Make sure to use [] for an empty roster, not None
                            user_choice.current_team_roster = []
                        user_choice.current_team_roster.append(int(new_team))
                        user_choice.put()
                        #Move the draft along
                        setup_for_next_pick(league_id)
                else:
                    selection_error = "The time for your selection has expired"
            else:
                selection_error = "It is not your turn to make a selection"
        else:
            selection_error = "Draft is not currently in session"

        #Display the draft main page with status
        self.redirect('/draft/?updated=' + selection_error)
예제 #26
0
    def get(self):
        # Checks for active Google account session
        user = users.get_current_user()

        #Current user's id, used to identify their data
        user_id = user.user_id()
        logout_url = users.create_logout_url('/')

        account = globals.get_or_create_account(user)
        league_id = account.league

        league_query = League.query()
        league_list = league_query.fetch()

        league_output = []
        for league in league_list:
            number_of_players = len(Account.query().filter(Account.league == league.key.id()).fetch())
            commissioner = "None"
            if account_key(league.key.id()).get():
                commissioner = account_key(league.key.id()).get().nickname
            league_output.append({'name': league.name,
                                  'id': league.key.id(),
                                  'size': number_of_players,
                                  'commissioner': commissioner,
                                  'join_url': '/leagueManagement/joinLeague/' + league.key.id()
                                  })

        if league_id != '0':
            league_name = league_key(league_id).get().name
        else:
            league_name = ""

        #Send html data to browser
        template_values = {
                        'user': user.nickname(),
                        'logout_url': logout_url,
                        'league_list': league_output,
                        'league_name': league_name
                        }
        template = JINJA_ENVIRONMENT.get_template('templates/league_list.html')
        self.response.write(template.render(template_values))
예제 #27
0
    def get(self, team_number):
        """
            Display detailed information on a single team

            :param team_number: The team number, gathered from the url, in string form
            Includes the following information:
                - Schedule: Which events is this team attending. Also gives the points scored (for past events)
                - Point breakdown: For each event, a detailed breakdown of where all of their points came
        """
        # Checks for active Google account session
        user = users.get_current_user()

        #Current user's id, used to identify their data
        user_id = user.user_id()
        logout_url = users.create_logout_url('/')

        account = globals.get_or_create_account(user)
        league_id = account.league

        if league_id != '0':
            if league_key(league_id).get().draft_current_position == 0:
                league_name = league_key(league_id).get().name
            else:
                league_name = globals.draft_started_sentinel
        else:
            league_name = ""

        team_data = {}
        team_data['number'] = team_number
        team_data['schedule'] = get_team_schedule(int(team_number))

        team_name = "Team " + str(team_number) + " - " + root_team_key(
            str(team_number)).get().name
        tba_team_url = globals.public_team_url.format(team_number)

        event_breakdowns = []
        point_breakdown = []
        for event in get_team_schedule(int(team_number)):
            if event['competition_name'] != '' and event['competition_name']:
                event_breakdowns.append(
                    get_point_breakdown_display(int(team_number),
                                                event['event_key']))

        for i, name in enumerate(humman_readable_point_categories):
            point_breakdown.append([])  # Create the new row

            #Build the data neccessary for the title/tooltip
            title = {
                'title': name,
                'explanation': explanation_of_point_categories[i]
            }

            point_breakdown[i].append(
                title)  # Add the tile for the first column
            category_total = 0
            for event in event_breakdowns:
                #Event is a value in the form [cat1,cat2...]
                category_total += event[i][
                    'points']  # Build the total for the end of the row
                event_text = ""
                if 'tooltip' in event[
                        i]:  # If there's a tooltip, pass it on to the page
                    point_breakdown[i].append({
                        'points': event[i]['display'],
                        'tooltip': event[i]['tooltip']
                    })
                else:
                    point_breakdown[i].append(
                        event[i]
                        ['display'])  # For each event, add the point display
            point_breakdown[i].append(category_total)  # Finally, add the total

        point_breakdown.append([])  # For totals
        index_of_totals_row = len(humman_readable_point_categories)
        overall_total = 0
        point_breakdown[index_of_totals_row].append(
            'Overall Total:')  # Left column row title
        for event in get_team_schedule(int(team_number)):
            if event['competition_name'] != '' and event['competition_name']:
                overall_total += event['points']
                point_breakdown[index_of_totals_row].append(
                    "")  # For each event, add the total value
        point_breakdown[index_of_totals_row].append(
            overall_total)  # Finally, add the total

        #Send html data to browser
        template_values = {
            'user': user.nickname(),
            'logout_url': logout_url,
            'league_name': league_name,
            'team_data': team_data,
            'team_name': team_name,
            'tba_team_url': tba_team_url,
            'pointbreakdown': point_breakdown,
        }
        template = JINJA_ENVIRONMENT.get_template('templates/team_detail.html')
        self.response.write(template.render(template_values))
    def get(self):
        """
            The main dashboard for league + personal info

            Contains information on the following:
                - The league schedule, including bye weeks and who plays who
                - The leader board, showing bench points and league points for each player, ranked
                - The current user's lineup for each week, including the points scored for past weeks
                - The current user's current roster
         """
        # Checks for active Google account session
        user = users.get_current_user()

        #Current user's id, used to identify their data
        user_id = user.user_id()
        logout_url = users.create_logout_url('/')

        #Make global call to get user information
        account = globals.get_or_create_account(user)
        league_id = account.league
        if league_id != '0':
            draft_over = league_key(league_id).get().draft_current_position == -1

            #Only allow access to this page after the draft has completed
            if draft_over:
                #Proccess league info
                if league_id != '0':
                    if league_key(league_id).get().draft_current_position == 0:
                        league_name = league_key(league_id).get().name
                    else:
                        league_name = globals.draft_started_sentinel
                else:
                    league_name = ""

                total_points = 0
                week_table = []
                for weeknum in range(1, globals.number_of_official_weeks + 1):
                    teams = get_team_lists(user_id, weeknum)[0]
                    points = 0
                    lineup = []
                    for team in teams:
                        event_key = get_team_schedule(int(team['number']))[int(weeknum) - 1]['event_key']#-1 to convert to 0-based index
                        if event_key: #Check if the team is competing that week
                            points += get_team_points_at_event(team['number'], event_key)
                        lineup.append(team['number'])

                    if is_week_editable(weeknum):
                        points = "<i>No Data</i>"
                    else:
                        total_points += points

                    week_row = {'week': str(weeknum), 'active_lineup': lineup, 'points': points}
                    week_table.append(week_row)

                leader_board = get_leader_board(league_id)
                league_schedule = get_readable_schedule(league_id)

                current_roster = get_current_roster(user_id)

                user_schedule = get_readable_user_schedule(user_id)

                template_values = {
                                'user': user.nickname(),
                                'logout_url': logout_url,
                                'league_name': league_name,
                                'week_table': week_table,
                                'total_points': total_points,
                                'leader_board': leader_board,
                                'schedule': league_schedule,
                                'roster': current_roster,
                                'week_number': globals.debug_current_editable_week,
                                'user_schedule': user_schedule
                                }

                template = JINJA_ENVIRONMENT.get_template('templates/alliance_management_portal.html')
                self.response.write(template.render(template_values))
            else:
                globals.display_error_page(self, self.request.referer, error_messages.draft_needs_to_be_completed)
        else:
            globals.display_error_page(self, self.request.referer, error_messages.need_to_be_a_member_of_a_league)
예제 #29
0
def start_draft(league_id):
    """
        Set up to prepare for a draft

        :parameter league_id: The league to prepare for a draft
        Do the following:
            - Create a random order
            - Use this order to generate a single list of exactly what pick happens in what order
            - Use this to create the necessary pick objects with the correct order properties
            - Place the league in a position to begin the draft
    """
    league_player_query = Account.query(Account.league == league_id)
    league_players = league_player_query.fetch()
    shuffle(league_players)  # Randomize the order of the draft

    number_of_players = len(league_players)
    number_of_picks = number_of_players * globals.draft_rounds

    snake_draft = league_key(league_id).get().snake_draft

    direction = DRAFT_INCREASING
    pick_of_round = 0
    display_number = 0
    number_of_drafts = 0
    while number_of_drafts < number_of_picks:
        if snake_draft:
            if direction == DRAFT_INCREASING:
                if pick_of_round == number_of_players:
                    direction = DRAFT_STATIONARY
            elif direction == DRAFT_DECREASING:
                if pick_of_round == 1:
                    direction = DRAFT_STATIONARY
            elif direction == DRAFT_STATIONARY:
                if pick_of_round == 1:
                    direction = DRAFT_INCREASING
                elif pick_of_round == number_of_players:
                    direction = DRAFT_DECREASING
        else:
            if pick_of_round == number_of_players:
                pick_of_round = 0  # 0 will become a 1 down below because direction = DRAFT_INCREASING

        if direction == DRAFT_INCREASING:
            pick_of_round += 1
            display_number += 1
        elif direction == DRAFT_DECREASING:
            pick_of_round -= 1
            display_number -= 1
        elif direction == DRAFT_STATIONARY:
            display_number += 4

        player = league_players[pick_of_round - 1]
        pick_key = draft_pick_key(league_key(league_id),
                                  str(number_of_drafts + 1))
        pick = DraftPick.get_or_insert(pick_key.id(), parent=pick_key.parent())
        pick.display_number = display_number
        pick.player = player.key.urlsafe()
        pick.put()

        number_of_drafts += 1

    league = league_key(league_id).get()
    league.draft_current_position = 0
    league.put()
    def get(self, week_number):
        """
            Handle the requests to see data for all alliances. Displays a past_alliance or alliance_management tab appropriately.

            :parameter week_number: Week number taken from the url, string form
            For each team on the bench and active lineup: displays information about each team's past performance
            Also displays opponent's active and bench lineup
        """
        # Checks for active Google account session
        user = users.get_current_user()

        #Current user's id, used to identify their data
        user_id = user.user_id()
        logout_url = users.create_logout_url('/')

        account = globals.get_or_create_account(user)
        league_id = account.league
        draft_over = league_key(league_id).get().draft_current_position == -1

        if league_id != '0':
            if league_key(league_id).get().draft_current_position == 0:
                league_name = league_key(league_id).get().name
            else:
                league_name = globals.draft_started_sentinel
        else:
            league_name = ""

        if draft_over:
            team_lists = get_team_lists(user_id, week_number)
            point_totals = []
            for team_list in team_lists:
                point_total = 0
                for team in team_list:
                    point_total += team['total_points']
                point_totals.append(point_total)

            opponent_name = ""
            opponent_point_totals = []
            opponent_team_lists = []
            team_listss = [team_lists]
            if get_opponent(user_id, week_number) != globals.schedule_bye_week:
                opponent_team_lists = get_team_lists(get_opponent(user_id, week_number), week_number)
                opponent_point_totals = []
                for team_list in team_lists:
                    opponent_point_total = 0
                    for team in team_list:
                        opponent_point_total += team['total_points']
                    opponent_point_totals.append(opponent_point_total)

                opponent_name = get_opponent_name(user_id, week_number)
                team_listss.append(opponent_team_lists)


            #Send html data to browser
            template_values = {
                            'user': user.nickname(),
                            'logout_url': logout_url,
                            'league_name': league_name,
                            'week_number': int(week_number),
                            'point_totals': [point_totals, opponent_point_totals],
                            'team_listss': team_listss,
                            'opponent_name': opponent_name,
                            }

            if is_week_editable(week_number):
                template = JINJA_ENVIRONMENT.get_template('templates/alliance_management.html')
            else:
                template = JINJA_ENVIRONMENT.get_template('templates/past_alliances.html')
            self.response.write(template.render(template_values))
        else:
            globals.display_error_page(self, self.request.referer, error_messages.draft_needs_to_be_completed)
예제 #31
0
    def get(self):
        """
            The draft page contains the draft board, a timer, and a map; all that is necessary for the draft process
        """
        # Checks for active Google account session
        user = users.get_current_user()

        logout_url = users.create_logout_url('/')

        account = globals.get_or_create_account(user)
        league_id = account.league

        if league_id != '0':
            #Make check to see if the time for the current pick has expired
            current_time = datetime.datetime.utcnow()
            current_timeout = league_key(league_id).get().draft_current_timeout
            draft_pick = draft_pick_key(
                league_key(league_id),
                league_key(league_id).get().draft_current_position).get()
            if current_timeout:
                if current_time > current_timeout:  # The time has expired
                    draft_pick.team = 0  # Set the pick to indicate it was forefited
                    draft_pick.put()
                    setup_for_next_pick(
                        league_id)  # Move the pick along to the next person

            #Display update text for the status of the last choice update
            update_text = self.request.get('updated')
            if self.request.get('updated') == "Good":
                update_text = "Team added successfully"

            league_player_query = Account.query(Account.league == league_id)
            players_for_the_sake_of_number = league_player_query.fetch()
            league_players = []

            if draft_pick_key(league_key(league_id), 1).get():  # != None
                for i in range(1, len(players_for_the_sake_of_number) + 1):
                    pick = draft_pick_key(league_key(league_id), i).get()
                    league_players.append(ndb.Key(urlsafe=pick.player).get())
            else:
                league_players = players_for_the_sake_of_number

            draft_board = []
            player_list = []
            for player in league_players:
                player_list.append(player.nickname)

            number_of_picks = len(league_players) * globals.draft_rounds
            for position in range(1, number_of_picks + 1):
                pick_query = DraftPick.query().filter(
                    DraftPick.display_number == position)
                query_results = pick_query.fetch(1)
                pick = DraftPick()
                if len(query_results) != 0:
                    pick = query_results[0]

                username = (((position % len(league_players)) - 1) %
                            len(league_players))
                draft_round = int((position - 1) / len(league_players))
                if username == 0:
                    draft_board.append([])
                    for i in range(0, len(league_players)):
                        draft_board[draft_round].append('-')
                if pick and pick.team != None:
                    draft_board[draft_round][username] = str(pick.team)
                    if pick.team == 0:
                        draft_board[draft_round][username] = "<i>Forfeited</i>"
                else:
                    draft_board[draft_round][username] = "<i>TBD</i>"

            if league_id != '0':
                if league_key(league_id).get().draft_current_position == 0:
                    league_name = league_key(league_id).get().name
                else:
                    league_name = globals.draft_started_sentinel
            else:
                league_name = ""

            users_turn = False
            picking_user = ""
            draft_pick = draft_pick_key(
                league_key(league_id),
                league_key(league_id).get().draft_current_position).get()
            if draft_pick:
                users_turn = (draft_pick.player == account.key.urlsafe())
                picking_user = ndb.Key(
                    urlsafe=draft_pick.player).get().nickname

            current_unix_timeout = None
            if current_timeout:
                current_unix_timeout = calendar.timegm(
                    current_timeout.timetuple())

            current_position = league_key(
                league_id).get().draft_current_position

            if current_position == 0:
                draft_status = "Pre"
            elif current_position == -1:
                draft_status = "Post"
            else:
                draft_status = "Mid"

            team_map_data = get_lat_lng_json(league_id)

            #Send html data to browser
            template_values = {
                'user': user.nickname(),
                'logout_url': logout_url,
                'draft_board': draft_board,
                'player_list': player_list,
                'update_text': update_text,
                'league_name': league_name,
                'users_turn': users_turn,
                'picking_user': picking_user,
                'current_unix_timeout': current_unix_timeout,
                'draft_status': draft_status,
                'team_map_data': team_map_data,
            }
            template = JINJA_ENVIRONMENT.get_template(
                'templates/draft_main.html')
            self.response.write(template.render(template_values))
        else:
            globals.display_error_page(
                self, self.request.referer,
                error_messages.need_to_be_a_member_of_a_league)
예제 #32
0
    def get(self):
        # Checks for active Google account session
        user = users.get_current_user()

        #Force user login
        if user is None:
            self.redirect(users.create_login_url(self.request.uri))
        else:
            #Current user's id, used to identify their data
            user_id = user.user_id()
            logout_url = users.create_logout_url('/')

            account = globals.get_or_create_account(user)
            league_id = account.league

            #Get user's choices for the current league
            find_choice_key = choice_key(account_key(user_id), str(league_id))
            found_choice = find_choice_key.get()

            #Display update text for the status of the last choice update
            update_text = self.request.get('updated')
            if self.request.get('updated') == "Good":
                update_text = "Team added successfully"

            #Display the user's current roster
            user_roster = []
            if found_choice:
                user_roster = found_choice.current_team_roster


            #Get list of players in the league and their choices
            league_table = [{'player_team': 'Roster', 'player_name': 'Player'}]
            league_player_query = Account.query(Account.league == league_id)
            league_players = league_player_query.fetch()  #league_player_query.order(Account.nickname).fetch()
            for player in league_players:
                choice = choice_key(account_key(player.key.id()), league_id).get()
                if choice:
                    league_table.append(
                        {'player_team': str(choice.current_team_roster), 'player_name': player.nickname})
                else:
                    league_table.append({'player_team': 'None', 'player_name': player.nickname})

            if league_id != '0':
                if league_key(league_id).get().draft_current_position == 0:
                    league_name = league_key(league_id).get().name
                else:
                    league_name = globals.draft_started_sentinel
            else:
                league_name = ""

            #Send html data to browser
            template_values = {
                'user': user.nickname(),
                'logout_url': logout_url,
                'update_text': update_text,
                'league_table': league_table,
                'league_name': league_name,
                'roster': user_roster,
                'default_team': self.request.get('team'),
            }
            template = JINJA_ENVIRONMENT.get_template('templates/pick_up_main.html')
            self.response.write(template.render(template_values))
예제 #33
0
    def get(self, week_number):
        """
            Handle the requests to see data for all alliances. Displays a past_alliance or alliance_management tab appropriately.

            :parameter week_number: Week number taken from the url, string form
            For each team on the bench and active lineup: displays information about each team's past performance
            Also displays opponent's active and bench lineup
        """
        # Checks for active Google account session
        user = users.get_current_user()

        #Current user's id, used to identify their data
        user_id = user.user_id()
        logout_url = users.create_logout_url('/')

        account = globals.get_or_create_account(user)
        league_id = account.league
        draft_over = league_key(league_id).get().draft_current_position == -1

        if league_id != '0':
            if league_key(league_id).get().draft_current_position == 0:
                league_name = league_key(league_id).get().name
            else:
                league_name = globals.draft_started_sentinel
        else:
            league_name = ""

        if draft_over:
            team_lists = get_team_lists(user_id, week_number)
            point_totals = []
            for team_list in team_lists:
                point_total = 0
                for team in team_list:
                    point_total += team['total_points']
                point_totals.append(point_total)

            opponent_name = ""
            opponent_point_totals = []
            opponent_team_lists = []
            team_listss = [team_lists]
            if get_opponent(user_id, week_number) != globals.schedule_bye_week:
                opponent_team_lists = get_team_lists(
                    get_opponent(user_id, week_number), week_number)
                opponent_point_totals = []
                for team_list in team_lists:
                    opponent_point_total = 0
                    for team in team_list:
                        opponent_point_total += team['total_points']
                    opponent_point_totals.append(opponent_point_total)

                opponent_name = get_opponent_name(user_id, week_number)
                team_listss.append(opponent_team_lists)

            #Send html data to browser
            template_values = {
                'user': user.nickname(),
                'logout_url': logout_url,
                'league_name': league_name,
                'week_number': int(week_number),
                'point_totals': [point_totals, opponent_point_totals],
                'team_listss': team_listss,
                'opponent_name': opponent_name,
            }

            if is_week_editable(week_number):
                template = JINJA_ENVIRONMENT.get_template(
                    'templates/alliance_management.html')
            else:
                template = JINJA_ENVIRONMENT.get_template(
                    'templates/past_alliances.html')
            self.response.write(template.render(template_values))
        else:
            globals.display_error_page(
                self, self.request.referer,
                error_messages.draft_needs_to_be_completed)
예제 #34
0
    def get(self):
        """
            The draft page contains the draft board, a timer, and a map; all that is necessary for the draft process
        """
        # Checks for active Google account session
        user = users.get_current_user()

        logout_url = users.create_logout_url('/')

        account = globals.get_or_create_account(user)
        league_id = account.league

        if league_id != '0':
            #Make check to see if the time for the current pick has expired
            current_time = datetime.datetime.utcnow()
            current_timeout = league_key(league_id).get().draft_current_timeout
            draft_pick = draft_pick_key(league_key(league_id), league_key(league_id).get().draft_current_position).get()
            if current_timeout:
                if current_time > current_timeout:  # The time has expired
                    draft_pick.team = 0  # Set the pick to indicate it was forefited
                    draft_pick.put()
                    setup_for_next_pick(league_id)  # Move the pick along to the next person

            #Display update text for the status of the last choice update
            update_text = self.request.get('updated')
            if self.request.get('updated') == "Good":
                update_text = "Team added successfully"

            league_player_query = Account.query(Account.league == league_id)
            players_for_the_sake_of_number = league_player_query.fetch()
            league_players = []

            if draft_pick_key(league_key(league_id), 1).get():  # != None
                for i in range(1, len(players_for_the_sake_of_number) + 1):
                    pick = draft_pick_key(league_key(league_id), i).get()
                    league_players.append(ndb.Key(urlsafe=pick.player).get())
            else:
                league_players = players_for_the_sake_of_number

            draft_board = []
            player_list = []
            for player in league_players:
                player_list.append(player.nickname)

            number_of_picks = len(league_players) * globals.draft_rounds
            for position in range(1, number_of_picks + 1):
                pick_query = DraftPick.query().filter(DraftPick.display_number == position)
                query_results = pick_query.fetch(1)
                pick = DraftPick()
                if len(query_results) != 0:
                    pick = query_results[0]

                username = (((position % len(league_players)) - 1) % len(league_players))
                draft_round = int((position - 1) / len(league_players))
                if username == 0:
                    draft_board.append([])
                    for i in range(0, len(league_players)):
                        draft_board[draft_round].append('-')
                if pick and pick.team != None:
                    draft_board[draft_round][username] = str(pick.team)
                    if pick.team == 0:
                        draft_board[draft_round][username] = "<i>Forfeited</i>"
                else:
                    draft_board[draft_round][username] = "<i>TBD</i>"

            if league_id != '0':
                if league_key(league_id).get().draft_current_position == 0:
                    league_name = league_key(league_id).get().name
                else:
                    league_name = globals.draft_started_sentinel
            else:
                league_name = ""

            users_turn = False
            picking_user = ""
            draft_pick = draft_pick_key(league_key(league_id), league_key(league_id).get().draft_current_position).get()
            if draft_pick:
                users_turn = (draft_pick.player == account.key.urlsafe())
                picking_user = ndb.Key(urlsafe=draft_pick.player).get().nickname

            current_unix_timeout = None
            if current_timeout:
                current_unix_timeout = calendar.timegm(current_timeout.timetuple())

            current_position = league_key(league_id).get().draft_current_position

            if current_position == 0:
                draft_status = "Pre"
            elif current_position == -1:
                draft_status = "Post"
            else:
                draft_status = "Mid"

            team_map_data = get_lat_lng_json(league_id)

            #Send html data to browser
            template_values = {
                'user': user.nickname(),
                'logout_url': logout_url,
                'draft_board': draft_board,
                'player_list': player_list,
                'update_text': update_text,
                'league_name': league_name,
                'users_turn': users_turn,
                'picking_user': picking_user,
                'current_unix_timeout': current_unix_timeout,
                'draft_status': draft_status,
                'team_map_data': team_map_data,
            }
            template = JINJA_ENVIRONMENT.get_template('templates/draft_main.html')
            self.response.write(template.render(template_values))
        else:
            globals.display_error_page(self, self.request.referer,error_messages.need_to_be_a_member_of_a_league)
예제 #35
0
def start_draft(league_id):
    """
        Set up to prepare for a draft

        :parameter league_id: The league to prepare for a draft
        Do the following:
            - Create a random order
            - Use this order to generate a single list of exactly what pick happens in what order
            - Use this to create the necessary pick objects with the correct order properties
            - Place the league in a position to begin the draft
    """
    league_player_query = Account.query(Account.league == league_id)
    league_players = league_player_query.fetch()
    shuffle(league_players)  # Randomize the order of the draft

    number_of_players = len(league_players)
    number_of_picks = number_of_players * globals.draft_rounds

    snake_draft = league_key(league_id).get().snake_draft

    direction = DRAFT_INCREASING
    pick_of_round = 0
    display_number = 0
    number_of_drafts = 0
    while number_of_drafts < number_of_picks:
        if snake_draft:
            if direction == DRAFT_INCREASING:
                if pick_of_round == number_of_players:
                    direction = DRAFT_STATIONARY
            elif direction == DRAFT_DECREASING:
                if pick_of_round == 1:
                    direction = DRAFT_STATIONARY
            elif direction == DRAFT_STATIONARY:
                if pick_of_round == 1:
                    direction = DRAFT_INCREASING
                elif pick_of_round == number_of_players:
                    direction = DRAFT_DECREASING
        else:
            if pick_of_round == number_of_players:
                pick_of_round = 0  # 0 will become a 1 down below because direction = DRAFT_INCREASING

        if direction == DRAFT_INCREASING:
            pick_of_round += 1
            display_number += 1
        elif direction == DRAFT_DECREASING:
            pick_of_round -= 1
            display_number -= 1
        elif direction == DRAFT_STATIONARY:
            display_number += 4

        player = league_players[pick_of_round - 1]
        pick_key = draft_pick_key(league_key(league_id), str(number_of_drafts + 1))
        pick = DraftPick.get_or_insert(pick_key.id(), parent=pick_key.parent())
        pick.display_number = display_number
        pick.player = player.key.urlsafe()
        pick.put()

        number_of_drafts += 1

    league = league_key(league_id).get()
    league.draft_current_position = 0
    league.put()
예제 #36
0
    def get(self):
        # Checks for active Google account session
        user = users.get_current_user()

        #Force user login
        if user is None:
            self.redirect(users.create_login_url(self.request.uri))
        else:
            #Current user's id, used to identify their data
            user_id = user.user_id()
            logout_url = users.create_logout_url('/')

            account = globals.get_or_create_account(user)
            league_id = account.league

            #Get user's choices for the current league
            find_choice_key = choice_key(account_key(user_id), str(league_id))
            found_choice = find_choice_key.get()

            #Display update text for the status of the last choice update
            update_text = self.request.get('updated')
            if self.request.get('updated') == "Good":
                update_text = "Team added successfully"

            #Display the user's current roster
            user_roster = []
            if found_choice:
                user_roster = found_choice.current_team_roster

            #Get list of players in the league and their choices
            league_table = [{'player_team': 'Roster', 'player_name': 'Player'}]
            league_player_query = Account.query(Account.league == league_id)
            league_players = league_player_query.fetch(
            )  #league_player_query.order(Account.nickname).fetch()
            for player in league_players:
                choice = choice_key(account_key(player.key.id()),
                                    league_id).get()
                if choice:
                    league_table.append({
                        'player_team':
                        str(choice.current_team_roster),
                        'player_name':
                        player.nickname
                    })
                else:
                    league_table.append({
                        'player_team': 'None',
                        'player_name': player.nickname
                    })

            if league_id != '0':
                if league_key(league_id).get().draft_current_position == 0:
                    league_name = league_key(league_id).get().name
                else:
                    league_name = globals.draft_started_sentinel
            else:
                league_name = ""

            #Send html data to browser
            template_values = {
                'user': user.nickname(),
                'logout_url': logout_url,
                'update_text': update_text,
                'league_table': league_table,
                'league_name': league_name,
                'roster': user_roster,
                'default_team': self.request.get('team'),
            }
            template = JINJA_ENVIRONMENT.get_template(
                'templates/pick_up_main.html')
            self.response.write(template.render(template_values))
    def get(self, team_number):
        # Checks for active Google account session
        user = users.get_current_user()

        #Current user's id, used to identify their data
        user_id = user.user_id()
        logout_url = users.create_logout_url('/')

        account = globals.get_or_create_account(user)
        league_id = account.league

        if league_id != '0':
            league_name = league_key(league_id).get().name
        else:
            league_name = ""

        team_data = {}
        team_data['number'] = team_number
        team_data['schedule'] = get_team_schedule(int(team_number))

        team_name = "Team " + str(team_number) + " - " + root_team_key(str(team_number)).get().name
        tba_team_url = globals.public_team_url % team_number

        event_breakdowns = []
        point_breakdown = []
        for event in get_team_schedule(int(team_number)):
            if event['competition_name'] != '' and event['competition_name']:
                event_breakdowns.append(get_point_breakdown_display(int(team_number), event['event_key']))
        
        for i, name in enumerate(humman_readable_point_categories):
            point_breakdown.append([]) #Create the new row
            title = {'title':name, 'explanation': explanation_of_point_categories[i]} #Build the data neccessary for the title/tooltip
            point_breakdown[i].append(title) #Add the tile for the first column
            category_total = 0
            for event in event_breakdowns:
                #Event is a value in the form [cat1,cat2...] 
                category_total += event[i]['points'] #Build the total for the end of the row
                event_text = ""
                if 'tooltip' in event[i]: #If there's a tooltip, pass it on to the page
                    point_breakdown[i].append({'points': event[i]['display'], 'tooltip': event[i]['tooltip']})
                else:
                    point_breakdown[i].append(event[i]['display']) #For each event, add the point display
            point_breakdown[i].append(category_total) #Finally, add the total

        point_breakdown.append([]) #For totals 
        index_of_totals_row = len(humman_readable_point_categories)
        overall_total = 0
        point_breakdown[index_of_totals_row].append('Overall Total:') #Left column row title
        for event in get_team_schedule(int(team_number)):
            if event['competition_name'] != '' and event['competition_name']:
                overall_total += event['points']
                point_breakdown[index_of_totals_row].append("") #For each event, add the total value
        point_breakdown[index_of_totals_row].append(overall_total) #Finally, add the total

        #Send html data to browser
        template_values = {
                        'user': user.nickname(),
                        'logout_url': logout_url,
                        'league_name': league_name,
                        'team_data': team_data,
                        'team_name': team_name,
                        'tba_team_url': tba_team_url,
                        'pointbreakdown': point_breakdown,
                        }
        template = JINJA_ENVIRONMENT.get_template('templates/team_detail.html')
        self.response.write(template.render(template_values))
예제 #38
0
    def get(self):
        """
            The main dashboard for league + personal info

            Contains information on the following:
                - The league schedule, including bye weeks and who plays who
                - The leader board, showing bench points and league points for each player, ranked
                - The current user's lineup for each week, including the points scored for past weeks
                - The current user's current roster
         """
        # Checks for active Google account session
        user = users.get_current_user()

        #Current user's id, used to identify their data
        user_id = user.user_id()
        logout_url = users.create_logout_url('/')

        #Make global call to get user information
        account = globals.get_or_create_account(user)
        league_id = account.league
        if league_id != '0':
            draft_over = league_key(
                league_id).get().draft_current_position == -1

            #Only allow access to this page after the draft has completed
            if draft_over:
                #Proccess league info
                if league_id != '0':
                    if league_key(league_id).get().draft_current_position == 0:
                        league_name = league_key(league_id).get().name
                    else:
                        league_name = globals.draft_started_sentinel
                else:
                    league_name = ""

                total_points = 0
                week_table = []
                for weeknum in range(1, globals.number_of_official_weeks + 1):
                    teams = get_team_lists(user_id, weeknum)[0]
                    points = 0
                    lineup = []
                    for team in teams:
                        event_key = get_team_schedule(int(
                            team['number']))[int(weeknum) - 1][
                                'event_key']  #-1 to convert to 0-based index
                        if event_key:  #Check if the team is competing that week
                            points += get_team_points_at_event(
                                team['number'], event_key)
                        lineup.append(team['number'])

                    if is_week_editable(weeknum):
                        points = "<i>No Data</i>"
                    else:
                        total_points += points

                    week_row = {
                        'week': str(weeknum),
                        'active_lineup': lineup,
                        'points': points
                    }
                    week_table.append(week_row)

                leader_board = get_leader_board(league_id)
                league_schedule = get_readable_schedule(league_id)

                current_roster = get_current_roster(user_id)

                user_schedule = get_readable_user_schedule(user_id)

                template_values = {
                    'user': user.nickname(),
                    'logout_url': logout_url,
                    'league_name': league_name,
                    'week_table': week_table,
                    'total_points': total_points,
                    'leader_board': leader_board,
                    'schedule': league_schedule,
                    'roster': current_roster,
                    'week_number': globals.debug_current_editable_week,
                    'user_schedule': user_schedule
                }

                template = JINJA_ENVIRONMENT.get_template(
                    'templates/alliance_management_portal.html')
                self.response.write(template.render(template_values))
            else:
                globals.display_error_page(
                    self, self.request.referer,
                    error_messages.draft_needs_to_be_completed)
        else:
            globals.display_error_page(
                self, self.request.referer,
                error_messages.need_to_be_a_member_of_a_league)