|
|
|
@ -1,7 +1,11 @@ |
|
|
|
"""Views used by Pyramid when an exception is raised.""" |
|
|
|
|
|
|
|
from pyramid.httpexceptions import HTTPNotFound |
|
|
|
from pyramid.request import Request |
|
|
|
from pyramid.view import forbidden_view_config |
|
|
|
from pyramid.view import forbidden_view_config, exception_view_config |
|
|
|
from sqlalchemy import text |
|
|
|
|
|
|
|
from tildes.models.group import Group |
|
|
|
|
|
|
|
|
|
|
|
@forbidden_view_config(xhr=False, renderer="error_403.jinja2") |
|
|
|
@ -9,3 +13,20 @@ def forbidden(request: Request) -> dict: |
|
|
|
"""403 Forbidden page.""" |
|
|
|
request.response.status_int = 403 |
|
|
|
return {} |
|
|
|
|
|
|
|
|
|
|
|
@exception_view_config( |
|
|
|
HTTPNotFound, route_name="group", renderer="error_group_not_found.jinja2" |
|
|
|
) |
|
|
|
def group_not_found(request: Request) -> dict: |
|
|
|
"""Show the user a customized 404 page for group names.""" |
|
|
|
request.response.status_int = 404 |
|
|
|
supplied = request.matchdict.get("group_path") |
|
|
|
group_suggestions = ( |
|
|
|
request.db_session.query(Group) |
|
|
|
.order_by(text("ltree2text(path) <<-> :supplied")) |
|
|
|
.params(supplied=supplied) |
|
|
|
.limit(3) |
|
|
|
.all() |
|
|
|
) |
|
|
|
return {"group_suggestions": group_suggestions} |