-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add aggregator events #6
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
{ | ||
"name": "edx.completion_aggregator.completion.chapter", | ||
"timestamp": "2023-12-05T21:34:52.909063+00:00", | ||
"data": { | ||
"user_id": 4, | ||
"course_id": "course-v1:edX+DemoX+Demo_Course", | ||
"context_key": "course-v1:edX+DemoX+Demo_Course", | ||
"block_id": "block-v1:edX+DemoX+Demo_Course+type@chapter+block@b443e0d6bc4d43c1bed991dbd8a10d42", | ||
"block_type": "course", | ||
"percent": 0.5, | ||
"earned": 5, | ||
"possible": 10 | ||
}, | ||
"context": { | ||
"course_id": "course-v1:edX+DemoX+Demo_Course", | ||
"course_user_tags": {}, | ||
"session": "056aca2a1c6b76742b283e73d3424453", | ||
"user_id": 3, | ||
"username": "edx", | ||
"ip": "172.18.0.1", | ||
"host": "localhost:18000", | ||
"agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36", | ||
"path": "/courses/course-v1:edX+DemoX+Demo_Course/xblock/block-v1:edX+DemoX+Demo_Course+type@problem+block@7c54b16c8ed34f9f8772015178c7a175/handler/xmodule_handler/problem_check", | ||
"referer": "http://localhost:18000/courses/course-v1:edX+DemoX+Demo_Course+type@vertical+block@dd8110c941b94d929b56841195213797?show_title=0&show_bookmark_button=0&recheck_access=1&view=student_view", | ||
"accept_language": "en-US,en;q=0.9,es;q=0.8", | ||
"client_id": null, | ||
"org_id": "edX", | ||
"enterprise_uuid": "" | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
{ | ||
"name": "edx.completion_aggregator.completion.course", | ||
"timestamp": "2023-12-05T21:34:52.909063+00:00", | ||
"data": { | ||
"user_id": 4, | ||
"course_id": "course-v1:edX+DemoX+Demo_Course", | ||
"context_key": "course-v1:edX+DemoX+Demo_Course", | ||
"block_id": "block-v1:edX+DemoX+Demo_Course+type@course+block@course", | ||
"block_type": "course", | ||
"percent": 0.8, | ||
"earned": 8, | ||
"possible": 10 | ||
}, | ||
"context": { | ||
"course_id": "course-v1:edX+DemoX+Demo_Course", | ||
"course_user_tags": {}, | ||
"session": "056aca2a1c6b76742b283e73d3424453", | ||
"user_id": 3, | ||
"username": "edx", | ||
"ip": "172.18.0.1", | ||
"host": "localhost:18000", | ||
"agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36", | ||
"path": "/courses/course-v1:edX+DemoX+Demo_Course/xblock/block-v1:edX+DemoX+Demo_Course+type@problem+block@7c54b16c8ed34f9f8772015178c7a175/handler/xmodule_handler/problem_check", | ||
"referer": "http://localhost:18000/courses/course-v1:edX+DemoX+Demo_Course+type@vertical+block@dd8110c941b94d929b56841195213797?show_title=0&show_bookmark_button=0&recheck_access=1&view=student_view", | ||
"accept_language": "en-US,en;q=0.9,es;q=0.8", | ||
"client_id": null, | ||
"org_id": "edX", | ||
"enterprise_uuid": "", | ||
"module": { | ||
"display_name": "Checkboxes", | ||
"usage_key": "block-v1:edX+DemoX+Demo_Course+type@problem+block@7c54b16c8ed34f9f8772015178c7a175" | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
{ | ||
"name": "edx.completion_aggregator.completion.sequential", | ||
"timestamp": "2023-12-05T21:34:52.909063+00:00", | ||
"data": { | ||
"user_id": 4, | ||
"course_id": "course-v1:edX+DemoX+Demo_Course", | ||
"context_key": "course-v1:edX+DemoX+Demo_Course", | ||
"block_id": "block-v1:edX+DemoX+Demo_Course+type@sequential+block@bf1eac10ebb649e3aaf9cc07325f8e04", | ||
"block_type": "course", | ||
"percent": 0.6, | ||
"earned": 6, | ||
"possible": 10 | ||
}, | ||
"context": { | ||
"course_id": "course-v1:edX+DemoX+Demo_Course", | ||
"course_user_tags": {}, | ||
"session": "056aca2a1c6b76742b283e73d3424453", | ||
"user_id": 3, | ||
"username": "edx", | ||
"ip": "172.18.0.1", | ||
"host": "localhost:18000", | ||
"agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36", | ||
"path": "/courses/course-v1:edX+DemoX+Demo_Course/xblock/block-v1:edX+DemoX+Demo_Course+type@problem+block@7c54b16c8ed34f9f8772015178c7a175/handler/xmodule_handler/problem_check", | ||
"referer": "http://localhost:18000/courses/course-v1:edX+DemoX+Demo_Course+type@vertical+block@dd8110c941b94d929b56841195213797?show_title=0&show_bookmark_button=0&recheck_access=1&view=student_view", | ||
"accept_language": "en-US,en;q=0.9,es;q=0.8", | ||
"client_id": null, | ||
"org_id": "edX", | ||
"enterprise_uuid": "" | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
{ | ||
"name": "edx.completion_aggregator.completion.vertical", | ||
"timestamp": "2023-12-05T21:34:52.909063+00:00", | ||
"data": { | ||
"user_id": 4, | ||
"course_id": "course-v1:edX+DemoX+Demo_Course", | ||
"context_key": "course-v1:edX+DemoX+Demo_Course", | ||
"block_id": "block-v1:edX+DemoX+Demo_Course+type@vertical+block@e1fabd9fa55f441caa75580f258ffbc3", | ||
"block_type": "course", | ||
"percent": 1, | ||
"earned": 10, | ||
"possible": 10 | ||
}, | ||
"context": { | ||
"course_id": "course-v1:edX+DemoX+Demo_Course", | ||
"course_user_tags": {}, | ||
"session": "056aca2a1c6b76742b283e73d3424453", | ||
"user_id": 3, | ||
"username": "edx", | ||
"ip": "172.18.0.1", | ||
"host": "localhost:18000", | ||
"agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36", | ||
"path": "/courses/course-v1:edX+DemoX+Demo_Course/xblock/block-v1:edX+DemoX+Demo_Course+type@problem+block@7c54b16c8ed34f9f8772015178c7a175/handler/xmodule_handler/problem_check", | ||
"referer": "http://localhost:18000/courses/course-v1:edX+DemoX+Demo_Course+type@vertical+block@dd8110c941b94d929b56841195213797?show_title=0&show_bookmark_button=0&recheck_access=1&view=student_view", | ||
"accept_language": "en-US,en;q=0.9,es;q=0.8", | ||
"client_id": null, | ||
"org_id": "edX", | ||
"enterprise_uuid": "" | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
{ | ||
"name": "edx.completion_aggregator.progress.chapter", | ||
"timestamp": "2023-12-05T21:34:52.909063+00:00", | ||
"data": { | ||
"user_id": 4, | ||
"course_id": "course-v1:edX+DemoX+Demo_Course", | ||
"context_key": "course-v1:edX+DemoX+Demo_Course", | ||
"block_id": "block-v1:edX+DemoX+Demo_Course+type@chapter+block@b443e0d6bc4d43c1bed991dbd8a10d42", | ||
"block_type": "course", | ||
"percent": 0.5, | ||
"earned": 5, | ||
"possible": 10 | ||
}, | ||
"context": { | ||
"course_id": "course-v1:edX+DemoX+Demo_Course", | ||
"course_user_tags": {}, | ||
"session": "056aca2a1c6b76742b283e73d3424453", | ||
"user_id": 3, | ||
"username": "edx", | ||
"ip": "172.18.0.1", | ||
"host": "localhost:18000", | ||
"agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36", | ||
"path": "/courses/course-v1:edX+DemoX+Demo_Course/xblock/block-v1:edX+DemoX+Demo_Course+type@problem+block@7c54b16c8ed34f9f8772015178c7a175/handler/xmodule_handler/problem_check", | ||
"referer": "http://localhost:18000/courses/course-v1:edX+DemoX+Demo_Course+type@vertical+block@dd8110c941b94d929b56841195213797?show_title=0&show_bookmark_button=0&recheck_access=1&view=student_view", | ||
"accept_language": "en-US,en;q=0.9,es;q=0.8", | ||
"client_id": null, | ||
"org_id": "edX", | ||
"enterprise_uuid": "" | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
{ | ||
"name": "edx.completion_aggregator.progress.course", | ||
"timestamp": "2023-12-05T21:34:52.909063+00:00", | ||
"data": { | ||
"user_id": 4, | ||
"course_id": "course-v1:edX+DemoX+Demo_Course", | ||
"context_key": "course-v1:edX+DemoX+Demo_Course", | ||
"block_id": "block-v1:edX+DemoX+Demo_Course+type@course+block@course", | ||
"block_type": "course", | ||
"percent": 0.8, | ||
"earned": 8, | ||
"possible": 10 | ||
}, | ||
"context": { | ||
"course_id": "course-v1:edX+DemoX+Demo_Course", | ||
"course_user_tags": {}, | ||
"session": "056aca2a1c6b76742b283e73d3424453", | ||
"user_id": 3, | ||
"username": "edx", | ||
"ip": "172.18.0.1", | ||
"host": "localhost:18000", | ||
"agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36", | ||
"path": "/courses/course-v1:edX+DemoX+Demo_Course/xblock/block-v1:edX+DemoX+Demo_Course+type@problem+block@7c54b16c8ed34f9f8772015178c7a175/handler/xmodule_handler/problem_check", | ||
"referer": "http://localhost:18000/courses/course-v1:edX+DemoX+Demo_Course+type@vertical+block@dd8110c941b94d929b56841195213797?show_title=0&show_bookmark_button=0&recheck_access=1&view=student_view", | ||
"accept_language": "en-US,en;q=0.9,es;q=0.8", | ||
"client_id": null, | ||
"org_id": "edX", | ||
"enterprise_uuid": "", | ||
"module": { | ||
"display_name": "Checkboxes", | ||
"usage_key": "block-v1:edX+DemoX+Demo_Course+type@problem+block@7c54b16c8ed34f9f8772015178c7a175" | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
{ | ||
"name": "edx.completion_aggregator.progress.sequential", | ||
"timestamp": "2023-12-05T21:34:52.909063+00:00", | ||
"data": { | ||
"user_id": 4, | ||
"course_id": "course-v1:edX+DemoX+Demo_Course", | ||
"context_key": "course-v1:edX+DemoX+Demo_Course", | ||
"block_id": "block-v1:edX+DemoX+Demo_Course+type@sequential+block@bf1eac10ebb649e3aaf9cc07325f8e04", | ||
"block_type": "course", | ||
"percent": 0.6, | ||
"earned": 6, | ||
"possible": 10 | ||
}, | ||
"context": { | ||
"course_id": "course-v1:edX+DemoX+Demo_Course", | ||
"course_user_tags": {}, | ||
"session": "056aca2a1c6b76742b283e73d3424453", | ||
"user_id": 3, | ||
"username": "edx", | ||
"ip": "172.18.0.1", | ||
"host": "localhost:18000", | ||
"agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36", | ||
"path": "/courses/course-v1:edX+DemoX+Demo_Course/xblock/block-v1:edX+DemoX+Demo_Course+type@problem+block@7c54b16c8ed34f9f8772015178c7a175/handler/xmodule_handler/problem_check", | ||
"referer": "http://localhost:18000/courses/course-v1:edX+DemoX+Demo_Course+type@vertical+block@dd8110c941b94d929b56841195213797?show_title=0&show_bookmark_button=0&recheck_access=1&view=student_view", | ||
"accept_language": "en-US,en;q=0.9,es;q=0.8", | ||
"client_id": null, | ||
"org_id": "edX", | ||
"enterprise_uuid": "" | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
{ | ||
"name": "edx.completion_aggregator.progress.vertical", | ||
"timestamp": "2023-12-05T21:34:52.909063+00:00", | ||
"data": { | ||
"user_id": 4, | ||
"course_id": "course-v1:edX+DemoX+Demo_Course", | ||
"context_key": "course-v1:edX+DemoX+Demo_Course", | ||
"block_id": "block-v1:edX+DemoX+Demo_Course+type@vertical+block@e1fabd9fa55f441caa75580f258ffbc3", | ||
"block_type": "course", | ||
"percent": 1, | ||
"earned": 10, | ||
"possible": 10 | ||
}, | ||
"context": { | ||
"course_id": "course-v1:edX+DemoX+Demo_Course", | ||
"course_user_tags": {}, | ||
"session": "056aca2a1c6b76742b283e73d3424453", | ||
"user_id": 3, | ||
"username": "edx", | ||
"ip": "172.18.0.1", | ||
"host": "localhost:18000", | ||
"agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36", | ||
"path": "/courses/course-v1:edX+DemoX+Demo_Course/xblock/block-v1:edX+DemoX+Demo_Course+type@problem+block@7c54b16c8ed34f9f8772015178c7a175/handler/xmodule_handler/problem_check", | ||
"referer": "http://localhost:18000/courses/course-v1:edX+DemoX+Demo_Course+type@vertical+block@dd8110c941b94d929b56841195213797?show_title=0&show_bookmark_button=0&recheck_access=1&view=student_view", | ||
"accept_language": "en-US,en;q=0.9,es;q=0.8", | ||
"client_id": null, | ||
"org_id": "edX", | ||
"enterprise_uuid": "" | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,54 +1,58 @@ | ||
""" | ||
Transformers for forum related events. | ||
Transformers for completion related events. | ||
""" | ||
from tincan import Activity, ActivityDefinition, Extensions, LanguageMap, Result, Verb | ||
from tincan import Activity, ActivityDefinition, LanguageMap, Verb | ||
|
||
from event_routing_backends.processors.openedx_filters.decorators import openedx_filter | ||
from event_routing_backends.processors.xapi import constants | ||
from event_routing_backends.processors.xapi.registry import XApiTransformersRegistry | ||
from event_routing_backends.processors.xapi.transformer import XApiTransformer | ||
|
||
|
||
@XApiTransformersRegistry.register("edx.completion.block_completion.changed") | ||
class CompletionCreatedTransformer(XApiTransformer): | ||
class BaseCompletionTransformer(XApiTransformer): | ||
""" | ||
Transformers for event generated when an student completion is created or updated. | ||
Base transformer for completion events. | ||
""" | ||
|
||
_verb = Verb( | ||
id=constants.XAPI_VERB_PROGRESSED, | ||
display=LanguageMap({constants.EN: constants.PROGRESSED}), | ||
id=constants.XAPI_VERB_COMPLETED, | ||
display=LanguageMap({constants.EN: constants.COMPLETED}), | ||
) | ||
|
||
additional_fields = ('result', ) | ||
object_type = None | ||
|
||
@openedx_filter( | ||
filter_type="event_routing_backends.processors.xapi.completion_events.completion_created.get_object", | ||
filter_type="event_routing_backends.processors.xapi.completion_events.base_completion.get_object", | ||
) | ||
def get_object(self): | ||
""" | ||
Get object for xAPI transformed event related to a thread. | ||
Get object for xAPI transformed event. | ||
|
||
Returns: | ||
`Activity` | ||
""" | ||
if not self.object_type: | ||
raise NotImplementedError() | ||
|
||
return Activity( | ||
id=self.get_object_iri("xblock", self.get_data("data.block_id")), | ||
definition=ActivityDefinition( | ||
type=constants.XAPI_ACTIVITY_RESOURCE, | ||
type=self.object_type, | ||
), | ||
) | ||
|
||
def get_result(self): | ||
""" | ||
Get result for xAPI transformed event related to a thread. | ||
|
||
Returns: | ||
`Result` | ||
""" | ||
return Result( | ||
completion=self.get_data("data.completion") == 1.0, | ||
extensions=Extensions( | ||
{constants.XAPI_ACTIVITY_PROGRESS: self.get_data("data.completion")*100} | ||
), | ||
) | ||
@XApiTransformersRegistry.register("edx.completion_aggregator.completion.chapter") | ||
@XApiTransformersRegistry.register("edx.completion_aggregator.completion.sequential") | ||
@XApiTransformersRegistry.register("edx.completion_aggregator.completion.vertical") | ||
class ModuleCompletionTransformer(BaseCompletionTransformer): | ||
""" | ||
Transformer for events generated when a user completes a section, subsection or unit. | ||
""" | ||
object_type = constants.XAPI_ACTIVITY_MODULE | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Intesresting that module encompasses section, subsection or unit There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Based on the nelc requirements this should be module they doesn't make any differences between unit section and sub-sections |
||
|
||
|
||
@XApiTransformersRegistry.register("edx.completion_aggregator.completion.course") | ||
class CourseCompletionTransformer(BaseCompletionTransformer): | ||
""" | ||
Transformer for event generated when a user completes a course. | ||
""" | ||
object_type = constants.XAPI_ACTIVITY_COURSE |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This could raise multple 500? when object_type is not defined. Is it possible?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this works like an abstract class, if someone use this instead of one of the sub-classes will get the errors that you mentioned