def edit(request, name): doc = get_object_or_404(Docstring, name=name) source = doc.get_source_snippet() show_delete = (doc.type_code == 'file') if request.method == 'POST': if request.POST.get('button_cancel'): return HttpResponseRedirect(reverse(view, args=[name])) revision = None form = EditForm(request.POST) if form.is_valid(): data = form.cleaned_data if request.POST.get('button_preview'): preview_html = rst.render_docstring_html(doc, data['text']) diff_html = html_diff_text(doc.text, data['text'], 'previous revision', 'current text') return render_template(request, 'docstring/edit.html', dict(form=form, name=name, revision=revision, source=source, diff_html=diff_html, preview_html=preview_html, show_delete=show_delete, )) elif show_delete and request.POST.get('button_delete'): try: doc.edit('', request.user.username, data['comment']) parent_name = '/'.join(name.split('/')[:-1]) try: parent = Docstring.resolve(parent_name) return HttpResponseRedirect(reverse(view, args=[parent.name])) except Docstring.DoesNotExist: # no parent -- redirect to front page # this should be a rare condition return HttpResponseRedirect(reverse( 'pydocweb.docweb.views_docstring.frontpage')) except RuntimeError, e: pass else: try: doc.edit(data['text'], request.user.username, data['comment']) return HttpResponseRedirect(reverse(view, args=[name])) except RuntimeError, e: pass
def view(request, name): try: doc = Docstring.resolve(name) if doc.name != name: # resolve non-canonical names return HttpResponseRedirect(reverse(view, args=[doc.name])) except Docstring.DoesNotExist: raise Http404() # display the entry try: text, revision = doc.get_rev_text(request.GET.get('revision')) if not request.GET.get('revision'): revision = None body = rst.render_docstring_html(doc, text) except DocstringRevision.DoesNotExist: raise Http404() author_map = get_author_map() comments = [] for comment in doc.comments.all(): comments.append(dict( id=comment.id, resolved=comment.resolved, author=author_map.get(comment.author, comment.author), author_username=comment.author, timestamp=comment.timestamp, html=rst.render_html(comment.text), text=comment.text, )) review_form = ReviewForm(dict(status=doc.review)) params = dict(name=name, doc=doc, review_form=review_form, status=REVIEW_STATUS_NAMES[doc.review], status_code=REVIEW_STATUS_CODES[doc.review], comments=comments, body_html=body, file_name=strip_module_dir_prefix(doc.file_name), line_number=doc.line_number, revision=revision, toctree_chain=ToctreeCache.get_chain(doc)[:-1], ) if doc.type_code == 'dir': if request.method == "POST": params['new_page_form'] = NewPageForm(request.POST) else: params['new_page_form'] = NewPageForm() return render_template(request, 'docstring/page_dir.html', params) if revision is None and doc.merge_status == MERGE_CONFLICT: conflict = doc.get_merge() params['merge_type'] = 'conflict' params['merge_html'] = cgi.escape(conflict) return render_template(request, 'docstring/merge.html', params) elif revision is None and doc.merge_status == MERGE_MERGE: merged = doc.get_merge() merge_html = html_diff_text(doc.revisions.all()[0].text, merged) params['merge_html'] = merge_html return render_template(request, 'docstring/merge.html', params) else: return render_template(request, 'docstring/page.html', params)