platform_plugin_aspects package

Contents

platform_plugin_aspects package#

Subpackages#

Submodules#

platform_plugin_aspects.apps module#

platform_plugin_aspects Django application initialization.

class platform_plugin_aspects.apps.PlatformPluginAspectsConfig(app_name, app_module)#

Bases: AppConfig

Configuration for the aspects Django application.

name = 'platform_plugin_aspects'#
plugin_app = {'settings_config': {'cms.djangoapp': {'common': {'relative_path': 'settings.common'}, 'production': {'relative_path': 'settings.production'}}, 'lms.djangoapp': {'common': {'relative_path': 'settings.common'}, 'production': {'relative_path': 'settings.production'}}}, 'signals_config': {'cms.djangoapp': {'receivers': [{'receiver_func_name': 'receive_course_publish', 'signal_path': 'xmodule.modulestore.django.COURSE_PUBLISHED'}]}, 'lms.djangoapp': {'receivers': [{'receiver_func_name': 'receive_course_enrollment_changed', 'signal_path': 'common.djangoapps.student.signals.signals.ENROLL_STATUS_CHANGE'}]}}, 'url_config': {'cms.djangoapp': {'namespace': '', 'regex': '^aspects/', 'relative_path': 'urls'}, 'lms.djangoapp': {'namespace': '', 'regex': '^aspects/', 'relative_path': 'urls'}}}#
ready()#

Load modules of Aspects.

platform_plugin_aspects.signals module#

Signal handler functions, mapped to specific signals in apps.py.

platform_plugin_aspects.signals.on_externalid_saved_txn(*args, **kwargs)#

Handle external_id saves in the middle of a transaction.

Handle saves in the middle of a transaction. If this gets fired before the transaction commits, the task may try to query an id that doesn’t exist yet and throw an error. This should postpone queuing the Celery task until after the transaction is committed.

platform_plugin_aspects.signals.on_object_tag_deleted(sender, instance, **kwargs)#

Receives post save signal and queues the dump job.

platform_plugin_aspects.signals.on_object_tag_saved_txn(*args, **kwargs)#

Handle external_id saves in the middle of a transaction.

Handle saves in the middle of a transaction. If this gets fired before the transaction commits, the task may try to query an id that doesn’t exist yet and throw an error. This should postpone queuing the Celery task until after the transaction is committed.

platform_plugin_aspects.signals.on_tag_saved_txn(*args, **kwargs)#

Handle external_id saves in the middle of a transaction.

Handle saves in the middle of a transaction. If this gets fired before the transaction commits, the task may try to query an id that doesn’t exist yet and throw an error. This should postpone queuing the Celery task until after the transaction is committed.

platform_plugin_aspects.signals.on_taxonomy_saved_txn(*args, **kwargs)#

Handle external_id saves in the middle of a transaction.

Handle saves in the middle of a transaction. If this gets fired before the transaction commits, the task may try to query an id that doesn’t exist yet and throw an error. This should postpone queuing the Celery task until after the transaction is committed.

platform_plugin_aspects.signals.on_user_profile_updated_txn(*args, **kwargs)#

Handle user_profile saves in the middle of a transaction.

Handle saves in the middle of a transaction. If this gets fired before the transaction commits, the task may try to query an id that doesn’t exist yet and throw an error. This should postpone queuing the Celery task until after the transaction is committed.

platform_plugin_aspects.signals.on_user_retirement(sender, user, **kwargs)#

Receives a user retirement signal and queues the retire_user job.

platform_plugin_aspects.signals.receive_course_enrollment_changed(sender, **kwargs)#

Receives ENROLL_STATUS_CHANGE signal and queues the dump job.

Handles the course enrollment dumping in the middle of a transaction. If this gets fired before the transaction commits, the task may try to query an id that doesn’t exist yet and throw an error. This should postpone queuing the Celery task until after the transaction is committed.

platform_plugin_aspects.signals.receive_course_publish(sender, course_key, **kwargs)#

Receives COURSE_PUBLISHED signal and queues the dump job.

platform_plugin_aspects.tasks module#

This file contains a management command for exporting course modulestore data to ClickHouse.

platform_plugin_aspects.urls module#

Urls for the Aspects plugin.

platform_plugin_aspects.utils module#

Utilities for the Aspects app.

platform_plugin_aspects.utils.build_filter(filter_id, column, operator, value)#

Build a Superset native filter option.

platform_plugin_aspects.utils.generate_guest_token(user, course, dashboards, filters) str#

Generate and return a Superset guest token for the user.

Raise ImproperlyConfigured if the Superset API client request fails for any reason.

Parameters:
  • user – User object.

  • course – Course object, used to populate filters template strings.

  • dashboards – list of dashboard UUIDs to grant access to.

  • filters – list of string filters to apply.

Returns:

Superset guest token and dashboard id. or None, exception if Superset is missconfigured or cannot generate guest token.

Return type:

tuple

platform_plugin_aspects.utils.generate_superset_context(context, dashboards, language=None) dict#

Update context with superset token and dashboard id.

Parameters:
  • context (dict) – the context for the instructor dashboard. It must include a course_id.

  • user (XBlockUser or User) – the current user.

  • superset_config (dict) – superset config.

  • dashboards (list) – list of superset dashboard uuid.

  • filters (list) – list of filters to apply to the dashboard.

  • language (str) – the language code of the end user.

platform_plugin_aspects.utils.get_ccx_courses(course_id)#

Get the CCX courses for a given course.

platform_plugin_aspects.utils.get_detached_xblock_types()#

Import and return DETACHED_XBLOCK_TYPES.

Placed here to avoid model import at startup and to facilitate mocking them in testing.

platform_plugin_aspects.utils.get_localized_uuid(base_uuid, language)#

Generate an idempotent uuid.

platform_plugin_aspects.utils.get_model(model_setting)#

Load a model from a setting.

platform_plugin_aspects.utils.get_modulestore()#

Import and return modulestore.

Placed here to avoid model import at startup and to facilitate mocking them in testing.

platform_plugin_aspects.utils.get_tags_for_block(usage_key) set#

Return all the tags (and their parent tags) applied to the given block.

Returns a set of tag id: [1, 2, 3]

platform_plugin_aspects.utils.get_user_dashboard_locale(user)#

Get the Superset dashboard locale from the user preference.

platform_plugin_aspects.views module#

Endpoints for the Aspects platform plugin.

class platform_plugin_aspects.views.Course(course_id, display_name)#

Bases: tuple

course_id#

Alias for field number 0

display_name#

Alias for field number 1

class platform_plugin_aspects.views.IsCourseStaffInstructor#

Bases: BasePermission

Permission class to use during tests.

Importing from edx-platform doesn’t work when running tests, so we declare our own permission class here.

has_object_permission(request, view, obj)#

Return False for security; mock this out during tests.

class platform_plugin_aspects.views.IsStaffOrReadOnly#

Bases: BasePermission

Permission class to use during tests.

Importing from edx-platform doesn’t work when running tests, so we declare our own permission class here.

has_object_permission(request, view, obj)#

Return False for security; mock this out during tests.

class platform_plugin_aspects.views.SupersetInContextDashboardView(**kwargs)#

Bases: GenericAPIView

Endpoint for in-context analytics embedded Superset dashboard parameters.

authentication_classes = (<class 'rest_framework.authentication.SessionAuthentication'>,)#
get(request, *args, **kwargs)#

Return Superset context for embedding the dashboard for the requested block.

get_object()#

Return a usage key or course key for the requested usage_key.

lookup_field = 'usage_id'#
permission_classes = (<class 'rest_framework.permissions.IsAuthenticated'>, <rest_framework.permissions.OperandHolder object>)#
class platform_plugin_aspects.views.SupersetInstructorDashboardView(**kwargs)#

Bases: GenericAPIView

Endpoint for instructor dashboard Superset configuration.

Returns the Superset context needed by the frontend app to embed the instructor dashboards, including dashboard list, URLs, and display settings.

authentication_classes = (<class 'rest_framework.authentication.SessionAuthentication'>,)#
get(request, *args, **kwargs)#

Return Superset context for embedding the instructor dashboards.

get_object()#

Return a CourseKey for the requested course_id.

lookup_field = 'course_id'#
permission_classes = (<class 'rest_framework.permissions.IsAuthenticated'>, <rest_framework.permissions.OperandHolder object>)#
class platform_plugin_aspects.views.SupersetTokenView(**kwargs)#

Bases: GenericAPIView

Superset guest token endpoint.

authentication_classes = (<class 'rest_framework.authentication.SessionAuthentication'>,)#
get(request, *args, **kwargs)#

Return a guest token for accessing the Superset API.

get_object()#

Return a Course-like object for the requested course_id.

lookup_field = 'course_id'#
permission_classes = (<class 'rest_framework.permissions.IsAuthenticated'>, <rest_framework.permissions.OperandHolder object>)#

platform_plugin_aspects.waffle module#

Configuration for event sink clickhouse.

platform_plugin_aspects.xblock module#

XBlock to embed Superset dashboards in Open edX.

class platform_plugin_aspects.xblock.SupersetXBlock(runtime, field_data=None, scope_ids=<object object>, *args, **kwargs)#

Bases: StudioEditableXBlockMixin, XBlock

XBlock provides a way to embed dashboards from Superset in a course.

dashboard_uuid#

A field class for representing a string.

The value, as loaded or enforced, can either be None or a basestring instance.

dashboards()#

Return an array of dashboards configured for this XBlock.

display_name#

A field class for representing a string.

The value, as loaded or enforced, can either be None or a basestring instance.

editable_fields = ('display_name', 'dashboard_uuid', 'filters')#
filters#

A field class for representing a list.

The value, as loaded or enforced, can either be None or a list.

get_superset_guest_token(request_body, suffix='')#

Return a guest token for Superset.

has_children: bool = False#
render_template(template_path, context=None) str#

Render a template with the given context.

The template is translatedaccording to the user’s language.

Parameters:
  • template_path – The path to the template

  • context – The context to render in the template

Returns:

The rendered template

student_view(context=None)#

Render the view shown to users of this XBlock.

user_is_student(user) bool#

Check if the user is a student.

static workbench_scenarios()#

Return a canned scenario for display in the workbench.

Module contents#

Aspects plugins for edx-platform.