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