Пример #1
0
def edit(request, name):
    site = Site.objects.get_current()
    
    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 = rst.render_html(data['text'],
                                          cache_max_age=WIKI_CACHE_AGE)
                try:
                    prev_text = WikiPage.on_site.get(name=name).text
                    if not isinstance(prev_text, unicode):
                        prev_text = prev_text.decode('utf-8')
                except WikiPage.DoesNotExist:
                    prev_text = ""
                diff_html = html_diff_text(prev_text, data['text'],
                                           'previous revision',
                                           'current text')
                return render_template(
                    request, 'wiki/edit.html',
                    dict(form=form, name=name,
                         revision=revision,
                         diff_html=diff_html,
                         preview_html=preview))
            else:
                page, created = WikiPage.on_site.get_or_create(name=name,
                                                               site=site)
                page.edit(data['text'],
                          request.user.username,
                          data['comment'])
                return HttpResponseRedirect(reverse(view, args=[name]))
    else:
        try:
            revision = request.GET.get('revision')
            page = WikiPage.on_site.get(name=name)
            try:
                revision = int(revision)
                rev = page.revisions.get(revno=revision)
                comment = "Reverted"
            except (TypeError, ValueError, WikiPageRevision.DoesNotExist):
                rev = page.revisions.all()[0]
                comment = ""
            data = dict(text=rev.text, comment=comment)
        except (WikiPage.DoesNotExist, IndexError):
            data = {}
            revision = None
        form = EditForm(initial=data)

    return render_template(request, 'wiki/edit.html',
                           dict(form=form, name=name, revision=revision))
Пример #2
0
def view(request, name):
    try:
        page = WikiPage.on_site.get(name=name)
        revision = request.GET.get('revision')
        try:
            revision = int(revision)
            rev = page.revisions.get(revno=revision)
        except (TypeError, ValueError, WikiPageRevision.DoesNotExist):
            rev = page

        if not rev.text and revision is None:
            raise WikiPage.DoesNotExist()
        body = rst.render_html(rev.text, cache_max_age=WIKI_CACHE_AGE)
        if body is None:
            raise WikiPage.DoesNotExist()
        return render_template(request, 'wiki/page.html',
                               dict(name=name, body_html=body,
                                    revision=revision))
    except WikiPage.DoesNotExist:
        return render_template(request, 'wiki/not_found.html',
                               dict(name=name))
Пример #3
0
def edit(request, name, comment_id):
    doc = get_object_or_404(Docstring, name=name)
    try:
        comment_id = int(comment_id)
        if request.user.has_perm('docweb.can_review'):
            comment = doc.comments.get(id=comment_id)
        else:
            comment = doc.comments.get(id=comment_id,
                                       author=request.user.username)
    except (ValueError, TypeError, ReviewComment.DoesNotExist):
        comment_id = 'new'
        comment = None

    if request.method == 'POST':
        if request.POST.get('button_cancel'):
            return HttpResponseRedirect(reverse('pydocweb.docweb.views_docstring.view', args=[name])
                                        + "#discussion-sec")

        form = CommentEditForm(request.POST)
        if form.is_valid():
            data = form.cleaned_data
            if request.POST.get('button_preview'):
                preview = rst.render_html(data['text'])
                return render_template(request, 'docstring/edit_comment.html',
                                       dict(form=form, name=name,
                                            comment=comment,
                                            comment_id=comment_id,
                                            preview_html=preview))
            elif request.POST.get('button_delete') and comment is not None:
                comment.delete()
                return HttpResponseRedirect(reverse('pydocweb.docweb.views_docstring.view', args=[name])
                                            + "#discussion-sec")
            elif request.POST.get('button_resolved') and comment is not None:
                comment.resolved = True
                comment.save()
                return HttpResponseRedirect(reverse('pydocweb.docweb.views_docstring.view', args=[name])
                                            + "#discussion-sec")
            elif request.POST.get('button_not_resolved') and comment is not None:
                comment.resolved = False
                comment.save()
                return HttpResponseRedirect(reverse('pydocweb.docweb.views_docstring.view', args=[name])
                                            + "#discussion-sec")
            else:
                if comment is None:
                    comment = ReviewComment(docstring=doc)

                try:
                    comment.rev = doc.revisions.all()[0]
                except IndexError:
                    comment.rev = None
                comment.author = request.user.username
                comment.text = strip_spurious_whitespace(data['text'])
                comment.timestamp = datetime.datetime.now()
                comment.save()
                return HttpResponseRedirect(reverse('pydocweb.docweb.views_docstring.view', args=[name])
                                            + "#discussion-sec")
    else:
        if comment:
            data = dict(text=comment.text)
        else:
            data = {}
        form = CommentEditForm(initial=data)

    return render_template(request, 'docstring/edit_comment.html',
                           dict(form=form, name=name, comment=comment,
                                comment_id=comment_id))
Пример #4
0
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)
Пример #5
0
def help_page(page_name):
    html = rst.render_html(WikiPage.fetch_text(page_name))
    html += "<p><a href=\"%s\">Edit help</a></p>" % reverse('pydocweb.docweb.views_wiki.view', args=[page_name])
    return html