onadata.apps.messaging package

Subpackages

Submodules

onadata.apps.messaging.admin module

onadata.apps.messaging.apps module

Messaging AppsConfig module

class onadata.apps.messaging.apps.MessagingConfig(app_name, app_module)

Bases: AppConfig

Messaging AppsConfig class.

name = 'onadata.apps.messaging'
ready()

Override this method in subclasses to run code when Django starts.

verbose_name = 'Messaging'

onadata.apps.messaging.constants module

Messaging constant variables.

onadata.apps.messaging.filters module

Messaging viewset filters module.

class onadata.apps.messaging.filters.ActionFilterSet(data=None, queryset=None, *, request=None, prefix=None)

Bases: FilterSet

class Meta

Bases: object

fields = {'timestamp': ['exact', 'gt', 'lt', 'gte', 'lte', 'year', 'year__gt', 'year__lt', 'year__gte', 'year__lte', 'month', 'month__gt', 'month__lt', 'month__gte', 'month__lte', 'day', 'day__gt', 'day__lt', 'day__gte', 'day__lte', 'hour', 'hour__gt', 'hour__lt', 'hour__gte', 'hour__lte', 'minute', 'minute__gt', 'minute__lt', 'minute__gte', 'minute__lte'], 'verb': ['exact']}
model

alias of Action

base_filters = {'timestamp': <django_filters.filters.IsoDateTimeFilter object>, 'timestamp__day': <django_filters.filters.NumberFilter object>, 'timestamp__day__gt': <django_filters.filters.NumberFilter object>, 'timestamp__day__gte': <django_filters.filters.NumberFilter object>, 'timestamp__day__lt': <django_filters.filters.NumberFilter object>, 'timestamp__day__lte': <django_filters.filters.NumberFilter object>, 'timestamp__gt': <django_filters.filters.IsoDateTimeFilter object>, 'timestamp__gte': <django_filters.filters.IsoDateTimeFilter object>, 'timestamp__hour': <django_filters.filters.NumberFilter object>, 'timestamp__hour__gt': <django_filters.filters.NumberFilter object>, 'timestamp__hour__gte': <django_filters.filters.NumberFilter object>, 'timestamp__hour__lt': <django_filters.filters.NumberFilter object>, 'timestamp__hour__lte': <django_filters.filters.NumberFilter object>, 'timestamp__lt': <django_filters.filters.IsoDateTimeFilter object>, 'timestamp__lte': <django_filters.filters.IsoDateTimeFilter object>, 'timestamp__minute': <django_filters.filters.NumberFilter object>, 'timestamp__minute__gt': <django_filters.filters.NumberFilter object>, 'timestamp__minute__gte': <django_filters.filters.NumberFilter object>, 'timestamp__minute__lt': <django_filters.filters.NumberFilter object>, 'timestamp__minute__lte': <django_filters.filters.NumberFilter object>, 'timestamp__month': <django_filters.filters.NumberFilter object>, 'timestamp__month__gt': <django_filters.filters.NumberFilter object>, 'timestamp__month__gte': <django_filters.filters.NumberFilter object>, 'timestamp__month__lt': <django_filters.filters.NumberFilter object>, 'timestamp__month__lte': <django_filters.filters.NumberFilter object>, 'timestamp__year': <django_filters.filters.NumberFilter object>, 'timestamp__year__gt': <django_filters.filters.NumberFilter object>, 'timestamp__year__gte': <django_filters.filters.NumberFilter object>, 'timestamp__year__lt': <django_filters.filters.NumberFilter object>, 'timestamp__year__lte': <django_filters.filters.NumberFilter object>, 'verb': <django_filters.filters.CharFilter object>}
declared_filters = {}
class onadata.apps.messaging.filters.TargetIDFilterBackend

Bases: BaseFilterBackend

A filter backend that filters by target id.

filter_queryset(request, queryset, view)

Return a filtered queryset.

class onadata.apps.messaging.filters.TargetTypeFilterBackend

Bases: BaseFilterBackend

A filter backend that filters by target type.

filter_queryset(request, queryset, view)

Return a filtered queryset.

class onadata.apps.messaging.filters.UserFilterBackend

Bases: BaseFilterBackend

A filter backend that filters by username.

filter_queryset(request, queryset, view)

Return a filtered queryset.

onadata.apps.messaging.models module

onadata.apps.messaging.permissions module

Tests Messaging app implementation.

class onadata.apps.messaging.permissions.TargetObjectPermissions

Bases: BasePermission

Check target object permissions

get_required_object_permissions(method, model_cls)

Return required object permissions for given request method.

has_object_permission(request, view, obj)

Check the target object’s permissions

perms_map = {'DELETE': ['%(app_label)s.delete_%(model_name)s'], 'GET': ['%(app_label)s.view_%(model_name)s'], 'HEAD': ['%(app_label)s.view_%(model_name)s'], 'OPTIONS': ['%(app_label)s.view_%(model_name)s'], 'PATCH': ['%(app_label)s.change_%(model_name)s'], 'POST': ['%(app_label)s.change_%(model_name)s'], 'PUT': ['%(app_label)s.change_%(model_name)s']}

onadata.apps.messaging.serializers module

Message serializers

class onadata.apps.messaging.serializers.ContentTypeChoiceField(*args, **kwargs)

Bases: ChoiceField

Custom ChoiceField that gets the model name from a ContentType object

to_representation(value)

Get the model from ContentType object

class onadata.apps.messaging.serializers.MessageSerializer(*args, **kwargs)

Bases: ModelSerializer

Serializer class for Message objects

class Meta

Bases: object

MessageSerializer metadata

fields = ['id', 'verb', 'message', 'user', 'target_id', 'target_type', 'timestamp']
model

alias of Action

TARGET_CHOICES = (('xform', 'XForm'), ('project', 'Project'), ('user', 'User'))
create(validated_data)

Creates the Message in the Action model

onadata.apps.messaging.serializers.send_message(instance_id: list | int, target_id: int, target_type: str, user: User, message_verb: str)

Send a message. :param id: A single ID or list of IDs that have been affected by an action :param target_id: id of the target_type :param target_type: any of these three [‘xform’, ‘project’, ‘user’] :param request: http request object :return:

onadata.apps.messaging.signals module

Messaging signal handlers

onadata.apps.messaging.signals.messaging_backends_handler(sender, **kwargs)

Handler to send messages to notification backends e.g MQTT.

onadata.apps.messaging.tasks module

Messaging tasks

onadata.apps.messaging.urls module

Messaging urls module.

onadata.apps.messaging.utils module

Messaging util functions.

exception onadata.apps.messaging.utils.TargetDoesNotExist

Bases: Exception

Target does not Exist exception class.

message = 'Unknown target.'
onadata.apps.messaging.utils.get_target(target_type)

Returns a ContentType object if it exists, raises TargetDoesNotExist exception if target_type is not known.

onadata.apps.messaging.views module

onadata.apps.messaging.viewsets module

Messaging /messaging viewsets.

class onadata.apps.messaging.viewsets.MessagingViewSet(**kwargs)

Bases: CreateModelMixin, ListModelMixin, RetrieveModelMixin, DestroyModelMixin, GenericViewSet

ViewSet for the Messaging app - implements /messaging API endpoint

basename = None
description = None
detail = None
filter_backends = (<class 'onadata.apps.messaging.filters.TargetTypeFilterBackend'>, <class 'onadata.apps.messaging.filters.TargetIDFilterBackend'>, <class 'onadata.apps.messaging.filters.UserFilterBackend'>, <class 'django_filters.rest_framework.backends.DjangoFilterBackend'>)
filterset_class

alias of ActionFilterSet

list(request, *args, **kwargs)
name = None
pagination_class

alias of StandardPageNumberPagination

permission_classes = [<class 'rest_framework.permissions.IsAuthenticated'>, <class 'onadata.apps.messaging.permissions.TargetObjectPermissions'>]
queryset
serializer_class

alias of MessageSerializer

suffix = None

Module contents