def post_quest_comment(request, quest_id, content_id, fact_metadata={}, facebook_share=False, facebook_access_token=None): # Rate-limit? if not request.user.is_staff: prefix = 'user:{}:post_limit:'.format(request.user.id) if not RateLimit(prefix+'h', 60, 60*60).allowed() or not RateLimit(prefix+'d', 100, 8*60*60).allowed(): raise ServiceError("Attempting to post drawings too quickly.") _, parent_comment, content, _, _, _ = validate_and_clean_comment( request.user, parent_comment=quest_id, reply_content=content_id, ) if facebook_share: if not facebook_access_token: raise ServiceError("Can't share to your timeline if you haven't signed into Facebook yet.") associate_facebook_account(request.user, facebook_access_token) comment = QuestComment.create_and_post(request, request.user, content, parent_comment, fact_metadata=fact_metadata) if facebook_share: complete_quest(request.user, comment, facebook_access_token, request=request) return { 'comment': comment.details(), 'balance': economy.balance(request.user), }
def post_quest_comment(request, quest_id, content_id, fact_metadata={}, facebook_share=False, facebook_access_token=None, twitter_share=False, twitter_access_token=None, twitter_access_token_secret=None, email_share=False, email_recipients=[], resolve_share_ids=[], uuid=None): if not request.user.is_staff and not settings.STAGING: prefix = 'user:{}:post_limit:'.format(request.user.id) if not RateLimit(prefix+'h', 60, 60*60).allowed() or not RateLimit(prefix+'d', 100, 8*60*60).allowed(): raise ServiceError("Attempting to post drawings too quickly.") _, parent_comment, content, _, _ = validate_and_clean_comment( request.user, parent_comment=quest_id, reply_content=content_id, ) if facebook_share: facebook_share = sns_publishing.facebook_share_pre_post(request, facebook_access_token) if twitter_share: twitter_share = sns_publishing.twitter_share_pre_post(request, twitter_access_token, twitter_access_token_secret) comment = QuestComment.create_and_post(request, request.user, content, parent_comment, uuid=uuid, fact_metadata=fact_metadata, debug_content_id=content_id) if facebook_share: sns_publishing.facebook_share_post_post(request, facebook_access_token, comment) if twitter_share: sns_publishing.twitter_share_post_post(request, twitter_access_token, twitter_access_token_secret, comment) for share_id in resolve_share_ids: share = ShareTrackingUrl.objects.get(id=share_id) if share.redirect_url: pass #TODO log some error here without failing this request share.redirect_url = comment.get_share_page_url() share.save() if email_share: @bgwork.defer def defer_email_share(): sns_publishing.share_comment_by_email(comment, request.user, email_recipients) return { 'comment': comment.details(), 'balance': economy.balance(request.user), }
def post_quest_comment(request, quest_id, content_id, fact_metadata={}, facebook_share=False, facebook_access_token=None): # Rate-limit? if not request.user.is_staff: prefix = 'user:{}:post_limit:'.format(request.user.id) if not RateLimit(prefix + 'h', 60, 60 * 60).allowed() or not RateLimit( prefix + 'd', 100, 8 * 60 * 60).allowed(): raise ServiceError("Attempting to post drawings too quickly.") _, parent_comment, content, _, _, _ = validate_and_clean_comment( request.user, parent_comment=quest_id, reply_content=content_id, ) if facebook_share: if not facebook_access_token: raise ServiceError( "Can't share to your timeline if you haven't signed into Facebook yet." ) associate_facebook_account(request.user, facebook_access_token) comment = QuestComment.create_and_post(request, request.user, content, parent_comment, fact_metadata=fact_metadata) if facebook_share: complete_quest(request.user, comment, facebook_access_token, request=request) return { 'comment': comment.details(), 'balance': economy.balance(request.user), }