Пример #1
0
    def get(self, fb_uid):
        # This post is got from the cache. That's ok, because all of the actual
        # dynamic data (votes, comments) is retrieved from the datastore during
        # choosie_post.to_json().
        user = CacheController.get_user_by_fb_id(fb_uid)

        self.response.out.write(json.dumps(self.profile_details_json(user)))
Пример #2
0
  def get(self):
    vote_for = int(self.request.get('which_photo'))
    fb_uid = str(self.request.get('fb_uid'))
    user = CacheController.get_user_by_fb_id(fb_uid)

    if not user:
      self.write_error("Can't add vote: User with fb_uid %s is not logged in." % fb_uid)
      return

    # Since the post is taken from the cache, it might not be the most updated version
    # but that's ok, as it is only used as 'parent'
    choosie_post = CacheController.get_model(self.request.get('post_key'))

    vote = Vote(parent=choosie_post,
                user_fb_id=fb_uid,
                vote_for=int(vote_for))

    prev_vote = vote.prev_vote_for_user_for_post()
    #if the user voted to the same post but for different item, updating the vote
    if (prev_vote is not None and prev_vote.vote_for != vote_for):
      prev_vote.vote_for = vote_for
      prev_vote.put()
      choosie_post.add_vote_to_post(vote, False)
      self.response.write('Vote changed to photo number %d.' % vote_for)
    #if voted to same pic - error
    elif(prev_vote != None):
       self.write_error("already voted!")
    else:
      vote.put()
      ChoosiePost.add_vote_to_post(choosie_post, vote, True)
      # Make sure the ChoosiePost is invalidated in cache, so that next time it is asked
      # for, the updated one is retreived.
      Vote.invalidate_votes(self.request.get('post_key'))
      self.response.write('A new vote issued for photo number %d.' % vote_for)
Пример #3
0
  def get(self, fb_uid):
    # This post is got from the cache. That's ok, because all of the actual
    # dynamic data (votes, comments) is retrieved from the datastore during
    # choosie_post.to_json().
    user = CacheController.get_user_by_fb_id(fb_uid)

    self.response.out.write(json.dumps(self.profile_details_json(user)))
 def build_comment_model_from_fb_comment(json_comment):
   comment = Comment(user_fb_id=json_comment["from"]["id"],
                     created_at=Utils.parse_utf_format_datetime(json_comment["created_time"]),
                     text=json_comment["message"])
   choosie_user = CacheController.get_user_by_fb_id(json_comment["from"]["id"])
   if choosie_user is None:
     comment.is_scraped = True
     comment.scraped_user_details = str(ScrapeCommentsHandler.build_user_details(json_comment))
   return comment
 def build_comment_model_from_fb_comment(json_comment):
   comment = Comment(user_fb_id=json_comment["from"]["id"],
                     created_at=Utils.parse_utf_format_datetime(json_comment["created_time"]),
                     text=json_comment["message"])
   choosie_user = CacheController.get_user_by_fb_id(json_comment["from"]["id"])
   if choosie_user is None:
     comment.is_scraped = True
     comment.scraped_user_details = str(ScrapeCommentsHandler.build_user_details(json_comment))
   return comment
  def notify_comment_async(self, choosie_post_key, user_fb_uid, commenter_name):
    try:
      user = CacheController.get_user_by_fb_id(user_fb_uid)
      result = NotifyHandler.send_notifiction(NotifyHandler.notify_type["comment"],
                                              commenter_name,
                                              str(choosie_post_key),
                                              [user])

      logging.info("result of notifying on comment from " + commenter_name + " : "  + result)
    except Exception, e:
      logging.error("Faled to notify on new comment: %s" % e)
  def notify_vote_async(self, choosie_post_key, user_fb_uid, name_of_from_user):
    try:
      user = CacheController.get_user_by_fb_id(user_fb_uid)
      result = NotifyHandler.send_notifiction(NotifyHandler.notify_type["vote"],
                                              name_of_from_user,
                                              str(choosie_post_key), 
                                              [user])

      logging.info("result of notifying on vote from " + name_of_from_user + " : " +  result)
    except Exception, e:
      logging.error("Faled to notify on new vote: %s" % e)
Пример #8
0
 def from_string_for_choosie_post(comment_str):
   # When parsing the string represantation (see to_string_for_choosie_post() above),
   # there are two options.
   as_dict = ast.literal_eval(comment_str)
   if "user_fb_id" in as_dict:
     # For option 1 (regualr, not scraped comments), we need to also get the user
     # details.
     user = CacheController.get_user_by_fb_id(as_dict["user_fb_id"])
     del as_dict["user_fb_id"]
     as_dict["user"] = user.to_short_json()
   return as_dict
Пример #9
0
 def from_string_for_choosie_post(comment_str):
     # When parsing the string represantation (see to_string_for_choosie_post() above),
     # there are two options.
     as_dict = ast.literal_eval(comment_str)
     if "user_fb_id" in as_dict:
         # For option 1 (regualr, not scraped comments), we need to also get the user
         # details.
         user = CacheController.get_user_by_fb_id(as_dict["user_fb_id"])
         del as_dict["user_fb_id"]
         as_dict["user"] = user.to_short_json()
     return as_dict
 def post(self):
   fb_uid = str(self.request.get('fb_uid'))
   device_id = str(self.request.get('device_id'))
   user = CacheController.get_user_by_fb_id(fb_uid)
   if user is not None:
     logging.info("device id was set to " + device_id)
     user.device_id = device_id
     user.put()
     CacheController.invalidate_user_fb_id(fb_uid)
     logging.info("Device was registered successfully for user " + user.first_name + " " + user.last_name)
   else:
     logging.error("No user was found with user_id %s. Failed to register device." % fb_uid)
Пример #11
0
 def post(self, fb_uid):
     user = CacheController.get_user_by_fb_id(fb_uid)
     nick = self.request.get("nick")
     info = self.request.get("info")
     if nick == "":
         user.nick = None
     else:
         user.nick = nick
     user.info = info
     user.put()
     CacheController.invalidate_user_fb_id(fb_uid)
     self.response.out.write(json.dumps({"success": "true"}))
    def notify_vote_async(self, choosie_post_key, user_fb_uid,
                          name_of_from_user):
        try:
            user = CacheController.get_user_by_fb_id(user_fb_uid)
            result = NotifyHandler.send_notifiction(
                NotifyHandler.notify_type["vote"], name_of_from_user,
                str(choosie_post_key), [user])

            logging.info("result of notifying on vote from " +
                         name_of_from_user + " : " + result)
        except Exception, e:
            logging.error("Faled to notify on new vote: %s" % e)
    def notify_comment_async(self, choosie_post_key, user_fb_uid,
                             commenter_name):
        try:
            user = CacheController.get_user_by_fb_id(user_fb_uid)
            result = NotifyHandler.send_notifiction(
                NotifyHandler.notify_type["comment"], commenter_name,
                str(choosie_post_key), [user])

            logging.info("result of notifying on comment from " +
                         commenter_name + " : " + result)
        except Exception, e:
            logging.error("Faled to notify on new comment: %s" % e)
Пример #14
0
 def post(self, fb_uid):
    user = CacheController.get_user_by_fb_id(fb_uid)
    nick = self.request.get("nick")
    info = self.request.get("info")
    if nick == "":
      user.nick = None
    else:
      user.nick = nick
    user.info = info
    user.put()
    CacheController.invalidate_user_fb_id(fb_uid)
    self.response.out.write(json.dumps({"success" : "true"}))
Пример #15
0
 def post(self):
     fb_access_token = str(self.request.get("fb_access_token"))
     fb_uid = str(self.request.get("fb_uid"))
     fb_access_token_expdate = Utils.get_access_token_from_request(self.request)
     user = CacheController.get_user_by_fb_id(fb_uid)
     if user is None:
         User.create(fb_access_token, fb_access_token_expdate)
         self.response.write("User created.")
     else:
         # updating access token fields
         user.fb_access_token = fb_access_token
         user.fb_access_token_expdate = fb_access_token_expdate
         user.put()
         self.response.write("User [%s %s] logged in successfully." % (user.first_name, user.last_name))
Пример #16
0
  def from_string_for_choosie_post(vote_str, keep_shallow=False):
    as_dict = ast.literal_eval(vote_str)

    if "user_fb_id" in as_dict:
      # For option 1 (regular, not scraped comments), we need to also get the user
      # details.
      if keep_shallow:
        user = {"fb_uid": as_dict["user_fb_id"]}
      else:
        user = CacheController.get_user_by_fb_id(as_dict["user_fb_id"]).to_short_json()
      del as_dict["user_fb_id"]
      as_dict["user"] = user
    
    return as_dict
 def post(self):
     fb_uid = str(self.request.get('fb_uid'))
     device_id = str(self.request.get('device_id'))
     user = CacheController.get_user_by_fb_id(fb_uid)
     if user is not None:
         logging.info("device id was set to " + device_id)
         user.device_id = device_id
         user.put()
         CacheController.invalidate_user_fb_id(fb_uid)
         logging.info("Device was registered successfully for user " +
                      user.first_name + " " + user.last_name)
     else:
         logging.error(
             "No user was found with user_id %s. Failed to register device."
             % fb_uid)
Пример #18
0
    def from_string_for_choosie_post(vote_str, keep_shallow=False):
        as_dict = ast.literal_eval(vote_str)

        if "user_fb_id" in as_dict:
            # For option 1 (regular, not scraped comments), we need to also get the user
            # details.
            if keep_shallow:
                user = {"fb_uid": as_dict["user_fb_id"]}
            else:
                user = CacheController.get_user_by_fb_id(
                    as_dict["user_fb_id"]).to_short_json()
            del as_dict["user_fb_id"]
            as_dict["user"] = user

        return as_dict
Пример #19
0
 def post(self):
     fb_access_token = str(self.request.get('fb_access_token'))
     fb_uid = str(self.request.get('fb_uid'))
     fb_access_token_expdate = Utils.get_access_token_from_request(
         self.request)
     user = CacheController.get_user_by_fb_id(fb_uid)
     if user is None:
         User.create(fb_access_token, fb_access_token_expdate)
         self.response.write('User created.')
     else:
         # updating access token fields
         user.fb_access_token = fb_access_token
         user.fb_access_token_expdate = fb_access_token_expdate
         user.put()
         self.response.write('User [%s %s] logged in successfully.' %
                             (user.first_name, user.last_name))
  def add_vote_to_post(self, vote, is_new):
    db.run_in_transaction(ChoosiePost.add_vote_to_post_transaction, self.key(), vote)
    logging.info("user_id" + self.user_fb_id)
    logging.info("vote_id " + vote.user_fb_id)

    if is_new:
      user = CacheController.get_user_by_fb_id(self.user_fb_id)
      if user.num_votes:
        user.num_votes += 1
      else:
        user.num_votes = 1
      user.put()
      CacheController.invalidate_user_fb_id(user.fb_uid)

    if self.user_fb_id != vote.user_fb_id and self.created_at > datetime.datetime.now() - datetime.timedelta(0.1): # if i didnt vote on my self and the post was uploaded less then 2.5 hours ago
      vote_from = vote.get_user().display_name()
      deferred.defer(self.notify_vote_async, self.key(), self.user_fb_id, vote_from)
Пример #21
0
    def post(self):
        user = CacheController.get_user_by_fb_id(self.request.get('fb_uid'))
        logging.info(self.request.get('fb_uid'))
        if user is None:
            self.error(500)
            logging.error("user not found!")
            return

        logging.info("user found!")
        logging.info("share_to_fb_param: " +
                     self.request.get("share_to_fb", default_value="off"))

        if (self.request.get("share_to_fb", default_value="off") == "on"):
            logging.info("user" + user.fb_access_token)
            logging.info("user_db" + str(self.request.get('fb_access_token')))
            logging.info("key " + str(user.key()))
            # updating user access token cause he might added publish_stream permission
            if (user.fb_access_token != str(
                    self.request.get('fb_access_token'))):
                logging.info("Changing access_token!")
                user.fb_access_token = str(self.request.get('fb_access_token'))
                user.fb_access_token_expdate = Utils.get_access_token_from_request(
                    self.request)
                user.put()
                CacheController.invalidate_user_fb_id(user.fb_uid)

        photo1_blob_key = Utils.write_file_to_blobstore(
            self.shrinkImage(self.request.get('photo1')))
        photo2_blob_key = Utils.write_file_to_blobstore(
            self.shrinkImage(self.request.get('photo2')))

        choosie_post = ChoosiePost(question=self.request.get('question'),
                                   user_fb_id=self.request.get('fb_uid'),
                                   photo1_blob_key=photo1_blob_key,
                                   photo2_blob_key=photo2_blob_key)

        # Save this post in the datastore, and also in the memcache.
        choosie_post.put()
        CacheController.set_model(choosie_post)
        logging.info("share:" +
                     self.request.get("share_to_fb", default_value="off"))
        if (self.request.get("share_to_fb") == "on"):
            logging.info("publishing!!")
            choosie_post.publish_to_facebook(self.request.host_url)
        self.redirect('/')
Пример #22
0
  def post(self):
    user = CacheController.get_user_by_fb_id(self.request.get('fb_uid'))
    logging.info(self.request.get('fb_uid'))
    if user is None:
       self.error(500)
       logging.error("user not found!")
       return

    logging.info("user found!")
    logging.info("share_to_fb_param: " + self.request.get("share_to_fb", default_value="off"))

    if (self.request.get("share_to_fb", default_value="off") == "on"):
      logging.info("user" + user.fb_access_token)
      logging.info("user_db" + str(self.request.get('fb_access_token')))
      logging.info("key " + str(user.key()))
      # updating user access token cause he might added publish_stream permission
      if (user.fb_access_token != str(self.request.get('fb_access_token'))):
        logging.info("Changing access_token!")
        user.fb_access_token = str(self.request.get('fb_access_token'))
        user.fb_access_token_expdate = Utils.get_access_token_from_request(self.request)
        user.put()
        CacheController.invalidate_user_fb_id(user.fb_uid)

    photo1_blob_key = Utils.write_file_to_blobstore(self.shrinkImage(self.request.get('photo1')))
    photo2_blob_key = Utils.write_file_to_blobstore(self.shrinkImage(self.request.get('photo2')))

    choosie_post = ChoosiePost(question = self.request.get('question'),
                               user_fb_id = self.request.get('fb_uid'),
                               photo1_blob_key = photo1_blob_key,
                               photo2_blob_key = photo2_blob_key)

    # Save this post in the datastore, and also in the memcache.
    choosie_post.put()
    CacheController.set_model(choosie_post)
    logging.info("share:" + self.request.get("share_to_fb", default_value="off"))
    if (self.request.get("share_to_fb") == "on"):
      logging.info("publishing!!")
      choosie_post.publish_to_facebook(self.request.host_url)  
    self.redirect('/')
    
    def add_vote_to_post(self, vote, is_new):
        db.run_in_transaction(ChoosiePost.add_vote_to_post_transaction,
                              self.key(), vote)
        logging.info("user_id" + self.user_fb_id)
        logging.info("vote_id " + vote.user_fb_id)

        if is_new:
            user = CacheController.get_user_by_fb_id(self.user_fb_id)
            if user.num_votes:
                user.num_votes += 1
            else:
                user.num_votes = 1
            user.put()
            CacheController.invalidate_user_fb_id(user.fb_uid)

        if self.user_fb_id != vote.user_fb_id and self.created_at > datetime.datetime.now(
        ) - datetime.timedelta(
                0.1
        ):  # if i didnt vote on my self and the post was uploaded less then 2.5 hours ago
            vote_from = vote.get_user().display_name()
            deferred.defer(self.notify_vote_async, self.key(), self.user_fb_id,
                           vote_from)
Пример #24
0
    def post(self):
        fb_uid = str(self.request.get('fb_uid'))
        # TODO: Make sure text is Unicode
        text = self.request.get('text')

        # Since the post is taken from the cache, it might not be the most updated version
        # but that's ok, as it is only used as 'parent'
        choosie_post = CacheController.get_model(self.request.get('post_key'))
        fb_uid = self.request.get('fb_uid')
        user = CacheController.get_user_by_fb_id(fb_uid)
        if not user:
            self.response.write(
                "Comment not added: User with fb_uid %s is not logged in." %
                fb_uid)
            return

        comment = Comment(parent=choosie_post, user_fb_id=fb_uid, text=text)
        comment.put()
        choosie_post.add_comment_to_post(comment)
        # Make sure the ChoosiePost's comments are invalidated in cache, so that next time
        # they are asked for, the updated are retreived.
        Comment.invalidate_comments(self.request.get('post_key'))

        self.response.write('Comment added.')
Пример #25
0
  def post(self):
    fb_uid = str(self.request.get('fb_uid'))
    # TODO: Make sure text is Unicode
    text = self.request.get('text')

    # Since the post is taken from the cache, it might not be the most updated version
    # but that's ok, as it is only used as 'parent'
    choosie_post = CacheController.get_model(self.request.get('post_key'))
    fb_uid = self.request.get('fb_uid')
    user = CacheController.get_user_by_fb_id(fb_uid)
    if not user:
      self.response.write("Comment not added: User with fb_uid %s is not logged in." % fb_uid)
      return
      
    comment = Comment(parent=choosie_post,
                      user_fb_id=fb_uid,
                      text=text)
    comment.put()
    choosie_post.add_comment_to_post(comment)
    # Make sure the ChoosiePost's comments are invalidated in cache, so that next time
    # they are asked for, the updated are retreived.
    Comment.invalidate_comments(self.request.get('post_key'))

    self.response.write('Comment added.')
Пример #26
0
  def post(self):
    user = CacheController.get_user_by_fb_id(self.request.get('fb_uid'))
    logging.info(self.request.get('fb_uid'))
    if user is None:
       self.error(500)
       logging.error("user not found!")
       return

    logging.info("user found!")
    logging.info("share_to_fb_param: " + self.request.get("share_to_fb", default_value="off"))
    debug_show_fb = self.request.get("debug_show_fb", default_value="")
    logging.info("debug_show_fb: " + debug_show_fb)
    
    post_type_id = int(self.request.get("post_type_id", default_value="1"))

    if debug_show_fb:
      img1 = images.Image(self.shrinkImage(self.request.get('photo1')))
      img2 = images.Image(self.shrinkImage(self.request.get('photo2')))
      self.response.headers['Content-Type'] = 'image/png'
      self.response.out.write(Utils.compose_two_images(img1, img2))
      return

    if self.request.get("share_to_fb", default_value="off") == "on":
      logging.info("user" + user.fb_access_token)
      logging.info("user_db" + str(self.request.get('fb_access_token')))
      logging.info("key " + str(user.key()))
      # updating user access token cause he might added publish_stream permission
      if user.fb_access_token != str(self.request.get('fb_access_token')):
        logging.info("Changing access_token!")
        user.fb_access_token = str(self.request.get('fb_access_token'))
        user.fb_access_token_expdate = Utils.get_access_token_from_request(self.request)
        user.put()
        CacheController.invalidate_user_fb_id(user.fb_uid)

    if user.num_votes:
      user.num_votes += 1
    else:
      user.num_votes = 1
    user.put()
    CacheController.invalidate_user_fb_id(user.fb_uid)
    photo1_blob_key = Utils.write_file_to_blobstore(self.shrinkImage(self.request.get('photo1')))
    if post_type_id == 1:
      photo2_blob_key = Utils.write_file_to_blobstore(self.shrinkImage(self.request.get('photo2')))
    else:
      photo2_blob_key = None
    choosie_post = ChoosiePost(question = self.request.get('question'),
                               user_fb_id = self.request.get('fb_uid'),
                               photo1_blob_key = photo1_blob_key,
                               photo2_blob_key = photo2_blob_key,
                               post_type_id = post_type_id)

    # Save this post in the datastore, and also in the memcache.
    choosie_post.put()
    CacheController.set_model(choosie_post)
    logging.info("share:" + self.request.get("share_to_fb", default_value="off"))
    if self.request.get("share_to_fb") == "on":
      logging.info("publishing!!")
      choosie_post.publish_to_facebook(self.request.host_url)  

    choosie_post.notify_friends()
    self.redirect('/')
    
Пример #27
0
 def get_user(self):
   return CacheController.get_user_by_fb_id(self.user_fb_id)
Пример #28
0
    def post(self):
        user = CacheController.get_user_by_fb_id(self.request.get('fb_uid'))
        logging.info(self.request.get('fb_uid'))
        if user is None:
            self.error(500)
            logging.error("user not found!")
            return

        logging.info("user found!")
        logging.info("share_to_fb_param: " +
                     self.request.get("share_to_fb", default_value="off"))
        debug_show_fb = self.request.get("debug_show_fb", default_value="")
        logging.info("debug_show_fb: " + debug_show_fb)

        post_type_id = int(self.request.get("post_type_id", default_value="1"))

        if debug_show_fb:
            img1 = images.Image(self.shrinkImage(self.request.get('photo1')))
            img2 = images.Image(self.shrinkImage(self.request.get('photo2')))
            self.response.headers['Content-Type'] = 'image/png'
            self.response.out.write(Utils.compose_two_images(img1, img2))
            return

        if self.request.get("share_to_fb", default_value="off") == "on":
            logging.info("user" + user.fb_access_token)
            logging.info("user_db" + str(self.request.get('fb_access_token')))
            logging.info("key " + str(user.key()))
            # updating user access token cause he might added publish_stream permission
            if user.fb_access_token != str(
                    self.request.get('fb_access_token')):
                logging.info("Changing access_token!")
                user.fb_access_token = str(self.request.get('fb_access_token'))
                user.fb_access_token_expdate = Utils.get_access_token_from_request(
                    self.request)
                user.put()
                CacheController.invalidate_user_fb_id(user.fb_uid)

        if user.num_votes:
            user.num_votes += 1
        else:
            user.num_votes = 1
        user.put()
        CacheController.invalidate_user_fb_id(user.fb_uid)
        photo1_blob_key = Utils.write_file_to_blobstore(
            self.shrinkImage(self.request.get('photo1')))
        if post_type_id == 1:
            photo2_blob_key = Utils.write_file_to_blobstore(
                self.shrinkImage(self.request.get('photo2')))
        else:
            photo2_blob_key = None
        choosie_post = ChoosiePost(question=self.request.get('question'),
                                   user_fb_id=self.request.get('fb_uid'),
                                   photo1_blob_key=photo1_blob_key,
                                   photo2_blob_key=photo2_blob_key,
                                   post_type_id=post_type_id)

        # Save this post in the datastore, and also in the memcache.
        choosie_post.put()
        CacheController.set_model(choosie_post)
        logging.info("share:" +
                     self.request.get("share_to_fb", default_value="off"))
        if self.request.get("share_to_fb") == "on":
            logging.info("publishing!!")
            choosie_post.publish_to_facebook(self.request.host_url)

        choosie_post.notify_friends()
        self.redirect('/')