コード例 #1
0
ファイル: views_docstring.py プロジェクト: pv/pydocweb
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
コード例 #2
0
ファイル: views_docstring.py プロジェクト: pv/pydocweb
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)