Esempio n. 1
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)
Esempio n. 2
0
 def get(self):
   vote_for = int(self.request.get('which_photo'))
   fb_uid = str(self.request.get('fb_uid'))
   # 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)
     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)
     # 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)
Esempio n. 3
0
 def get_num_posts(self, user):
     if user.num_posts is None:
         q = ChoosiePost.all()
         q.filter("user_fb_id =", user.fb_uid)
         user.num_posts = q.count()
         user.put()
     return user.num_posts
Esempio n. 4
0
 def get_num_posts(self, user):
   if user.num_posts is None:
     q = ChoosiePost.all()
     q.filter("user_fb_id =", user.fb_uid)
     user.num_posts = q.count()
     user.put()
   return user.num_posts
  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 get(self):
   logging.info("Scraping comments...")
   q = ChoosiePost.all().filter("posted_to_fb = ", True).filter("created_at > ", datetime.datetime.now() - datetime.timedelta(1))
   posts_found = False
   for p in q.run():
     try:
       posts_found = True
       choosie_post_key = str(p.key())
       logging.info(choosie_post_key)
       comments, votes, error = ScrapeCommentsHandler.scrape_comments_and_votes_from_facebook(choosie_post_key)
       if error:
         logging.warn("Error scraping post from FB. Error = %s", error)
     except Exception, e:
       logging.error("Unexpected error while scraping Facebook comments for post [%s] (%s).", p.key(), p.question)
Esempio n. 7
0
 def get_feed_and_cursor(cursor, limit=10, timestamp=None):
     if not limit:
         limit = 10
     limit = int(limit)
     logging.info('Retrieving %d posts from db' % limit)
     posts = ChoosiePost.all()
     if cursor:
         posts.with_cursor(cursor)
     if timestamp:
         created_after = Utils.parse_iso_format_datetime(timestamp)
         posts.filter('created_at >', created_after)
     posts.order("-created_at")
     posts_result = []
     for post in posts.run(limit=limit):
         posts_result.append(post)
     new_cursor = posts.cursor()
     CacheController.set_multi_models(posts_result)
     return (posts_result, new_cursor)
Esempio n. 8
0
 def get_feed_and_cursor(cursor, limit = 10, timestamp = None):
     if not limit:
         limit = 10
     limit = int(limit)
     logging.info('Retrieving %d posts from db' % limit)
     posts = ChoosiePost.all()
     if cursor:
         posts.with_cursor(cursor)
     if timestamp:
         created_after = Utils.parse_iso_format_datetime(timestamp)
         posts.filter('created_at >', created_after)
     posts.order("-created_at")
     posts_result = []
     for post in posts.run(limit=limit):
         posts_result.append(post)
     new_cursor = posts.cursor()
     CacheController.set_multi_models(posts_result)
     return (posts_result, new_cursor)
Esempio n. 9
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('/')
Esempio n. 10
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('/')
Esempio n. 11
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('/')