Source code for pyramid_pages.views

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# vim:fenc=utf-8
#
# Copyright © 2014 uralbash <root@uralbash.ru>
#
# Distributed under terms of the MIT license.

"""
Views for pages
"""
from pyramid.response import Response
from pyramid.renderers import render_to_response
from pyramid.httpexceptions import HTTPNotFound

from . import CONFIG_MODELS


[docs]class PageView(object): def __init__(self, context, request): self.request = request self.context = context self.page = context.node if not getattr(self.page, 'visible', False): raise HTTPNotFound
[docs] def page_with_redirect(self): if all([hasattr(self.page, attr) for attr in ('redirect', 'redirect_url', 'redirect_page')]): # Prohibit redirect both url and page if self.page.redirect_url and self.page.redirect_page: raise HTTPNotFound # check redirect type if not self.page.redirect_type and self.page.redirect_url: redirect_type = '302' elif not self.page.redirect_type and self.page.redirect_page: redirect_type = '200' else: redirect_type = str(self.page.redirect_type) # Prohibit redirect itself if self.page.redirect == self.page and redirect_type != '200': raise HTTPNotFound # Redirect to Page if self.page.redirect_page: if not self.page.redirect.visible: raise HTTPNotFound if redirect_type == '200': self.page = self.page.redirect return render_to_response( getattr(self.page, 'pyramid_pages_template', self.context.template), {'page': self.page}, request=self.request ) else: from .resources import ( resource_of_node, resources_of_config ) redirect = self.page.redirect pages_config = self.request.registry\ .settings[CONFIG_MODELS] resources = resources_of_config(pages_config) resource = resource_of_node(resources, redirect)(redirect) redirect_resource_url = self.request.resource_url(resource) return Response(status_code=int(redirect_type), location=redirect_resource_url) # Redirect to URL if self.page.redirect_url: if redirect_type == '200': raise HTTPNotFound return Response(status_code=int(redirect_type), location=self.page.redirect_url) return {'page': self.page}