Example #1
0
    def clean(self):
        cleaned_data = super(LongForm, self).clean()

        parent_post_id = cleaned_data.get("parent_post_id")

        if parent_post_id:

            # Find the parent.
            try:
                parent = Post.objects.get(pk=parent_post_id)
            except ObjectDoesNotExist, exc:
                raise ValidationError(
                    "Parent post {} does not exist. Perhaps it was deleted request".format(
                        parent_post_id
                    )
                )

            post_preview = PostPreview(
                parent_post_id = parent_post_id,
                title = parent.title,
                tag_val = parent.tag_val,
                tag_value = html_util.split_tags(parent.tag_val),
                content=cleaned_data.get('content'),
                type=int(cleaned_data.get('post_type')),
                date=general_util.now()
            )
Example #2
0
    def get_model(self, memo):

        post_preview = PostPreview()
        if "parent_post_id" in memo:
            parent_post_id = memo["parent_post_id"]

            # Find the parent.
            try:
                parent = Post.objects.get(pk=parent_post_id)
            except ObjectDoesNotExist, exc:
                logger.error("The post does not exist. Perhaps it was deleted request (Request: %s)", request)
                logger.exception(e)
                raise

            post_preview.parent_post_id = parent_post_id
            post_preview.title = parent.title
            post_preview.tag_val = parent.tag_val
            post_preview.tag_value = html_util.split_tags(parent.tag_val)
Example #3
0
class NewAnswer(FormView):
    """
    Creates a new post.
    """

    form_class = ShortForm
    template_name = "post_edit.html"
    type_map = dict(answer=Post.ANSWER, comment=Post.COMMENT)
    post_type = None

    def get_context_data(self, **kwargs):
        context = super(NewAnswer, self).get_context_data(**kwargs)
        context['nodes_list'] = [n["node_name"] for n in ln.get_nodes_list()]
        return context

    def post(self, request, *args, **kwargs):
        """
        This gets the initial "new answer" request, before the get method
        if everything looks good then we generate the memo (with parent post id)
        and re-direct to preview. If there are errors, we also render this
        back to the user directly from here. See `if not form.is_valid()`
        """

        parent_post_id = int(self.kwargs['pid'])

        # URL sets the type for this new post
        post_type = self.type_map.get(self.post_type)
        assert post_type in [
            Post.ANSWER, Post.COMMENT
        ], "I only support Answers and Comment types, got: {}".format(
            post_type)

        # Find the parent.
        try:
            parent = Post.objects.get(pk=parent_post_id)
        except ObjectDoesNotExist, exc:
            logger.error(
                "The post does not exist. Perhaps it was deleted request (Request: %s)",
                request)
            raise

        # Validating the form.
        form = self.form_class(request.POST)
        if not form.is_valid():
            try:
                context = self.get_context_data(**kwargs)
            except Exception as e:
                logger.exception(e)
                raise

            context["form"] = form
            context["errors_detected"] = True
            return render(request, self.template_name, context)

        # Valid forms start here
        content = form.cleaned_data.get("content")

        post_preview = PostPreview()
        post_preview.parent_post_id = parent_post_id
        post_preview.title = parent.title
        post_preview.tag_val = parent.tag_val
        post_preview.tag_value = html_util.split_tags(parent.tag_val)
        post_preview.status = Post.OPEN
        post_preview.type = post_type
        post_preview.content = content
        post_preview.html = html_util.parse_html(content)
        post_preview.date = general_util.now()
        post_preview.memo = post_preview.serialize_memo()

        post_preview.clean_fields()

        return HttpResponseRedirect(
            post_preview.get_absolute_url(memo=post_preview.memo))
Example #4
0
    def post(self, request, *args, **kwargs):
        if "memo" in kwargs:
            post_preview = PostPreview()

            # Some data comes from memo
            memo = json_util.deserialize_memo(kwargs["memo"])

            if "parent_post_id" in memo:
                self.form_class = ShortForm

                parent_post_id = memo["parent_post_id"]

                # Find the parent.
                try:
                    parent = Post.objects.get(pk=parent_post_id)
                except ObjectDoesNotExist, e:
                    msg = "The post does not exist. Perhaps it was deleted request (Request: %s)".format(
                        request)
                    logger.error(msg)
                    raise PostViewException(msg)

                post_preview.parent_post_id = parent_post_id
                post_preview.title = parent.title
                post_preview.tag_val = parent.tag_val
                post_preview.tag_value = html_util.split_tags(parent.tag_val)
            else:
                post_preview.title = memo["title"]
                post_preview.tag_val = memo["tag_val"]
                post_preview.tag_value = html_util.split_tags(memo["tag_val"])

            post_preview.status = Post.OPEN
            post_preview.type = memo["post_type"]
            post_preview.date = datetime.utcfromtimestamp(
                memo["unixtime"]).replace(tzinfo=utc)
Example #5
0
class NewPost(FormView):
    form_class = LongForm
    template_name = "post_edit.html"

    def get_context_data(self, **kwargs):
        context = super(NewPost, self).get_context_data(**kwargs)
        context['nodes_list'] = [n["node_name"] for n in ln.get_nodes_list()]
        return context

    def get(self, request, *args, **kwargs):

        initial = dict()

        if "memo" in kwargs:
            memo = json_util.deserialize_memo(kwargs["memo"])

            if "parent_post_id" in memo:
                expected_memo_keys = ["parent_post_id", "post_type", "content"]
                self.form_class = ShortForm
            else:
                expected_memo_keys = [
                    "title", "post_type", "tag_val", "content"
                ]

            for key in expected_memo_keys:
                initial[key] = memo[key]
        else:
            # Attempt to prefill from GET parameters
            for key in "title post_type tag_val content".split():
                value = request.GET.get(key)
                if value:
                    initial[key] = value

        try:
            context = self.get_context_data(**kwargs)
        except Exception as e:
            logger.exception(e)
            raise

        context['form'] = self.form_class(initial=initial)
        context['errors_detected'] = False

        return render(request, self.template_name, context)

    def post(self, request, *args, **kwargs):
        if "memo" in kwargs:
            post_preview = PostPreview()

            # Some data comes from memo
            memo = json_util.deserialize_memo(kwargs["memo"])

            if "parent_post_id" in memo:
                self.form_class = ShortForm

                parent_post_id = memo["parent_post_id"]

                # Find the parent.
                try:
                    parent = Post.objects.get(pk=parent_post_id)
                except ObjectDoesNotExist, e:
                    msg = "The post does not exist. Perhaps it was deleted request (Request: %s)".format(
                        request)
                    logger.error(msg)
                    raise PostViewException(msg)

                post_preview.parent_post_id = parent_post_id
                post_preview.title = parent.title
                post_preview.tag_val = parent.tag_val
                post_preview.tag_value = html_util.split_tags(parent.tag_val)
            else:
                post_preview.title = memo["title"]
                post_preview.tag_val = memo["tag_val"]
                post_preview.tag_value = html_util.split_tags(memo["tag_val"])

            post_preview.status = Post.OPEN
            post_preview.type = memo["post_type"]
            post_preview.date = datetime.utcfromtimestamp(
                memo["unixtime"]).replace(tzinfo=utc)

        # Validating the form.
        form = self.form_class(request.POST)
        if not form.is_valid():
            try:
                context = self.get_context_data(**kwargs)
            except Exception as e:
                logger.exception(e)
                raise

            context['form'] = form
            context['errors_detected'] = True

            return render(request, self.template_name, context)

        if "memo" in kwargs:
            # Only new data comes from the HTML form
            post_preview.content = form.cleaned_data.get("content")
            post_preview.html = html_util.parse_html(post_preview.content)
        else:
            # Valid forms start here.
            data = form.cleaned_data

            # All data comes from the HTML form
            post_preview = PostPreview(title=data.get('title'),
                                       content=data.get('content'),
                                       tag_val=data.get('tag_val'),
                                       type=int(data.get('post_type')),
                                       date=general_util.now())

        return HttpResponseRedirect(
            post_preview.get_absolute_url(memo=post_preview.serialize_memo()))
Example #6
0
                raise ValidationError(
                    "Parent post {} does not exist. Perhaps it was deleted request"
                    .format(parent_post_id))

            post_preview = PostPreview(parent_post_id=parent_post_id,
                                       title=parent.title,
                                       tag_val=parent.tag_val,
                                       tag_value=html_util.split_tags(
                                           parent.tag_val),
                                       content=cleaned_data.get('content'),
                                       type=int(cleaned_data.get('post_type')),
                                       date=general_util.now())
        else:
            post_preview = PostPreview(title=cleaned_data.get('title'),
                                       content=cleaned_data.get('content'),
                                       tag_val=cleaned_data.get('tag_val'),
                                       type=int(cleaned_data.get('post_type')),
                                       date=general_util.now())

        try:
            serialized = post_preview.serialize_memo()

        except json_util.MemoTooLarge as err:
            raise ValidationError(
                ('%(msg)s. '
                 'Sorry, we are not going to be able to fit this into a lightning payment memo.'
                 ),
                code='too_big_serialized',
                params={
                    'max_size': settings.MAX_MEMO_SIZE,
                    'msg': "{0}".format(err)