From 1b0da31385a6520eae7f840004c75d3cde550bb0 Mon Sep 17 00:00:00 2001 From: Cristhian Garcia Date: Mon, 5 Jun 2023 15:04:05 -0500 Subject: [PATCH] feat: add listener for tracking event emitted signal chore: install openedx-events refactor: only send to event bus refactor: only listen to event bus feat: show more information of tracking log feat: send xAPI statements via event bus feat: process all backends based on their class fix: allow multiple engines and backends feat: enable event bus engine by default fix: do not validate metadata source fix: make sure errors are raised to event bus test: correct tests chore: quality fixes test: add test for handlers fix: remove return statement test: add test for event emission exit chore: inject supported logs in EVENT_BUS_TRACKING_LOGS fix: only process signal if it is emitted from the event bus chore: change tracking log handler logging to debug test: update test with from_event_bus chore: install openedx-events v9.5.1 feat: migrate handler to eventtracking --- .../backends/events_router.py | 4 +- event_routing_backends/helpers.py | 2 +- .../commands/transform_tracking_logs.py | 2 +- event_routing_backends/settings/common.py | 190 +++++++++--------- event_routing_backends/tests/test_settings.py | 6 +- requirements/base.in | 2 +- requirements/base.txt | 64 +++--- requirements/ci.txt | 8 +- requirements/dev.txt | 106 ++++++---- requirements/doc.txt | 101 ++++++---- requirements/pip-tools.txt | 2 +- requirements/pip.txt | 4 +- requirements/quality.txt | 92 +++++---- requirements/test.txt | 80 +++++--- 14 files changed, 392 insertions(+), 271 deletions(-) diff --git a/event_routing_backends/backends/events_router.py b/event_routing_backends/backends/events_router.py index 2f381546..85832f4d 100644 --- a/event_routing_backends/backends/events_router.py +++ b/event_routing_backends/backends/events_router.py @@ -163,14 +163,14 @@ def send(self, event): event_name, updated_event, host['router_type'], - host['host_configurations'] + host['host_configurations'], ) else: self.dispatch_event( event_name, updated_event, host['router_type'], - host['host_configurations'] + host['host_configurations'], ) def process_event(self, event): diff --git a/event_routing_backends/helpers.py b/event_routing_backends/helpers.py index 8784aeb4..788db60f 100644 --- a/event_routing_backends/helpers.py +++ b/event_routing_backends/helpers.py @@ -107,7 +107,7 @@ def get_user(username_or_id): if username and not user: try: user = get_potentially_retired_user_by_username(username) - except Exception as ex: # pylint: disable=broad-except + except Exception as ex: logger.info('User with username "%s" does not exist.%s', username, ex) return user diff --git a/event_routing_backends/management/commands/transform_tracking_logs.py b/event_routing_backends/management/commands/transform_tracking_logs.py index 28e08a89..b11df861 100644 --- a/event_routing_backends/management/commands/transform_tracking_logs.py +++ b/event_routing_backends/management/commands/transform_tracking_logs.py @@ -41,7 +41,7 @@ def _get_chunks(source, file, start_byte, end_byte): break # Catching all exceptions here because there's no telling what all # the possible errors from different libcloud providers are. - except Exception as e: # pylint: disable=broad-exception-caught + except Exception as e: print(e) if try_number == num_retries: print(f"Try {try_number}: Error occurred downloading, giving up.") diff --git a/event_routing_backends/settings/common.py b/event_routing_backends/settings/common.py index 153525f1..d859e887 100644 --- a/event_routing_backends/settings/common.py +++ b/event_routing_backends/settings/common.py @@ -58,6 +58,101 @@ def plugin_settings(settings): 'edx.course.enrollment.deactivated', 'edx.course.grade.passed.first_time' ] + allowed_xapi_events = [ + 'edx.course.enrollment.activated', + 'edx.course.enrollment.deactivated', + 'edx.course.enrollment.mode_changed', + 'edx.grades.subsection.grade_calculated', + 'edx.grades.course.grade_calculated', + 'edx.special_exam.timed.attempt.created', + 'edx.special_exam.timed.attempt.submitted', + 'edx.special_exam.practice.attempt.created', + 'edx.special_exam.practice.attempt.submitted', + 'edx.special_exam.proctored.attempt.created', + 'edx.special_exam.proctored.attempt.submitted', + 'edx.completion.block_completion.changed', + 'edx.forum.thread.created', + 'edx.forum.thread.deleted', + 'edx.forum.thread.edited', + 'edx.forum.thread.viewed', + 'edx.forum.thread.reported', + 'edx.forum.thread.unreported', + 'edx.forum.thread.voted', + 'edx.forum.response.created', + 'edx.forum.response.deleted', + 'edx.forum.response.edited', + 'edx.forum.response.reported', + 'edx.forum.response.unreported', + 'edx.forum.response.voted', + 'edx.forum.comment.created', + 'edx.forum.comment.deleted', + 'edx.forum.comment.edited', + 'edx.forum.comment.reported', + 'edx.forum.comment.unreported', + 'edx.ui.lms.link_clicked', + 'edx.ui.lms.sequence.outline.selected', + 'edx.ui.lms.outline.selected', + 'edx.ui.lms.sequence.next_selected', + 'edx.ui.lms.sequence.previous_selected', + 'edx.ui.lms.sequence.tab_selected', + 'showanswer', + 'edx.problem.hint.demandhint_displayed', + 'problem_check', + 'load_video', + 'edx.video.loaded', + 'play_video', + 'edx.video.played', + 'complete_video', + 'edx.video.completed', + 'stop_video', + 'edx.video.stopped', + 'pause_video', + 'edx.video.paused', + 'seek_video', + 'edx.video.position.changed', + 'hide_transcript', + 'edx.video.transcript.hidden', + 'show_transcript', + 'edx.video.transcript.shown', + 'speed_change_video', + 'video_hide_cc_menu', + 'edx.video.closed_captions.shown', + 'edx.video.closed_captions.hidden', + 'edx.video.language_menu.hidden', + 'video_show_cc_menu', + 'edx.video.language_menu.shown', + 'edx.course.grade.passed.first_time' + ] + allowed_caliper_events = [ + 'edx.course.enrollment.activated', + 'edx.course.enrollment.deactivated', + 'edx.ui.lms.link_clicked', + 'edx.ui.lms.sequence.outline.selected', + 'edx.ui.lms.outline.selected', + 'edx.ui.lms.sequence.next_selected', + 'edx.ui.lms.sequence.previous_selected', + 'edx.ui.lms.sequence.tab_selected', + 'showanswer', + 'edx.problem.hint.demandhint_displayed', + 'problem_check', + 'load_video', + 'edx.video.loaded', + 'play_video', + 'edx.video.played', + 'complete_video', + 'edx.video.completed', + 'stop_video', + 'edx.video.stopped', + 'pause_video', + 'edx.video.paused', + 'seek_video', + 'edx.video.position.changed', + 'edx.course.grade.passed.first_time', + 'edx.course.grade.now_passed', + 'edx.course.grade.now_failed' + ] + + settings.EVENT_BUS_TRACKING_LOGS = set(allowed_xapi_events + allowed_caliper_events) settings.EVENT_TRACKING_BACKENDS.update({ 'xapi': { @@ -68,71 +163,7 @@ def plugin_settings(settings): { 'ENGINE': 'eventtracking.processors.whitelist.NameWhitelistProcessor', 'OPTIONS': { - 'whitelist': [ - 'edx.course.enrollment.activated', - 'edx.course.enrollment.deactivated', - 'edx.course.enrollment.mode_changed', - 'edx.grades.subsection.grade_calculated', - 'edx.grades.course.grade_calculated', - 'edx.special_exam.timed.attempt.created', - 'edx.special_exam.timed.attempt.submitted', - 'edx.special_exam.practice.attempt.created', - 'edx.special_exam.practice.attempt.submitted', - 'edx.special_exam.proctored.attempt.created', - 'edx.special_exam.proctored.attempt.submitted', - 'edx.completion.block_completion.changed', - 'edx.forum.thread.created', - 'edx.forum.thread.deleted', - 'edx.forum.thread.edited', - 'edx.forum.thread.viewed', - 'edx.forum.thread.reported', - 'edx.forum.thread.unreported', - 'edx.forum.thread.voted', - 'edx.forum.response.created', - 'edx.forum.response.deleted', - 'edx.forum.response.edited', - 'edx.forum.response.reported', - 'edx.forum.response.unreported', - 'edx.forum.response.voted', - 'edx.forum.comment.created', - 'edx.forum.comment.deleted', - 'edx.forum.comment.edited', - 'edx.forum.comment.reported', - 'edx.forum.comment.unreported', - 'edx.ui.lms.link_clicked', - 'edx.ui.lms.sequence.outline.selected', - 'edx.ui.lms.outline.selected', - 'edx.ui.lms.sequence.next_selected', - 'edx.ui.lms.sequence.previous_selected', - 'edx.ui.lms.sequence.tab_selected', - 'showanswer', - 'edx.problem.hint.demandhint_displayed', - 'problem_check', - 'load_video', - 'edx.video.loaded', - 'play_video', - 'edx.video.played', - 'complete_video', - 'edx.video.completed', - 'stop_video', - 'edx.video.stopped', - 'pause_video', - 'edx.video.paused', - 'seek_video', - 'edx.video.position.changed', - 'hide_transcript', - 'edx.video.transcript.hidden', - 'show_transcript', - 'edx.video.transcript.shown', - 'speed_change_video', - 'video_hide_cc_menu', - 'edx.video.closed_captions.shown', - 'edx.video.closed_captions.hidden', - 'edx.video.language_menu.hidden', - 'video_show_cc_menu', - 'edx.video.language_menu.shown', - 'edx.course.grade.passed.first_time' - ] + 'whitelist': allowed_xapi_events } }, ], @@ -161,34 +192,7 @@ def plugin_settings(settings): { "ENGINE": "eventtracking.processors.whitelist.NameWhitelistProcessor", "OPTIONS": { - "whitelist": [ - 'edx.course.enrollment.activated', - 'edx.course.enrollment.deactivated', - 'edx.ui.lms.link_clicked', - 'edx.ui.lms.sequence.outline.selected', - 'edx.ui.lms.outline.selected', - 'edx.ui.lms.sequence.next_selected', - 'edx.ui.lms.sequence.previous_selected', - 'edx.ui.lms.sequence.tab_selected', - 'showanswer', - 'edx.problem.hint.demandhint_displayed', - 'problem_check', - 'load_video', - 'edx.video.loaded', - 'play_video', - 'edx.video.played', - 'complete_video', - 'edx.video.completed', - 'stop_video', - 'edx.video.stopped', - 'pause_video', - 'edx.video.paused', - 'seek_video', - 'edx.video.position.changed', - 'edx.course.grade.passed.first_time', - 'edx.course.grade.now_passed', - 'edx.course.grade.now_failed' - ] + "whitelist": allowed_caliper_events } } ], diff --git a/event_routing_backends/tests/test_settings.py b/event_routing_backends/tests/test_settings.py index 95f1ef13..3137ef6b 100644 --- a/event_routing_backends/tests/test_settings.py +++ b/event_routing_backends/tests/test_settings.py @@ -20,8 +20,7 @@ def test_common_settings(self): Test common settings """ common_settings.plugin_settings(settings) - self.assertIn('xapi', settings.EVENT_TRACKING_BACKENDS) - self.assertIn('caliper', settings.EVENT_TRACKING_BACKENDS) + self.assertIn('event_bus', settings.EVENT_TRACKING_BACKENDS) self.assertIn('edx.course.enrollment.activated', settings.EVENT_TRACKING_BACKENDS_BUSINESS_CRITICAL_EVENTS) self.assertFalse(settings.CALIPER_EVENTS_ENABLED) self.assertFalse(settings.CALIPER_EVENT_LOGGING_ENABLED) @@ -33,8 +32,7 @@ def test_devstack_settings(self): Test devstack settings """ devstack_settings.plugin_settings(settings) - self.assertIn('xapi', settings.EVENT_TRACKING_BACKENDS) - self.assertIn('caliper', settings.EVENT_TRACKING_BACKENDS) + self.assertIn('event_bus', settings.EVENT_TRACKING_BACKENDS) self.assertIn('edx.course.enrollment.deactivated', settings.EVENT_TRACKING_BACKENDS_BUSINESS_CRITICAL_EVENTS) self.assertFalse(settings.CALIPER_EVENTS_ENABLED) self.assertFalse(settings.CALIPER_EVENT_LOGGING_ENABLED) diff --git a/requirements/base.in b/requirements/base.in index f9fdf05e..fbf0b237 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -11,7 +11,7 @@ django-fernet-fields-v2 django-config-models edx-toggles # For SettingToggle class tincan -event-tracking +git+https://github.com/edunext/event-tracking@cag/add-openedx-event-signal edx-celeryutils apache-libcloud # For bulk event log loading fasteners # Locking tools, required by apache-libcloud, but somehow not installed with it diff --git a/requirements/base.txt b/requirements/base.txt index 41daa4cf..b83dd4a2 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -12,6 +12,8 @@ apache-libcloud==3.8.0 # via -r requirements/base.in asgiref==3.7.2 # via django +attrs==23.2.0 + # via openedx-events backports-zoneinfo[tzdata]==0.2.1 # via # celery @@ -22,7 +24,7 @@ celery==5.3.6 # via # edx-celeryutils # event-tracking -certifi==2023.11.17 +certifi==2024.2.2 # via requests cffi==1.16.0 # via @@ -44,11 +46,11 @@ click-plugins==1.1.1 # via celery click-repl==0.3.0 # via celery -code-annotations==1.5.0 +code-annotations==1.6.0 # via edx-toggles -cryptography==41.0.7 +cryptography==42.0.2 # via django-fernet-fields-v2 -django==3.2.23 +django==3.2.24 # via # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/base.in @@ -63,6 +65,7 @@ django==3.2.23 # edx-toggles # event-tracking # jsonfield + # openedx-events # openedx-filters django-config-models==2.5.1 # via -r requirements/base.in @@ -72,64 +75,75 @@ django-crum==0.7.9 # edx-toggles django-fernet-fields-v2==0.9 # via -r requirements/base.in -django-model-utils==4.3.1 +django-model-utils==4.4.0 # via edx-celeryutils -django-waffle==4.0.0 +django-waffle==4.1.0 # via # edx-django-utils # edx-toggles djangorestframework==3.14.0 # via django-config-models -edx-celeryutils==1.2.3 +edx-celeryutils==1.2.5 # via -r requirements/base.in -edx-django-utils==5.9.0 +edx-django-utils==5.10.1 # via # django-config-models # edx-toggles # event-tracking -edx-toggles==5.1.0 - # via -r requirements/base.in -event-tracking==2.2.0 + # openedx-events +edx-opaque-keys[django]==2.5.1 + # via openedx-events +edx-toggles==5.1.1 + # via + # -r requirements/base.in + # event-tracking +event-tracking @ git+https://github.com/edunext/event-tracking@cag/add-openedx-event-signal # via -r requirements/base.in +fastavro==1.9.3 + # via openedx-events fasteners==0.19 # via -r requirements/base.in idna==3.6 # via requests isodate==0.6.1 # via -r requirements/base.in -jinja2==3.1.2 +jinja2==3.1.3 # via code-annotations jsonfield==3.1.0 # via # -r requirements/base.in # edx-celeryutils -kombu==5.3.4 +kombu==5.3.5 # via celery -markupsafe==2.1.3 +markupsafe==2.1.5 # via jinja2 -newrelic==9.3.0 +newrelic==9.6.0 # via edx-django-utils +openedx-events==9.5.1 + # via event-tracking openedx-filters==1.6.0 # via -r requirements/base.in pbr==6.0.0 # via stevedore -prompt-toolkit==3.0.41 +prompt-toolkit==3.0.43 # via click-repl -psutil==5.9.6 +psutil==5.9.8 # via edx-django-utils pycparser==2.21 # via cffi pymongo==3.13.0 - # via event-tracking + # via + # edx-opaque-keys + # event-tracking pynacl==1.5.0 # via edx-django-utils python-dateutil==2.8.2 # via # -r requirements/base.in # celery -python-slugify==8.0.1 +python-slugify==8.0.4 # via code-annotations -pytz==2023.3.post1 +pytz==2024.1 # via # -r requirements/base.in # django @@ -153,24 +167,26 @@ stevedore==5.1.0 # via # code-annotations # edx-django-utils + # edx-opaque-keys text-unidecode==1.3 # via python-slugify tincan==1.0.0 # via -r requirements/base.in -typing-extensions==4.8.0 +typing-extensions==4.9.0 # via # asgiref + # edx-opaque-keys # kombu -tzdata==2023.3 +tzdata==2024.1 # via # backports-zoneinfo # celery -urllib3==2.1.0 +urllib3==2.2.0 # via requests vine==5.1.0 # via # amqp # celery # kombu -wcwidth==0.2.12 +wcwidth==0.2.13 # via prompt-toolkit diff --git a/requirements/ci.txt b/requirements/ci.txt index efd08147..742e39c1 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -10,7 +10,7 @@ chardet==5.2.0 # via tox colorama==0.4.6 # via tox -distlib==0.3.7 +distlib==0.3.8 # via virtualenv filelock==3.13.1 # via @@ -20,11 +20,11 @@ packaging==23.2 # via # pyproject-api # tox -platformdirs==4.1.0 +platformdirs==4.2.0 # via # tox # virtualenv -pluggy==1.3.0 +pluggy==1.4.0 # via tox pyproject-api==1.6.1 # via tox @@ -32,7 +32,7 @@ tomli==2.0.1 # via # pyproject-api # tox -tox==4.11.4 +tox==4.12.1 # via -r requirements/ci.in virtualenv==20.25.0 # via tox diff --git a/requirements/dev.txt b/requirements/dev.txt index 1fbcb828..7d397e40 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -20,11 +20,15 @@ asgiref==3.7.2 # via # -r requirements/quality.txt # django -astroid==3.0.1 +astroid==3.0.3 # via # -r requirements/quality.txt # pylint # pylint-celery +attrs==23.2.0 + # via + # -r requirements/quality.txt + # openedx-events backports-zoneinfo[tzdata]==0.2.1 # via # -r requirements/quality.txt @@ -48,7 +52,7 @@ celery==5.3.6 # -r requirements/quality.txt # edx-celeryutils # event-tracking -certifi==2023.11.17 +certifi==2024.2.2 # via # -r requirements/quality.txt # requests @@ -94,7 +98,7 @@ click-repl==0.3.0 # via # -r requirements/quality.txt # celery -code-annotations==1.5.0 +code-annotations==1.6.0 # via # -r requirements/quality.txt # edx-lint @@ -103,30 +107,30 @@ colorama==0.4.6 # via # -r requirements/ci.txt # tox -coverage[toml]==7.3.2 +coverage[toml]==7.4.1 # via # -r requirements/quality.txt # coverage # pytest-cov -cryptography==41.0.7 +cryptography==42.0.2 # via # -r requirements/quality.txt # django-fernet-fields-v2 -ddt==1.7.0 +ddt==1.7.1 # via -r requirements/quality.txt diff-cover==4.0.0 # via # -c requirements/constraints.txt # -r requirements/dev.in -dill==0.3.7 +dill==0.3.8 # via # -r requirements/quality.txt # pylint -distlib==0.3.7 +distlib==0.3.8 # via # -r requirements/ci.txt # virtualenv -django==3.2.23 +django==3.2.24 # via # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/quality.txt @@ -142,6 +146,7 @@ django==3.2.23 # edx-toggles # event-tracking # jsonfield + # openedx-events # openedx-filters django-config-models==2.5.1 # via -r requirements/quality.txt @@ -152,11 +157,11 @@ django-crum==0.7.9 # edx-toggles django-fernet-fields-v2==0.9 # via -r requirements/quality.txt -django-model-utils==4.3.1 +django-model-utils==4.4.0 # via # -r requirements/quality.txt # edx-celeryutils -django-waffle==4.0.0 +django-waffle==4.1.0 # via # -r requirements/quality.txt # edx-django-utils @@ -165,21 +170,29 @@ djangorestframework==3.14.0 # via # -r requirements/quality.txt # django-config-models -edx-celeryutils==1.2.3 +edx-celeryutils==1.2.5 # via -r requirements/quality.txt -edx-django-utils==5.9.0 +edx-django-utils==5.10.1 # via # -r requirements/quality.txt # django-config-models # edx-toggles # event-tracking + # openedx-events edx-i18n-tools==1.3.0 # via -r requirements/dev.in edx-lint==5.3.6 # via -r requirements/quality.txt -edx-toggles==5.1.0 - # via -r requirements/quality.txt -event-tracking==2.2.0 +edx-opaque-keys[django]==2.5.1 + # via + # -r requirements/quality.txt + # edx-opaque-keys + # openedx-events +edx-toggles==5.1.1 + # via + # -r requirements/quality.txt + # event-tracking +event-tracking @ git+https://github.com/edunext/event-tracking@cag/add-openedx-event-signal # via -r requirements/quality.txt exceptiongroup==1.2.0 # via @@ -187,10 +200,14 @@ exceptiongroup==1.2.0 # pytest factory-boy==3.3.0 # via -r requirements/quality.txt -faker==20.1.0 +faker==23.1.0 # via # -r requirements/quality.txt # factory-boy +fastavro==1.9.3 + # via + # -r requirements/quality.txt + # openedx-events fasteners==0.19 # via -r requirements/quality.txt filelock==3.13.1 @@ -202,7 +219,7 @@ idna==3.6 # via # -r requirements/quality.txt # requests -importlib-metadata==7.0.0 +importlib-metadata==7.0.1 # via # -r requirements/pip-tools.txt # build @@ -214,11 +231,11 @@ iniconfig==2.0.0 # pytest isodate==0.6.1 # via -r requirements/quality.txt -isort==5.12.0 +isort==5.13.2 # via # -r requirements/quality.txt # pylint -jinja2==3.1.2 +jinja2==3.1.3 # via # -r requirements/quality.txt # code-annotations @@ -230,13 +247,13 @@ jsonfield==3.1.0 # via # -r requirements/quality.txt # edx-celeryutils -kombu==5.3.4 +kombu==5.3.5 # via # -r requirements/quality.txt # celery -lxml==4.9.3 +lxml==5.1.0 # via edx-i18n-tools -markupsafe==2.1.3 +markupsafe==2.1.5 # via # -r requirements/quality.txt # jinja2 @@ -246,10 +263,14 @@ mccabe==0.7.0 # pylint mock==5.1.0 # via -r requirements/quality.txt -newrelic==9.3.0 +newrelic==9.6.0 # via # -r requirements/quality.txt # edx-django-utils +openedx-events==9.5.1 + # via + # -r requirements/quality.txt + # event-tracking openedx-filters==1.6.0 # via -r requirements/quality.txt packaging==23.2 @@ -261,7 +282,7 @@ packaging==23.2 # pyproject-api # pytest # tox -path==16.9.0 +path==16.10.0 # via edx-i18n-tools pbr==6.0.0 # via @@ -269,14 +290,14 @@ pbr==6.0.0 # stevedore pip-tools==7.3.0 # via -r requirements/pip-tools.txt -platformdirs==4.1.0 +platformdirs==4.2.0 # via # -r requirements/ci.txt # -r requirements/quality.txt # pylint # tox # virtualenv -pluggy==1.3.0 +pluggy==1.4.0 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -285,11 +306,11 @@ pluggy==1.3.0 # tox polib==1.2.0 # via edx-i18n-tools -prompt-toolkit==3.0.41 +prompt-toolkit==3.0.43 # via # -r requirements/quality.txt # click-repl -psutil==5.9.6 +psutil==5.9.8 # via # -r requirements/quality.txt # edx-django-utils @@ -299,15 +320,15 @@ pycparser==2.21 # via # -r requirements/quality.txt # cffi -pydantic==2.5.2 +pydantic==2.6.1 # via inflect -pydantic-core==2.14.5 +pydantic-core==2.16.2 # via pydantic pydocstyle==6.3.0 # via -r requirements/quality.txt pygments==2.17.2 # via diff-cover -pylint==3.0.2 +pylint==3.0.3 # via # -r requirements/quality.txt # edx-lint @@ -330,6 +351,7 @@ pylint-plugin-utils==0.8.2 pymongo==3.13.0 # via # -r requirements/quality.txt + # edx-opaque-keys # event-tracking pynacl==1.5.0 # via @@ -343,25 +365,25 @@ pyproject-hooks==1.0.0 # via # -r requirements/pip-tools.txt # build -pytest==7.4.3 +pytest==8.0.0 # via # -r requirements/quality.txt # pytest-cov # pytest-django pytest-cov==4.1.0 # via -r requirements/quality.txt -pytest-django==4.7.0 +pytest-django==4.8.0 # via -r requirements/quality.txt python-dateutil==2.8.2 # via # -r requirements/quality.txt # celery # faker -python-slugify==8.0.1 +python-slugify==8.0.4 # via # -r requirements/quality.txt # code-annotations -pytz==2023.3.post1 +pytz==2024.1 # via # -r requirements/quality.txt # django @@ -397,6 +419,7 @@ stevedore==5.1.0 # -r requirements/quality.txt # code-annotations # edx-django-utils + # edx-opaque-keys text-unidecode==1.3 # via # -r requirements/quality.txt @@ -420,26 +443,27 @@ tomlkit==0.12.3 # via # -r requirements/quality.txt # pylint -tox==4.11.4 +tox==4.12.1 # via -r requirements/ci.txt -typing-extensions==4.8.0 +typing-extensions==4.9.0 # via # -r requirements/quality.txt # annotated-types # asgiref # astroid + # edx-opaque-keys # faker # inflect # kombu # pydantic # pydantic-core # pylint -tzdata==2023.3 +tzdata==2024.1 # via # -r requirements/quality.txt # backports-zoneinfo # celery -urllib3==2.1.0 +urllib3==2.2.0 # via # -r requirements/quality.txt # requests @@ -453,7 +477,7 @@ virtualenv==20.25.0 # via # -r requirements/ci.txt # tox -wcwidth==0.2.12 +wcwidth==0.2.13 # via # -r requirements/quality.txt # prompt-toolkit diff --git a/requirements/doc.txt b/requirements/doc.txt index fa831e0f..78af0986 100644 --- a/requirements/doc.txt +++ b/requirements/doc.txt @@ -22,7 +22,11 @@ asgiref==3.7.2 # via # -r requirements/test.txt # django -babel==2.13.1 +attrs==23.2.0 + # via + # -r requirements/test.txt + # openedx-events +babel==2.14.0 # via # pydata-sphinx-theme # sphinx @@ -32,7 +36,7 @@ backports-zoneinfo[tzdata]==0.2.1 # backports-zoneinfo # celery # kombu -beautifulsoup4==4.12.2 +beautifulsoup4==4.12.3 # via pydata-sphinx-theme billiard==4.2.0 # via @@ -45,7 +49,7 @@ celery==5.3.6 # -r requirements/test.txt # edx-celeryutils # event-tracking -certifi==2023.11.17 +certifi==2024.2.2 # via # -r requirements/test.txt # requests @@ -79,22 +83,23 @@ click-repl==0.3.0 # via # -r requirements/test.txt # celery -code-annotations==1.5.0 +code-annotations==1.6.0 # via # -r requirements/test.txt # edx-toggles -coverage[toml]==7.3.2 +coverage[toml]==7.4.1 # via # -r requirements/test.txt # coverage # pytest-cov -cryptography==41.0.7 +cryptography==42.0.2 # via # -r requirements/test.txt # django-fernet-fields-v2 -ddt==1.7.0 + # secretstorage +ddt==1.7.1 # via -r requirements/test.txt -django==3.2.23 +django==3.2.24 # via # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/test.txt @@ -109,6 +114,7 @@ django==3.2.23 # edx-toggles # event-tracking # jsonfield + # openedx-events # openedx-filters django-config-models==2.5.1 # via -r requirements/test.txt @@ -119,11 +125,11 @@ django-crum==0.7.9 # edx-toggles django-fernet-fields-v2==0.9 # via -r requirements/test.txt -django-model-utils==4.3.1 +django-model-utils==4.4.0 # via # -r requirements/test.txt # edx-celeryutils -django-waffle==4.0.0 +django-waffle==4.1.0 # via # -r requirements/test.txt # edx-django-utils @@ -144,17 +150,25 @@ docutils==0.17.1 # readme-renderer # restructuredtext-lint # sphinx -edx-celeryutils==1.2.3 +edx-celeryutils==1.2.5 # via -r requirements/test.txt -edx-django-utils==5.9.0 +edx-django-utils==5.10.1 # via # -r requirements/test.txt # django-config-models # edx-toggles # event-tracking -edx-toggles==5.1.0 - # via -r requirements/test.txt -event-tracking==2.2.0 + # openedx-events +edx-opaque-keys[django]==2.5.1 + # via + # -r requirements/test.txt + # edx-opaque-keys + # openedx-events +edx-toggles==5.1.1 + # via + # -r requirements/test.txt + # event-tracking +event-tracking @ git+https://github.com/edunext/event-tracking@cag/add-openedx-event-signal # via -r requirements/test.txt exceptiongroup==1.2.0 # via @@ -162,10 +176,14 @@ exceptiongroup==1.2.0 # pytest factory-boy==3.3.0 # via -r requirements/test.txt -faker==20.1.0 +faker==23.1.0 # via # -r requirements/test.txt # factory-boy +fastavro==1.9.3 + # via + # -r requirements/test.txt + # openedx-events fasteners==0.19 # via -r requirements/test.txt idna==3.6 @@ -174,7 +192,7 @@ idna==3.6 # requests imagesize==1.4.1 # via sphinx -importlib-metadata==7.0.0 +importlib-metadata==7.0.1 # via # build # keyring @@ -187,9 +205,13 @@ iniconfig==2.0.0 # pytest isodate==0.6.1 # via -r requirements/test.txt -jaraco-classes==3.3.0 +jaraco-classes==3.3.1 # via keyring -jinja2==3.1.2 +jeepney==0.8.0 + # via + # keyring + # secretstorage +jinja2==3.1.3 # via # -r requirements/test.txt # code-annotations @@ -200,13 +222,13 @@ jsonfield==3.1.0 # edx-celeryutils keyring==24.3.0 # via twine -kombu==5.3.4 +kombu==5.3.5 # via # -r requirements/test.txt # celery markdown-it-py==3.0.0 # via rich -markupsafe==2.1.3 +markupsafe==2.1.5 # via # -r requirements/test.txt # jinja2 @@ -214,14 +236,18 @@ mdurl==0.1.2 # via markdown-it-py mock==5.1.0 # via -r requirements/test.txt -more-itertools==10.1.0 +more-itertools==10.2.0 # via jaraco-classes -newrelic==9.3.0 +newrelic==9.6.0 # via # -r requirements/test.txt # edx-django-utils nh3==0.2.15 # via readme-renderer +openedx-events==9.5.1 + # via + # -r requirements/test.txt + # event-tracking openedx-filters==1.6.0 # via -r requirements/test.txt packaging==23.2 @@ -237,15 +263,15 @@ pbr==6.0.0 # stevedore pkginfo==1.9.6 # via twine -pluggy==1.3.0 +pluggy==1.4.0 # via # -r requirements/test.txt # pytest -prompt-toolkit==3.0.41 +prompt-toolkit==3.0.43 # via # -r requirements/test.txt # click-repl -psutil==5.9.6 +psutil==5.9.8 # via # -r requirements/test.txt # edx-django-utils @@ -266,6 +292,7 @@ pygments==2.17.2 pymongo==3.13.0 # via # -r requirements/test.txt + # edx-opaque-keys # event-tracking pynacl==1.5.0 # via @@ -273,25 +300,25 @@ pynacl==1.5.0 # edx-django-utils pyproject-hooks==1.0.0 # via build -pytest==7.4.3 +pytest==8.0.0 # via # -r requirements/test.txt # pytest-cov # pytest-django pytest-cov==4.1.0 # via -r requirements/test.txt -pytest-django==4.7.0 +pytest-django==4.8.0 # via -r requirements/test.txt python-dateutil==2.8.2 # via # -r requirements/test.txt # celery # faker -python-slugify==8.0.1 +python-slugify==8.0.4 # via # -r requirements/test.txt # code-annotations -pytz==2023.3.post1 +pytz==2024.1 # via # -r requirements/test.txt # babel @@ -320,6 +347,8 @@ rfc3986==2.0.0 # via twine rich==13.7.0 # via twine +secretstorage==3.3.3 + # via keyring six==1.16.0 # via # -r requirements/test.txt @@ -360,6 +389,7 @@ stevedore==5.1.0 # code-annotations # doc8 # edx-django-utils + # edx-opaque-keys text-unidecode==1.3 # via # -r requirements/test.txt @@ -373,22 +403,23 @@ tomli==2.0.1 # coverage # pyproject-hooks # pytest -twine==4.0.2 +twine==5.0.0 # via -r requirements/doc.in -typing-extensions==4.8.0 +typing-extensions==4.9.0 # via # -r requirements/test.txt # asgiref + # edx-opaque-keys # faker # kombu # pydata-sphinx-theme # rich -tzdata==2023.3 +tzdata==2024.1 # via # -r requirements/test.txt # backports-zoneinfo # celery -urllib3==2.1.0 +urllib3==2.2.0 # via # -r requirements/test.txt # requests @@ -399,7 +430,7 @@ vine==5.1.0 # amqp # celery # kombu -wcwidth==0.2.12 +wcwidth==0.2.13 # via # -r requirements/test.txt # prompt-toolkit diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt index 93a9cee2..0e882265 100644 --- a/requirements/pip-tools.txt +++ b/requirements/pip-tools.txt @@ -8,7 +8,7 @@ build==1.0.3 # via pip-tools click==8.1.7 # via pip-tools -importlib-metadata==7.0.0 +importlib-metadata==7.0.1 # via build packaging==23.2 # via build diff --git a/requirements/pip.txt b/requirements/pip.txt index 14cb99cd..71954cc6 100644 --- a/requirements/pip.txt +++ b/requirements/pip.txt @@ -8,7 +8,7 @@ wheel==0.42.0 # via -r requirements/pip.in # The following packages are considered to be unsafe in a requirements file: -pip==23.3.1 +pip==24.0 # via -r requirements/pip.in -setuptools==69.0.2 +setuptools==69.1.0 # via -r requirements/pip.in diff --git a/requirements/quality.txt b/requirements/quality.txt index 2a88e430..de74df6c 100644 --- a/requirements/quality.txt +++ b/requirements/quality.txt @@ -18,10 +18,14 @@ asgiref==3.7.2 # via # -r requirements/test.txt # django -astroid==3.0.1 +astroid==3.0.3 # via # pylint # pylint-celery +attrs==23.2.0 + # via + # -r requirements/test.txt + # openedx-events backports-zoneinfo[tzdata]==0.2.1 # via # -r requirements/test.txt @@ -37,7 +41,7 @@ celery==5.3.6 # -r requirements/test.txt # edx-celeryutils # event-tracking -certifi==2023.11.17 +certifi==2024.2.2 # via # -r requirements/test.txt # requests @@ -75,25 +79,25 @@ click-repl==0.3.0 # via # -r requirements/test.txt # celery -code-annotations==1.5.0 +code-annotations==1.6.0 # via # -r requirements/test.txt # edx-lint # edx-toggles -coverage[toml]==7.3.2 +coverage[toml]==7.4.1 # via # -r requirements/test.txt # coverage # pytest-cov -cryptography==41.0.7 +cryptography==42.0.2 # via # -r requirements/test.txt # django-fernet-fields-v2 -ddt==1.7.0 +ddt==1.7.1 # via -r requirements/test.txt -dill==0.3.7 +dill==0.3.8 # via pylint -django==3.2.23 +django==3.2.24 # via # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/test.txt @@ -108,6 +112,7 @@ django==3.2.23 # edx-toggles # event-tracking # jsonfield + # openedx-events # openedx-filters django-config-models==2.5.1 # via -r requirements/test.txt @@ -118,11 +123,11 @@ django-crum==0.7.9 # edx-toggles django-fernet-fields-v2==0.9 # via -r requirements/test.txt -django-model-utils==4.3.1 +django-model-utils==4.4.0 # via # -r requirements/test.txt # edx-celeryutils -django-waffle==4.0.0 +django-waffle==4.1.0 # via # -r requirements/test.txt # edx-django-utils @@ -131,19 +136,27 @@ djangorestframework==3.14.0 # via # -r requirements/test.txt # django-config-models -edx-celeryutils==1.2.3 +edx-celeryutils==1.2.5 # via -r requirements/test.txt -edx-django-utils==5.9.0 +edx-django-utils==5.10.1 # via # -r requirements/test.txt # django-config-models # edx-toggles # event-tracking + # openedx-events edx-lint==5.3.6 # via -r requirements/quality.in -edx-toggles==5.1.0 - # via -r requirements/test.txt -event-tracking==2.2.0 +edx-opaque-keys[django]==2.5.1 + # via + # -r requirements/test.txt + # edx-opaque-keys + # openedx-events +edx-toggles==5.1.1 + # via + # -r requirements/test.txt + # event-tracking +event-tracking @ git+https://github.com/edunext/event-tracking@cag/add-openedx-event-signal # via -r requirements/test.txt exceptiongroup==1.2.0 # via @@ -151,10 +164,14 @@ exceptiongroup==1.2.0 # pytest factory-boy==3.3.0 # via -r requirements/test.txt -faker==20.1.0 +faker==23.1.0 # via # -r requirements/test.txt # factory-boy +fastavro==1.9.3 + # via + # -r requirements/test.txt + # openedx-events fasteners==0.19 # via -r requirements/test.txt idna==3.6 @@ -167,11 +184,11 @@ iniconfig==2.0.0 # pytest isodate==0.6.1 # via -r requirements/test.txt -isort==5.12.0 +isort==5.13.2 # via # -r requirements/quality.in # pylint -jinja2==3.1.2 +jinja2==3.1.3 # via # -r requirements/test.txt # code-annotations @@ -179,11 +196,11 @@ jsonfield==3.1.0 # via # -r requirements/test.txt # edx-celeryutils -kombu==5.3.4 +kombu==5.3.5 # via # -r requirements/test.txt # celery -markupsafe==2.1.3 +markupsafe==2.1.5 # via # -r requirements/test.txt # jinja2 @@ -191,10 +208,14 @@ mccabe==0.7.0 # via pylint mock==5.1.0 # via -r requirements/test.txt -newrelic==9.3.0 +newrelic==9.6.0 # via # -r requirements/test.txt # edx-django-utils +openedx-events==9.5.1 + # via + # -r requirements/test.txt + # event-tracking openedx-filters==1.6.0 # via -r requirements/test.txt packaging==23.2 @@ -205,17 +226,17 @@ pbr==6.0.0 # via # -r requirements/test.txt # stevedore -platformdirs==4.1.0 +platformdirs==4.2.0 # via pylint -pluggy==1.3.0 +pluggy==1.4.0 # via # -r requirements/test.txt # pytest -prompt-toolkit==3.0.41 +prompt-toolkit==3.0.43 # via # -r requirements/test.txt # click-repl -psutil==5.9.6 +psutil==5.9.8 # via # -r requirements/test.txt # edx-django-utils @@ -227,7 +248,7 @@ pycparser==2.21 # cffi pydocstyle==6.3.0 # via -r requirements/quality.in -pylint==3.0.2 +pylint==3.0.3 # via # edx-lint # pylint-celery @@ -244,30 +265,31 @@ pylint-plugin-utils==0.8.2 pymongo==3.13.0 # via # -r requirements/test.txt + # edx-opaque-keys # event-tracking pynacl==1.5.0 # via # -r requirements/test.txt # edx-django-utils -pytest==7.4.3 +pytest==8.0.0 # via # -r requirements/test.txt # pytest-cov # pytest-django pytest-cov==4.1.0 # via -r requirements/test.txt -pytest-django==4.7.0 +pytest-django==4.8.0 # via -r requirements/test.txt python-dateutil==2.8.2 # via # -r requirements/test.txt # celery # faker -python-slugify==8.0.1 +python-slugify==8.0.4 # via # -r requirements/test.txt # code-annotations -pytz==2023.3.post1 +pytz==2024.1 # via # -r requirements/test.txt # django @@ -300,6 +322,7 @@ stevedore==5.1.0 # -r requirements/test.txt # code-annotations # edx-django-utils + # edx-opaque-keys text-unidecode==1.3 # via # -r requirements/test.txt @@ -314,20 +337,21 @@ tomli==2.0.1 # pytest tomlkit==0.12.3 # via pylint -typing-extensions==4.8.0 +typing-extensions==4.9.0 # via # -r requirements/test.txt # asgiref # astroid + # edx-opaque-keys # faker # kombu # pylint -tzdata==2023.3 +tzdata==2024.1 # via # -r requirements/test.txt # backports-zoneinfo # celery -urllib3==2.1.0 +urllib3==2.2.0 # via # -r requirements/test.txt # requests @@ -337,7 +361,7 @@ vine==5.1.0 # amqp # celery # kombu -wcwidth==0.2.12 +wcwidth==0.2.13 # via # -r requirements/test.txt # prompt-toolkit diff --git a/requirements/test.txt b/requirements/test.txt index e87b91a5..7679c15a 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -18,6 +18,10 @@ asgiref==3.7.2 # via # -r requirements/base.txt # django +attrs==23.2.0 + # via + # -r requirements/base.txt + # openedx-events backports-zoneinfo[tzdata]==0.2.1 # via # -r requirements/base.txt @@ -33,7 +37,7 @@ celery==5.3.6 # -r requirements/base.txt # edx-celeryutils # event-tracking -certifi==2023.11.17 +certifi==2024.2.2 # via # -r requirements/base.txt # requests @@ -67,20 +71,20 @@ click-repl==0.3.0 # via # -r requirements/base.txt # celery -code-annotations==1.5.0 +code-annotations==1.6.0 # via # -r requirements/base.txt # -r requirements/test.in # edx-toggles -coverage[toml]==7.3.2 +coverage[toml]==7.4.1 # via # coverage # pytest-cov -cryptography==41.0.7 +cryptography==42.0.2 # via # -r requirements/base.txt # django-fernet-fields-v2 -ddt==1.7.0 +ddt==1.7.1 # via -r requirements/test.in # via # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt @@ -96,6 +100,7 @@ ddt==1.7.0 # edx-toggles # event-tracking # jsonfield + # openedx-events # openedx-filters django-config-models==2.5.1 # via -r requirements/base.txt @@ -106,11 +111,11 @@ django-crum==0.7.9 # edx-toggles django-fernet-fields-v2==0.9 # via -r requirements/base.txt -django-model-utils==4.3.1 +django-model-utils==4.4.0 # via # -r requirements/base.txt # edx-celeryutils -django-waffle==4.0.0 +django-waffle==4.1.0 # via # -r requirements/base.txt # edx-django-utils @@ -119,24 +124,36 @@ djangorestframework==3.14.0 # via # -r requirements/base.txt # django-config-models -edx-celeryutils==1.2.3 +edx-celeryutils==1.2.5 # via -r requirements/base.txt -edx-django-utils==5.9.0 +edx-django-utils==5.10.1 # via # -r requirements/base.txt # django-config-models # edx-toggles # event-tracking -edx-toggles==5.1.0 - # via -r requirements/base.txt -event-tracking==2.2.0 + # openedx-events +edx-opaque-keys[django]==2.5.1 + # via + # -r requirements/base.txt + # edx-opaque-keys + # openedx-events +edx-toggles==5.1.1 + # via + # -r requirements/base.txt + # event-tracking +event-tracking @ git+https://github.com/edunext/event-tracking@cag/add-openedx-event-signal # via -r requirements/base.txt exceptiongroup==1.2.0 # via pytest factory-boy==3.3.0 # via -r requirements/test.in -faker==20.1.0 +faker==23.1.0 # via factory-boy +fastavro==1.9.3 + # via + # -r requirements/base.txt + # openedx-events fasteners==0.19 # via -r requirements/base.txt idna==3.6 @@ -147,7 +164,7 @@ iniconfig==2.0.0 # via pytest isodate==0.6.1 # via -r requirements/base.txt -jinja2==3.1.2 +jinja2==3.1.3 # via # -r requirements/base.txt # code-annotations @@ -155,20 +172,24 @@ jsonfield==3.1.0 # via # -r requirements/base.txt # edx-celeryutils -kombu==5.3.4 +kombu==5.3.5 # via # -r requirements/base.txt # celery -markupsafe==2.1.3 +markupsafe==2.1.5 # via # -r requirements/base.txt # jinja2 mock==5.1.0 # via -r requirements/test.in -newrelic==9.3.0 +newrelic==9.6.0 # via # -r requirements/base.txt # edx-django-utils +openedx-events==9.5.1 + # via + # -r requirements/base.txt + # event-tracking openedx-filters==1.6.0 # via -r requirements/base.txt packaging==23.2 @@ -177,13 +198,13 @@ pbr==6.0.0 # via # -r requirements/base.txt # stevedore -pluggy==1.3.0 +pluggy==1.4.0 # via pytest -prompt-toolkit==3.0.41 +prompt-toolkit==3.0.43 # via # -r requirements/base.txt # click-repl -psutil==5.9.6 +psutil==5.9.8 # via # -r requirements/base.txt # edx-django-utils @@ -194,29 +215,30 @@ pycparser==2.21 pymongo==3.13.0 # via # -r requirements/base.txt + # edx-opaque-keys # event-tracking pynacl==1.5.0 # via # -r requirements/base.txt # edx-django-utils -pytest==7.4.3 +pytest==8.0.0 # via # pytest-cov # pytest-django pytest-cov==4.1.0 # via -r requirements/test.in -pytest-django==4.7.0 +pytest-django==4.8.0 # via -r requirements/test.in python-dateutil==2.8.2 # via # -r requirements/base.txt # celery # faker -python-slugify==8.0.1 +python-slugify==8.0.4 # via # -r requirements/base.txt # code-annotations -pytz==2023.3.post1 +pytz==2024.1 # via # -r requirements/base.txt # django @@ -246,6 +268,7 @@ stevedore==5.1.0 # -r requirements/base.txt # code-annotations # edx-django-utils + # edx-opaque-keys text-unidecode==1.3 # via # -r requirements/base.txt @@ -256,18 +279,19 @@ tomli==2.0.1 # via # coverage # pytest -typing-extensions==4.8.0 +typing-extensions==4.9.0 # via # -r requirements/base.txt # asgiref + # edx-opaque-keys # faker # kombu -tzdata==2023.3 +tzdata==2024.1 # via # -r requirements/base.txt # backports-zoneinfo # celery -urllib3==2.1.0 +urllib3==2.2.0 # via # -r requirements/base.txt # requests @@ -277,7 +301,7 @@ vine==5.1.0 # amqp # celery # kombu -wcwidth==0.2.12 +wcwidth==0.2.13 # via # -r requirements/base.txt # prompt-toolkit