예제 #1
0
    def useSchool(self, schoolData):
        self.school = Schools.gql("WHERE school_id = :1", schoolData["id"]).get()
        if self.school == None:
            # not found, insert it
            self.school = Schools(
                school_id=schoolData["id"], name=schoolData["name"], lat=schoolData["lat"], lng=schoolData["lng"]
            )
            self.school.put()

            # create a new up/downvote key in memcache
            key = "SchoolUpvote." + self.school.school_id
            memcache.add(key, 0)
            key = "SchoolDownvote." + self.school.school_id
            memcache.add(key, 0)
예제 #2
0
    def schoolUpvote(self, schoolID, userID):

        upvotes = memcache.get("UserSchoolUpvote.%s" % userID)

        user = User.get_by_id(int(userID))

        if upvotes == None:
            upvotes = user.upvotes

        key = "SchoolUpvote." + schoolID
        vote = memcache.get(key)

        # search if school already included
        if schoolID not in upvotes:

            self.school = Schools.gql("WHERE school_id = :1", schoolID).get()

            if vote == None:
                vote = self.school.upvote
                memcache.add(key, vote)

            vote = memcache.incr(key)

            self.school.upvote = vote
            self.school.put()

            logging.info("upvoted school %s" % schoolID)

            # store user upvoted school
            key = "UserSchoolUpvote.%s" % userID
            if upvotes != "":
                upvotes = "%s,%s" % (upvotes, schoolID)
            else:
                upvotes = "%s" % schoolID

            logging.info("storing upvote for key %s" % key)

            memcache.set(key, upvotes)

            user.upvotes = upvotes
            user.put()

        return vote
예제 #3
0
class RateSchool(object):

    school = None

    def useSchool(self, schoolData):
        self.school = Schools.gql("WHERE school_id = :1", schoolData["id"]).get()
        if self.school == None:
            # not found, insert it
            self.school = Schools(
                school_id=schoolData["id"], name=schoolData["name"], lat=schoolData["lat"], lng=schoolData["lng"]
            )
            self.school.put()

            # create a new up/downvote key in memcache
            key = "SchoolUpvote." + self.school.school_id
            memcache.add(key, 0)
            key = "SchoolDownvote." + self.school.school_id
            memcache.add(key, 0)

    def schoolUpvote(self, schoolID, userID):

        upvotes = memcache.get("UserSchoolUpvote.%s" % userID)

        user = User.get_by_id(int(userID))

        if upvotes == None:
            upvotes = user.upvotes

        key = "SchoolUpvote." + schoolID
        vote = memcache.get(key)

        # search if school already included
        if schoolID not in upvotes:

            self.school = Schools.gql("WHERE school_id = :1", schoolID).get()

            if vote == None:
                vote = self.school.upvote
                memcache.add(key, vote)

            vote = memcache.incr(key)

            self.school.upvote = vote
            self.school.put()

            logging.info("upvoted school %s" % schoolID)

            # store user upvoted school
            key = "UserSchoolUpvote.%s" % userID
            if upvotes != "":
                upvotes = "%s,%s" % (upvotes, schoolID)
            else:
                upvotes = "%s" % schoolID

            logging.info("storing upvote for key %s" % key)

            memcache.set(key, upvotes)

            user.upvotes = upvotes
            user.put()

        return vote

    def schoolDownvote(self, schoolID, userID):

        downvotes = memcache.get("UserSchoolDownvote.%s" % userID)

        if downvotes == None:
            user = User.get_by_id(int(userID))
            downvotes = user.downvotes

        key = "SchoolDownvote." + schoolID
        vote = memcache.get(key)

        # search if school already included
        if schoolID not in downvotes:

            self.school = Schools.gql("WHERE school_id = :1", schoolID).get()

            if vote == None:
                vote = self.school.downvote
                memcache.add(key, vote)

            vote = memcache.incr(key)

            self.school.downvote = vote
            self.school.put()

            logging.info("downvoted school %s" % schoolID)

            # store user upvoted school
            key = "UserSchoolDownvote.%s" % userID
            if downvotes != "":
                downvotes = "%s,%s" % (downvotes, schoolID)
            else:
                downvotes = "%s" % schoolID

            logging.info("storing downvote for key %s" % key)

            memcache.set(key, downvotes)

        return vote

    def commentUpvote(self, commentID):
        key = "CommentUpvote." + commentID
        vote = memcache.incr(key)

        return vote

    def commentDownvote(self, commentID):
        key = "CommentDownvote." + commentID
        vote = memcache.decr(key)

        return vote

    def addComment(self, schoolID, commentData):

        user = User.get_by_id(int(commentData["userID"]))

        comment = Comments(school_id=schoolID, text=commentData["text"], user=user)

        comment.put()

        # create a new up/downvote key in memcache
        key = "CommentUpvote.%i" % comment.key().id()
        memcache.add(key, 0)
        key = "CommentDownvote.%i" % comment.key().id()
        memcache.add(key, 0)

        return comment

    def schoolData(self):

        # get all comments
        comments = Comments.gql("WHERE school_id = :1 AND visible = True", self.school.school_id)
        commentsList = []

        if comments:
            for c in comments:
                comment = {
                    "id": c.key().id(),
                    "text": c.text,
                    "reports": c.reports,
                    "user": {"name": c.user.name, "gender": c.user.gender},
                    "upvote": memcache.get("CommentUpvote.%i" % c.key().id()),
                    "downvote": memcache.get("CommentDownvote.%i" % c.key().id()),
                }
                commentsList.append(comment)

        upvote = memcache.get("SchoolUpvote." + self.school.school_id)
        downvote = memcache.get("SchoolDownvote." + self.school.school_id)

        if upvote == None:
            upvote = self.school.upvote
            memcache.add("SchoolUpvote." + self.school.school_id, upvote)

        if downvote == None:
            downvote = self.school.downvote
            memcache.add("SchoolDownvote." + self.school.school_id, downvote)

        schoolData = {"comments": commentsList, "upvote": upvote, "downvote": downvote}

        return schoolData

    def userSignup(self, userData):

        # check if email exist
        user = User.gql("WHERE email = :1", userData["email"])
        if user.count() == 1:
            return user.get().key().id()
        else:
            # encode password
            password = userData["password"] + PASSWORD_SALT
            h = hashlib.md5()
            h.update(password)
            user = User(
                name=userData["name"], email=userData["email"], password=h.hexdigest(), gender=userData["gender"]
            )

            user.put()

            key = "UserSchoolUpvote.%i" % user.key().id()
            memcache.add(key, "")
            key = "UserSchoolDownvote.%i" % user.key().id()
            memcache.add(key, "")

            return user.key().id()

    def userLogin(self, userData):
        password = userData["password"] + PASSWORD_SALT
        h = hashlib.md5()
        h.update(password)

        user = User.gql("WHERE email = :1 AND password = :2", userData["email"], h.hexdigest())

        if user.count() == 1:
            return user.get().key().id()
        else:
            return 0

    def userSchoolVotes(self, userID):
        key = "UserSchoolUpvote.%s" % userID
        upvotes = memcache.get(key)
        key = "UserSchoolDownvote.%s" % userID
        downvotes = memcache.add(key)

        return {"upvotes": upvotes, "downvotes": downvotes}

    def clearMemcache(self):
        memcache.flush_all()