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)
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)
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)
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)
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)
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 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('/')
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('/')