Exemplo n.º 1
0
def view(request, title=None):
    _ = request.wiki.gettext
    if title is None:
        title = request.wiki.front_page
    page = hatta.page.get_page(request, title)
    try:
        content = page.view_content()
    except hatta.error.NotFoundErr:
        if request.wiki.fallback_url:
            url = request.wiki.fallback_url
            if '%s' in url:
                url = url % urls.url_quote(title)
            else:
                url = "%s/%s" % (url, urls.url_quote(title))
            return redirect(url, code=303)
        if request.wiki.read_only:
            raise hatta.error.NotFoundErr(_("Page not found."))

        url = request.get_url(title, 'edit', external=True)
        return redirect(url, code=303)
    phtml = page.template("page.html", content=content)
    dependencies = page.dependencies()
    etag = '/(%s)' % ','.join(dependencies)
    return response(request,
                    title,
                    phtml,
                    etag=etag,
                    rev=page.revision.rev,
                    date=page.revision.date)
Exemplo n.º 2
0
def render(request, title):
    """Serve a thumbnail or otherwise rendered content."""

    page = hatta.page.get_page(request, title)
    try:
        if request.wiki.cache is None:
            raise NotImplementedError()
        cache_filename, cache_mime = page.render_mime()
        render = page.render_cache
    except (AttributeError, NotImplementedError):
        return download(request, title)

    cache_key = hashlib.md5(
        '{}{}{}'.format(title, page.revision.rev,
                        page.render_size).encode('utf8')).hexdigest()
    data = request.wiki.cache.get(cache_key)
    if data is None:
        try:
            data = render()
        except hatta.error.UnsupportedMediaTypeErr:
            return download(request, title)
        request.wiki.cache.set(cache_key, data, timeout=86400)

    resp = response(request,
                    title,
                    data,
                    '/render',
                    cache_mime,
                    rev=page.revision.rev,
                    date=page.revision.date)
    return resp
Exemplo n.º 3
0
def download_rev(request, title, rev):
    """Serve the raw content of a page directly from disk."""

    mime = hatta.page.page_mime(title)
    if mime == 'text/x-wiki':
        mime = 'text/plain'
    revision = request.wiki.storage.get_revision(title, rev)
    data = wsgi.wrap_file(request.environ, revision.file)
    resp = response(request,
                    title,
                    data,
                    '/download',
                    mime,
                    rev=revision.rev,
                    date=revision.date)
    resp.headers.add('Cache-Control', 'no-cache')
    # give browsers a useful filename hint
    if rev:
        filename = '%s-%s' % (rev, title)
    else:
        filename = title
    resp.headers.add('Content-Disposition',
                     'filename="%s"' % urls.url_quote(filename))
    resp.direct_passthrough = True
    return resp
Exemplo n.º 4
0
def revision(request, title, rev):
    _ = request.wiki.gettext
    text = request.wiki.storage.get_revision(title, rev).text
    link = html.a(html(title), href=request.get_url(title))
    content = [
        html.p(
            html(_('Content of revision %(rev)s of page %(title)s:')) % {
                'rev': rev[:8],
                'title': link
            }),
        html.pre(html(text)),
    ]
    special_title = _('Revision of "%(title)s"') % {'title': title}
    page = hatta.page.get_page(request, title)
    resp = page.template('page_special.html',
                         content=content,
                         special_title=special_title)
    return response(request, title, resp, rev=rev, etag='/old')
Exemplo n.º 5
0
def history(request, title):
    """Display history of changes of a page."""

    max_rev = '0' * 40
    history = []
    title = urls.url_unquote(title)
    page = hatta.page.get_page(request, title)
    # only text pages should show a link for diffs
    can_diff = getattr(page, 'diff_content', False)

    if title not in request.wiki.storage:
        _ = request.wiki.gettext
        raise hatta.error.NotFoundErr(_("Page not found."))

    for item in request.wiki.storage.page_history(title):
        parent = item['parent']
        if can_diff:
            if parent:
                date_url = request.adapter.build('diff', {
                    'title': title,
                    'from_rev': parent,
                    'to_rev': item['rev'],
                })
            else:
                date_url = request.adapter.build('revision', {
                    'title': title,
                    'rev': item['rev'],
                })
        else:
            date_url = request.adapter.build('download_rev', {
                'title': title,
                'rev': item['rev']
            })
        item['date_url'] = date_url
        history.append(item)
        if item['rev']:
            max_rev = item['rev']

    phtml = page.template('history.html',
                          history=history,
                          date_html=hatta.page.date_html,
                          parent_rev=max_rev)
    resp = response(request, title, phtml, '/history')
    return resp
Exemplo n.º 6
0
def edit(request, title, preview=None, captcha_error=None):
    hatta.page.check_lock(request.wiki, title)
    exists = title in request.wiki.storage
    page = hatta.page.get_page(request, title)
    phtml = page.render_editor(preview, captcha_error)
    if not exists:
        resp = WikiResponse(phtml,
                            mimetype="text/html",
                            status='404 Not found')

    elif preview:
        resp = WikiResponse(phtml, mimetype="text/html")
    else:
        resp = response(request,
                        title,
                        phtml,
                        etag='/edit',
                        rev=page.revision.rev,
                        date=page.revision.date)
    resp.headers.add('Cache-Control', 'no-cache')
    return resp