onadata.libs package¶
Subpackages¶
- onadata.libs.data package
- onadata.libs.mixins package
- Submodules
- onadata.libs.mixins.anonymous_user_mixin module
- onadata.libs.mixins.anonymous_user_public_forms_mixin module
- onadata.libs.mixins.authenticate_header_mixin module
- onadata.libs.mixins.bulk_create_mixin module
- onadata.libs.mixins.cache_control_mixin module
- onadata.libs.mixins.etags_mixin module
- onadata.libs.mixins.labels_mixin module
- onadata.libs.mixins.last_modified_mixin module
- onadata.libs.mixins.multi_lookup_mixin module
- onadata.libs.mixins.object_lookup_mixin module
- onadata.libs.mixins.openrosa_headers_mixin module
- onadata.libs.mixins.profiler_mixin module
- onadata.libs.mixins.xform_id_string_lookup module
- Module contents
- onadata.libs.models package
- Submodules
- onadata.libs.models.base_model module
- onadata.libs.models.clone_xform module
- onadata.libs.models.share_project module
- onadata.libs.models.share_team_project module
- onadata.libs.models.share_xform module
- onadata.libs.models.signals module
- onadata.libs.models.sorting module
- onadata.libs.models.textit_service module
- Module contents
- onadata.libs.profiling package
- onadata.libs.renderers package
- Submodules
- onadata.libs.renderers.renderers module
CSVRendererCSVZIPRendererDebugToolbarRendererDecimalEncoderDecimalJSONRendererFLOIPRendererGeoJsonRendererGoogleSheetsRendererInstanceXMLRendererKMLRendererMediaFileContentNegotiationMediaFileRendererOSMExportRendererOSMRendererSAVZIPRendererStaticXMLRendererStreamRendererMixinSurveyRendererTemplateXMLRendererXFormListRendererXFormManifestRendererXLSRendererXLSXRendererZipRendererfloip_list()floip_rows_list()pairing()
- Module contents
- onadata.libs.serializers package
- Subpackages
- onadata.libs.serializers.fields package
- Submodules
- onadata.libs.serializers.fields.hyperlinked_multi_identity_field module
- onadata.libs.serializers.fields.hyperlinked_multi_related_field module
- onadata.libs.serializers.fields.instance_related_field module
- onadata.libs.serializers.fields.json_field module
- onadata.libs.serializers.fields.organization_field module
- onadata.libs.serializers.fields.project_field module
- onadata.libs.serializers.fields.project_related_field module
- onadata.libs.serializers.fields.team_field module
- onadata.libs.serializers.fields.utils module
- onadata.libs.serializers.fields.xform_field module
- onadata.libs.serializers.fields.xform_related_field module
- Module contents
- onadata.libs.serializers.fields package
- Submodules
- onadata.libs.serializers.attachment_serializer module
- onadata.libs.serializers.chart_serializer module
- onadata.libs.serializers.clone_xform_serializer module
- onadata.libs.serializers.data_serializer module
BaseRapidProSubmissionSerializerDataInstanceSerializerDataInstanceXMLSerializerDataSerializerFLOIPListSerializerFLOIPSubmissionSerializerInstanceHistorySerializerJSONSubmissionSerializerJsonDataSerializerOSMSerializerOSMSiteMapSerializerRapidProJSONSubmissionSerializerRapidProSubmissionSerializerSubmissionSerializerSubmissionSuccessMixinTableauDataSerializercreate_submission()get_request_and_username()
- onadata.libs.serializers.dataview_serializer module
DataViewMinimalSerializerDataViewSerializerDataViewSerializer.MetaDataViewSerializer.create()DataViewSerializer.get_count()DataViewSerializer.get_has_hxl_support()DataViewSerializer.get_instances_with_geopoints()DataViewSerializer.get_last_submission_time()DataViewSerializer.to_representation()DataViewSerializer.update()DataViewSerializer.validate()DataViewSerializer.validate_columns()DataViewSerializer.validate_query()DataViewSerializer.validate_xform()
match_columns()validate_date()validate_datetime()
- onadata.libs.serializers.entity_serializer module
- onadata.libs.serializers.export_serializer module
- onadata.libs.serializers.floip_serializer module
- onadata.libs.serializers.geojson_serializer module
- onadata.libs.serializers.merged_xform_serializer module
- onadata.libs.serializers.metadata_serializer module
- onadata.libs.serializers.monthly_submissions_serializer module
- onadata.libs.serializers.note_serializer module
- onadata.libs.serializers.open_data_serializer module
- onadata.libs.serializers.organization_member_serializer module
- onadata.libs.serializers.organization_serializer module
- onadata.libs.serializers.project_invitation_serializer module
- onadata.libs.serializers.project_serializer module
BaseProjectSerializerBaseProjectXFormSerializerProjectSerializerProjectSerializer.MetaProjectSerializer.create()ProjectSerializer.get_data_views()ProjectSerializer.get_forms()ProjectSerializer.get_last_submission_date()ProjectSerializer.get_num_datasets()ProjectSerializer.get_starred()ProjectSerializer.get_teams()ProjectSerializer.get_users()ProjectSerializer.update()ProjectSerializer.validate()ProjectSerializer.validate_metadata()ProjectSerializer.validate_public()
ProjectXFormSerializerPublicProjectFieldsMixincan_add_project_to_profile()get_last_submission_date()get_num_datasets()get_project_xforms()get_team_permissions()get_teams()get_users()is_starred()set_owners_permission()
- onadata.libs.serializers.restservices_serializer module
- onadata.libs.serializers.share_project_serializer module
- onadata.libs.serializers.share_team_project_serializer module
- onadata.libs.serializers.share_xform_serializer module
- onadata.libs.serializers.stats_serializer module
- onadata.libs.serializers.submission_review_serializer module
- onadata.libs.serializers.tag_list_serializer module
- onadata.libs.serializers.team_serializer module
- onadata.libs.serializers.textit_serializer module
- onadata.libs.serializers.user_profile_serializer module
UserProfileSerializerUserProfileSerializer.MetaUserProfileSerializer.create()UserProfileSerializer.get_is_org()UserProfileSerializer.to_representation()UserProfileSerializer.update()UserProfileSerializer.validate()UserProfileSerializer.validate_email()UserProfileSerializer.validate_twitter()UserProfileSerializer.validate_username()
UserProfileWithTokenSerializerget_audit_values()send_profile_updated_message()
- onadata.libs.serializers.user_serializer module
- onadata.libs.serializers.widget_serializer module
- onadata.libs.serializers.xform_serializer module
MultiLookupIdentityFieldXFormBaseSerializerXFormCreateSerializerXFormEntityListsMixinXFormListSerializerXFormManifestSerializerXFormMixinXFormMixin.get_data_views()XFormMixin.get_enketo_preview_url()XFormMixin.get_enketo_single_submit_url()XFormMixin.get_enketo_url()XFormMixin.get_last_submission_time()XFormMixin.get_num_of_pending_decryption_submissions()XFormMixin.get_num_of_submissions()XFormMixin.get_users()XFormMixin.get_xls_available()
XFormSerializerXFormVersionListSerializeruser_to_username()
- Module contents
- Subpackages
- onadata.libs.test_utils package
- onadata.libs.tests package
- Subpackages
- onadata.libs.tests.data package
- onadata.libs.tests.models package
- onadata.libs.tests.serializers package
- Submodules
- onadata.libs.tests.serializers.test_attachment_serializer module
- onadata.libs.tests.serializers.test_data_serializer module
- onadata.libs.tests.serializers.test_dataview_serializer module
- onadata.libs.tests.serializers.test_export_serializer module
- onadata.libs.tests.serializers.test_geojson_serializer module
- onadata.libs.tests.serializers.test_merged_xform_serializer module
- onadata.libs.tests.serializers.test_metadata_serializer module
- onadata.libs.tests.serializers.test_organization_serializer module
- onadata.libs.tests.serializers.test_project_serializer module
- onadata.libs.tests.serializers.test_share_project_serializer module
- onadata.libs.tests.serializers.test_submission_review_serializer module
- onadata.libs.tests.serializers.test_user_profile_serializer module
- onadata.libs.tests.serializers.test_xform_serializer module
- Module contents
- onadata.libs.tests.utils package
- Submodules
- onadata.libs.tests.utils.test_analytics module
- onadata.libs.tests.utils.test_api_export_tools module
- onadata.libs.tests.utils.test_async_status module
- onadata.libs.tests.utils.test_backup_tools module
- onadata.libs.tests.utils.test_cache_tools module
- onadata.libs.tests.utils.test_chart_tools module
- onadata.libs.tests.utils.test_csv_builder module
- onadata.libs.tests.utils.test_csv_import module
- onadata.libs.tests.utils.test_dict_tools module
- onadata.libs.tests.utils.test_email module
- onadata.libs.tests.utils.test_export_builder module
- onadata.libs.tests.utils.test_export_tools module
- onadata.libs.tests.utils.test_image_tools module
- onadata.libs.tests.utils.test_logger_tools module
- onadata.libs.tests.utils.test_middleware module
- onadata.libs.tests.utils.test_model_tools module
- onadata.libs.tests.utils.test_numeric module
- onadata.libs.tests.utils.test_osm module
- onadata.libs.tests.utils.test_password_validator module
- onadata.libs.tests.utils.test_project_utils module
- onadata.libs.tests.utils.test_qrcode module
- onadata.libs.tests.utils.test_sorting module
- onadata.libs.tests.utils.test_viewer_tools module
- Module contents
- Submodules
- onadata.libs.tests.test_authentication module
- onadata.libs.tests.test_pagination module
- onadata.libs.tests.test_permissions module
- onadata.libs.tests.test_renderers module
- onadata.libs.tests.test_throttle module
- Module contents
- Subpackages
- onadata.libs.utils package
- Submodules
- onadata.libs.utils.analytics module
- onadata.libs.utils.api_export_tools module
create_export_async()custom_response_handler()export_async_export_response()external_export_response()generate_google_web_flow()get_async_response()get_entity_list_export_response()get_existing_file_format()get_metadata_format()include_hxl_row()log_export()process_async_export()response_for_format()
- onadata.libs.utils.async_status module
- onadata.libs.utils.backup_tools module
- onadata.libs.utils.briefcase_client module
- onadata.libs.utils.cache_tools module
CacheLockErrorclear_project_owner_cache()get_bbox_cache_ttl()get_enketo_urls_cache_ttl()get_project_cache_key()get_project_cache_keys()get_shared_project_detail_cache_data()is_public_project_access()reset_project_cache()safe_cache_add()safe_cache_decr()safe_cache_delete()safe_cache_get()safe_cache_incr()safe_cache_set()safe_key()set_cache_with_lock()with_cache_lock()
- onadata.libs.utils.chart_tools module
build_chart_data()build_chart_data_for_field()build_chart_data_from_widget()calculate_ranges()find_choice_label()get_chart_data_for_field()get_choice_label()get_field_choices()get_field_from_field_name()get_field_from_field_xpath()get_field_label()resolve_field_xpath()utc_time_string_for_javascript()
- onadata.libs.utils.common_tags module
- onadata.libs.utils.common_tools module
FilenameMissingcmp_to_key()current_site_url()filename_from_disposition()get_abbreviated_xpath()get_boolean_value()get_choice_label()get_choice_label_value()get_response_content()get_uuid()get_value_or_attachment_uri()json_stream()merge_dicts()report_exception()retry()sanitize_for_export()str_to_bool()track_task_progress()
- onadata.libs.utils.country_field module
- onadata.libs.utils.csv_builder module
- onadata.libs.utils.csv_import module
dict2xmlsubmission()dict_merge()dict_pathkeys_to_nested_dicts()failed_import()flatten_split_select_multiples()get_async_csv_submission_status()get_columns_by_type()get_csv_delimiter()get_submission_meta_dict()submission_xls_to_csv()submit_csv()validate_column()validate_csv_file()validate_row()
- onadata.libs.utils.csv_reader module
- onadata.libs.utils.decorators module
- onadata.libs.utils.dict_tools module
- onadata.libs.utils.email module
- onadata.libs.utils.export_builder module
ExportBuilderExportBuilder.BINARY_SELECT_MULTIPLESExportBuilder.CONVERT_FUNCSExportBuilder.EXTRA_FIELDSExportBuilder.GROUP_DELIMITERExportBuilder.GROUP_DELIMITERSExportBuilder.GROUP_DELIMITER_DOTExportBuilder.GROUP_DELIMITER_SLASHExportBuilder.IGNORED_COLUMNSExportBuilder.INCLUDE_HXLExportBuilder.INCLUDE_IMAGESExportBuilder.INCLUDE_LABELSExportBuilder.INCLUDE_LABELS_ONLYExportBuilder.INCLUDE_REVIEWSExportBuilder.REPEAT_INDEX_TAGSExportBuilder.SHOW_CHOICE_LABELSExportBuilder.SPLIT_SELECT_MULTIPLESExportBuilder.TRUNCATE_GROUP_TITLEExportBuilder.TYPES_TO_CONVERTExportBuilder.VALUE_SELECT_MULTIPLESExportBuilder.XLS_SHEET_NAME_MAX_CHARSExportBuilder.convert_type()ExportBuilder.decode_mongo_encoded_fields()ExportBuilder.format_field_title()ExportBuilder.get_choice_label_from_dict()ExportBuilder.get_default_language()ExportBuilder.get_fields()ExportBuilder.get_valid_sheet_name()ExportBuilder.languageExportBuilder.pre_process_row()ExportBuilder.section_by_name()ExportBuilder.set_survey()ExportBuilder.split_gps_components()ExportBuilder.split_select_multiples()ExportBuilder.to_flat_csv_export()ExportBuilder.to_xlsx_export()ExportBuilder.to_zipped_csv()ExportBuilder.to_zipped_sav()ExportBuilder.url
decode_mongo_encoded_section_names()dict_to_joined_export()encode_if_str()get_data_dictionary_from_survey()is_all_numeric()string_to_date_with_xls_validation()
- onadata.libs.utils.export_tools module
check_pending_export()clean_keys_of_slashes()create_export_object()generate_attachments_zip_export()generate_entity_list_export()generate_external_export()generate_geojson_export()generate_kml_export()generate_osm_export()get_dataview_export_options()get_entity_list_dataset()get_export_options()get_latest_generic_export()get_or_create_export()get_or_create_export_object()get_osm_data_kwargs()get_query_params_from_metadata()get_repeat_index_tags()increment_index_in_filename()kml_export_data()md5hash()newest_export_for()parse_request_export_options()should_create_new_export()upload_template_for_external_export()write_temp_file_to_path()
- onadata.libs.utils.google module
- onadata.libs.utils.gravatar module
- onadata.libs.utils.image_tools module
- onadata.libs.utils.log module
- onadata.libs.utils.logger_tools module
BaseOpenRosaResponseOpenRosaDuplicateInstanceOpenRosaNotAuthenticatedOpenRosaResponseOpenRosaResponseBadRequestOpenRosaResponseConflictOpenRosaResponseForbiddenOpenRosaResponseNotAllowedOpenRosaResponseNotFoundPublishXFormcheck_edit_submission_permissions()check_encrypted_submission()check_submission_permissions()create_instance()create_xform_version()delete_xform_submissions()dict2xform()edit_instance()generate_aws_media_url()generate_content_disposition_header()generate_media_url_with_sas()get_storages_media_download_url()get_uuid_from_submission()get_xform_from_submission()inject_instanceid()is_valid_encrypted_submission()publish_form()remove_metadata_fields()response_with_mimetype_and_name()safe_create_instance()safe_edit_instance()safe_instance_op()save_attachments()save_submission()set_default_openrosa_headers()store_temp_file()update_attachment_tracking()
- onadata.libs.utils.middleware module
- onadata.libs.utils.model_tools module
- onadata.libs.utils.mongo module
- onadata.libs.utils.numeric module
- onadata.libs.utils.openid_connect_tools module
- onadata.libs.utils.organization_utils module
- onadata.libs.utils.osm module
- onadata.libs.utils.project_utils module
- onadata.libs.utils.qrcode module
- onadata.libs.utils.quick_converter module
- onadata.libs.utils.string module
- onadata.libs.utils.timing module
- onadata.libs.utils.user_auth module
HttpResponseNotAuthorizedadd_cors_headers()basic_http_auth()check_and_set_form_by_id()check_and_set_form_by_id_string()check_and_set_user()check_and_set_user_and_form()get_user_default_project()get_xform_and_perms()get_xform_users_with_perms()has_attachment_permission()has_edit_permission()has_permission()helper_auth_helper()http_auth_string()invalidate_and_regen_tokens()set_api_permissions_for_user()set_profile_data()
- onadata.libs.utils.validators module
- onadata.libs.utils.viewer_tools module
- Module contents
Submodules¶
onadata.libs.authentication module¶
Authentication classes.
- class onadata.libs.authentication.DigestAuthentication¶
Bases:
BaseAuthenticationDigest authentication
- authenticate(request)¶
Authenticate the request and return a two-tuple of (user, token).
- authenticate_header(request)¶
Return a string to be used as the value of the WWW-Authenticate header in a 401 Unauthenticated response, or None if the authentication scheme should return 403 Permission Denied responses.
- class onadata.libs.authentication.EnketoTokenAuthentication¶
Bases:
TokenAuthenticationEnketo Token Authentication via JWT shared domain cookie name.
- authenticate(request)¶
Authenticate the request and return a two-tuple of (user, token).
- model¶
alias of
Token
- class onadata.libs.authentication.LockoutBasicAuthentication¶
Bases:
BasicAuthenticationHTTP Basic authentication with failed-login lockout.
Stock
BasicAuthenticationreturns401indefinitely on wrong credentials, so basic auth on the API can be brute-forced at full speed. This subclass rejects requests from a locked-out IP + username before checking credentials, and records a failed attempt — locking out afterMAX_LOGIN_ATTEMPTS— whenever authentication fails.- authenticate(request)¶
Returns a User if a correct username and password have been supplied using HTTP Basic authentication. Otherwise returns None.
- class onadata.libs.authentication.MasterReplicaOAuth2Validator¶
Bases:
OAuth2ValidatorCustom OAuth2Validator class that takes into account replication lag between Master & Replica databases https://github.com/jazzband/django-oauth-toolkit/blob/ 3bde632d5722f1f85ffcd8277504955321f00fff/oauth2_provider/oauth2_validators.py#L49
- get_code_challenge_method(code, request)¶
Reject legacy stored grants when their effective policy enforces.
- introspect_token(token, token_type_hint, request, *args, **kwargs)¶
See oauthlib.oauth2.rfc6749.request_validator
- is_pkce_required(client_id, request)¶
Require PKCE for code grants when the effective policy enforces it.
- validate_bearer_token(token, scopes, request)¶
When users try to access resources, check that provided token is valid
- validate_response_type(client_id, response_type, client, request, *args, **kwargs)¶
Reject authorization requests that do not use PKCE S256.
OAuthLib defaults a missing challenge method to
plainafter this hook, so checking here also protects the authorization-response POST from a changed hidden form value.
- validate_silent_authorization(request)¶
See oauthlib.oauth2.rfc6749.request_validator
- validate_silent_login(request)¶
See oauthlib.oauth2.rfc6749.request_validator
- class onadata.libs.authentication.SSOHeaderAuthentication¶
Bases:
BaseAuthenticationSSO Cookie authentication. Authenticates a user using the SSO cookie or HTTP_SSO header.
- authenticate(request)¶
Authenticate the request and return a two-tuple of (user, token).
- class onadata.libs.authentication.TempTokenAuthentication¶
Bases:
TokenAuthenticationTempToken authentication using “Authorization: TempToken xxxx” header.
- authenticate(request)¶
Authenticate the request and return a two-tuple of (user, token).
- authenticate_credentials(key)¶
- authenticate_header(request)¶
Return a string to be used as the value of the WWW-Authenticate header in a 401 Unauthenticated response, or None if the authentication scheme should return 403 Permission Denied responses.
- class onadata.libs.authentication.TempTokenURLParameterAuthentication¶
Bases:
TempTokenAuthenticationTempToken URL via temp_token request parameter.
- authenticate(request)¶
Authenticate the request and return a two-tuple of (user, token).
- onadata.libs.authentication.add_login_attempt(ip_address, username)¶
Track a failed login attempt for an IP + username pair.
Increments the attempt counter and, once MAX_LOGIN_ATTEMPTS is reached, starts a lockout and sends the lockout email. Returns the number of attempts. Raises AuthenticationFailed when the attempt triggers a lockout.
- onadata.libs.authentication.assert_not_locked_out(ip_address, username)¶
Raise AuthenticationFailed if the IP + username pair is locked out.
Does nothing when either identifier is missing.
- onadata.libs.authentication.authenticate_media_request(request)¶
Identifies the user behind a media download on a plain Django view.
Media links are followed by clients such as ODK Briefcase that hold no session and authenticate with Digest or API token credentials instead, Digest only once they have been challenged for them.
Like the other OpenRosa/Briefcase endpoints (see LOCKOUT_EXCLUDED_PATHS), a rejected Digest request does not count towards failed-login lockout: a pull requests one link per attachment, and a rejection is not always a wrong password — a stale nonce or an out-of-order nonce count from interleaved downloads is rejected the same way.
Returns a
401challenge when the credentials are rejected, otherwise None withrequest.userset to the authenticated user, if any.
- onadata.libs.authentication.check_lockout(request) Tuple[str | None, str | None]¶
Check request user is not locked out on authentication.
Returns the username if not locked out, None if request path is in LOCKOUT_EXCLUDED_PATHS. Raises AuthenticationFailed on lockout.
- onadata.libs.authentication.expired(time_token_created)¶
Checks if the time between when time_token_created and current time is greater than the token expiry time.
- Params time_token_created:
The time the token we are checking was created.
- Returns:
Boolean True if not passed expired time, otherwise False.
- onadata.libs.authentication.get_api_token(cookie_jwt)¶
Get API Token from JSON Web Token
- onadata.libs.authentication.get_client_ip(request) str | None¶
Return the originating IP address of a HTTP request.
Trusts
X-Real-Ipahead ofREMOTE_ADDR, so a deployment MUST sit behind a reverse proxy that overwrites this header. Without that, a client can rotateX-Real-Ipto evade the IP-keyed login lockout.
- onadata.libs.authentication.get_lockout_username(username)¶
Return the canonical account username for a submitted identifier.
The login backend (
onadata.apps.main.backends) authenticates case-insensitively and accepts an email address in place of the username. Lockout state is keyed on the username, so the submitted identifier must be resolved to the account’s stored username; otherwisebob,BOBandbob@example.comwould each get a separate attempt counter from the same IP, defeating the lockout, andsend_lockout_email(which looks the user up by exact username) would fail to find the account. Falls back to the submitted value when it does not match any user so that brute-forcing a non-existent account is still throttled.
- onadata.libs.authentication.is_lockout_excluded_path(request) bool¶
Return True when the request path is exempt from lockout.
OpenRosa/Briefcase endpoints (see LOCKOUT_EXCLUDED_PATHS) are hit frequently by ODK clients, so they are not subject to failed-login lockout.
- onadata.libs.authentication.is_pkce_s256_enforced(application, at=None)¶
Return whether S256 is effective for an OAuth application.
This helper accepts unsaved applications so registration commands can verify the effective policy before making any database writes.
- onadata.libs.authentication.login_attempts(request)¶
Track number of login attempts made by a specific IP within a specified amount of time
- onadata.libs.authentication.media_auth_challenge()¶
Returns the
401Digest challenge that prompts for credentials.
- onadata.libs.authentication.retrieve_user_identification(request) Tuple[str | None, str | None]¶
Retrieve user information from a HTTP request.
- onadata.libs.authentication.send_lockout_email(username, ip_address)¶
Send locked out email
onadata.libs.baseviewset module¶
The DefaultBaseViewset class
onadata.libs.exceptions module¶
Custom Expecting classes.
- exception onadata.libs.exceptions.CSVImportError¶
Bases:
ExceptionRaised when importing entities fails.
- exception onadata.libs.exceptions.DecryptionError¶
Bases:
ExceptionRaised when XForm decryption fails.
- exception onadata.libs.exceptions.EncryptionError¶
Bases:
ExceptionRaised when XForm encryption fails.
- exception onadata.libs.exceptions.EnketoError(message=None)¶
Bases:
ExceptionEnketo specigic exceptions
- default_message = 'There was a problem with your submission or form. Please contact support.'¶
Bases:
ParseErrorRaise when request query has invalid date.
- exception onadata.libs.exceptions.J2XException¶
Bases:
ExceptionRaise for json-to-xls exceptions on external exports.
- exception onadata.libs.exceptions.NoRecordsFoundError¶
Bases:
ExceptionRaise for when no records are found.
- exception onadata.libs.exceptions.NoRecordsPermission¶
Bases:
ExceptionRaise when no permissions to access records.
- exception onadata.libs.exceptions.NotAllMediaReceivedError¶
Bases:
DecryptionErrorRaised when not all media files have been received for decryption.
Bases:
APIExceptionCustom service unavailable exception.
onadata.libs.filters module¶
Django rest_framework ViewSet filters.
- class onadata.libs.filters.ActiveProjectOrganizationFilter¶
Bases:
BaseFilterBackendLimit project querysets to active organizations.
- filter_queryset(request, queryset, view)¶
Return a filtered queryset.
- class onadata.libs.filters.ActiveXFormOrganizationFilter¶
Bases:
BaseFilterBackendLimit form querysets to active project organizations.
- filter_queryset(request, queryset, view)¶
Return a filtered queryset.
- class onadata.libs.filters.AnonDjangoObjectPermissionFilter¶
Bases:
ObjectPermissionsFilterAnonymous user permission filter class.
- filter_queryset(request, queryset, view)¶
Anonymous user has no object permissions, return queryset as it is.
- class onadata.libs.filters.AnonUserEntityListFilter¶
Bases:
ObjectPermissionsFilterLimits results to public EntityLists for anonymous users
- filter_queryset(request, queryset, view)¶
Return a filtered queryset.
- class onadata.libs.filters.AnonUserProjectFilter¶
Bases:
ObjectPermissionsFilterAnonymous user project filter.
- filter_queryset(request, queryset, view)¶
Anonymous user has no object permissions, return queryset as it is.
- owner_prefix = 'organization'¶
- class onadata.libs.filters.AttachmentFilter¶
Bases:
XFormPermissionFilterMixin,ObjectPermissionsFilterAttachment filter.
- filter_queryset(request, queryset, view)¶
Return a filtered queryset.
- class onadata.libs.filters.AttachmentTypeFilter¶
Bases:
BaseFilterBackendAttachment type filter using type query parameter.
- filter_queryset(request, queryset, view)¶
Return a filtered queryset.
- class onadata.libs.filters.DataAnonDjangoObjectPermissionFilter¶
Bases:
AnonDjangoObjectPermissionFilter- perm_format = '%(app_label)s.view_%(model_name)s_data'¶
- class onadata.libs.filters.DataFilter¶
Bases:
ObjectPermissionsFilterShared data filter.
- filter_queryset(request, queryset, view)¶
Filter by
XForm.shared_data = Truefor anonymous users.
- class onadata.libs.filters.EnketoAnonDjangoObjectPermissionFilter¶
Bases:
AnonDjangoObjectPermissionFilterSame as AnonDjangoObjectPermissionFilter but checks ‘report_xform’ permission when the view ‘enketo’ is accessed.
- filter_queryset(request, queryset, view)¶
Check report_xform permission when requesting for Enketo URL.
- class onadata.libs.filters.EntityListProjectFilter¶
Bases:
BaseFilterBackendLimits results to EntityLists under project query param
- filter_queryset(request, queryset, view)¶
Return a filtered queryset.
- class onadata.libs.filters.ExportFilter¶
Bases:
XFormPermissionFilterMixin,ObjectPermissionsFilterExportFilter class uses permissions on the related xform to filter Export querysets. Also filters submitted_by a specific user.
- filter_queryset(request, queryset, view)¶
Filter by xform permissions and submitted by user.
- class onadata.libs.filters.FormIDFilter(data=None, queryset=None, *, request=None, prefix=None)¶
Bases:
FilterSetformID filter using the XForm.id_string.
- base_filters = {'formID': <django_filters.filters.CharFilter object>}¶
- declared_filters = {'formID': <django_filters.filters.CharFilter object>}¶
- class onadata.libs.filters.InstanceFilter(data=None, queryset=None, *, request=None, prefix=None)¶
Bases:
FilterSetInstance FilterSet implemented using django-filter
- class Meta¶
Bases:
object- date_field_lookups = ['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']¶
- fields = {'date_created': ['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'], 'date_modified': ['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'], 'last_edited': ['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'], 'media_all_received': ['exact'], 'status': ['exact'], 'survey_type__slug': ['exact'], 'user__id': ['exact'], 'user__username': ['exact'], 'uuid': ['exact'], 'version': ['exact', 'gt', 'lt', 'gte', 'lte']}¶
- generic_field_lookups = ['exact', 'gt', 'lt', 'gte', 'lte']¶
- base_filters = {'date_created': <django_filters.filters.IsoDateTimeFilter object>, 'date_created__day': <django_filters.filters.NumberFilter object>, 'date_created__day__gt': <django_filters.filters.NumberFilter object>, 'date_created__day__gte': <django_filters.filters.NumberFilter object>, 'date_created__day__lt': <django_filters.filters.NumberFilter object>, 'date_created__day__lte': <django_filters.filters.NumberFilter object>, 'date_created__gt': <django_filters.filters.IsoDateTimeFilter object>, 'date_created__gte': <django_filters.filters.IsoDateTimeFilter object>, 'date_created__lt': <django_filters.filters.IsoDateTimeFilter object>, 'date_created__lte': <django_filters.filters.IsoDateTimeFilter object>, 'date_created__month': <django_filters.filters.NumberFilter object>, 'date_created__month__gt': <django_filters.filters.NumberFilter object>, 'date_created__month__gte': <django_filters.filters.NumberFilter object>, 'date_created__month__lt': <django_filters.filters.NumberFilter object>, 'date_created__month__lte': <django_filters.filters.NumberFilter object>, 'date_created__year': <django_filters.filters.NumberFilter object>, 'date_created__year__gt': <django_filters.filters.NumberFilter object>, 'date_created__year__gte': <django_filters.filters.NumberFilter object>, 'date_created__year__lt': <django_filters.filters.NumberFilter object>, 'date_created__year__lte': <django_filters.filters.NumberFilter object>, 'date_modified': <django_filters.filters.IsoDateTimeFilter object>, 'date_modified__day': <django_filters.filters.NumberFilter object>, 'date_modified__day__gt': <django_filters.filters.NumberFilter object>, 'date_modified__day__gte': <django_filters.filters.NumberFilter object>, 'date_modified__day__lt': <django_filters.filters.NumberFilter object>, 'date_modified__day__lte': <django_filters.filters.NumberFilter object>, 'date_modified__gt': <django_filters.filters.IsoDateTimeFilter object>, 'date_modified__gte': <django_filters.filters.IsoDateTimeFilter object>, 'date_modified__lt': <django_filters.filters.IsoDateTimeFilter object>, 'date_modified__lte': <django_filters.filters.IsoDateTimeFilter object>, 'date_modified__month': <django_filters.filters.NumberFilter object>, 'date_modified__month__gt': <django_filters.filters.NumberFilter object>, 'date_modified__month__gte': <django_filters.filters.NumberFilter object>, 'date_modified__month__lt': <django_filters.filters.NumberFilter object>, 'date_modified__month__lte': <django_filters.filters.NumberFilter object>, 'date_modified__year': <django_filters.filters.NumberFilter object>, 'date_modified__year__gt': <django_filters.filters.NumberFilter object>, 'date_modified__year__gte': <django_filters.filters.NumberFilter object>, 'date_modified__year__lt': <django_filters.filters.NumberFilter object>, 'date_modified__year__lte': <django_filters.filters.NumberFilter object>, 'last_edited': <django_filters.filters.IsoDateTimeFilter object>, 'last_edited__day': <django_filters.filters.NumberFilter object>, 'last_edited__day__gt': <django_filters.filters.NumberFilter object>, 'last_edited__day__gte': <django_filters.filters.NumberFilter object>, 'last_edited__day__lt': <django_filters.filters.NumberFilter object>, 'last_edited__day__lte': <django_filters.filters.NumberFilter object>, 'last_edited__gt': <django_filters.filters.IsoDateTimeFilter object>, 'last_edited__gte': <django_filters.filters.IsoDateTimeFilter object>, 'last_edited__lt': <django_filters.filters.IsoDateTimeFilter object>, 'last_edited__lte': <django_filters.filters.IsoDateTimeFilter object>, 'last_edited__month': <django_filters.filters.NumberFilter object>, 'last_edited__month__gt': <django_filters.filters.NumberFilter object>, 'last_edited__month__gte': <django_filters.filters.NumberFilter object>, 'last_edited__month__lt': <django_filters.filters.NumberFilter object>, 'last_edited__month__lte': <django_filters.filters.NumberFilter object>, 'last_edited__year': <django_filters.filters.NumberFilter object>, 'last_edited__year__gt': <django_filters.filters.NumberFilter object>, 'last_edited__year__gte': <django_filters.filters.NumberFilter object>, 'last_edited__year__lt': <django_filters.filters.NumberFilter object>, 'last_edited__year__lte': <django_filters.filters.NumberFilter object>, 'media_all_received': <django_filters.rest_framework.filters.BooleanFilter object>, 'status': <django_filters.filters.CharFilter object>, 'submitted_by__id': <django_filters.filters.ModelChoiceFilter object>, 'submitted_by__username': <django_filters.filters.ModelChoiceFilter object>, 'survey_type__slug': <django_filters.filters.CharFilter object>, 'user__id': <django_filters.filters.NumberFilter object>, 'user__username': <django_filters.filters.CharFilter object>, 'uuid': <django_filters.filters.CharFilter object>, 'version': <django_filters.filters.CharFilter object>, 'version__gt': <django_filters.filters.CharFilter object>, 'version__gte': <django_filters.filters.CharFilter object>, 'version__lt': <django_filters.filters.CharFilter object>, 'version__lte': <django_filters.filters.CharFilter object>}¶
- declared_filters = {'media_all_received': <django_filters.rest_framework.filters.BooleanFilter object>, 'submitted_by__id': <django_filters.filters.ModelChoiceFilter object>, 'submitted_by__username': <django_filters.filters.ModelChoiceFilter object>}¶
- class onadata.libs.filters.MetaDataFilter¶
Bases:
ProjectPermissionFilterMixin,InstancePermissionFilterMixin,XFormPermissionFilterMixin,ObjectPermissionsFilterMeta data filter.
- filter_queryset(request, queryset, view)¶
Return a filtered queryset.
- class onadata.libs.filters.NoteFilter¶
Bases:
BaseFilterBackendNotes filter by the query parameter
instance.- filter_queryset(request, queryset, view)¶
Notes filter by the query parameter
instance.
- class onadata.libs.filters.OrganizationPermissionFilter¶
Bases:
ObjectPermissionsFilterOrganization profiles filter
Based on the organization the profile is added to.
- filter_queryset(request, queryset, view)¶
Return a filtered queryset or all profiles if a getting a specific profile.
Bases:
BaseFilterBackendFilters by
shared_withquery parameter.This returns a queryset containing only organizations to which the passed user belongs.
- class onadata.libs.filters.ProjectFilterSet(data=None, queryset=None, *, request=None, prefix=None)¶
Bases:
FilterSetProject FilterSet; rejects unrecognized
sharedvalues with a 400.- base_filters = {'shared': <django_filters.filters.TypedChoiceFilter object>}¶
- declared_filters = {'shared': <django_filters.filters.TypedChoiceFilter object>}¶
- class onadata.libs.filters.ProjectOwnerFilter¶
Bases:
BaseFilterBackendProject owner filter.
- filter_queryset(request, queryset, view)¶
Project owner filter.
- owner_prefix = 'organization'¶
- class onadata.libs.filters.ProjectRoleFilter¶
Bases:
BaseFilterBackendProject role filter using the role query parameter.
- filter_queryset(request, queryset, view)¶
Filter by the requesting user’s role (from object permissions).
?role=editorreturns projects where the user holds that role or any higher role. Roles are derived from django-guardian object permissions: we require the requested role’s full Project permission set, and higher roles hold a superset of a lower role’s permissions, so this yields “that role and above”. Unknown role names are a 400.
- class onadata.libs.filters.ProjectStarredFilter¶
Bases:
BaseFilterBackendProject starred filter using the starred query parameter.
- filter_queryset(request, queryset, view)¶
Filter by the requesting user’s starred (favorited) projects.
- class onadata.libs.filters.PublicDatasetsFilter¶
Bases:
objectPublic data set filter where the share attribute is True
- filter_queryset(request, queryset, view)¶
Return a queryset of shared=True data if the user is anonymous.
- class onadata.libs.filters.RestServiceFilter¶
Bases:
XFormPermissionFilterMixin,ObjectPermissionsFilterRest service filter.
- filter_queryset(request, queryset, view)¶
Return a filtered queryset.
- class onadata.libs.filters.TagFilter¶
Bases:
BaseFilterBackendTag filter using the tags query parameter.
- filter_queryset(request, queryset, view)¶
Tag filter using the tags query parameter.
- class onadata.libs.filters.TeamOrgFilter¶
Bases:
BaseFilterBackendTeam organization filter using org query parameter
- filter_queryset(request, queryset, view)¶
Return a filtered queryset.
- class onadata.libs.filters.UserNoOrganizationsFilter¶
Bases:
BaseFilterBackendFilter by
orgsquery parameter.- filter_queryset(request, queryset, view)¶
Returns all users that are not organizations when orgs=false query parameter
- class onadata.libs.filters.UserProfileFilter¶
Bases:
BaseFilterBackendFilter by the
usersquery parameter.- filter_queryset(request, queryset, view)¶
Filter by the
usersquery parameter - returns a queryset of only the users in the users parameter when view.action == “list”
- class onadata.libs.filters.WidgetFilter¶
Bases:
XFormPermissionFilterMixin,ObjectPermissionsFilterFilter to return forms shared with user.
- filter_queryset(request, queryset, view)¶
Filter to return forms shared with user when
view.action == "list".
- class onadata.libs.filters.XFormListObjectPermissionFilter¶
Bases:
AnonDjangoObjectPermissionFilterXFormList permission filter with using [app].report_[model] form.
- perm_format = '%(app_label)s.report_%(model_name)s'¶
- class onadata.libs.filters.XFormListXFormPKFilter¶
Bases:
objectFilter forms via ‘xform_pk’ param.
- filter_queryset(request, queryset, view)¶
Returns an XForm queryset filtered by the 1xform_pk’ param.
onadata.libs.pagination module¶
Pagination classes.
- class onadata.libs.pagination.CountOverridablePageNumberPagination¶
Bases:
StandardPageNumberPaginationCount override PageNumberPagination
Allows overriding the count especially in the event it may be expensive request.
- django_paginator_class¶
alias of
CountOverridablePaginator
- paginate_queryset(queryset, request, view, count=None)¶
Paginate a queryset if required, either returning a page object, or None if pagination is not configured for this view.
- class onadata.libs.pagination.CountOverridablePaginator(object_list, per_page, orphans: int = 0, allow_empty_first_page: bool = True, count_override: int = None)¶
Bases:
PaginatorCount override Paginator
Allows overriding the count especially in the event it may be expensive request.
- count¶
- class onadata.libs.pagination.RawSQLQueryPageNumberPagination¶
Bases:
CountOverridablePageNumberPaginationPageNumberPagination class for raw SQL queries
- django_paginator_class¶
alias of
RawSQLQueryPaginator
- class onadata.libs.pagination.RawSQLQueryPaginator(object_list, per_page, orphans: int = 0, allow_empty_first_page: bool = True, count_override: int = None)¶
Bases:
CountOverridablePaginatorPaginator class for raw SQL queries
- page(number)¶
Return page
self.object_list is NOT sliced because self.object_list should have been paginated via OFFSET and LIMIT before creating a RawPaginator instance
- class onadata.libs.pagination.StandardPageNumberPagination¶
Bases:
PageNumberPaginationThe Standard PageNumberPagination class
Set’s the default
page_sizeto 1000 with a maximum page_size of 10,000 records per page.- generate_link_header()¶
Generates pagination headers for a HTTP response object
- get_first_page_link()¶
Returns the URL to the first page.
- get_last_page_link()¶
Returns the URL to the last page.
- get_paginated_response(data)¶
Override to remove the OrderedDict response and use headers
- max_page_size = 10000¶
- page_size = 1000¶
- page_size_query_param = 'page_size'¶
onadata.libs.permissions module¶
Permissions module.
- class onadata.libs.permissions.DataEntryMinorRole¶
Bases:
RoleUser can submit and has readonly access to data they submitted.
- class_to_permissions = {<class 'onadata.apps.api.models.organization_profile.OrganizationProfile'>: ['view_organizationprofile'], <class 'onadata.apps.logger.models.merged_xform.MergedXForm'>: ['view_mergedxform'], <class 'onadata.apps.logger.models.project.Project'>: ['report_project_xform', 'can_export_project_data', 'view_project', 'view_project_data'], <class 'onadata.apps.logger.models.xform.XForm'>: ['report_xform', 'can_export_xform_data', 'view_xform', 'view_xform_data']}¶
- name = 'dataentry-minor'¶
- class onadata.libs.permissions.DataEntryOnlyRole¶
Bases:
RoleData-Entry only Role class.
- class_to_permissions = {<class 'onadata.apps.api.models.organization_profile.OrganizationProfile'>: ['view_organizationprofile'], <class 'onadata.apps.logger.models.merged_xform.MergedXForm'>: ['view_mergedxform'], <class 'onadata.apps.logger.models.project.Project'>: ['report_project_xform', 'can_export_project_data', 'view_project', 'view_project_all', 'view_project_data'], <class 'onadata.apps.logger.models.xform.XForm'>: ['view_xform', 'report_xform']}¶
- name = 'dataentry-only'¶
- class onadata.libs.permissions.DataEntryRole¶
Bases:
RoleUser can submit data and has readonly permissions to all the data including data submitted by others.
- class_to_permissions = {<class 'onadata.apps.api.models.organization_profile.OrganizationProfile'>: ['view_organizationprofile'], <class 'onadata.apps.logger.models.merged_xform.MergedXForm'>: ['view_mergedxform'], <class 'onadata.apps.logger.models.project.Project'>: ['report_project_xform', 'can_export_project_data', 'view_project', 'view_project_all', 'view_project_data'], <class 'onadata.apps.logger.models.xform.XForm'>: ['report_xform', 'can_export_xform_data', 'view_xform', 'view_xform_all', 'view_xform_data']}¶
- name = 'dataentry'¶
- class onadata.libs.permissions.EditorMinorRole¶
Bases:
RoleUser can submit data, read and edit only the data they submitted.
- class_to_permissions = {<class 'onadata.apps.api.models.organization_profile.OrganizationProfile'>: ['view_organizationprofile'], <class 'onadata.apps.logger.models.merged_xform.MergedXForm'>: ['view_mergedxform'], <class 'onadata.apps.logger.models.project.Project'>: ['report_project_xform', 'change_project', 'can_export_project_data', 'view_project', 'view_project_data'], <class 'onadata.apps.logger.models.xform.XForm'>: ['report_xform', 'change_xform', 'delete_submission', 'can_export_xform_data', 'view_xform', 'view_xform_data']}¶
- name = 'editor-minor'¶
- class onadata.libs.permissions.EditorNoDownload¶
Bases:
RoleUser can submit data, read and edit only the data they submitted but will not be able to export data.
- class_to_permissions = {<class 'onadata.apps.api.models.organization_profile.OrganizationProfile'>: ['view_organizationprofile'], <class 'onadata.apps.logger.models.merged_xform.MergedXForm'>: ['view_mergedxform'], <class 'onadata.apps.logger.models.project.Project'>: ['report_project_xform', 'change_project', 'can_export_project_data', 'view_project', 'view_project_data'], <class 'onadata.apps.logger.models.xform.XForm'>: ['report_xform', 'change_xform', 'delete_submission', 'view_xform', 'view_xform_data']}¶
- name = 'editor-no-download'¶
- class onadata.libs.permissions.EditorRole¶
Bases:
RoleUser can submit, read and edit any submitted data.
- class_to_permissions = {<class 'onadata.apps.api.models.organization_profile.OrganizationProfile'>: ['view_organizationprofile'], <class 'onadata.apps.logger.models.merged_xform.MergedXForm'>: ['view_mergedxform'], <class 'onadata.apps.logger.models.project.Project'>: ['report_project_xform', 'change_project', 'can_export_project_data', 'view_project', 'view_project_all', 'view_project_data'], <class 'onadata.apps.logger.models.xform.XForm'>: ['report_xform', 'change_xform', 'delete_submission', 'can_export_xform_data', 'view_xform', 'view_xform_all', 'view_xform_data']}¶
- name = 'editor'¶
- class onadata.libs.permissions.ManagerRole¶
Bases:
RoleUser can add,delete,edit forms and data as well as control access to data, forms and projects.
- class_to_permissions = {<class 'onadata.apps.api.models.organization_profile.OrganizationProfile'>: ['can_add_project', 'can_add_xform', 'view_organizationprofile'], <class 'onadata.apps.logger.models.entity_list.EntityList'>: ['add_entitylist', 'view_entitylist', 'change_entitylist', 'delete_entitylist'], <class 'onadata.apps.logger.models.merged_xform.MergedXForm'>: ['view_mergedxform'], <class 'onadata.apps.logger.models.project.Project'>: ['add_project', 'add_project_xform', 'report_project_xform', 'change_project', 'can_export_project_data', 'view_project', 'view_project_all', 'view_project_data', 'add_project_entitylist'], <class 'onadata.apps.logger.models.xform.XForm'>: ['report_xform', 'add_xform', 'change_xform', 'delete_submission', 'delete_xform', 'can_export_xform_data', 'view_xform', 'view_xform_all', 'view_xform_data'], <class 'onadata.apps.main.models.user_profile.UserProfile'>: ['can_add_project', 'can_add_xform', 'view_profile']}¶
- name = 'manager'¶
- class onadata.libs.permissions.MemberRole¶
Bases:
RoleThis is a role for a member of an organization.
- name = 'member'¶
- class onadata.libs.permissions.OwnerRole¶
Bases:
RoleThis is a role for an owner of a dataset, organization, or project.
- class_to_permissions = {<class 'onadata.apps.api.models.organization_profile.OrganizationProfile'>: ['can_add_project', 'can_add_xform', 'add_organizationprofile', 'change_organizationprofile', 'delete_organizationprofile', 'view_organizationprofile', 'is_org_owner'], <class 'onadata.apps.logger.models.entity_list.EntityList'>: ['add_entitylist', 'view_entitylist', 'change_entitylist', 'delete_entitylist'], <class 'onadata.apps.logger.models.merged_xform.MergedXForm'>: ['view_mergedxform'], <class 'onadata.apps.logger.models.project.Project'>: ['add_project', 'add_project_xform', 'report_project_xform', 'change_project', 'delete_project', 'can_export_project_data', 'transfer_project', 'view_project', 'view_project_all', 'view_project_data', 'add_project_entitylist'], <class 'onadata.apps.logger.models.xform.XForm'>: ['report_xform', 'add_xform', 'change_xform', 'delete_submission', 'delete_xform', 'can_export_xform_data', 'view_xform', 'view_xform_all', 'view_xform_data', 'move_xform', 'transfer_xform'], <class 'onadata.apps.main.models.user_profile.UserProfile'>: ['can_add_project', 'can_add_xform', 'add_userprofile', 'change_userprofile', 'delete_userprofile', 'view_profile'], <class 'onadata.apps.viewer.models.data_dictionary.DataDictionary'>: ['add_datadictionary', 'change_datadictionary', 'delete_datadictionary']}¶
- name = 'owner'¶
- class onadata.libs.permissions.ReadOnlyRole¶
Bases:
RoleRead-only Role class.
- class_to_permissions = {<class 'onadata.apps.api.models.organization_profile.OrganizationProfile'>: ['view_organizationprofile'], <class 'onadata.apps.logger.models.merged_xform.MergedXForm'>: ['view_mergedxform'], <class 'onadata.apps.logger.models.project.Project'>: ['can_export_project_data', 'view_project', 'view_project_all'], <class 'onadata.apps.logger.models.xform.XForm'>: ['can_export_xform_data', 'view_xform', 'view_xform_all', 'view_xform_data']}¶
- name = 'readonly'¶
- class onadata.libs.permissions.ReadOnlyRoleNoDownload¶
Bases:
RoleRead-only no download Role class.
- class_to_permissions = {<class 'onadata.apps.logger.models.merged_xform.MergedXForm'>: ['view_mergedxform'], <class 'onadata.apps.logger.models.project.Project'>: ['view_project', 'view_project_all'], <class 'onadata.apps.logger.models.xform.XForm'>: ['view_xform', 'view_xform_all', 'view_xform_data']}¶
- name = 'readonly-no-download'¶
- permissions = (('view_organizationprofile', <class 'onadata.apps.api.models.organization_profile.OrganizationProfile'>), ('view_xform', <class 'onadata.apps.logger.models.xform.XForm'>), ('view_project', <class 'onadata.apps.logger.models.project.Project'>), ('view_xform_all', <class 'onadata.apps.logger.models.xform.XForm'>), ('view_project_all', <class 'onadata.apps.logger.models.project.Project'>), ('view_mergedxform', <class 'onadata.apps.logger.models.merged_xform.MergedXForm'>))¶
- class onadata.libs.permissions.Role¶
Bases:
objectBase Role class.
- classmethod add(user, obj)¶
Add obj permissions to the a user.
- class_to_permissions = {}¶
- classmethod has_role(permissions, obj)¶
Check that permission correspond to this role for this object.
- Parameters:
permissions – A list of permissions.
obj – An object or class to get the permissions of.
- name = None¶
- classmethod remove_obj_permissions(user, obj)¶
Remove all permissions the user has on the obj.
- classmethod user_has_role(user, obj)¶
Check that a user has this role.
- Parameters:
user – A user object.
obj – An object to get the permissions of.
- onadata.libs.permissions.exclude_items_from_queryset_using_xform_meta_perms(xform, user, queryset)¶
Exclude instances from the queryset if meta-perms have been enabled
- onadata.libs.permissions.filter_queryset_xform_meta_perms(xform, user, instance_queryset)¶
Check for the specific perms if meta-perms have been enabled CAN_VIEW_XFORM_ALL ==> User should be able to view all the data CAN_VIEW_XFORM_DATA ===> User should be able to view his/her submitted data. Otherwise should raise forbidden error. :param xform: :param user: :param instance_queryset: :return: data
- onadata.libs.permissions.filter_queryset_xform_meta_perms_sql(xform, user, query)¶
Check for the specific perms if meta-perms have been enabled CAN_VIEW_XFORM_ALL ==> User should be able to view all the data CAN_VIEW_XFORM_DATA ===> User should be able to view his/her submitted
data. Otherwise should raise forbidden error.
- Parameters:
xform
user
instance_queryset
- Returns:
data
- onadata.libs.permissions.get_group_perms(obj)¶
Return XFormGroupObjectPermission or ProjectGroupObjectPermission queryset.
- onadata.libs.permissions.get_object_users_with_permissions(obj, username=False, with_group_users=False)¶
Returns users, roles and permissions for an object.
- Parameters:
obj – object, the object to check permissions on
username – bool, when True set username instead of a User object
- onadata.libs.permissions.get_role(permissions, obj)¶
Return the user role for the given obj permissions.
- onadata.libs.permissions.get_role_in_org(user, organization)¶
Return the user role in the organization.
- onadata.libs.permissions.get_team_project_default_permissions(team, project)¶
Return team role for given project.
- onadata.libs.permissions.get_user_perms(obj)¶
Return XFormUserObjectPermission or ProjectUserObjectPermission queryset.
- onadata.libs.permissions.is_organization(obj)¶
Some OrganizationProfiles have a pointer to the UserProfile, but no UserProfiles do. Check for that first since it avoids a database hit.
- onadata.libs.permissions.is_organization_user(user)¶
Return True if the auth
Userrow backs an organization account.is_organizationoperates on a profile, not aUser(a rawUserhas noorganizationprofileaccessor). Organization accounts always have a profile, so a missing profile means the user is not an organization.
onadata.libs.throttle module¶
Module containing throttling utilities
- class onadata.libs.throttle.CustomScopedRateThrottle¶
Bases:
ScopedRateThrottleCustom throttling for fair throttling for anonymous users sharing IP
- get_cache_key(request, view)¶
If view.throttle_scope is not set, don’t apply this throttle.
Otherwise generate the unique cache key by concatenating the user id with the .throttle_scope property of the view.
- class onadata.libs.throttle.RequestHeaderThrottle¶
Bases:
SimpleRateThrottleCustom Throttling class that throttles requests that match a specific header
- get_cache_key(request, _)¶
Should return a unique cache-key which can be used for throttling. Must be overridden.
May return None if the request should not be throttled.
- get_ident_from_header(value)¶
- scope = 'header'¶
- property throttled_headers¶