Example #1
0
    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
Example #3
0
    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,
            })
Example #5
0
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)
Example #6
0
 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)
Example #8
0
 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)
Example #9
0
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)
Example #10
0
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)
Example #11
0
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)
Example #12
0
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)
Example #13
0
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))
Example #14
0
 def test_encode_happy_paths(self):
     for happy_int, happy_b36 in self.happy_paths:
         self.assertEqual(util.base36encode(happy_int), happy_b36)
Example #15
0
 def get_share_page_url(self, absolute=False):
     url = "/p/{}".format(util.base36encode(self.id))
     if absolute:
         url = "http://" + settings.DOMAIN + url
     return url
Example #16
0
 def _short_id(self):
     return util.base36encode(list(ShareTrackingUrl.objects.all())[-1].id)
Example #17
0
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))
Example #18
0
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])
Example #19
0
 def url(self):
     return reverse('apps.share_tracking.views.shared_url',
                    kwargs={'share_id': util.base36encode(self.id)})
Example #20
0
 def url(self):
     return reverse('apps.share_tracking.views.shared_url', kwargs={'share_id': util.base36encode(self.id)})
Example #21
0
 def get_share_page_url(self, absolute=False):
     url = '/p/{}'.format(util.base36encode(self.id))
     if absolute:
         url = 'http://' + settings.DOMAIN + url
     return url
Example #22
0
 def _short_id(self):
     return util.base36encode(list(ShareTrackingUrl.objects.all())[-1].id)
 def short_id(self):
     return base36encode(self._d.get('id'))
Example #24
0
 def share_page_url(self):
     return '/p/' + util.base36encode(self.id)
Example #25
0
def short_id(id):
    return util.base36encode(id)
Example #26
0
 def code(self):
     str_code = "{0}{1}".format(self.pk, int(self.timestamp))
     return base36encode(int(str_code))
Example #27
0
 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)
Example #29
0
 def get_arg(self):
     return "s=" + util.base36encode(self.id)
Example #30
0
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])
Example #31
0
 def short_id(self):
     return base36encode(self._d.get('id'))
Example #32
0
 def test_encode_negative_number_raises_ValueError(self):
     with self.assertRaises(ValueError):
         util.base36encode(-1)
Example #33
0
def short_id(id):
    return util.base36encode(id)
Example #34
0
    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)])
Example #35
0
 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)))
Example #36
0
 def share_page_url(self):
     return '/p/' + util.base36encode(self.id)
Example #37
0
 def get_arg(self):
     return "s=" + util.base36encode(self.id)
 def test_encode_happy_paths(self):
     for happy_int, happy_b36 in self.happy_paths:
         self.assertEqual(util.base36encode(happy_int), happy_b36)