def get(self): time.sleep(0.5) topics = self.beevote_user.get_topics_by_group_membership() currentdatetime = datetime.datetime.now() for topic in topics: if(topic.date != None): topic.formatted_date = topic.date.strftime(constants.topic_date_format) if topic.deadline != None: topic.expired = topic.deadline < currentdatetime time_before_deadline = topic.deadline - currentdatetime topic.seconds_before_deadline = time_before_deadline.total_seconds() topic.time_before_deadline = { 'seconds': time_before_deadline.seconds % 60, 'minutes': (time_before_deadline.seconds/60) % 60, 'hours': time_before_deadline.seconds/3600, 'days': time_before_deadline.days, } else: topic.seconds_before_deadline = timedelta.max.total_seconds() if topic.creator == self.beevote_user.key: topic.is_own = True else: topic.is_own = False topics = sorted(topics, key=lambda topic: topic.seconds_before_deadline) values = { 'topics' : topics, } base_handlers.write_template(self.response, 'html/topics.html',values)
def handle_401(request, response, exception): if 'Location' in exception.headers and exception.headers['Location']: response.set_status(302) response.headers['Location'] = exception.headers['Location'] return response.set_status(401) base_handlers.write_template(response, 'errors/401.html', {'detail': exception.detail})
def get(self, player_id): player = models.Player._get_by_id(int(player_id)) player_key = player.key performances = models.Performance.find_performance_player(player_key) values = calculate_global_stats(performances) values["player"] = player base_handlers.write_template(self.response, "templates/admin/showPlayerTotalStats.html", values)
def get(self): user_id = users.get_current_user().user_id() if self.beevote_user or models.BeeVoteUser.get_from_google_id(user_id): self.redirect("/") return base_handlers.write_template(self.response, 'registration-form.html', {})
def handle_401(request, response, exception): if 'Location' in exception.headers and exception.headers['Location']: response.set_status(302) response.headers['Location'] = exception.headers['Location'] return response.set_status(401) base_handlers.write_template(response, 'errors/401.html', {'detail': exception.detail})
def get(self): feature_changes = ndb.gql("SELECT * FROM FeatureChange").fetch(1000) feature_changes = sorted(feature_changes, key=lambda feature: feature.creation, reverse=True) base_handlers.write_template(self.response, 'admin/feature-changes.html', {'feature_changes': feature_changes})
def get(self, group_id, topic_id): group = models.Group.get_from_id(long(group_id)) if not group.contains_user(self.beevote_user): self.abort(401, detail="You are not authorized to see this group.<br>Click <a href='javascript:history.back();'>here</a> to go back, or <a href='/logout'>here</a> to logout.") topic = models.Topic.get_from_id(long(group_id), long(topic_id)) if (not topic): self.abort(404, detail="This topic does not exist.") if(topic.date != None): topic.formatted_date = topic.date.strftime(constants.topic_date_format) if topic.creator == self.beevote_user.key: topic.is_own = True else: topic.is_own = False if self.beevote_user.key not in topic.non_participant_users: topic.participation = True else: topic.participation = False proposals = topic.get_proposals() # Adding a variable on each proposal containing the NUMBER of votes of the proposal for proposal in proposals: votes = ndb.gql("SELECT * FROM Vote WHERE proposal = :1 AND creator = :2", proposal.key, self.beevote_user.key) own_vote = votes.get() if own_vote: proposal.already_voted = True else: proposal.already_voted = False proposal.vote_number = len(proposal.get_votes()) proposal.comment_number = len(proposal.get_comments()) if(proposal.date != None): proposal.formatted_date = proposal.date.strftime(constants.proposal_date_format) # Sorting the proposal according to vote number topic.proposals = sorted(proposals, key=lambda proposal: proposal.vote_number, reverse=True) # Evaluation about topic deadline if topic.deadline != None: currentdatetime = datetime.datetime.now() topic.expired = topic.deadline < currentdatetime time_before_deadline = topic.deadline - currentdatetime topic.time_before_deadline = { 'seconds': time_before_deadline.seconds % 60, 'minutes': (time_before_deadline.seconds/60) % 60, 'hours': time_before_deadline.seconds/3600, 'days': time_before_deadline.days, } personal_settings = models.TopicPersonalSettings.get_settings(self.beevote_user, topic) values = { 'topic': topic, 'personal_settings': personal_settings } models.TopicAccess.update_specific_access(topic, self.beevote_user) base_handlers.write_template(self.response, 'html/topic-overview.html', values)
def get(self, player_id): player = models.Player._get_by_id(int(player_id)) player_key = player.key values = {"player": player} stats_by_role = [] for role in models.roles: stats_for_a_role = models.Performance.find_performance_by_player_and_role(player_key, role) stats_for_a_role = calculate_global_stats(stats_for_a_role) stats_for_a_role["role"] = str(role) stats_by_role.append(stats_for_a_role) values["stats"] = stats_by_role base_handlers.write_template(self.response, "templates/admin/showPlayerStatsByRole.html", values)
def get(self): user = users.get_current_user() if user: # path = os.path.join(os.path.dirname(__file__), 'templates/ciao.html') # # self.response.out.write(template.render(path,{})) base_handlers.write_template(self.response, "templates/ciao.html") greeting = 'Welcome, %s! (<a href="%s">sign out</a>)' % (user.nickname(), users.create_logout_url("/")) self.response.out.write("<h4>%s</h4>" % greeting) else: greeting = '<a href="%s">Sign in or register</a>.' % users.create_login_url("/") self.response.out.write("<html><body>%s</body></html>" % greeting)
def get(self): user = users.get_current_user() if user: if not self.beevote_user and not models.BeeVoteUser.get_from_google_id(user.user_id()): self.redirect("/register") return else: self.redirect('/home') else: values = { 'login_url': users.create_login_url('/home'), } base_handlers.write_template(self.response, 'index.html', values)
def get(self): user = users.get_current_user() if user: if not self.beevote_user and not models.BeeVoteUser.get_from_google_id( user.user_id()): self.redirect("/register") return else: self.redirect('/home') else: values = { 'login_url': users.create_login_url('/home'), } base_handlers.write_template(self.response, 'index.html', values)
def get(self): sort_param = self.request.get("sort") query_string = "SELECT * FROM BeeVoteUser" order_string = " ORDER BY {field} {order}" if sort_param == "creation": query_string += order_string.format(field="creation", order="DESC") elif sort_param == "last_access": query_string += order_string.format(field="last_access", order="DESC") elif sort_param == "email": query_string += order_string.format(field="email", order="ASC") elif sort_param == "language": query_string += order_string.format(field="language", order="ASC") users = ndb.gql(query_string) base_handlers.write_template(self.response, 'admin/user-manager.html', {'users': users})
def get(self): time.sleep(0.5) groups = self.beevote_user.get_groups_by_membership() for group in groups: if len(group.name) > 20: group.name_short = group.name[:16] values = { 'groups' : groups, } base_handlers.write_template(self.response, 'html/groups.html',values)
def get(self): sort_param = self.request.get("sort") query_string = "SELECT * FROM BeeVoteUser" order_string = " ORDER BY {field} {order}" if sort_param == "creation": query_string += order_string.format(field="creation", order="DESC") elif sort_param == "last_access": query_string += order_string.format(field="last_access", order="DESC") elif sort_param == "email": query_string += order_string.format(field="email", order="ASC") elif sort_param == "language": query_string += order_string.format(field="language", order="ASC") users = ndb.gql(query_string) base_handlers.write_template(self.response, 'admin/user-manager.html', {'users': users})
def get(self, group_id): group = models.Group.get_from_id(long(group_id)) if (not group): self.abort(404, detail="This group does not exist.") if not group.contains_user(self.beevote_user): self.abort(401, detail="You are not authorized to see this group.<br>Click <a href='javascript:history.back();'>here</a> to go back, or <a href='/logout'>here</a> to logout.") group.member_list = ndb.get_multi(group.members) if group.admins == [] or self.beevote_user.key in group.admins: admin = True else: admin = False values = { 'user': self.beevote_user, 'group': group, 'admin': admin, } base_handlers.write_template(self.response, 'html/group-members.html', values)
def get(self, game_id): game_id = int(game_id) game = models.Game._get_by_id(game_id) game_key = game.key performances = models.Performance.find_performance_by_game(game_key) for perfomance in performances: logging.info("prestazioni trovate e %s", str(perfomance)) players = models.Performance.find_players_for_performances(performances) performances_players = zip(players, performances) values = { "Query": "Unit", "performances": performances, "game": game, "players": players, "performances_players": performances_players, } base_handlers.write_template(self.response, "templates/admin/showPerformances.html", values)
def get(self, group_id): group = models.Group.get_from_id(long(group_id)) if (not group): self.abort(404, detail="This group does not exist.") if not group.contains_user(self.beevote_user): self.abort(401, detail="You are not authorized to see this group.<br>Click <a href='javascript:history.back();'>here</a> to go back, or <a href='/logout'>here</a> to logout.") group.member_list = ndb.get_multi(group.members) topics = group.get_topics() currentdatetime = datetime.datetime.now() for topic in topics: if topic.deadline != None: topic.expired = topic.deadline < currentdatetime time_before_deadline = topic.deadline - currentdatetime topic.seconds_before_deadline = time_before_deadline.total_seconds() topic.time_before_deadline = { 'seconds': time_before_deadline.seconds % 60, 'minutes': (time_before_deadline.seconds/60) % 60, 'hours': time_before_deadline.seconds/3600, 'days': time_before_deadline.days, } else: topic.seconds_before_deadline = timedelta.max.total_seconds() if topic.creator == self.beevote_user.key: topic.is_own = True else: topic.is_own = False if self.beevote_user.key in group.admins: group.is_own = True else: group.is_own = False topics = sorted(topics, key=lambda topic: topic.seconds_before_deadline) group.topics = topics personal_settings = models.GroupPersonalSettings.get_settings(self.beevote_user, group) values = { 'group': group, 'personal_settings': personal_settings, } models.GroupAccess.update_specific_access(group, self.beevote_user) base_handlers.write_template(self.response, 'html/group-overview.html', values)
def get(self, group_id, topic_id): if not self.beevote_user: self.redirect("/register") return last_access = self.beevote_user.last_access if hasattr(self.beevote_user, 'last_access') else datetime.datetime.min self.beevote_user.last_access = datetime.datetime.now() self.beevote_user.put() feature_changes = models.FeatureChange.get_from_date(last_access) values = { 'user' : self.beevote_user, 'feature_changes': feature_changes, 'group_id': group_id, 'topic_id': topic_id, } base_handlers.write_template(self.response, 'groups-layout.html',values)
def get(self, group_id, topic_id): if not self.beevote_user: self.redirect("/register") return last_access = self.beevote_user.last_access if hasattr( self.beevote_user, 'last_access') else datetime.datetime.min self.beevote_user.last_access = datetime.datetime.now() self.beevote_user.put() feature_changes = models.FeatureChange.get_from_date(last_access) values = { 'user': self.beevote_user, 'feature_changes': feature_changes, 'group_id': group_id, 'topic_id': topic_id, } base_handlers.write_template(self.response, 'groups-layout.html', values)
def get(self): duration_24_hours = 24 * 60 * 60 duration_1_week = duration_24_hours * 7 duration_30_days = duration_24_hours * 30 duration_90_days = duration_24_hours * 90 groups = ndb.gql("SELECT * FROM Group").fetch(1000) groups_created_in_last_90_days = [ g for g in groups if (datetime.datetime.now() - g.creation).total_seconds() < (duration_90_days) ] groups_created_in_last_30_days = [ g for g in groups_created_in_last_90_days if (datetime.datetime.now() - g.creation).total_seconds() < (duration_30_days) ] groups_created_in_last_week = [ g for g in groups_created_in_last_30_days if (datetime.datetime.now() - g.creation).total_seconds() < (duration_1_week) ] groups_created_in_last_24_hours = [ g for g in groups_created_in_last_week if (datetime.datetime.now() - g.creation).total_seconds() < (duration_24_hours) ] topics = ndb.gql("SELECT * FROM Topic").fetch(1000) topics_created_in_last_90_days = [ t for t in topics if (datetime.datetime.now() - t.creation).total_seconds() < (duration_90_days) ] topics_created_in_last_30_days = [ t for t in topics_created_in_last_90_days if (datetime.datetime.now() - t.creation).total_seconds() < (duration_30_days) ] topics_created_in_last_week = [ t for t in topics_created_in_last_30_days if (datetime.datetime.now() - t.creation).total_seconds() < (duration_1_week) ] topics_created_in_last_24_hours = [ t for t in topics_created_in_last_week if (datetime.datetime.now() - t.creation).total_seconds() < (duration_24_hours) ] proposals = ndb.gql("SELECT * FROM Proposal").fetch(1000) proposals_created_in_last_90_days = [ p for p in proposals if (datetime.datetime.now() - p.creation).total_seconds() < (duration_90_days) ] proposals_created_in_last_30_days = [ p for p in proposals_created_in_last_90_days if (datetime.datetime.now() - p.creation).total_seconds() < (duration_30_days) ] proposals_created_in_last_week = [ p for p in proposals_created_in_last_30_days if (datetime.datetime.now() - p.creation).total_seconds() < (duration_1_week) ] proposals_created_in_last_24_hours = [ p for p in proposals_created_in_last_week if (datetime.datetime.now() - p.creation).total_seconds() < (duration_24_hours) ] proposal_comments = ndb.gql("SELECT * FROM ProposalComment").fetch( 1000) proposal_comments_created_in_last_90_days = [ c for c in proposal_comments if (datetime.datetime.now() - c.creation).total_seconds() < (duration_90_days) ] proposal_comments_created_in_last_30_days = [ c for c in proposal_comments_created_in_last_90_days if (datetime.datetime.now() - c.creation).total_seconds() < (duration_30_days) ] proposal_comments_created_in_last_week = [ c for c in proposal_comments_created_in_last_30_days if (datetime.datetime.now() - c.creation).total_seconds() < (duration_1_week) ] proposal_comments_created_in_last_24_hours = [ c for c in proposal_comments_created_in_last_week if (datetime.datetime.now() - c.creation).total_seconds() < (duration_24_hours) ] votes = ndb.gql("SELECT * FROM Vote").fetch(1000) users = ndb.gql("SELECT * FROM BeeVoteUser").fetch(1000) users_registered_in_last_90_days = [ u for u in users if u.creation and (datetime.datetime.now() - u.creation).total_seconds() < (duration_90_days) ] users_registered_in_last_30_days = [ u for u in users_registered_in_last_90_days if u.creation and (datetime.datetime.now() - u.creation).total_seconds() < (duration_30_days) ] users_registered_in_last_week = [ u for u in users_registered_in_last_30_days if u.creation and (datetime.datetime.now() - u.creation).total_seconds() < (duration_1_week) ] users_registered_in_last_24_hours = [ u for u in users_registered_in_last_week if u.creation and (datetime.datetime.now() - u.creation ).total_seconds() < (duration_24_hours) ] users_active_in_last_90_days = [ u for u in users if u.last_access and (datetime.datetime.now() - u.last_access ).total_seconds() < (duration_90_days) ] users_active_in_last_30_days = [ u for u in users_active_in_last_90_days if u.last_access and (datetime.datetime.now() - u.last_access ).total_seconds() < (duration_30_days) ] users_active_in_last_week = [ u for u in users_active_in_last_30_days if u.last_access and (datetime.datetime.now() - u.last_access ).total_seconds() < (duration_1_week) ] users_active_in_last_24_hours = [ u for u in users_active_in_last_week if u.last_access and (datetime.datetime.now() - u.last_access ).total_seconds() < (duration_24_hours) ] reports = ndb.gql("SELECT * FROM BugReport").fetch(1000) reports_created_in_last_90_days = [ r for r in reports if (datetime.datetime.now() - r.creation).total_seconds() < (duration_90_days) ] reports_created_in_last_30_days = [ r for r in reports_created_in_last_90_days if (datetime.datetime.now() - r.creation).total_seconds() < (duration_30_days) ] reports_created_in_last_week = [ r for r in reports_created_in_last_30_days if (datetime.datetime.now() - r.creation).total_seconds() < (duration_1_week) ] reports_created_in_last_24_hours = [ r for r in reports_created_in_last_week if (datetime.datetime.now() - r.creation).total_seconds() < (duration_24_hours) ] base_handlers.write_template( self.response, 'admin/stats.html', { 'stats': { 'number_of_groups': len(groups), 'groups_created_in_last_24_hours': len(groups_created_in_last_24_hours), 'groups_created_in_last_week': len(groups_created_in_last_week), 'groups_created_in_last_30_days': len(groups_created_in_last_30_days), 'groups_created_in_last_90_days': len(groups_created_in_last_90_days), 'average_members_per_group': sum(len(g.members) for g in groups) / float(len(groups)), 'number_of_topics': len(topics), 'topics_created_in_last_24_hours': len(topics_created_in_last_24_hours), 'topics_created_in_last_week': len(topics_created_in_last_week), 'topics_created_in_last_30_days': len(topics_created_in_last_30_days), 'topics_created_in_last_90_days': len(topics_created_in_last_90_days), 'average_topics_per_group': len(topics) / float(len(groups)), 'number_of_proposals': len(proposals), 'proposals_created_in_last_24_hours': len(proposals_created_in_last_24_hours), 'proposals_created_in_last_week': len(proposals_created_in_last_week), 'proposals_created_in_last_30_days': len(proposals_created_in_last_30_days), 'proposals_created_in_last_30_days': len(proposals_created_in_last_90_days), 'average_proposals_per_topic': len(proposals) / float(len(topics)), 'number_of_proposal_comments': len(proposal_comments), 'proposal_comments_created_in_last_24_hours': len(proposal_comments_created_in_last_24_hours), 'proposal_comments_created_in_last_week': len(proposal_comments_created_in_last_week), 'proposal_comments_created_in_last_30_days': len(proposal_comments_created_in_last_30_days), 'proposal_comments_created_in_last_90_days': len(proposal_comments_created_in_last_90_days), 'number_of_users': len(users), 'users_by_language': { 'en': len([ u for u in users if (u.language is None) or (u.language == 'en') ]), 'it': len([u for u in users if u.language == 'it']), }, 'users_registered_in_last_24_hours': len(users_registered_in_last_24_hours), 'users_registered_in_last_week': len(users_registered_in_last_week), 'users_registered_in_last_30_days': len(users_registered_in_last_30_days), 'users_registered_in_last_90_days': len(users_registered_in_last_90_days), 'users_active_in_last_24_hours': len(users_active_in_last_24_hours), 'users_active_in_last_week': len(users_active_in_last_week), 'users_active_in_last_30_days': len(users_active_in_last_30_days), 'users_active_in_last_90_days': len(users_active_in_last_90_days), 'number_of_reports': len(reports), 'reports_created_in_last_24_hours': len(reports_created_in_last_24_hours), 'reports_created_in_last_week': len(reports_created_in_last_week), 'reports_created_in_last_30_days': len(reports_created_in_last_30_days), 'reports_created_in_last_90_days': len(reports_created_in_last_90_days), 'number_of_votes': len(votes), } })
def get(self): base_handlers.write_template(self.response, 'admin/admin-menu.html', {})
def get(self): base_handlers.write_template(self.response, 'admin/emailer.html', {})
def get(self): user_id = users.get_current_user().user_id() if self.beevote_user or models.BeeVoteUser.get_from_google_id(user_id): self.redirect("/") return base_handlers.write_template(self.response, 'registration-form.html', {})
def get(self): reports = ndb.gql("SELECT * FROM BugReport") base_handlers.write_template(self.response, 'admin/bug-reports.html', {'reports': reports})
def get(self): values = {} base_handlers.write_template(self.response, 'report-bug.html', values)
def get(self): values = calculate_best_players_by_role() # path = os.path.join(os.path.dirname(__file__), 'templates/admin/showBestPlayerStatsByRole.html') # self.response.out.write(template.render(path,values)) base_handlers.write_template(self.response, "templates/admin/showBestPlayerStatsByRole.html", values)
def get(self, user_id): # TODO Use user_id to get user and put it in values values = {} base_handlers.write_template(self.response, 'user-profile.html', values)
def get(self): values = {} base_handlers.write_template(self.response, 'report-bug.html', values)
def get(self): games = models.Game.get_all() values = {"query": "Unit", "games": games} base_handlers.write_template(self.response, "templates/admin/showGames.html", values)
def get(self, user_id): # TODO Use user_id to get user and put it in values values = {} base_handlers.write_template(self.response, 'user-profile.html', values)
def get(self): base_handlers.write_template(self.response, 'admin/admin-menu.html', {})
def handle_404(request, response, exception): response.set_status(404) base_handlers.write_template(response, 'not_found.html', {'url': request.path})
def get(self): feature_changes = ndb.gql("SELECT * FROM FeatureChange").fetch(1000) feature_changes = sorted(feature_changes, key=lambda feature: feature.creation, reverse=True) base_handlers.write_template(self.response, 'admin/feature-changes.html', {'feature_changes': feature_changes})
def get(self): reports = ndb.gql("SELECT * FROM BugReport") base_handlers.write_template(self.response, 'admin/bug-reports.html', {'reports': reports})
def handle_404(request, response, exception): response.set_status(404) base_handlers.write_template(response, 'not_found.html', {'url': request.path})
def get(self): base_handlers.write_template(self.response, 'admin/emailer.html', {})
def get(self): players = models.Player.get_all() values = {"query": "Unit", "players": players} base_handlers.write_template(self.response, "templates/admin/showPlayers.html", values)
def get(self): duration_24_hours = 24*60*60 duration_1_week = duration_24_hours*7 duration_30_days = duration_24_hours*30 duration_90_days = duration_24_hours*90 groups = ndb.gql("SELECT * FROM Group").fetch(1000) groups_created_in_last_90_days = [g for g in groups if (datetime.datetime.now() - g.creation).total_seconds() < (duration_90_days)] groups_created_in_last_30_days = [g for g in groups_created_in_last_90_days if (datetime.datetime.now() - g.creation).total_seconds() < (duration_30_days)] groups_created_in_last_week = [g for g in groups_created_in_last_30_days if (datetime.datetime.now() - g.creation).total_seconds() < (duration_1_week)] groups_created_in_last_24_hours = [g for g in groups_created_in_last_week if (datetime.datetime.now() - g.creation).total_seconds() < (duration_24_hours)] topics = ndb.gql("SELECT * FROM Topic").fetch(1000) topics_created_in_last_90_days = [t for t in topics if (datetime.datetime.now() - t.creation).total_seconds() < (duration_90_days)] topics_created_in_last_30_days = [t for t in topics_created_in_last_90_days if (datetime.datetime.now() - t.creation).total_seconds() < (duration_30_days)] topics_created_in_last_week = [t for t in topics_created_in_last_30_days if (datetime.datetime.now() - t.creation).total_seconds() < (duration_1_week)] topics_created_in_last_24_hours = [t for t in topics_created_in_last_week if (datetime.datetime.now() - t.creation).total_seconds() < (duration_24_hours)] proposals = ndb.gql("SELECT * FROM Proposal").fetch(1000) proposals_created_in_last_90_days = [p for p in proposals if (datetime.datetime.now() - p.creation).total_seconds() < (duration_90_days)] proposals_created_in_last_30_days = [p for p in proposals_created_in_last_90_days if (datetime.datetime.now() - p.creation).total_seconds() < (duration_30_days)] proposals_created_in_last_week = [p for p in proposals_created_in_last_30_days if (datetime.datetime.now() - p.creation).total_seconds() < (duration_1_week)] proposals_created_in_last_24_hours = [p for p in proposals_created_in_last_week if (datetime.datetime.now() - p.creation).total_seconds() < (duration_24_hours)] proposal_comments = ndb.gql("SELECT * FROM ProposalComment").fetch(1000) proposal_comments_created_in_last_90_days = [c for c in proposal_comments if (datetime.datetime.now() - c.creation).total_seconds() < (duration_90_days)] proposal_comments_created_in_last_30_days = [c for c in proposal_comments_created_in_last_90_days if (datetime.datetime.now() - c.creation).total_seconds() < (duration_30_days)] proposal_comments_created_in_last_week = [c for c in proposal_comments_created_in_last_30_days if (datetime.datetime.now() - c.creation).total_seconds() < (duration_1_week)] proposal_comments_created_in_last_24_hours = [c for c in proposal_comments_created_in_last_week if (datetime.datetime.now() - c.creation).total_seconds() < (duration_24_hours)] votes = ndb.gql("SELECT * FROM Vote").fetch(1000) users = ndb.gql("SELECT * FROM BeeVoteUser").fetch(1000) users_registered_in_last_90_days = [u for u in users if u.creation and (datetime.datetime.now() - u.creation).total_seconds() < (duration_90_days)] users_registered_in_last_30_days = [u for u in users_registered_in_last_90_days if u.creation and (datetime.datetime.now() - u.creation).total_seconds() < (duration_30_days)] users_registered_in_last_week = [u for u in users_registered_in_last_30_days if u.creation and (datetime.datetime.now() - u.creation).total_seconds() < (duration_1_week)] users_registered_in_last_24_hours = [u for u in users_registered_in_last_week if u.creation and (datetime.datetime.now() - u.creation).total_seconds() < (duration_24_hours)] users_active_in_last_90_days = [u for u in users if u.last_access and (datetime.datetime.now() - u.last_access).total_seconds() < (duration_90_days)] users_active_in_last_30_days = [u for u in users_active_in_last_90_days if u.last_access and (datetime.datetime.now() - u.last_access).total_seconds() < (duration_30_days)] users_active_in_last_week = [u for u in users_active_in_last_30_days if u.last_access and (datetime.datetime.now() - u.last_access).total_seconds() < (duration_1_week)] users_active_in_last_24_hours = [u for u in users_active_in_last_week if u.last_access and (datetime.datetime.now() - u.last_access).total_seconds() < (duration_24_hours)] reports = ndb.gql("SELECT * FROM BugReport").fetch(1000) reports_created_in_last_90_days = [r for r in reports if (datetime.datetime.now() - r.creation).total_seconds() < (duration_90_days)] reports_created_in_last_30_days = [r for r in reports_created_in_last_90_days if (datetime.datetime.now() - r.creation).total_seconds() < (duration_30_days)] reports_created_in_last_week = [r for r in reports_created_in_last_30_days if (datetime.datetime.now() - r.creation).total_seconds() < (duration_1_week)] reports_created_in_last_24_hours = [r for r in reports_created_in_last_week if (datetime.datetime.now() - r.creation).total_seconds() < (duration_24_hours)] base_handlers.write_template(self.response, 'admin/stats.html', {'stats': { 'number_of_groups': len(groups), 'groups_created_in_last_24_hours': len(groups_created_in_last_24_hours), 'groups_created_in_last_week': len(groups_created_in_last_week), 'groups_created_in_last_30_days': len(groups_created_in_last_30_days), 'groups_created_in_last_90_days': len(groups_created_in_last_90_days), 'average_members_per_group': sum(len(g.members) for g in groups) / float(len(groups)), 'number_of_topics': len(topics), 'topics_created_in_last_24_hours': len(topics_created_in_last_24_hours), 'topics_created_in_last_week': len(topics_created_in_last_week), 'topics_created_in_last_30_days': len(topics_created_in_last_30_days), 'topics_created_in_last_90_days': len(topics_created_in_last_90_days), 'average_topics_per_group': len(topics) / float(len(groups)), 'number_of_proposals': len(proposals), 'proposals_created_in_last_24_hours': len(proposals_created_in_last_24_hours), 'proposals_created_in_last_week': len(proposals_created_in_last_week), 'proposals_created_in_last_30_days': len(proposals_created_in_last_30_days), 'proposals_created_in_last_30_days': len(proposals_created_in_last_90_days), 'average_proposals_per_topic': len(proposals) / float(len(topics)), 'number_of_proposal_comments': len(proposal_comments), 'proposal_comments_created_in_last_24_hours': len(proposal_comments_created_in_last_24_hours), 'proposal_comments_created_in_last_week': len(proposal_comments_created_in_last_week), 'proposal_comments_created_in_last_30_days': len(proposal_comments_created_in_last_30_days), 'proposal_comments_created_in_last_90_days': len(proposal_comments_created_in_last_90_days), 'number_of_users': len(users), 'users_by_language': { 'en': len([u for u in users if (u.language is None) or (u.language == 'en')]), 'it': len([u for u in users if u.language == 'it']), }, 'users_registered_in_last_24_hours': len(users_registered_in_last_24_hours), 'users_registered_in_last_week': len(users_registered_in_last_week), 'users_registered_in_last_30_days': len(users_registered_in_last_30_days), 'users_registered_in_last_90_days': len(users_registered_in_last_90_days), 'users_active_in_last_24_hours': len(users_active_in_last_24_hours), 'users_active_in_last_week': len(users_active_in_last_week), 'users_active_in_last_30_days': len(users_active_in_last_30_days), 'users_active_in_last_90_days': len(users_active_in_last_90_days), 'number_of_reports': len(reports), 'reports_created_in_last_24_hours': len(reports_created_in_last_24_hours), 'reports_created_in_last_week': len(reports_created_in_last_week), 'reports_created_in_last_30_days': len(reports_created_in_last_30_days), 'reports_created_in_last_90_days': len(reports_created_in_last_90_days), 'number_of_votes': len(votes), }})
def get(self): base_handlers.write_template(self.response, "templates/admin/insertGame.html")