Esempio n. 1
0
def topic_show_post(request):
    """Handle form posting for replying to a topic.

    :param request: A :class:`pyramid.request.Request` object.

    :type request: pyramid.request.Request
    :rtype: dict
    """
    board = board_get(request)
    topic = topic_get(request)
    override = _get_override(request, board=board)

    if not topic.board_id == board.id:
        raise HTTPNotFound(request.path)

    form = SecurePostForm(request.params, request=request)

    try:
        task = topic_posts_post(request, board=board, topic=topic, form=form)
    except RateLimitedError as e:
        timeleft = e.timeleft
        response = render_to_response('topics/error_rate.mako', locals())
        response.status = e.http_status
        return response
    except ParamsInvalidError as e:
        request.response.status = e.http_status
        return locals()

    return HTTPFound(location=request.route_path(
        route_name='topic',
        board=topic.board.slug,
        topic=topic.id,
        _query={'task': task.id}))
Esempio n. 2
0
def topic_show_get(request):
    """Display a single topic with its related posts. If a `task` query string
    is given, the function will try to retrieve and process that task in topic
    context instead.

    :param request: A :class:`pyramid.request.Request` object.

    :type request: pyramid.request.Request
    :rtype: dict | pyramid.response.Response
    """
    board = board_get(request)
    topic = topic_get(request)
    override = _get_override(request, board=board)

    if request.params.get('task'):
        try:
            task_result = celery.AsyncResult(request.params['task'])
            task = task_get(request, task_result)
        except SpamRejectedError as e:
            response = render_to_response('topics/error_spam.mako', locals())
            response.status = e.http_status
            return response
        except DnsblRejectedError as e:
            response = render_to_response('topics/error_dnsbl.mako', locals())
            response.status = e.http_status
            return response
        except BanRejectedError as e:
            response = render_to_response('topics/error_ban.mako', locals())
            response.status = e.http_status
            return response
        except StatusRejectedError as e:
            status = e.status
            response = render_to_response('topics/error_status.mako', locals())
            response.status = e.http_status
            return response
        except ProxyRejectedError as e:
            response = render_to_response('topics/error_proxy.mako', locals())
            response.status = e.http_status
            return response

        if task.success():
            return HTTPFound(location=request.route_path(
                route_name='topic_scoped',
                board=board.slug,
                topic=topic.id,
                query='l10'))
        return render_to_response('topics/show_wait.mako', locals())

    posts = topic_posts_get(request, topic=topic)
    if not topic.board_id == board.id or not posts:
        raise HTTPNotFound(request.path)
    form = SecurePostForm(request=request)
    return locals()