onadata.apps.api.viewsets package

Subpackages

Submodules

onadata.apps.api.viewsets.attachment_viewset module

The /api/v1/attachments API implementation.

class onadata.apps.api.viewsets.attachment_viewset.AttachmentViewSet(**kwargs)

Bases: AuthenticateHeaderMixin, CacheControlMixin, ETagsMixin, ReadOnlyModelViewSet

GET, List attachments implementation.

content_negotiation_class

alias of MediaFileContentNegotiation

count(request, *args, **kwargs)

Returns the number of attachments the user has access to.

filter_backends = (<class 'onadata.libs.filters.AttachmentFilter'>, <class 'onadata.libs.filters.AttachmentTypeFilter'>)
list(request, *args, **kwargs)
lookup_field = 'pk'
pagination_class

alias of StandardPageNumberPagination

permission_classes = (<class 'onadata.apps.api.permissions.AttachmentObjectPermissions'>,)
queryset
renderer_classes = (<class 'rest_framework.renderers.JSONRenderer'>, <class 'rest_framework.renderers.BrowsableAPIRenderer'>, <class 'onadata.libs.renderers.renderers.MediaFileRenderer'>)
retrieve(request, *args, **kwargs)
serializer_class

alias of AttachmentSerializer

onadata.apps.api.viewsets.attachment_viewset.get_attachment_data(attachment, suffix)

Returns attachment file contents.

onadata.apps.api.viewsets.briefcase_viewset module

The /briefcase API implementation.

class onadata.apps.api.viewsets.briefcase_viewset.BriefcaseViewset(**kwargs)

Bases: CreateModelMixin, RetrieveModelMixin, ListModelMixin, GenericViewSet

Implements the [Briefcase Aggregate API]( https://code.google.com/p/opendatakit/wiki/BriefcaseAggregateAPI).

authentication_classes = (<class 'onadata.libs.authentication.DigestAuthentication'>, <class 'rest_framework.authentication.TokenAuthentication'>)
create(request, *args, **kwargs)

Accepts an XForm XML and publishes it as a form.

filter_backends = (<class 'onadata.libs.filters.AnonDjangoObjectPermissionFilter'>,)
filter_queryset(queryset)

Filters an XForm submission instances using ODK Aggregate query parameters.

get_object(queryset=None)

Returns an Instance submission object for the given UUID.

list(request, *args, **kwargs)

Returns a list of submissions with reference submission download.

manifest(request, *args, **kwargs)

Returns list of media content.

media(request, *args, **kwargs)

Returns a single media content.

permission_classes = (<class 'rest_framework.permissions.IsAuthenticated'>, <class 'onadata.apps.api.permissions.ViewDjangoObjectPermissions'>)
queryset
renderer_classes = (<class 'onadata.libs.renderers.renderers.TemplateXMLRenderer'>, <class 'rest_framework.renderers.BrowsableAPIRenderer'>)
retrieve(request, *args, **kwargs)

Returns a single submission XML for download.

serializer_class

alias of XFormListSerializer

template_name = 'openrosa_response.xml'

onadata.apps.api.viewsets.charts_viewset module

/charts api endpoint for chart data and chart widgets

class onadata.apps.api.viewsets.charts_viewset.ChartBrowsableAPIRenderer

Bases: BrowsableAPIRenderer

View chart for specific fields in a form or dataset.

get_content(renderer, data, accepted_media_type, renderer_context)

Get the content as if it had been rendered by the default non-documenting renderer.

get_default_renderer(view)

Return an instance of the first valid renderer. (Don’t use another documenting renderer.)

class onadata.apps.api.viewsets.charts_viewset.ChartsViewSet(**kwargs)

Bases: AnonymousUserPublicFormsMixin, AuthenticateHeaderMixin, CacheControlMixin, ETagsMixin, ReadOnlyModelViewSet

ChartsViewSet: /charts api endpoint for chart data and chart widgets

filter_backends = (<class 'onadata.libs.filters.AnonDjangoObjectPermissionFilter'>,)
lookup_field = 'pk'
permission_classes = [<class 'onadata.apps.api.permissions.XFormPermissions'>]
queryset
renderer_classes = (<class 'onadata.libs.renderers.renderers.DecimalJSONRenderer'>, <class 'onadata.apps.api.viewsets.charts_viewset.ChartBrowsableAPIRenderer'>, <class 'rest_framework.renderers.TemplateHTMLRenderer'>)
retrieve(request, *args, **kwargs)
serializer_class

alias of ChartSerializer

onadata.apps.api.viewsets.charts_viewset.get_form_field_chart_url(url, field)

Append ‘field_name’ to a given url

onadata.apps.api.viewsets.connect_viewset module

The /api/v1/user API implementation

User authentication API support to access API tokens.

class onadata.apps.api.viewsets.connect_viewset.ConnectViewSet(**kwargs)

Bases: CreateModelMixin, AuthenticateHeaderMixin, CacheControlMixin, ETagsMixin, ObjectLookupMixin, GenericViewSet

This endpoint allows you retrieve the authenticated user’s profile info.

create(request, *args, **kwargs)
expire(request, *args, **kwargs)

Implements the /expire endpoint

Allows a user to expire a TempToken.

list(request, *args, **kwargs)

Implements the List endpoint - returns authentication tokens for current user.

lookup_field = 'user'
odk_token(request, *args, **kwargs)

Implements the /odk_token endpoint

Allows a user to get or create or expire an ODKToken for use with ODK Collect.

permission_classes = (<class 'onadata.apps.api.permissions.ConnectViewsetPermissions'>,)
queryset
regenerate_auth_token(request, *args, **kwargs)

Implements the /regenerate_auth_token endpoint

Allows a user to expire and create a new API Token.

reset(request, *args, **kwargs)

Implements the /reset endpoint

Allows a user to reset and change their password.

serializer_class

alias of UserProfileWithTokenSerializer

starred(request, *args, **kwargs)

Return projects starred for this user.

onadata.apps.api.viewsets.connect_viewset.user_profile_w_token_response(request, status_code)

Returns authenticated user profile

onadata.apps.api.viewsets.data_viewset module

The /data API endpoint.

class onadata.apps.api.viewsets.data_viewset.AuthenticatedDataViewSet(**kwargs)

Bases: DataViewSet

Authenticated requests only.

permission_classes = (<class 'onadata.apps.api.permissions.ConnectViewsetPermissions'>,)
class onadata.apps.api.viewsets.data_viewset.DataViewSet(**kwargs)

Bases: AnonymousUserPublicFormsMixin, AuthenticateHeaderMixin, ETagsMixin, CacheControlMixin, DefaultBaseViewset, ModelViewSet

This endpoint provides access to submitted data.

data_count = None
destroy(request, *args, **kwargs)

Deletes submissions data.

enketo(request, *args, **kwargs)

Data Enketo URLs endpoint

extra_lookup_fields = None
filter_backends = (<class 'onadata.libs.filters.AnonDjangoObjectPermissionFilter'>, <class 'onadata.libs.filters.XFormOwnerFilter'>, <class 'onadata.libs.filters.DataFilter'>)
filter_queryset(queryset, view=None)

Returns and filters queryset based on context and query params.

get_object(queryset=None)

Returns the appropriate object based on context.

get_serializer_class()

Returns appropriate serializer class based on context.

history(request, *args, **kwargs)

Return submission history.

labels(request, *args, **kwargs)

Data labels API endpoint.

list(request, *args, **kwargs)

Returns list of data API endpoints for different forms.

lookup_field = 'pk'
lookup_fields = ('pk', 'dataid')
paginate_queryset(queryset)

Returns a paginated queryset.

pagination_class

alias of CountOverridablePageNumberPagination

permission_classes = (<class 'onadata.apps.api.permissions.XFormPermissions'>,)
public_data_endpoint = 'public'
queryset
renderer_classes = [<class 'rest_framework.renderers.JSONRenderer'>, <class 'rest_framework_jsonp.renderers.JSONPRenderer'>, <class 'rest_framework_csv.renderers.CSVRenderer'>, <class 'onadata.libs.renderers.renderers.XLSRenderer'>, <class 'onadata.libs.renderers.renderers.XLSXRenderer'>, <class 'onadata.libs.renderers.renderers.CSVRenderer'>, <class 'onadata.libs.renderers.renderers.CSVZIPRenderer'>, <class 'onadata.libs.renderers.renderers.SAVZIPRenderer'>, <class 'onadata.libs.renderers.renderers.InstanceXMLRenderer'>, <class 'onadata.libs.renderers.renderers.SurveyRenderer'>, <class 'onadata.libs.renderers.renderers.GeoJsonRenderer'>, <class 'onadata.libs.renderers.renderers.KMLRenderer'>, <class 'onadata.libs.renderers.renderers.OSMRenderer'>, <class 'onadata.libs.renderers.renderers.FLOIPRenderer'>]
retrieve(request, *args, **kwargs)

Returns API data for the targeted object.

serializer_class

alias of DataSerializer

set_object_list(query, fields, sort, start, limit, is_public_request)

Set the submission instances queryset.

onadata.apps.api.viewsets.data_viewset.delete_instance(instance, user)

Function that calls Instance.set_deleted and catches any exception that may occur.

Parameters:
  • instance

  • user

Returns:

onadata.apps.api.viewsets.data_viewset.get_data_and_form(kwargs)

Checks if the dataid in kwargs is a valid integer.

onadata.apps.api.viewsets.dataview_viewset module

The /dataview API endpoint implementation.

class onadata.apps.api.viewsets.dataview_viewset.DataViewViewSet(**kwargs)

Bases: AuthenticateHeaderMixin, CacheControlMixin, ETagsMixin, DefaultBaseViewset, ModelViewSet

A simple ViewSet for viewing and editing DataViews.

charts(request, *args, **kwargs)

Returns the charts data for the given dataview.

data(request, format='json', **kwargs)

Retrieve the data from the xform using this dataview

destroy(request, *args, **kwargs)

Soft deletes the the dataview.

export_async(request, *args, **kwargs)

Initiate’s exports asynchronously.

form(request, format='json', **kwargs)

Returns the form as either json, xml or XLS linked the dataview.

form_details(request, *args, **kwargs)

Returns the dataview’s form API data.

get_serializer_class()

Get a serializer class based on request format

list(request, *args, **kwargs)

List endpoint for Filtered datasets

lookup_field = 'pk'
pagination_class

alias of StandardPageNumberPagination

permission_classes = [<class 'onadata.apps.api.permissions.DataViewViewsetPermissions'>]
queryset
renderer_classes = [<class 'rest_framework.renderers.JSONRenderer'>, <class 'rest_framework_jsonp.renderers.JSONPRenderer'>, <class 'rest_framework_csv.renderers.CSVRenderer'>, <class 'onadata.libs.renderers.renderers.XLSRenderer'>, <class 'onadata.libs.renderers.renderers.XLSXRenderer'>, <class 'onadata.libs.renderers.renderers.CSVRenderer'>, <class 'onadata.libs.renderers.renderers.CSVZIPRenderer'>, <class 'onadata.libs.renderers.renderers.SAVZIPRenderer'>, <class 'onadata.libs.renderers.renderers.ZipRenderer'>, <class 'onadata.libs.renderers.renderers.GeoJsonRenderer'>]
serializer_class

alias of DataViewSerializer

xlsx_export(request, *args, **kwargs)

Returns the data views XLS export files.

onadata.apps.api.viewsets.dataview_viewset.apply_filters(instance_qs, filters)

Apply filters on a queryset

onadata.apps.api.viewsets.dataview_viewset.dataview_post_delete_callback(sender, instance, **kwargs)

Clear project cache post dataview delete.

onadata.apps.api.viewsets.dataview_viewset.dataview_post_save_callback(sender, instance=None, created=False, **kwargs)

Clear project cache post dataview save.

onadata.apps.api.viewsets.dataview_viewset.filter_to_field_lookup(filter_string)

Converts a =, < or > to a django field lookup

onadata.apps.api.viewsets.dataview_viewset.get_dataview_instances(dataview)

Get all instances that belong to ths dataview

onadata.apps.api.viewsets.dataview_viewset.get_field_lookup(column, filter_string)

Convert filter_string + column into a field lookup expression

onadata.apps.api.viewsets.dataview_viewset.get_filter_kwargs(filters)

Apply filters on a queryset

onadata.apps.api.viewsets.dataview_viewset.get_form_field_chart_url(url, field)

Returns a chart’s url with the field_name field parameter appended to it.

onadata.apps.api.viewsets.entity_list_viewset module

ViewSet for EntityList actions

class onadata.apps.api.viewsets.entity_list_viewset.EntityListViewSet(**kwargs)

Bases: CacheControlMixin, ETagsMixin, DefaultBaseViewset, GenericViewSet, ListModelMixin, CreateModelMixin, RetrieveModelMixin, DestroyModelMixin

create(request, *args, **kwargs)

Override create method

download(request, *args, **kwargs)

Provides download action for dataset

entities(request, *args, **kwargs)

list, create, retrieve, update, destroy actions for Entities

entities_search_fields = ['uuid', 'json']
filter_backends = (<class 'onadata.libs.filters.AnonUserEntityListFilter'>, <class 'onadata.libs.filters.EntityListProjectFilter'>)
get_serializer_class()

Override get_serializer_class method

get_serializer_context()

Override get_serializer_context method

pagination_class

alias of StandardPageNumberPagination

perform_destroy(instance)

Override perform_detroy method

permission_classes = (<class 'onadata.apps.api.permissions.DjangoObjectPermissionsIgnoreModelPerm'>,)
queryset
retrieve(request, *args, **kwargs)

Override retrieve method

serializer_class

alias of EntityListSerializer

onadata.apps.api.viewsets.export_viewset module

The /api/v1/exports API implementation.

List, Create, Update, Destroy Export model objects.

class onadata.apps.api.viewsets.export_viewset.ExportViewSet(**kwargs)

Bases: DestroyModelMixin, ReadOnlyModelViewSet

The /api/v1/exports API implementation.

List, Create, Update, Destroy Export model objects.

authentication_classes = [<class 'onadata.libs.authentication.DigestAuthentication'>, <class 'onadata.libs.authentication.TempTokenAuthentication'>, <class 'onadata.libs.authentication.EnketoTokenAuthentication'>, <class 'oauth2_provider.contrib.rest_framework.authentication.OAuth2Authentication'>, <class 'rest_framework.authentication.SessionAuthentication'>, <class 'rest_framework.authentication.TokenAuthentication'>, <class 'onadata.libs.authentication.TempTokenURLParameterAuthentication'>]
filter_backends = (<class 'onadata.libs.filters.ExportFilter'>,)
permission_classes = [<class 'onadata.apps.api.permissions.ExportDjangoObjectPermission'>]
queryset
renderer_classes = [<class 'rest_framework.renderers.JSONRenderer'>, <class 'rest_framework_jsonp.renderers.JSONPRenderer'>, <class 'rest_framework_csv.renderers.CSVRenderer'>, <class 'onadata.libs.renderers.renderers.CSVRenderer'>, <class 'onadata.libs.renderers.renderers.CSVZIPRenderer'>, <class 'onadata.libs.renderers.renderers.KMLRenderer'>, <class 'onadata.libs.renderers.renderers.OSMExportRenderer'>, <class 'onadata.libs.renderers.renderers.SAVZIPRenderer'>, <class 'onadata.libs.renderers.renderers.XLSRenderer'>, <class 'onadata.libs.renderers.renderers.XLSXRenderer'>, <class 'onadata.libs.renderers.renderers.ZipRenderer'>]
retrieve(request, *args, **kwargs)
serializer_class

alias of ExportSerializer

onadata.apps.api.viewsets.floip_viewset module

FloipViewSet: API endpoint for /api/floip

class onadata.apps.api.viewsets.floip_viewset.FloipViewSet(**kwargs)

Bases: CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin, GenericViewSet

FloipViewSet: create, list, retrieve, destroy

filter_backends = (<class 'onadata.libs.filters.AnonDjangoObjectPermissionFilter'>, <class 'onadata.libs.filters.PublicDatasetsFilter'>)
get_object()

Returns the object the view is displaying.

You may want to override this if you need to provide non-standard queryset lookups. Eg if objects are referenced using multiple keyword arguments in the url conf.

get_serializer_class()

Return the class to use for the serializer. Defaults to using self.serializer_class.

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

(Eg. admins get full serialization, others get basic serialization)

get_success_headers(data)
lookup_field = 'uuid'
pagination_class

alias of PageNumberPagination

parser_classes = (<class 'rest_framework_json_api.parsers.JSONParser'>,)
permission_classes = [<class 'onadata.apps.api.permissions.XFormPermissions'>]
queryset
renderer_classes = (<class 'onadata.apps.api.viewsets.floip_viewset.FlowResultsJSONRenderer'>,)
responses(request, uuid=None)

Flow Results Responses endpoint.

serializer_class

alias of FloipSerializer

class onadata.apps.api.viewsets.floip_viewset.FlowResultsJSONRenderer

Bases: JSONRenderer

Render JSON API format with uuid.

classmethod build_json_resource_obj(fields, resource, resource_instance, resource_name, serializer, force_type_resolution=False)

Build a JSON resource object using the id as it appears in the resource.

onadata.apps.api.viewsets.media_viewset module

The /api/v1/media API implementation.

List, Create, Update, Delete MetaData objects.

class onadata.apps.api.viewsets.media_viewset.MediaViewSet(**kwargs)

Bases: AuthenticateHeaderMixin, CacheControlMixin, ETagsMixin, DefaultBaseViewset, ReadOnlyModelViewSet

A view to redirect to actual attachments url

filter_backends = (<class 'onadata.libs.filters.AttachmentFilter'>, <class 'onadata.libs.filters.AttachmentTypeFilter'>)
list(request, *args, **kwargs)

Action NOT IMPLEMENTED. It is only needed because of the automatic URL routing in /api/v1/

lookup_field = 'pk'
permission_classes = (<class 'onadata.apps.api.permissions.AttachmentObjectPermissions'>,)
queryset
retrieve(request, *args, **kwargs)

Redirect to final attachment url

param pk: the attachment id query param filename: the filename of the attachment is required and must match query param suffix: (optional) - specify small | medium | large to

return resized images.

return HttpResponseRedirect: redirects to final image url

onadata.apps.api.viewsets.merged_xform_viewset module

MergedXFormViewSet: API endpoint for /api/merged-datasets

class onadata.apps.api.viewsets.merged_xform_viewset.MergedXFormViewSet(**kwargs)

Bases: CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin, GenericViewSet

Merged XForms viewset: create, list, retrieve, destroy

data(request, *args, **kwargs)

Return data from the merged xforms

filter_backends = (<class 'onadata.libs.filters.AnonDjangoObjectPermissionFilter'>, <class 'onadata.libs.filters.PublicDatasetsFilter'>)
form(*args, **kwargs)

Return XForm JSON, XLS or XML representing

get_serializer_class()

Get appropriate serializer class

list(request, *args, **kwargs)

List endpoint for Merged XForms

pagination_class

alias of StandardPageNumberPagination

permission_classes = [<class 'onadata.apps.api.permissions.XFormPermissions'>]
queryset
renderer_classes = [<class 'rest_framework.renderers.JSONRenderer'>, <class 'rest_framework_jsonp.renderers.JSONPRenderer'>, <class 'rest_framework_csv.renderers.CSVRenderer'>, <class 'onadata.libs.renderers.renderers.StaticXMLRenderer'>, <class 'onadata.libs.renderers.renderers.GeoJsonRenderer'>]
serializer_class

alias of MergedXFormSerializer

onadata.apps.api.viewsets.messaging_stats_viewset module

API Endpoint implementation for Messaging statistics

class onadata.apps.api.viewsets.messaging_stats_viewset.MessagingStatsViewSet(**kwargs)

Bases: ListModelMixin, GenericViewSet

Provides a count of each unique messaging event grouped by either day, month or year.

The endpoint accepts the following query parameters:

  • group_by: field to group events by day, month or year

  • target_type: field to be used to determine the target

    object type i.e xform, project

  • target_id: field used to identify the target object

  • verb: field used to filter returned responses by a specific verb

  • timestamp: used to filter by actions that occurred in a specific time. This

    query parameter support date time lookups i.e timestamp__day, timestamp__year.

Example:

GET /api/v1/stats/messaging?target_id=1&target_type=xform&group_by=day

Response: ```json [

{

“submission_edited”: 10, “submission_created”: 5, “submission_deleted”: 15, “group”: “2023-02-17”

}

]

SUPPORTED_GROUP_BY = {'day': 'YYYY-MM-DD', 'month': 'MM-YYYY', 'year': 'YYYY'}
filter_backends = [<class 'onadata.apps.messaging.filters.TargetTypeFilterBackend'>, <class 'onadata.apps.messaging.filters.TargetIDFilterBackend'>, <class 'django_filters.rest_framework.backends.DjangoFilterBackend'>]
filterset_class

alias of ActionFilterSet

list(request, *args, **kwargs)
permission_classes = [<class 'rest_framework.permissions.IsAuthenticated'>, <class 'onadata.apps.messaging.permissions.TargetObjectPermissions'>]
queryset

onadata.apps.api.viewsets.metadata_viewset module

The /api/v1/metadata API implementation.

List, Create, Update, Delete MetaData objects.

class onadata.apps.api.viewsets.metadata_viewset.MetaDataViewSet(**kwargs)

Bases: AuthenticateHeaderMixin, CacheControlMixin, ETagsMixin, DefaultBaseViewset, ModelViewSet

List, Create, Update, Delete MetaData objects.

content_negotiation_class

alias of MediaFileContentNegotiation

filter_backends = (<class 'onadata.libs.filters.MetaDataFilter'>,)
permission_classes = (<class 'onadata.apps.api.permissions.MetaDataObjectPermissions'>,)
queryset
renderer_classes = (<class 'rest_framework.renderers.JSONRenderer'>, <class 'rest_framework.renderers.BrowsableAPIRenderer'>, <class 'onadata.libs.renderers.renderers.MediaFileRenderer'>)
retrieve(request, *args, **kwargs)
serializer_class

alias of MetaDataSerializer

onadata.apps.api.viewsets.note_viewset module

The /api/v1/notes API implementation.

List, Create, Update, Delete Note objects.

class onadata.apps.api.viewsets.note_viewset.NoteViewSet(**kwargs)

Bases: AuthenticateHeaderMixin, CacheControlMixin, ETagsMixin, DefaultBaseViewset, ModelViewSet

The /api/v1/notes API implementation.

List, Create, Update, Delete Note objects.

destroy(request, *args, **kwargs)
filter_backends = (<class 'onadata.libs.filters.NoteFilter'>, <class 'rest_framework_guardian.filters.ObjectPermissionsFilter'>)
get_object()

Returns the object the view is displaying.

You may want to override this if you need to provide non-standard queryset lookups. Eg if objects are referenced using multiple keyword arguments in the url conf.

permission_classes = [<class 'onadata.apps.api.permissions.ViewDjangoObjectPermissions'>, <class 'rest_framework.permissions.IsAuthenticated'>]
queryset
retrieve(request, *args, **kwargs)
serializer_class

alias of NoteSerializer

onadata.apps.api.viewsets.open_data_viewset module

The /api/v1/open-data implementation.

class onadata.apps.api.viewsets.open_data_viewset.OpenDataViewSet(**kwargs)

Bases: ETagsMixin, CacheControlMixin, DefaultBaseViewset, ModelViewSet

The /api/v1/open-data API endpoint.

MAX_INSTANCES_PER_REQUEST = 1000
data(request, **kwargs)

Streams submission data response matching uuid in the request.

destroy(request, *args, **kwargs)

Deletes an OpenData object.

flatten_xform_columns(json_of_columns_fields)

Flattens a json of column fields and the result is set to a class variable.

flattened_dict = {}
get_streaming_response(data)

Get a StreamingHttpResponse response object

get_tableau_column_headers()

Retrieve columns headers that are valid in tableau.

get_tableau_type(xform_type)

Returns a tableau-supported type based on a xform type.

lookup_field = 'uuid'
pagination_class

alias of StandardPageNumberPagination

permission_classes = (<class 'onadata.apps.api.permissions.OpenDataViewSetPermissions'>,)
queryset
schema(request, **kwargs)

Tableau schema - headers and table alias.

serializer_class

alias of OpenDataSerializer

uuid(request, *args, **kwargs)

Respond with the OpenData uuid.

onadata.apps.api.viewsets.open_data_viewset.process_tableau_data(data, xform)

Streamlines the row header fields with the column header fields for the same form. Handles Flattening repeat data for tableau

onadata.apps.api.viewsets.open_data_viewset.replace_special_characters_with_underscores(data)

Replaces special characters with underscores.

onadata.apps.api.viewsets.organization_profile_viewset module

The /api/v1/orgs API implementation

List, Retrieve, Update, Create/Register Organizations.

class onadata.apps.api.viewsets.organization_profile_viewset.OrganizationProfileViewSet(**kwargs)

Bases: AuthenticateHeaderMixin, CacheControlMixin, ETagsMixin, ObjectLookupMixin, DefaultBaseViewset, ModelViewSet

List, Retrieve, Update, Create/Register Organizations.

create(request, *args, **kwargs)

Create and cache organization

destroy(request, *args, **kwargs)

Clear cache and destroy organization

filter_backends = (<class 'onadata.libs.filters.OrganizationPermissionFilter'>, <class 'onadata.libs.filters.OrganizationsSharedWithUserFilter'>)
lookup_field = 'user'
members(request, *args, **kwargs)

Return organization members.

permission_classes = [<class 'onadata.apps.api.permissions.OrganizationProfilePermissions'>]
queryset
retrieve(request, *args, **kwargs)

Get organization from cache or db

serializer_class

alias of OrganizationSerializer

update(request, *args, **kwargs)

Update org in cache and db

onadata.apps.api.viewsets.organization_profile_viewset.serializer_from_settings()

Return the OrganizationSerializer either from settings or the default.

onadata.apps.api.viewsets.osm_viewset module

The osm API endpoint.

class onadata.apps.api.viewsets.osm_viewset.OsmViewSet(**kwargs)

Bases: AuthenticateHeaderMixin, CacheControlMixin, ETagsMixin, DefaultBaseViewset, ReadOnlyModelViewSet

This endpoint provides public access to OSM submitted data in OSM format. No authentication is required. Where:

  • pk - the form unique identifier

  • dataid - submission data unique identifier

  • owner - username of the owner(user/organization) of the data point

## GET JSON List of data end points

Lists the data endpoints accessible to requesting user, for anonymous access a list of public data endpoints is returned.

<pre class=”prettyprint”> <b>GET</b> /api/v1/osm </pre>

> Example > > curl -X GET https://ona.io/api/v1/osm

## OSM

The .osm file format concatenates all the files for a form or individual

submission. When the .json endpoint is accessed, the individual osm files are listed on the _attachments key.

### OSM endpoint for all osm files uploaded to a form concatenated.

<pre class=”prettyprint”> <b>GET</b> /api/v1/osm/<code>{pk}</code>.osm </pre>

> Example > > curl -X GET https://ona.io/api/v1/osm/28058.osm

### OSM endpoint with all osm files for a specific submission concatenated.

<pre class=”prettyprint”> <b>GET</b> /api/v1/osm/<code>{pk}</code>/<code>{data_id}</code>.osm </pre>

> Example > > curl -X GET https://ona.io/api/v1/osm/28058/20.osm

extra_lookup_fields = None
filter_queryset(queryset)

Filters the queryset using the pk when used.

get_object()

Returns the Instance object using the pk and dataid lookup values.

get_serializer_class()

Returns the OSMSiteMapSerializer class when list API is invoked.

list(request, *args, **kwargs)

Returns a list of URLs to the individual XForm OSM data.

lookup_field = 'pk'
lookup_fields = ('pk', 'dataid')
permission_classes = (<class 'rest_framework.permissions.AllowAny'>,)
public_data_endpoint = 'public'
queryset
renderer_classes = [<class 'onadata.libs.renderers.renderers.OSMRenderer'>, <class 'rest_framework.renderers.JSONRenderer'>]
retrieve(request, *args, **kwargs)

Returns a single Instance JSON object API response

serializer_class

alias of OSMSerializer

onadata.apps.api.viewsets.project_viewset module

The /projects API endpoint implementation.

class onadata.apps.api.viewsets.project_viewset.ProjectViewSet(**kwargs)

Bases: AuthenticateHeaderMixin, CacheControlMixin, ETagsMixin, LabelsMixin, ProfilerMixin, DefaultBaseViewset, ModelViewSet

List, Retrieve, Update, Create Project and Project Forms.

destroy(request, *args, **kwargs)

Soft deletes a project

extra_lookup_fields = None
filter_backends = (<class 'onadata.libs.filters.AnonUserProjectFilter'>, <class 'onadata.libs.filters.ProjectOwnerFilter'>, <class 'onadata.libs.filters.TagFilter'>)
forms(request, **kwargs)

Add a form to a project or list forms for the project.

The request key xls_file holds the XLSForm file object.

get_queryset()

Use ‘prepared’ prefetched queryset for GET requests.

get_serializer_class()

Return BaseProjectSerializer class when listing projects.

invitations(request, *args, **kwargs)

List, Create. Update project invitations

list(request, *args, **kwargs)

Returns a list of projects

lookup_field = 'pk'
pagination_class

alias of StandardPageNumberPagination

permission_classes = [<class 'onadata.apps.api.permissions.ProjectPermissions'>]
queryset
resend_invitation(request, *args, **kwargs)

Resend a project invitation object

retrieve(request, *args, **kwargs)

Retrieve single project

revoke_invitation(request, *args, **kwargs)

Revoke a project invitation object

serializer_class

alias of ProjectSerializer

share(request, *args, **kwargs)

Allow sharing of a project to a user.

star(request, *args, **kwargs)

Allows to add a user that stars a project.

update(request, *args, **kwargs)

Updates project properties and set’s cache with the updated records.

onadata.apps.api.viewsets.stats_viewset module

The /api/v1/stats API endpoint implementaion.

class onadata.apps.api.viewsets.stats_viewset.StatsViewSet(**kwargs)

Bases: AuthenticateHeaderMixin, CacheControlMixin, ETagsMixin, AnonymousUserPublicFormsMixin, DefaultBaseViewset, ReadOnlyModelViewSet

The /api/v1/stats API endpoint implementaion.

filter_backends = (<class 'onadata.libs.filters.AnonDjangoObjectPermissionFilter'>,)
get_serializer_class()

Return the class to use for the serializer. Defaults to using self.serializer_class.

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

(Eg. admins get full serialization, others get basic serialization)

lookup_field = 'pk'
permission_classes = [<class 'onadata.apps.api.permissions.XFormPermissions'>]
queryset
serializer_class

alias of StatsSerializer

onadata.apps.api.viewsets.submission_review_viewset module

Submission Review Viewset Module

class onadata.apps.api.viewsets.submission_review_viewset.SubmissionReviewViewSet(**kwargs)

Bases: AuthenticateHeaderMixin, CacheControlMixin, ETagsMixin, BulkCreateMixin, DefaultBaseViewset, ModelViewSet

Submission Review ViewSet class

create(request, *args, **kwargs)

Custom create method. Handle bulk create

destroy(request, *args, **kwargs)

Custom destroy method

filter_backends = (<class 'django_filters.rest_framework.backends.DjangoFilterBackend'>,)
filterset_fields = ('instance', 'created_by', 'status')
permission_classes = [<class 'onadata.apps.api.permissions.SubmissionReviewPermissions'>]
queryset
serializer_class

alias of SubmissionReviewSerializer

onadata.apps.api.viewsets.submissionstats_viewset module

The /api/v1/stats/submissions API endpoint implementation.

class onadata.apps.api.viewsets.submissionstats_viewset.SubmissionStatsViewSet(**kwargs)

Bases: AnonymousUserPublicFormsMixin, AuthenticateHeaderMixin, CacheControlMixin, ETagsMixin, DefaultBaseViewset, ReadOnlyModelViewSet

Provides submissions counts grouped by a specified field. It accepts query parameters group and name. Default result is grouped by _submission_time, hence you get submission counts per day. If a date field is used as the group, the result will be grouped by day.

  • group - field to group submission counts by

  • name - name to be applied to the group on results

Example:

GET /api/v1/stats/submissions/1? group=_submission_time&name=day_of_submission

Response:

[
    {
        "count": 8,
        "day_of_submission": "2013-11-15",
    },
    {
        "count": 99,
        "day_of_submission": "2013-11-16",
    },
    {
        "count": 133,
        "day_of_submission": "2013-11-17",
    },
    {
        "count": 162,
        "day_of_submission": "2013-11-18",
    },
    {
        "count": 102,
        "day_of_submission": "2013-11-19",
    }
]
filter_backends = (<class 'onadata.libs.filters.AnonDjangoObjectPermissionFilter'>,)
get_serializer_class()

Return the class to use for the serializer. Defaults to using self.serializer_class.

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

(Eg. admins get full serialization, others get basic serialization)

lookup_field = 'pk'
permission_classes = [<class 'onadata.apps.api.permissions.XFormPermissions'>]
queryset
serializer_class

alias of SubmissionStatsSerializer

onadata.apps.api.viewsets.team_viewset module

The /teams API endpoint implementation.

class onadata.apps.api.viewsets.team_viewset.TeamViewSet(**kwargs)

Bases: AuthenticateHeaderMixin, CacheControlMixin, ETagsMixin, DefaultBaseViewset, ModelViewSet

This endpoint allows you to create, update and view team information.

extra_lookup_fields = None
filter_backends = (<class 'rest_framework_guardian.filters.ObjectPermissionsFilter'>, <class 'onadata.libs.filters.TeamOrgFilter'>)
lookup_field = 'pk'
members(request, *args, **kwargs)

Returns members of an organization.

permission_classes = [<class 'rest_framework.permissions.DjangoObjectPermissions'>]
queryset
serializer_class

alias of TeamSerializer

share(request, *args, **kwargs)

Performs sharing a team project operations.

onadata.apps.api.viewsets.user_profile_viewset module

UserProfileViewSet module.

class onadata.apps.api.viewsets.user_profile_viewset.UserProfileViewSet(**kwargs)

Bases: AuthenticateHeaderMixin, CacheControlMixin, ETagsMixin, ObjectLookupMixin, DefaultBaseViewset, ModelViewSet

List, Retrieve, Update, Create/Register users.

change_password(request, *args, **kwargs)

Change user’s password.

create(request, *args, **kwargs)

Create and cache user profile

filter_backends = (<class 'onadata.libs.filters.UserProfileFilter'>, <class 'rest_framework.filters.OrderingFilter'>)
get_object(queryset=None)

Lookup user profile by pk or username

lookup_field = 'user'
monthly_submissions(request, *args, **kwargs)

Get the total number of submissions for a user

ordering = ('user__username',)
partial_update(request, *args, **kwargs)

Allows for partial update of the user profile data.

permission_classes = [<class 'onadata.apps.api.permissions.UserProfilePermissions'>]
queryset
retrieve(request, *args, **kwargs)

Get user profile from cache or db

send_verification_email(request, *args, **kwargs)

Sends verification email on user profile registration.

serializer_class

alias of UserProfileSerializer

update(request, *args, **kwargs)

Update user in cache and db

verify_email(request, *args, **kwargs)

Accpet’s email verification token and marks the profile as verified.

onadata.apps.api.viewsets.user_profile_viewset.change_password_attempts(request)

Track number of login attempts made by user within a specified amount of time

onadata.apps.api.viewsets.user_profile_viewset.check_if_key_exists(a_key, expected_dict)

Return True or False if a_key exists in the expected_dict dictionary.

onadata.apps.api.viewsets.user_profile_viewset.check_user_lockout(request)

Returns the error object with lockout error message.

onadata.apps.api.viewsets.user_profile_viewset.replace_key_value(lookup, new_value, expected_dict)

Replaces the value matching the key ‘lookup’ in the ‘expected_dict’ with the new value ‘new_value’.

onadata.apps.api.viewsets.user_profile_viewset.serializer_from_settings()

Return a serilizer class configured in settings.PROFILE_SERIALIZER or default to UserProfileSerializer.

onadata.apps.api.viewsets.user_profile_viewset.set_is_email_verified(profile, is_email_verified)

Sets is_email_verified value in the profile’s metadata object.

onadata.apps.api.viewsets.user_viewset module

Users /users API endpoint.

class onadata.apps.api.viewsets.user_viewset.UserViewSet(**kwargs)

Bases: AuthenticateHeaderMixin, DefaultBaseViewset, CacheControlMixin, ETagsMixin, ReadOnlyModelViewSet

This endpoint allows you to list and retrieve user’s first and last names.

filter_backends = (<class 'rest_framework.filters.SearchFilter'>, <class 'onadata.libs.filters.UserNoOrganizationsFilter'>)
get_object()

Lookup a username by pk else use lookup_field

lookup_field = 'username'
permission_classes = [<class 'onadata.apps.api.permissions.UserViewSetPermissions'>]
queryset
search_fields = ('=email',)
serializer_class

alias of UserSerializer

onadata.apps.api.viewsets.widget_viewset module

Expose and persist charts and corresponding data.

class onadata.apps.api.viewsets.widget_viewset.WidgetViewSet(**kwargs)

Bases: AuthenticateHeaderMixin, CacheControlMixin, ETagsMixin, DefaultBaseViewset, ModelViewSet

Expose and persist charts and corresponding data.

filter_backends = (<class 'onadata.libs.filters.WidgetFilter'>,)
filter_queryset(queryset)

Given a queryset, filter it with whichever filter backend is in use.

You are unlikely to want to override this method, although you may need to call it either from a list view, or from a custom get_object method if you want to apply the configured filtering backend to the default queryset.

get_object(queryset=None)

Returns the object the view is displaying.

You may want to override this if you need to provide non-standard queryset lookups. Eg if objects are referenced using multiple keyword arguments in the url conf.

list(request, *args, **kwargs)
lookup_field = 'pk'
permission_classes = [<class 'onadata.apps.api.permissions.WidgetViewSetPermissions'>]
queryset
serializer_class

alias of WidgetSerializer

onadata.apps.api.viewsets.xform_list_viewset module

OpenRosa Form List API - https://docs.getodk.org/openrosa-form-list/

class onadata.apps.api.viewsets.xform_list_viewset.PreviewXFormListViewSet(**kwargs)

Bases: XFormListViewSet

OpenRosa Form List API - for preview purposes only

filter_backends = (<class 'onadata.libs.filters.AnonDjangoObjectPermissionFilter'>,)
permission_classes = (<class 'rest_framework.permissions.AllowAny'>,)
class onadata.apps.api.viewsets.xform_list_viewset.XFormListViewSet(**kwargs)

Bases: ETagsMixin, DefaultBaseViewset, ReadOnlyModelViewSet

OpenRosa Form List API - https://docs.getodk.org/openrosa-form-list/

authentication_classes = (<class 'onadata.libs.authentication.DigestAuthentication'>, <class 'onadata.libs.authentication.EnketoTokenAuthentication'>, <class 'rest_framework.authentication.TokenAuthentication'>)
content_negotiation_class

alias of MediaFileContentNegotiation

filter_backends = (<class 'onadata.libs.filters.XFormListObjectPermissionFilter'>, <class 'onadata.libs.filters.XFormListXFormPKFilter'>, <class 'django_filters.rest_framework.backends.DjangoFilterBackend'>)
filter_queryset(queryset)

Given a queryset, filter it with whichever filter backend is in use.

You are unlikely to want to override this method, although you may need to call it either from a list view, or from a custom get_object method if you want to apply the configured filtering backend to the default queryset.

filterset_class

alias of FormIDFilter

get_object()

Returns the object the view is displaying.

You may want to override this if you need to provide non-standard queryset lookups. Eg if objects are referenced using multiple keyword arguments in the url conf.

get_serializer(*args, **kwargs)

Return the serializer instance that should be used for validating and deserializing input, and for serializing output.

get_serializer_class()

Return the class to use for the serializer

list(request, *args, **kwargs)
manifest(request, *args, **kwargs)

A manifest defining additional supporting objects.

media(request, *args, **kwargs)

Returns the media file contents.

permission_classes = (<class 'rest_framework.permissions.AllowAny'>,)
queryset
renderer_classes = (<class 'onadata.libs.renderers.renderers.XFormListRenderer'>,)
retrieve(request, *args, **kwargs)
serializer_class

alias of XFormListSerializer

template_name = 'api/xformsList.xml'
throttle_scope = 'xformlist'

onadata.apps.api.viewsets.xform_submission_viewset module

XFormSubmissionViewSet module

class onadata.apps.api.viewsets.xform_submission_viewset.FLOIPParser

Bases: JSONParser

Flow Results JSON parser.

media_type = 'application/vnd.org.flowinterop.results+json'
renderer_classes

alias of FLOIPRenderer

class onadata.apps.api.viewsets.xform_submission_viewset.XFormSubmissionViewSet(**kwargs)

Bases: AuthenticateHeaderMixin, OpenRosaHeadersMixin, CreateModelMixin, DefaultBaseViewset, GenericViewSet

XFormSubmissionViewSet class

authentication_classes = (<class 'onadata.libs.authentication.DigestAuthentication'>, <class 'rest_framework.authentication.BasicAuthentication'>, <class 'rest_framework.authentication.TokenAuthentication'>, <class 'onadata.libs.authentication.EnketoTokenAuthentication'>)
create(request, *args, **kwargs)
filter_backends = (<class 'onadata.libs.filters.AnonDjangoObjectPermissionFilter'>,)
get_serializer(*args, **kwargs)

Pass many=True flag if data is a list.

get_serializer_class()

Returns the serializer class to be used based on content_type.

handle_exception(exc)

Handles exceptions thrown by handler method and returns appropriate error response.

model

alias of Instance

parser_classes = (<class 'onadata.apps.api.viewsets.xform_submission_viewset.FLOIPParser'>, <class 'rest_framework.parsers.JSONParser'>, <class 'rest_framework.parsers.FormParser'>, <class 'rest_framework.parsers.MultiPartParser'>)
permission_classes = (<class 'rest_framework.permissions.AllowAny'>, <class 'onadata.apps.api.permissions.IsAuthenticatedSubmission'>)
renderer_classes = (<class 'onadata.libs.renderers.renderers.TemplateXMLRenderer'>, <class 'rest_framework.renderers.JSONRenderer'>, <class 'rest_framework.renderers.BrowsableAPIRenderer'>, <class 'onadata.libs.renderers.renderers.FLOIPRenderer'>)
serializer_class

alias of SubmissionSerializer

template_name = 'submission.xml'
throttle_scope = 'submission'

onadata.apps.api.viewsets.xform_viewset module

The /forms API endpoint.

class onadata.apps.api.viewsets.xform_viewset.XFormViewSet(**kwargs)

Bases: AnonymousUserPublicFormsMixin, CacheControlMixin, AuthenticateHeaderMixin, ETagsMixin, LabelsMixin, DefaultBaseViewset, ModelViewSet

Publish XLSForms, List, Retrieve Published Forms.

clone(request, *args, **kwargs)

Clone/duplicate an existing form.

create(request, *args, **kwargs)

Support XLSForm publishing endpoint POST /api/v1/forms.

create_async(request, *args, **kwargs)

Temporary Endpoint for Async form creation

csv_import(request, *args, **kwargs)

Endpoint for CSV data imports Calls onadata.libs.utils.csv_import.submit_csv() for POST requests passing the request.FILES.get(‘csv_file’) upload for import and :py:func:onadata.libs.utils.csv_import.get_async_csv_submission_status for GET requests passing job_uuid query param for job progress polling

data_import(request, *args, **kwargs)

Endpoint for CSV and XLS data imports Calls onadata.libs.utils.csv_import.submit_csv() for POST requests passing the request.FILES.get(‘csv_file’) upload for import and :py:func:onadata.libs.utils.csv_import.get_async_csv_submission_status for GET requests passing job_uuid query param for job progress polling and onadata.libs.utils.csv_import.submission_xls_to_csv() for POST request passing the request.FILES.get(‘xls_file’) upload for import if xls_file is provided instead of csv_file

delete_async(request, *args, **kwargs)

Delete asynchronous endpoint /api/v1/forms/{pk}/delete_async.

destroy(request, *args, **kwargs)

Soft deletes a form - DELETE /api/v1/forms/{pk}

enketo(request, **kwargs)

Expose enketo urls.

export_async(request, *args, **kwargs)

Returns the status of an async export.

extra_lookup_fields = None
filter_backends = (<class 'onadata.libs.filters.EnketoAnonDjangoObjectPermissionFilter'>, <class 'onadata.libs.filters.TagFilter'>, <class 'onadata.libs.filters.XFormOwnerFilter'>, <class 'django_filters.rest_framework.backends.DjangoFilterBackend'>)
filterset_fields = ('instances_with_osm',)
form(request, **kwargs)

Returns the XLSForm in any of JSON, XML, XLS(X), CSV formats.

get_serializer_class()

Return the class to use for the serializer. Defaults to using self.serializer_class.

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

(Eg. admins get full serialization, others get basic serialization)

list(request, *args, **kwargs)

List forms API endpoint GET /api/v1/forms.

login(request, **kwargs)

Authenticate and redirect to URL in return query parameter.

lookup_field = 'pk'
pagination_class

alias of StandardPageNumberPagination

partial_update(request, *args, **kwargs)

Partial update of a form’s properties.

permission_classes = [<class 'onadata.apps.api.permissions.XFormPermissions'>]
public_forms_endpoint = 'public'
queryset
renderer_classes = [<class 'rest_framework.renderers.JSONRenderer'>, <class 'rest_framework_jsonp.renderers.JSONPRenderer'>, <class 'rest_framework_csv.renderers.CSVRenderer'>, <class 'onadata.libs.renderers.renderers.XLSRenderer'>, <class 'onadata.libs.renderers.renderers.XLSXRenderer'>, <class 'onadata.libs.renderers.renderers.CSVRenderer'>, <class 'onadata.libs.renderers.renderers.CSVZIPRenderer'>, <class 'onadata.libs.renderers.renderers.SAVZIPRenderer'>, <class 'onadata.libs.renderers.renderers.SurveyRenderer'>, <class 'onadata.libs.renderers.renderers.OSMExportRenderer'>, <class 'onadata.libs.renderers.renderers.ZipRenderer'>, <class 'onadata.libs.renderers.renderers.GoogleSheetsRenderer'>]
retrieve(request, *args, **kwargs)

Returns a forms properties.

serializer_class

alias of XFormSerializer

share(request, *args, **kwargs)

Perform form sharing.

survey_preview(request, **kwargs)

Handle survey preview XLSForms.

updatable_fields = {'description', 'downloadable', 'require_auth', 'shared', 'shared_data', 'title'}
versions(request, *args, **kwargs)

Returns all form versions.

onadata.apps.api.viewsets.xform_viewset.get_survey_dict(csv_name)

Returns the a CSV XLSForm file into a python object.

onadata.apps.api.viewsets.xform_viewset.get_survey_xml(csv_name)

Creates and returns the XForm XML from a CSV XLSform.

onadata.apps.api.viewsets.xform_viewset.parse_webform_return_url(return_url, request)

Given a webform url and request containing authentication information extract authentication data encoded in the url and validate using either this data or data in the request. Construct a proper return URL, which has stripped the authentication data, to return the user.

onadata.apps.api.viewsets.xform_viewset.result_has_error(result)

Returns True if the result is a dict and has a type.

onadata.apps.api.viewsets.xform_viewset.upload_to_survey_draft(filename, username)

Return the filename in the username survey-drafts directory.

onadata.apps.api.viewsets.xform_viewset.value_for_type(form, field, value)

Returns a boolean value for the field of type BooleanField otherwise returns the same value back.

Module contents