Source code for django_crucrudile.routes

"""This module contains implementations of the
:class:`django_crucrudile.routes.base.BaseRoute` abstract class, that
use route mixins to provide functionality :

- :class:`CallbackRoute` provides a Route that needs a callback to be
  passed as argument or defined as
  :attr:`mixins.CallbackMixin.callback`
  attribute, and that uses this callback in the URL patterns it
  returns.
- :class:`ViewRoute` provides a Route that needs a view class to
  be passed as argument or defined as
  :attr:`mixins.ViewMixin.view_class`
  attribute, and that uses a callback obtained from this view class in the URL
  patterns it returns.
- :class:`ModelViewRoute` provides a Route that needs a view class and a
  model to be passed as arguments or defined as
  :attr:`mixins.ViewMixin.view_class` and
  :attr:`mixins.ModelMixin.model` attributes.
  attribute, that uses a callback obtained from this view class (using
  the model), and that uses this callback in the URL pattern it
  generates. Also uses metadata from the model class to generate some
  of the URL metadata.
- :class:`GenericModelViewRoute` provides a Route similar to
  :class:`ModelViewRoute`, but that automatically gets the needed URL
  arguments using the view class.

"""

from .mixins import (
    ArgumentsMixin,
    CallbackMixin, ViewMixin,
    ModelMixin, GenericViewArgsMixin,
)

from .base import BaseRoute

__all__ = [
    "CallbackRoute",
    "ViewRoute",
    "ModelViewRoute",
    "GenericModelViewRoute",
]


[docs]class CallbackRoute(ArgumentsMixin, CallbackMixin, BaseRoute): """Implement :class:`base.BaseRoute` using a callback function. Also use :class:`mixins.arguments.ArgumentsMixin` to allow URL arguments to be specified. .. inheritance-diagram:: CallbackRoute """
[docs] def __init__(self, *args, **kwargs): """Initialize CallbackRoute, for a description of arguments see : - :func:`mixins.arguments.ArgumentsMixin.__init__` - :func:`mixins.callback.CallbackMixin.__init__` - :func:`base.BaseRoute.__init__` """ super().__init__(*args, **kwargs)
[docs]class ViewRoute(ArgumentsMixin, ViewMixin, BaseRoute): """Implement :class:`base.BaseRoute` using a view class function. Also use :class:`mixins.arguments.ArgumentsMixin` to allow URL arguments to be specified. .. inheritance-diagram:: ViewRoute """
[docs] def __init__(self, *args, **kwargs): # pragma: no cover """Initialize ViewRoute, for a description of arguments see : - :func:`mixins.arguments.ArgumentsMixin.__init__` - :func:`mixins.view.ViewMixin.__init__` - :func:`base.BaseRoute.__init__` """ super().__init__(*args, **kwargs)
[docs]class ModelViewRoute(ArgumentsMixin, ModelMixin, ViewMixin, BaseRoute): """Combine :class:`mixins.view.ViewMixin` and :class:`django_crucrudile.routes.mixins.model.ModelMixin` to make a route that can easily be used with a model and a generic view. Also use :class:`mixins.arguments.ArgumentsMixin` to allow URL arguments to be specified. .. inheritance-diagram:: ModelViewRoute """
[docs] def __init__(self, *args, **kwargs): """Initialize ModelViewRoute, for a description of arguments see : - :func:`mixins.arguments.ArgumentsMixin.__init__` - :func:`mixins.model.ModelMixin.__init__` - :func:`mixins.view.ViewMixin.__init__` - :func:`base.BaseRoute.__init__` """ super().__init__(*args, **kwargs)
[docs] def get_view_kwargs(self): """Make the view use :attr:`mixins.model.ModelMixin.model`. This is the effective combination of :class:`mixins.model.ModelMixin` and :class:`ViewRoute`. >>> from mock import Mock >>> >>> model = Mock() >>> route = ModelViewRoute(model=model, view_class=Mock(),name='name') >>> >>> route.get_view_kwargs()['model'] is model True """ return {'model': self.model}
[docs]class GenericModelViewRoute(GenericViewArgsMixin, ModelViewRoute): """Combine :class:`ModelViewRoute` with :class:`django_crucrudile.routes.mixins.model.generic.GenericViewArgsMixin` to automatically get the needed URL arguments for route instances. """