caps.views

caps.views.generics

class OwnedCreateView(**kwargs)[source]

Bases: UserAgentMixin, CreateView

class OwnedDeleteView(**kwargs)[source]

Bases: SingleOwnedMixin, OwnedPermissionMixin, DeleteView

class OwnedDetailView(**kwargs)[source]

Bases: SingleOwnedMixin, OwnedPermissionMixin, DetailView

class OwnedListView(**kwargs)[source]

Bases: OwnedMixin, ListView

class OwnedUpdateView(**kwargs)[source]

Bases: SingleOwnedMixin, OwnedPermissionMixin, UpdateView

caps.views.api

class AccessViewSet(**kwargs)[source]

Bases: UserAgentMixin, RetrieveModelMixin, DestroyModelMixin, ListModelMixin, GenericViewSet

This viewset provides API to Access.

It ensures that:

  • Access can’t be created

  • Access can’t be updated

  • Access can only be shared, listed, retrieved, and destroyed.

Note: no model nor queryset is provided by default, as Access is an abstract class and is dependent of the concrete Owned sub-model.

filterset_fields = ('receiver__uuid', 'emitter__uuid', 'origin__uuid', 'target__uuid')
get_queryset()[source]

Get the list of items for this view. This must be an iterable, and may be a queryset. Defaults to using self.queryset.

This method should always be used rather than accessing self.queryset directly, as self.queryset gets evaluated only once, and those results are cached for all subsequent requests.

You may want to override this if you need to provide different querysets depending on the incoming request.

(Eg. return a list of items that is specific to the user)

lookup_field = 'uuid'
lookup_url_kwarg = 'uuid'
serializer_class

alias of AccessSerializer

share(request, uuid=None)[source]

Share object access to someone. See OwnedViewSet.share() for more info.

share_serializer_class

This specifies serializer class used for the share() action.

alias of ShareSerializer

class AgentViewSet(**kwargs)[source]

Bases: UserAgentMixin, ModelViewSet

Viewset provides API for Agent.

Provides an extra API endpoint user returning user’s agents (user()).

filterset_fields = ('group', 'user')
lookup_field = 'uuid'
lookup_url_kwarg = 'uuid'
model

alias of Agent

permissions = [<class 'caps.permissions.DjangoModelPermissions'>]
queryset
search_fields = ('group__name', 'user__name')
serializer_class

alias of AgentSerializer

user(*_)[source]

Return request agents for user using GET['user']. When parameter is not provided, it uses current user.

class OwnedViewSet(**kwargs)[source]

Bases: UserAgentMixin, SingleOwnedMixin, ModelViewSet

This is the base viewset class for Owned models, running object permission checks.

It also provides the share() that allows a user to share an access to the object.

get_access_queryset()[source]

When uuid GET argument is provided, filter accesses on it.

get_queryset()[source]

Get Owned queryset based get_access_queryset.

lookup_field = 'uuid'
lookup_url_kwarg = 'uuid'

URL’s kwargs argument used to retrieve access uuid.

permission_classes = [<class 'caps.permissions.OwnedPermissions'>]
perms_map = {'share': ['%(app_label)s.change_%(model_name)s']}
share(request, uuid=None)[source]

Share object, returning the newly created Access.

Example of request’s POST data in YAML (see share() and ShareSerializer):

receiver: "agent-uuid"
expiration: null
grants:
    myapp.view_myobject: 1
    myapp.change_myobject: 0
share_serializer_class

The serializer class used for the share() action.

alias of ShareSerializer

caps.views.common

class AccessDeleteView(**kwargs)[source]

Bases: AccessMixin, DeleteView

class AccessDetailView(**kwargs)[source]

Bases: AccessMixin, DetailView

get_queryset()[source]

Ensure capabilities are paccessetch at the same time than the access.

class AccessListView(**kwargs)[source]

Bases: AccessMixin, ListView

class AgentCreateView(**kwargs)[source]

Bases: AgentMixin, CreateView

Create an Agent (only for group).

fields = ['group']
permission_required = 'caps.add_agent'
class AgentDeleteView(**kwargs)[source]

Bases: AgentMixin, DeleteView

permission_required = 'caps.delete_agent'
class AgentDetailView(**kwargs)[source]

Bases: AgentMixin, DetailView

permission_required = 'caps.view_agent'
class AgentListView(**kwargs)[source]

Bases: AgentMixin, ListView

permission_required = 'caps.view_agent'
class AgentUpdateView(**kwargs)[source]

Bases: AgentMixin, UpdateView

fields = ['group']
permission_required = 'caps.add_agent'

caps.views.mixins

class AccessMixin[source]

Bases: ByUUIDMixin, UserAgentMixin

Mixin used by Access views and viewsets.

get_queryset()[source]
class AgentMixin[source]

Bases: ByUUIDMixin, UserAgentMixin, PermissionRequiredMixin

model

alias of Agent

class ByUUIDMixin[source]

Bases: object

Fetch a model by UUID.

get_object()[source]
lookup_url_kwarg = 'uuid'

URL’s kwargs argument used to retrieve access uuid.

class OwnedMixin[source]

Bases: UserAgentMixin

Base mixin providing functionalities to work with Owned model.

It provides:

  • assign self’s agent and agents

  • queryset to available Access.

access_class = None

Access class (defaults to model’s Access).

get_access_queryset()[source]

Return queryset for accesses.

Return type:

AccessQuerySet | None

get_queryset()[source]

Get Owned queryset based get_access_queryset.

class OwnedPermissionMixin[source]

Bases: OwnedMixin

This mixin checks for object permission when get_object() is called. It raises a PermissionDenied or Http404 if user does not have access to the object.

check_object_permissions(request, obj)[source]
get_object()[source]
get_permissions()[source]
permissions = [<class 'caps.permissions.OwnedPermissions'>]
class SingleOwnedMixin[source]

Bases: OwnedMixin

Detail mixin used to retrieve Owned detail.

It requires subclass to have a check_object_permissions method ( eg by a child of OwnedPermissionMixin or DRF APIView).

get_access_queryset()[source]

When uuid GET argument is provided, filter accesses on it.

get_object()[source]
lookup_url_kwarg = 'uuid'

URL’s kwargs argument used to retrieve access uuid.