Beispiel #1
0
    def get(self):
        logging.info('Generate LeaderboardStats')

        cheevers = Cheever.query().order(-Cheever.numScore).fetch(10)
        for pos in range(0, cheevers.__len__()):
            leaderboardPos_key = ndb.Key('LeaderboardStats', str(pos) + 's')
            leaderboardPos = leaderboardPos_key.get()
            if not leaderboardPos:
                leaderboardPos = LeaderboardStats(key=leaderboardPos_key)

            leaderboardPos.populate(
                username=cheevers[pos].username,
                statType='score',
                value=cheevers[pos].numScore
            )
            leaderboardPos.put()

        cheevers = Cheever.query().order(-Cheever.numContribs).fetch(10)
        for pos in range(0, cheevers.__len__()):
            leaderboardPos_key = ndb.Key('LeaderboardStats', str(pos) + 'st')
            leaderboardPos = leaderboardPos_key.get()
            if not leaderboardPos:
                leaderboardPos = LeaderboardStats(key=leaderboardPos_key)

            leaderboardPos.populate(
                username=cheevers[pos].username,
                statType='contribution',
                value=cheevers[pos].numContribs
            )

            leaderboardPos.put()

        memcache.delete('contribStats')
        memcache.delete('scoreStats')
Beispiel #2
0
    def get(self):
        logging.info('ProfilePage class requested')

        # Look for existing profile based on User's email
        cheever_key = ndb.Key('Cheever', self.user.email())
        cheever = cheever_key.get()

        if not cheever:
            # Profile doesn't yet exist, create a new Cheever with default
            # values
            cheever = Cheever(key=ndb.Key("Cheever", self.user.email()))

        # Add the cheever model to our template values for rendering
        self.template_values['cheever'] = cheever

        template = jinja.get_template('profile.html')
        self.response.out.write(template.render(self.template_values))
Beispiel #3
0
    def post(self):
        logging.info('CheeversPage posted')

        query = Cheever.query()

        if self.request.get('username') != '':
            query = query.filter(Cheever.username ==
                                 self.request.get('username'))

        try:
            beginScore = int(self.request.get('beginScore'))
            query = query.filter(Cheever.numScore >= beginScore)
        except:
            pass

        try:
            endScore = int(self.request.get('endScore'))
            query = query.filter(Cheever.numScore <= endScore)
        except:
            pass

        logging.info(self.request.get('beginScore'))
        logging.info(self.request.get('endScore'))

        query = query.order(Cheever.numScore, Cheever.username)

        logging.info(query)

        results = query.fetch()

        current_key = ndb.Key(Cheever, self.user.email())
        for c in results:
            c.followText = 'Follow'
            if current_key in c.followers:
                c.followText = 'Unfollow'

        self.template_values['cheevers'] = results
        template = jinja.get_template('cheevers.html')

        self.response.out.write(
            template.render(self.template_values))
Beispiel #4
0
    def get(self):
        logging.info('Generating SystemStats')

        achievements = Achievement.query().filter(Achievement.verified == True).fetch()
        cheevers = Cheever.query().fetch()
        contributors = Achievement.query(
            projection=[Achievement.contributor], distinct=True).fetch()

        maxScore = 0
        for a in achievements:
            maxScore += a.score

        systemStats = SystemStats(
            numUsers=cheevers.__len__(),
            numContributors=contributors.__len__(),
            numAchievements=achievements.__len__(),
            maxScore=maxScore,
            created=datetime.datetime.now()
        )

        systemStats.put()
        memcache.set('systemStats', systemStats)
Beispiel #5
0
    def post(self):
        logging.info('AdminPage Posted')

        if self.request.get('action') == "accept":
            achievement = ndb.Key(urlsafe=self.request.get('key')).get()
            achievement.verified = True
            achievement.put()

            cheever = Cheever.query().filter(
                Cheever.username == achievement.contributor).get()
            for f in cheever.followers:
                follower = f.get()
                if follower:
                    logging.info('Adding Notify Task for ' +
                                 follower.username)
                    t = taskqueue.Task(
                        url='/notifyTask',
                        params={
                            'username': follower.username,
                            'email': follower.notifyEmail,
                            'title': achievement.title,
                            'description': achievement.description,
                            'category': achievement.category,
                            'score': achievement.score
                        }
                    )
                    t.add(queue_name='cheevedit-push-queue')

        if self.request.get('action') == "reject":
            logging.info('Rejecting ..')
            t = taskqueue.Task(
                method='pull',
                payload=str(self.request.get('key'))
            )
            logging.info(t.payload)
            t.add(queue_name='cheevedit-pull-queue')

        self.redirect('/admin')
Beispiel #6
0
    def post(self):
        logging.info('ProfilePage posted')

        # Look for existing profile based on Users' email
        cheever_key = ndb.Key('Cheever', self.user.email())
        cheever = cheever_key.get()

        if not cheever:
            # Profile doesn't yet exist, create a new Cheever with default
            # values
            cheever = Cheever(key=ndb.Key("Cheever", self.user.email()))

        # Update the user controlled values
        cheever.username = self.request.get('username')
        cheever.notifyEmail = self.request.get('notifyEmail')
        cheever.bio = self.request.get('bio')

        # Commit our updates to the datastore
        cheever.put()

        self.redirect('/profile')