- Rename ``view_mapper`` argument to add_view to ``mapper``.
| | |
| | | the same result as passing ``default_view_mapper`` to the Configurator |
| | | constructor. |
| | | |
| | | - ``config.add_view`` now accepts a ``view_mapper`` keyword argument, which |
| | | should either be ``None``, a string representing a Python dotted name, or |
| | | an object which is an ``IViewMapperFactory``. This feature is not useful |
| | | for "civilians", only for extension writers. |
| | | - ``config.add_view`` now accepts a ``mapper`` keyword argument, which should |
| | | either be ``None``, a string representing a Python dotted name, or an |
| | | object which is an ``IViewMapperFactory``. This feature is not useful for |
| | | "civilians", only for extension writers. |
| | | |
| | | - Allow static renderer provided during view registration to be overridden at |
| | | request time via a request attribute named ``override_renderer``, which |
| | |
| | | |
| | | - The "view derivation" code is now factored into a set of classes rather |
| | | than a large number of standalone functions (a side effect of the |
| | | ``view_mapper`` refactoring). |
| | | view mapper refactoring). |
| | | |
| | | - The ``pyramid.renderer.RendererHelper`` class has grown a ``render_view`` |
| | | method, which is used by the default view mapper (a side effect of the |
| | | ``view_mapper`` refactoring). |
| | | view mapper refactoring). |
| | | |
| | | - The object passed as ``renderer`` to the "view deriver" is now an instance |
| | | of ``pyramid.renderers.RendererHelper`` rather than a dictionary (a side |
| | | effect of ``view_mapper`` refactoring). |
| | | effect of view mapper refactoring). |
| | | |
| | | - The class used as the "page template" in ``pyramid.chameleon_text`` was |
| | | removed, in preference to using a Chameleon-inbuilt version. |
| | |
| | | attr=None, renderer=None, wrapper_viewname=None, |
| | | viewname=None, accept=None, order=MAX_ORDER, |
| | | phash=DEFAULT_PHASH, decorator=None, |
| | | view_mapper=None): |
| | | mapper=None): |
| | | view = self.maybe_dotted(view) |
| | | view_mapper = self.maybe_dotted(view_mapper) |
| | | mapper = self.maybe_dotted(mapper) |
| | | if isinstance(renderer, basestring): |
| | | renderer = RendererHelper(name=renderer, package=self.package, |
| | | registry = self.registry) |
| | |
| | | order=order, |
| | | phash=phash, |
| | | package=self.package, |
| | | view_mapper=view_mapper, |
| | | mapper=mapper, |
| | | decorator=decorator) |
| | | |
| | | return deriver(view) |
| | |
| | | request_param=None, containment=None, attr=None, |
| | | renderer=None, wrapper=None, xhr=False, accept=None, |
| | | header=None, path_info=None, custom_predicates=(), |
| | | context=None, decorator=None, view_mapper=None): |
| | | context=None, decorator=None, mapper=None): |
| | | """ Add a :term:`view configuration` to the current |
| | | configuration state. Arguments to ``add_view`` are broken |
| | | down below into *predicate* arguments and *non-predicate* |
| | |
| | | ``True``, the associated view callable will be considered |
| | | viable for a given request. |
| | | |
| | | view_mapper |
| | | mapper |
| | | |
| | | A Python object or :term:`dotted Python name` which refers to a |
| | | :term:`view mapper`, or ``None``. By default it is ``None``, which |
| | |
| | | context = self.maybe_dotted(context) |
| | | for_ = self.maybe_dotted(for_) |
| | | containment = self.maybe_dotted(containment) |
| | | view_mapper = self.maybe_dotted(view_mapper) |
| | | mapper = self.maybe_dotted(mapper) |
| | | |
| | | if not view: |
| | | if renderer: |
| | |
| | | renderer=renderer, wrapper=wrapper, xhr=xhr, accept=accept, |
| | | header=header, path_info=path_info, |
| | | custom_predicates=custom_predicates, context=context, |
| | | view_mapper = view_mapper, |
| | | mapper = mapper, |
| | | ) |
| | | view_info = deferred_views.setdefault(route_name, []) |
| | | view_info.append(info) |
| | |
| | | order=order, |
| | | phash=phash, |
| | | package=self.package, |
| | | view_mapper=view_mapper, |
| | | mapper=mapper, |
| | | decorator=decorator) |
| | | derived_view = deriver(view) |
| | | |
| | |
| | | |
| | | @wraps_view |
| | | def mapped_view(self, view): |
| | | mapper = self.kw.get('view_mapper') |
| | | mapper = self.kw.get('mapper') |
| | | if mapper is None: |
| | | mapper = getattr(view, '__view_mapper__', None) |
| | | if mapper is None: |
| | |
| | | return 'OK' |
| | | return wrapped |
| | | def view(context, request): return 'NOTOK' |
| | | deriver = self._makeOne(view_mapper=mapper) |
| | | deriver = self._makeOne(mapper=mapper) |
| | | result = deriver(view) |
| | | self.failIf(result is view) |
| | | self.assertEqual(result(None, None), 'OK') |
| | |
| | | |
| | | def test_create_nondefaults(self): |
| | | decorator = self._makeOne(name=None, request_type=None, for_=None, |
| | | permission='foo', view_mapper='mapper', |
| | | permission='foo', mapper='mapper', |
| | | decorator='decorator') |
| | | self.assertEqual(decorator.name, None) |
| | | self.assertEqual(decorator.request_type, None) |
| | | self.assertEqual(decorator.context, None) |
| | | self.assertEqual(decorator.permission, 'foo') |
| | | self.assertEqual(decorator.view_mapper, 'mapper') |
| | | self.assertEqual(decorator.mapper, 'mapper') |
| | | self.assertEqual(decorator.decorator, 'decorator') |
| | | |
| | | def test_call_function(self): |
| | |
| | | containment=None, attr=None, renderer=None, wrapper=None, |
| | | xhr=False, accept=None, header=None, path_info=None, |
| | | custom_predicates=(), context=None, decorator=None, |
| | | view_mapper=None): |
| | | mapper=None): |
| | | self.name = name |
| | | self.request_type = request_type |
| | | self.context = context or for_ |
| | |
| | | self.path_info = path_info |
| | | self.custom_predicates = custom_predicates |
| | | self.decorator = decorator |
| | | self.view_mapper = view_mapper |
| | | self.mapper = mapper |
| | | |
| | | def __call__(self, wrapped): |
| | | settings = self.__dict__.copy() |