def share_page_url(self): if not slugify(self.title): return '/q/' + util.base36encode(self.id) return reverse('quest', args=[util.base36encode(self.id), slugify(self.title)])
def get_share_page_url(self, absolute=False): slug = slugify(self.title) if slug: url = reverse('quest', args=[util.base36encode(self.id), slug]) else: url = '/q/{}'.format(util.base36encode(self.id)) if absolute: url = 'http://' + settings.DOMAIN + url return url
def render_html(self): from apps.monster.models import MONSTER_GROUP comment = TemplateComment(self.comment.details()) top_sticker = comment.top_sticker() if top_sticker is None: sticker = knobs.DEFAULT_FOOTER_STICKER else: sticker = top_sticker['name'] if comment.category == MONSTER_GROUP and comment.parent_comment is not None: top = TemplateComment(self.comment.parent_comment.details()) url = "/monster/{0}/{1}".format(base36encode(top.id), comment.id) return render_jinja_to_string( 'comment/stitched_monster.html', { 'top': top, 'bottom': comment, 'sticker': sticker, 'knobs': knobs, 'url': url, }) else: return render_jinja_to_string('comment/footer.html', { 'comment': comment, 'sticker': sticker, 'knobs': knobs, })
def render_html(self): from apps.monster.models import MONSTER_GROUP comment = TemplateComment(self.comment.details()) top_sticker = comment.top_sticker() if top_sticker is None: sticker = knobs.DEFAULT_FOOTER_STICKER else: sticker = top_sticker['name'] if comment.category == MONSTER_GROUP and comment.parent_comment is not None: top = TemplateComment(self.comment.parent_comment.details()) url = "/monster/{0}/{1}".format(base36encode(top.id), comment.id) return render_jinja_to_string('comment/stitched_monster.html', { 'top': top, 'bottom': comment, 'sticker': sticker, 'knobs': knobs, 'url': url, }) else: return render_jinja_to_string('comment/footer.html', { 'comment': comment, 'sticker': sticker, 'knobs': knobs, })
def quest(request, short_id, slug=None): quest = get_object_or_404(Quest, id=base36decode_or_404(short_id)) _slug = slugify(quest.title) if _slug and _slug != slug: return redirect('quest', base36encode(quest.id), _slug) quest_details = quest.details() ctx = { 'quest': quest_details, 'comments': top_gallery_comments(quest, include_reactions=False), 'quest_template_url': '', 'original_quest_template_url': '', } if quest.reply_content_id: ctx.update({ 'quest_template_url': quest_details.content.get_absolute_url_for_image_type('gallery'), 'original_quest_template_url': quest_details.content.get_absolute_url_for_image_type('original'), }) return r2r_jinja('quests/quest.html', ctx, request)
def get_path_from_comment_details(self, comment_details): prefix = '' if comment_details.is_remix(): prefix = 'remix_' return os.path.join( 'p', 'canvas_{0}{1}.png'.format(prefix, util.base36encode(comment_details.id)))
def test_create_share_url_for_channel_via_api(self): cmt = create_quest_comment() result = self.api_post('/api/share/create_for_channel', {'comment_id': cmt.id, 'channel': 'testing'}, user=self.user) self.assertAPISuccess(result) url = result['share_url'] rmatch = '/s/{}'.format(util.base36encode(ShareTrackingUrl.objects.order_by('-id')[0].id)) self.assertEqual(url[url.rfind(rmatch):], rmatch)
def test_create_share_url_for_channel_via_api(self): cmt = create_quest_comment() result = self.api_post('/api/share/create_for_channel', { 'comment_id': cmt.id, 'channel': 'testing' }, user=self.user) self.assertAPISuccess(result) url = result['share_url'] rmatch = '/s/{}'.format( util.base36encode(ShareTrackingUrl.objects.order_by('-id')[0].id)) self.assertEqual(url[url.rfind(rmatch):], rmatch)
def random(request): part = MonsterPart.get_random_new_monster(request.user) skip = 'skip' in request.GET if part: if skip: Metrics.skip_monster.record(request, monster_id=part.id) else: Metrics.random_monster_complete.record(request, monster_id=part.id) return HttpResponseRedirect('/monster/{0}/complete'.format(base36encode(part.id))) else: Metrics.no_more_monsters.record(request) ctx = {'request':request} return r2r_jinja('monster/nomore.html', ctx)
def post_comment(request, user, post_data, persist_url=True): reply_text = post_data.get('reply_text', '') try: replied_comment, parent_comment, reply_content, external_content, category, title = ( validate_and_clean_comment( user, reply_text=reply_text, parent_comment=post_data.get('parent_comment'), replied_comment=post_data.get('replied_comment'), reply_content=post_data.get('reply_content'), category=post_data.get('category'), external_content=post_data.get('external_content'), title=post_data.get('title'), )) post_anon = True if category and category == MONSTER_GROUP: post_anon = False comment = Comment.create_and_post( request, user, post_anon, # Anonymous. category, reply_content, parent_comment=parent_comment, reply_text=reply_text, replied_comment=replied_comment, external_content=external_content, title=title, ) post_pending_url = comment.details().url if persist_url: if category and category.name == MONSTER_GROUP: post_pending_url = '/monster/{0}'.format( base36encode(comment.thread.op.id)) user.kv.post_pending_signup_url.set(post_pending_url) return comment except ServiceError, e: # Silently drop the post if an error occurs. # We tried validating it prior to posting, but something went wrong between then and now # and it no longer validates. Should be rare. Metrics.logged_out_reply_dropped.record(request, extra_info=extra_info, service_error=e)
def post_comment(request, user, post_data, persist_url=True): reply_text = post_data.get("reply_text", "") try: replied_comment, parent_comment, reply_content, external_content, category, title = validate_and_clean_comment( user, reply_text=reply_text, parent_comment=post_data.get("parent_comment"), replied_comment=post_data.get("replied_comment"), reply_content=post_data.get("reply_content"), category=post_data.get("category"), external_content=post_data.get("external_content"), title=post_data.get("title"), ) post_anon = True if category and category == MONSTER_GROUP: post_anon = False comment = Comment.create_and_post( request, user, post_anon, # Anonymous. category, reply_content, parent_comment=parent_comment, reply_text=reply_text, replied_comment=replied_comment, external_content=external_content, title=title, ) post_pending_url = comment.details().url if persist_url: if category and category.name == MONSTER_GROUP: post_pending_url = "/monster/{0}".format(base36encode(comment.thread.op.id)) user.kv.post_pending_signup_url.set(post_pending_url) return comment except ServiceError, e: # Silently drop the post if an error occurs. # We tried validating it prior to posting, but something went wrong between then and now # and it no longer validates. Should be rare. Metrics.logged_out_reply_dropped.record(request, extra_info=extra_info, service_error=e)
def quest_of_the_day(request): quest = get_object_or_404(ScheduledQuest, id=redis.get('dq:current_scheduled_quest')).quest return redirect('quest', base36encode(quest.id), slugify(quest.title))
def test_encode_happy_paths(self): for happy_int, happy_b36 in self.happy_paths: self.assertEqual(util.base36encode(happy_int), happy_b36)
def get_share_page_url(self, absolute=False): url = "/p/{}".format(util.base36encode(self.id)) if absolute: url = "http://" + settings.DOMAIN + url return url
def _short_id(self): return util.base36encode(list(ShareTrackingUrl.objects.all())[-1].id)
def invite_id(user, comment_id=None): keys = [user.id] if comment_id is not None: keys.append(comment_id) return DELIMITER.join([util.base36encode(e) for e in keys])
def url(self): return reverse('apps.share_tracking.views.shared_url', kwargs={'share_id': util.base36encode(self.id)})
def get_share_page_url(self, absolute=False): url = '/p/{}'.format(util.base36encode(self.id)) if absolute: url = 'http://' + settings.DOMAIN + url return url
def short_id(self): return base36encode(self._d.get('id'))
def share_page_url(self): return '/p/' + util.base36encode(self.id)
def short_id(id): return util.base36encode(id)
def code(self): str_code = "{0}{1}".format(self.pk, int(self.timestamp)) return base36encode(int(str_code))
def test_encode_negative_number_raises_ValueError(self): with self.assertRaises(ValueError): util.base36encode(-1)
def get_arg(self): return "s=" + util.base36encode(self.id)
def get_absolute_url(self): if not slugify(self.title): return '/q/' + util.base36encode(self.id) return reverse('quest', args=[util.base36encode(self.id), slugify(self.title)])
def get_path_from_comment_details(self, comment_details): prefix = '' if comment_details.is_remix(): prefix = 'remix_' return os.path.join('p', 'canvas_{0}{1}.png'.format(prefix, util.base36encode(comment_details.id)))