Source code for kotti.views.edit.default_views

:summary: Default view selctor views
import warnings

from pyramid.compat import map_
from pyramid.httpexceptions import HTTPFound
from pyramid.interfaces import IView
from pyramid.interfaces import IViewClassifier
from pyramid.threadlocal import get_current_registry
from pyramid.view import view_config
from pyramid.view import view_defaults
from zope.interface import providedBy

from kotti.util import _

class DefaultViewSelection:
    def __init__(self, context, request):

        self.context = context
        self.request = request

    def _get_view(self, view_name):  # pragma: no cover
        """This code is copied from pyramid.view.
           We trust it and don't test.

           Returns True if a view with name view_name is registered for context.
        provides = [IViewClassifier] + map_(providedBy, (self.request, self.context))

            reg = self.request.registry
        except AttributeError:
            reg = get_current_registry()

        return reg.adapters.lookup(provides, IView, name=view_name)

    def _is_valid_view(self, view_name):
        """Return True if a view with name view_name is registered for context.

        return self._get_view(view_name) is not None

    def _is_valid_default_view(self, view_name):
        """Return True if a view with name view_name is a valid choice as
        default view for context.

        return self._is_valid_view(view_name) and view_name in [
            v[0] for v in self.context.type_info.selectable_default_views

    def default_view_selector(self):
        :summary: Submenu for selection of the node's default view.
        :result: Dictionary with a selectable_default_views list.
        :rtype: dict

        sviews = []

        for v in self.context.type_info.selectable_default_views:
            name, title = v
            if self._is_valid_view(name):
                        "name": name,
                        "title": title,
                        "is_current": name == self.context.default_view,
                    "No view called '{}' is registered for {!r}.".format(
                        name, self.context

        return {
            "selectable_default_views": [
                    "name": "default",
                    "title": _("Default view"),
                    "is_current": self.context.default_view is None,
            + sviews

    def set_default_view(self):
        :summary: Set the node's default view and redirect to it.
        :result: Redirect to the context URL.
        :rtype: pyramid.httpexceptions.HTTPFound

        if "view_name" in self.request.GET:

            view_name = self.request.GET["view_name"]

            if view_name == "default":
                self.context.default_view = None
                    _("Default view has been reset to default."), "success"
                if self._is_valid_default_view(view_name):
                    self.context.default_view = view_name
                        _("Default view has been set."), "success"
                        _("Default view could not be set."), "error"

        return HTTPFound(location=self.request.resource_url(self.context))

[docs]def includeme(config): """ Pyramid includeme hook. :param config: app config :type config: :class:`pyramid.config.Configurator` """ config.scan(".default_views")