diff --git a/edx_proctoring/api.py b/edx_proctoring/api.py index 748ff5dce76..135e0874e04 100644 --- a/edx_proctoring/api.py +++ b/edx_proctoring/api.py @@ -1662,7 +1662,6 @@ def update_attempt_status(attempt_id, to_status, } ) email = create_proctoring_attempt_status_email( - user_id, exam_attempt_obj, course_name, exam['course_id'] @@ -1730,7 +1729,7 @@ def update_attempt_status(attempt_id, to_status, return attempt['id'] -def create_proctoring_attempt_status_email(user_id, exam_attempt_obj, course_name, course_id): +def create_proctoring_attempt_status_email(exam_attempt_obj, course_name, course_id): """ Creates an email about change in proctoring attempt status. """ @@ -1738,7 +1737,6 @@ def create_proctoring_attempt_status_email(user_id, exam_attempt_obj, course_nam if not exam_attempt_obj.taking_as_proctored or exam_attempt_obj.is_sample_attempt: return None - user = USER_MODEL.objects.get(id=user_id) email_subject = ( _('Proctoring Results For {course_name} {exam_name}').format( course_name=course_name, @@ -1748,16 +1746,13 @@ def create_proctoring_attempt_status_email(user_id, exam_attempt_obj, course_nam status = exam_attempt_obj.status if status == ProctoredExamStudentAttemptStatus.submitted: template_name = 'proctoring_attempt_submitted_email.html' - email_subject = ( - _('Proctoring Review In Progress For {course_name} {exam_name}').format( - course_name=course_name, - exam_name=exam_attempt_obj.proctored_exam.exam_name - ) - ) + email_subject = 'Proctoring attempt submitted' elif status == ProctoredExamStudentAttemptStatus.verified: template_name = 'proctoring_attempt_satisfactory_email.html' + email_subject = 'Proctoring attempt verified' elif status == ProctoredExamStudentAttemptStatus.rejected: template_name = 'proctoring_attempt_unsatisfactory_email.html' + email_subject = 'Proctoring attempt rejected' else: # Don't send an email for any other attempt status codes return None @@ -1767,11 +1762,6 @@ def create_proctoring_attempt_status_email(user_id, exam_attempt_obj, course_nam course_home_url = get_course_home_url(exam_attempt_obj.proctored_exam.course_id) exam_name = exam_attempt_obj.proctored_exam.exam_name - support_email_subject = _('Proctored exam {exam_name} in {course_name} for user {username}').format( - exam_name=exam_name, - course_name=course_name, - username=user.username, - ) scheme = 'https' if getattr(settings, 'HTTPS', 'on') == 'on' else 'http' default_contact_url = f'{scheme}://{constants.SITE_NAME}/support/contact_us' @@ -1788,13 +1778,11 @@ def create_proctoring_attempt_status_email(user_id, exam_attempt_obj, course_nam contact_url_text = contact_url body = email_template.render({ - 'username': user.username, 'course_url': course_home_url, 'course_name': course_name, 'exam_name': exam_name, 'status': status, 'platform': constants.PLATFORM_NAME, - 'support_email_subject': support_email_subject, 'contact_url': contact_url, 'contact_url_text': contact_url_text, }) diff --git a/edx_proctoring/templates/emails/proctoring_attempt_satisfactory_email.html b/edx_proctoring/templates/emails/proctoring_attempt_satisfactory_email.html index f98832eec83..56b64c86d61 100644 --- a/edx_proctoring/templates/emails/proctoring_attempt_satisfactory_email.html +++ b/edx_proctoring/templates/emails/proctoring_attempt_satisfactory_email.html @@ -3,7 +3,7 @@
{% block introduction %} {% blocktrans %} - Hello {{ username }}, + Hello, {% endblocktrans %} {% endblock %}
diff --git a/edx_proctoring/templates/emails/proctoring_attempt_submitted_email.html b/edx_proctoring/templates/emails/proctoring_attempt_submitted_email.html index 2107cef5e42..9997990d6a2 100644 --- a/edx_proctoring/templates/emails/proctoring_attempt_submitted_email.html +++ b/edx_proctoring/templates/emails/proctoring_attempt_submitted_email.html @@ -3,7 +3,7 @@{% block introduction %} {% blocktrans %} - Hello {{ username }}, + Hello, {% endblocktrans %} {% endblock %}
diff --git a/edx_proctoring/templates/emails/proctoring_attempt_unsatisfactory_email.html b/edx_proctoring/templates/emails/proctoring_attempt_unsatisfactory_email.html index 14d6db42ccd..c932357799a 100644 --- a/edx_proctoring/templates/emails/proctoring_attempt_unsatisfactory_email.html +++ b/edx_proctoring/templates/emails/proctoring_attempt_unsatisfactory_email.html @@ -3,7 +3,7 @@{% block introduction %} {% blocktrans %} - Hello {{ username }}, + Hello, {% endblocktrans %} {% endblock %}
diff --git a/edx_proctoring/tests/test_email.py b/edx_proctoring/tests/test_email.py index e9a5313b854..4df3595c5e0 100644 --- a/edx_proctoring/tests/test_email.py +++ b/edx_proctoring/tests/test_email.py @@ -54,17 +54,17 @@ def tearDown(self): @ddt.data( [ ProctoredExamStudentAttemptStatus.submitted, - 'Proctoring Review In Progress', + 'Proctoring attempt submitted', 'was submitted successfully', ], [ ProctoredExamStudentAttemptStatus.verified, - 'Proctoring Results', + 'Proctoring attempt verified', 'was reviewed and you met all proctoring requirements', ], [ ProctoredExamStudentAttemptStatus.rejected, - 'Proctoring Results', + 'Proctoring attempt rejected', 'the course team has identified one or more violations', ] ) @@ -84,11 +84,10 @@ def test_send_email(self, status, expected_subject, expected_message_string): # Verify the subject actual_subject = self._normalize_whitespace(mail.outbox[0].subject) self.assertIn(expected_subject, actual_subject) - self.assertIn(self.exam_name, actual_subject) # Verify the body actual_body = self._normalize_whitespace(mail.outbox[0].body) - self.assertIn('Hello tester,', actual_body) + self.assertIn('Hello,', actual_body) self.assertIn('Your proctored exam "Test Exam"', actual_body) self.assertIn(credit_state['course_name'], actual_body) self.assertIn(expected_message_string, actual_body) @@ -223,8 +222,7 @@ def test_send_email_unicode(self): # Verify the subject actual_subject = self._normalize_whitespace(mail.outbox[0].subject) - self.assertIn('Proctoring Review In Progress', actual_subject) - self.assertIn(course_name, actual_subject) + self.assertIn('Proctoring attempt submitted', actual_subject) # Verify the body actual_body = self._normalize_whitespace(mail.outbox[0].body) diff --git a/requirements/base.txt b/requirements/base.txt index 98e4e3f66f6..dd84a658a49 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -8,11 +8,13 @@ amqp==5.2.0 # via kombu appdirs==1.4.4 # via fs -asgiref==3.7.2 +asgiref==3.8.1 # via django backports-zoneinfo[tzdata]==0.2.1; python_version < '3.9' # via # celery + # django + # djangorestframework # kombu billiard==4.2.0 # via celery @@ -35,16 +37,19 @@ click==8.1.7 # click-didyoumean # click-plugins # click-repl + # code-annotations # edx-django-utils -click-didyoumean==0.3.0 +click-didyoumean==0.3.1 # via celery click-plugins==1.1.1 # via celery click-repl==0.3.0 # via celery -cryptography==42.0.2 +code-annotations==1.7.0 + # via edx-toggles +cryptography==42.0.5 # via pyjwt -django==3.2.24 +django==4.2.11 # via # -c requirements/common_constraints.txt # -r requirements/base.in @@ -55,16 +60,19 @@ django==3.2.24 # drf-jwt # edx-django-utils # edx-drf-extensions + # edx-toggles # edx-when # event-tracking # jsonfield + # openedx-events django-crum==0.7.9 # via # -r requirements/base.in # edx-django-utils + # edx-toggles django-ipware==6.0.4 # via -r requirements/base.in -django-model-utils==4.3.1 +django-model-utils==4.4.0 # via # -r requirements/base.in # edx-when @@ -77,42 +85,52 @@ django-waffle==4.1.0 # -r requirements/base.in # edx-django-utils # edx-drf-extensions + # edx-toggles django-webpack-loader==0.7.0 # via # -c requirements/constraints.txt # -r requirements/base.in -djangorestframework==3.14.0 +djangorestframework==3.15.1 # via # -r requirements/base.in # drf-jwt # edx-drf-extensions drf-jwt==1.19.2 # via edx-drf-extensions -edx-django-utils==5.10.1 +edx-django-utils==5.11.0 # via # edx-drf-extensions # edx-rest-api-client + # edx-toggles # edx-when # event-tracking + # openedx-events edx-drf-extensions==10.2.0 # via # -r requirements/base.in # edx-when -edx-opaque-keys==2.5.1 +edx-opaque-keys[django]==2.5.1 # via # -r requirements/base.in # edx-drf-extensions # edx-when + # openedx-events edx-rest-api-client==5.6.1 # via -r requirements/base.in +edx-toggles==5.1.1 + # via event-tracking edx-when==2.4.0 # via -r requirements/base.in -event-tracking==2.2.0 +event-tracking==2.3.1 # via -r requirements/base.in +fastavro==1.9.4 + # via openedx-events fs==2.4.16 # via xblock idna==3.6 # via requests +jinja2==3.1.3 + # via code-annotations jsonfield==3.1.0 # via -r requirements/base.in kombu==5.3.5 @@ -123,10 +141,13 @@ mako==1.3.2 # via xblock markupsafe==2.1.5 # via + # jinja2 # mako # xblock -newrelic==9.6.0 +newrelic==9.7.1 # via edx-django-utils +openedx-events==9.5.2 + # via event-tracking pbr==6.0.0 # via stevedore prompt-toolkit==3.0.43 @@ -143,29 +164,30 @@ pyjwt[crypto]==2.8.0 # drf-jwt # edx-drf-extensions # edx-rest-api-client - # pyjwt pymongo==3.13.0 # via # edx-opaque-keys # event-tracking pynacl==1.5.0 # via edx-django-utils -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 # via # -r requirements/base.in # celery # xblock -python-ipware==2.0.1 +python-ipware==2.0.2 # via django-ipware +python-slugify==8.0.4 + # via code-annotations pytz==2024.1 # via # -r requirements/base.in - # django - # djangorestframework # event-tracking # xblock pyyaml==6.0.1 - # via xblock + # via + # code-annotations + # xblock requests==2.31.0 # via # edx-drf-extensions @@ -186,20 +208,23 @@ slumber==0.7.1 # via edx-rest-api-client sqlparse==0.4.4 # via django -stevedore==5.1.0 +stevedore==5.2.0 # via + # code-annotations # edx-django-utils # edx-opaque-keys -typing-extensions==4.9.0 +text-unidecode==1.3 + # via python-slugify +typing-extensions==4.10.0 # via # asgiref # edx-opaque-keys # kombu -tzdata==2023.4 +tzdata==2024.1 # via # backports-zoneinfo # celery -urllib3==2.2.0 +urllib3==2.2.1 # via requests vine==5.1.0 # via @@ -212,7 +237,7 @@ web-fragments==2.1.0 # via xblock webob==1.8.7 # via xblock -xblock==1.10.0 +xblock==3.0.0 # via edx-when # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/celery50.txt b/requirements/celery50.txt index 71b29858a83..1bd08f5588f 100644 --- a/requirements/celery50.txt +++ b/requirements/celery50.txt @@ -2,7 +2,7 @@ amqp==5.2.0 billiard==4.2.0 celery==5.3.6 click==8.1.7 -click-didyoumean==0.3.0 +click-didyoumean==0.3.1 click-repl==0.3.0 kombu==5.3.5 prompt-toolkit==3.0.43 diff --git a/requirements/ci.txt b/requirements/ci.txt index 5c0a64f6501..2e918e8dec6 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -4,21 +4,21 @@ # # make upgrade # -cachetools==5.3.2 +cachetools==5.3.3 # via tox chardet==5.2.0 # via tox colorama==0.4.6 # via tox -coverage==7.4.1 +coverage==7.4.4 # via -r requirements/ci.in distlib==0.3.8 # via virtualenv -filelock==3.13.1 +filelock==3.13.3 # via # tox # virtualenv -packaging==23.2 +packaging==24.0 # via # pyproject-api # tox @@ -34,7 +34,7 @@ tomli==2.0.1 # via # pyproject-api # tox -tox==4.12.1 +tox==4.14.2 # via -r requirements/ci.in -virtualenv==20.25.0 +virtualenv==20.25.1 # via tox diff --git a/requirements/common_constraints.txt b/requirements/common_constraints.txt index 974e750dafa..2b6d23d193b 100644 --- a/requirements/common_constraints.txt +++ b/requirements/common_constraints.txt @@ -18,7 +18,7 @@ # using LTS django version -Django<4.0 +Django<5.0 # elasticsearch>=7.14.0 includes breaking changes in it which caused issues in discovery upgrade process. # elastic search changelog: https://www.elastic.co/guide/en/enterprise-search/master/release-notes-7.14.0.html @@ -26,3 +26,12 @@ elasticsearch<7.14.0 # django-simple-history>3.0.0 adds indexing and causes a lot of migrations to be affected + +# opentelemetry requires version 6.x at the moment: +# https://github.com/open-telemetry/opentelemetry-python/issues/3570 +# Normally this could be added as a constraint in edx-django-utils, where we're +# adding the opentelemetry dependency. However, when we compile pip-tools.txt, +# that uses version 7.x, and then there's no undoing that when compiling base.txt. +# So we need to pin it globally, for now. +# Ticket for unpinning: https://github.com/openedx/edx-lint/issues/407 +importlib-metadata<7 diff --git a/requirements/dev.txt b/requirements/dev.txt index e193402e8db..4fb18bec85a 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -6,13 +6,15 @@ # annotated-types==0.6.0 # via pydantic -asgiref==3.7.2 +asgiref==3.8.1 # via django -astroid==3.0.3 +astroid==3.1.0 # via # pylint # pylint-celery -cachetools==5.3.2 +backports-zoneinfo==0.2.1 + # via django +cachetools==5.3.3 # via tox chardet==5.2.0 # via @@ -27,7 +29,7 @@ click==8.1.7 # typer click-log==0.4.0 # via edx-lint -code-annotations==1.6.0 +code-annotations==1.7.0 # via edx-lint colorama==0.4.6 # via @@ -39,7 +41,7 @@ dill==0.3.8 # via pylint distlib==0.3.8 # via virtualenv -django==3.2.24 +django==4.2.11 # via # -c requirements/common_constraints.txt # -r requirements/dev.in @@ -53,12 +55,13 @@ edx-lint==5.3.6 # via # -r requirements/dev.in # -r requirements/quality.in -filelock==3.13.1 +filelock==3.13.3 # via # tox # virtualenv -importlib-metadata==7.0.1 +importlib-metadata==6.11.0 # via + # -c requirements/common_constraints.txt # rstcheck # rstcheck-core isort==5.13.2 @@ -79,7 +82,7 @@ mccabe==0.7.0 # via pylint mdurl==0.1.2 # via markdown-it-py -packaging==23.2 +packaging==24.0 # via # pyproject-api # tox @@ -104,9 +107,9 @@ polib==1.2.0 # via edx-i18n-tools pycodestyle==2.11.1 # via -r requirements/quality.in -pydantic==2.6.1 +pydantic==2.6.4 # via rstcheck-core -pydantic-core==2.16.2 +pydantic-core==2.16.3 # via pydantic pydocstyle==6.3.0 # via -r requirements/quality.in @@ -114,7 +117,7 @@ pygments==2.17.2 # via # diff-cover # rich -pylint==3.0.3 +pylint==3.1.0 # via # edx-lint # pylint-celery @@ -130,19 +133,17 @@ pylint-plugin-utils==0.8.2 # pylint-django pyproject-api==1.6.1 # via tox -python-slugify==8.0.3 +python-slugify==8.0.4 # via code-annotations -pytz==2024.1 - # via django pyyaml==6.0.1 # via # code-annotations # edx-i18n-tools -rich==13.7.0 +rich==13.7.1 # via typer -rstcheck==6.2.0 +rstcheck==6.2.1 # via -r requirements/quality.in -rstcheck-core==1.2.0 +rstcheck-core==1.2.1 # via rstcheck shellingham==1.5.4 # via typer @@ -152,7 +153,7 @@ snowballstemmer==2.2.0 # via pydocstyle sqlparse==0.4.4 # via django -stevedore==5.1.0 +stevedore==5.2.0 # via code-annotations text-unidecode==1.3 # via python-slugify @@ -161,15 +162,13 @@ tomli==2.0.1 # pylint # pyproject-api # tox -tomlkit==0.12.3 +tomlkit==0.12.4 # via pylint -tox==4.12.1 +tox==4.14.2 # via -r requirements/dev.in -typer[all]==0.9.0 - # via - # rstcheck - # typer -typing-extensions==4.9.0 +typer[all]==0.10.0 + # via rstcheck +typing-extensions==4.10.0 # via # annotated-types # asgiref @@ -181,9 +180,9 @@ typing-extensions==4.9.0 # rstcheck # rstcheck-core # typer -virtualenv==20.25.0 +virtualenv==20.25.1 # via tox -wheel==0.42.0 +wheel==0.43.0 # via -r requirements/dev.in -zipp==3.17.0 +zipp==3.18.1 # via importlib-metadata diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt index 570054a75e9..9b3d8692300 100644 --- a/requirements/pip-tools.txt +++ b/requirements/pip-tools.txt @@ -4,28 +4,32 @@ # # make upgrade # -build==1.0.3 +build==1.1.1 # via pip-tools click==8.1.7 # via # -c requirements/constraints.txt # pip-tools -importlib-metadata==7.0.1 - # via build -packaging==23.2 +importlib-metadata==6.11.0 + # via + # -c requirements/common_constraints.txt + # build +packaging==24.0 # via build -pip-tools==7.3.0 +pip-tools==7.4.1 # via -r requirements/pip-tools.in pyproject-hooks==1.0.0 - # via build + # via + # build + # pip-tools tomli==2.0.1 # via # build # pip-tools # pyproject-hooks -wheel==0.42.0 +wheel==0.43.0 # via pip-tools -zipp==3.17.0 +zipp==3.18.1 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/pip.txt b/requirements/pip.txt index dffa29d84aa..ffca1b7c6c7 100644 --- a/requirements/pip.txt +++ b/requirements/pip.txt @@ -4,7 +4,7 @@ # # make upgrade # -wheel==0.42.0 +wheel==0.43.0 # via -r requirements/pip.in # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/quality.txt b/requirements/quality.txt index acf8817f1d6..569f11f5b88 100644 --- a/requirements/quality.txt +++ b/requirements/quality.txt @@ -6,12 +6,14 @@ # annotated-types==0.6.0 # via pydantic -asgiref==3.7.2 +asgiref==3.8.1 # via django -astroid==3.0.3 +astroid==3.1.0 # via # pylint # pylint-celery +backports-zoneinfo==0.2.1 + # via django click==8.1.7 # via # -c requirements/constraints.txt @@ -21,13 +23,13 @@ click==8.1.7 # typer click-log==0.4.0 # via edx-lint -code-annotations==1.6.0 +code-annotations==1.7.0 # via edx-lint colorama==0.4.6 # via typer dill==0.3.8 # via pylint -django==3.2.24 +django==4.2.11 # via # -c requirements/common_constraints.txt # -r requirements/quality.in @@ -35,8 +37,9 @@ docutils==0.20.1 # via rstcheck-core edx-lint==5.3.6 # via -r requirements/quality.in -importlib-metadata==7.0.1 +importlib-metadata==6.11.0 # via + # -c requirements/common_constraints.txt # rstcheck # rstcheck-core isort==5.13.2 @@ -59,15 +62,15 @@ platformdirs==4.2.0 # via pylint pycodestyle==2.11.1 # via -r requirements/quality.in -pydantic==2.6.1 +pydantic==2.6.4 # via rstcheck-core -pydantic-core==2.16.2 +pydantic-core==2.16.3 # via pydantic pydocstyle==6.3.0 # via -r requirements/quality.in pygments==2.17.2 # via rich -pylint==3.0.3 +pylint==3.1.0 # via # edx-lint # pylint-celery @@ -81,17 +84,15 @@ pylint-plugin-utils==0.8.2 # via # pylint-celery # pylint-django -python-slugify==8.0.3 +python-slugify==8.0.4 # via code-annotations -pytz==2024.1 - # via django pyyaml==6.0.1 # via code-annotations -rich==13.7.0 +rich==13.7.1 # via typer -rstcheck==6.2.0 +rstcheck==6.2.1 # via -r requirements/quality.in -rstcheck-core==1.2.0 +rstcheck-core==1.2.1 # via rstcheck shellingham==1.5.4 # via typer @@ -101,19 +102,17 @@ snowballstemmer==2.2.0 # via pydocstyle sqlparse==0.4.4 # via django -stevedore==5.1.0 +stevedore==5.2.0 # via code-annotations text-unidecode==1.3 # via python-slugify tomli==2.0.1 # via pylint -tomlkit==0.12.3 +tomlkit==0.12.4 # via pylint -typer[all]==0.9.0 - # via - # rstcheck - # typer -typing-extensions==4.9.0 +typer[all]==0.10.0 + # via rstcheck +typing-extensions==4.10.0 # via # annotated-types # asgiref @@ -125,5 +124,5 @@ typing-extensions==4.9.0 # rstcheck # rstcheck-core # typer -zipp==3.17.0 +zipp==3.18.1 # via importlib-metadata diff --git a/requirements/test.txt b/requirements/test.txt index 715a8bdd350..221c4b70461 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -7,11 +7,13 @@ # via kombu appdirs==1.4.4 # via fs -asgiref==3.7.2 +asgiref==3.8.1 # via django backports-zoneinfo[tzdata]==0.2.1; python_version < '3.9' # via # celery + # django + # djangorestframework # kombu # via celery # via @@ -37,15 +39,15 @@ charset-normalizer==3.3.2 click-plugins==1.1.1 # via celery # via celery -code-annotations==1.6.0 - # via -r requirements/test.in -coverage[toml]==7.4.1 +code-annotations==1.7.0 # via - # coverage - # pytest-cov -cryptography==42.0.2 + # -r requirements/test.in + # edx-toggles +coverage[toml]==7.4.4 + # via pytest-cov +cryptography==42.0.5 # via pyjwt -ddt==1.7.1 +ddt==1.7.2 # via -r requirements/test.in # via # -c requirements/common_constraints.txt @@ -58,16 +60,19 @@ ddt==1.7.1 # edx-django-utils # edx-drf-extensions # edx-i18n-tools + # edx-toggles # edx-when # event-tracking # jsonfield + # openedx-events django-crum==0.7.9 # via # -r requirements/base.in # edx-django-utils + # edx-toggles django-ipware==6.0.4 # via -r requirements/base.in -django-model-utils==4.3.1 +django-model-utils==4.4.0 # via # -r requirements/base.in # edx-when @@ -80,6 +85,7 @@ django-waffle==4.1.0 # -r requirements/base.in # edx-django-utils # edx-drf-extensions + # edx-toggles django-webpack-loader==0.7.0 # via # -c requirements/constraints.txt @@ -90,33 +96,40 @@ django-webpack-loader==0.7.0 # edx-drf-extensions drf-jwt==1.19.2 # via edx-drf-extensions -edx-django-utils==5.10.1 +edx-django-utils==5.11.0 # via # edx-drf-extensions # edx-rest-api-client + # edx-toggles # edx-when # event-tracking + # openedx-events edx-drf-extensions==10.2.0 # via # -r requirements/base.in # edx-when edx-i18n-tools==1.3.0 # via -r requirements/test.in -edx-opaque-keys==2.5.1 +edx-opaque-keys[django]==2.5.1 # via # -r requirements/base.in # edx-drf-extensions # edx-when + # openedx-events edx-rest-api-client==5.6.1 # via -r requirements/base.in +edx-toggles==5.1.1 + # via event-tracking edx-when==2.4.0 # via -r requirements/base.in -event-tracking==2.2.0 +event-tracking==2.3.1 # via -r requirements/base.in exceptiongroup==1.2.0 # via pytest execnet==2.0.2 # via pytest-xdist +fastavro==1.9.4 + # via openedx-events freezegun==1.4.0 # via -r requirements/test.in fs==2.4.16 @@ -147,9 +160,11 @@ markupsafe==2.1.5 # xblock mock==5.1.0 # via -r requirements/test.in -newrelic==9.6.0 +newrelic==9.7.1 # via edx-django-utils -packaging==23.2 +openedx-events==9.5.2 + # via event-tracking +packaging==24.0 # via pytest path==16.10.0 # via edx-i18n-tools @@ -172,39 +187,36 @@ pyjwt[crypto]==2.8.0 # drf-jwt # edx-drf-extensions # edx-rest-api-client - # pyjwt pymongo==3.13.0 # via # edx-opaque-keys # event-tracking pynacl==1.5.0 # via edx-django-utils -pytest==8.0.0 +pytest==8.1.1 # via # pytest-cov # pytest-django # pytest-xdist -pytest-cov==4.1.0 +pytest-cov==5.0.0 # via -r requirements/test.in pytest-django==4.8.0 # via -r requirements/test.in pytest-xdist==3.5.0 # via -r requirements/test.in -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 # via # -r requirements/base.in # celery # freezegun # xblock -python-ipware==2.0.1 +python-ipware==2.0.2 # via django-ipware -python-slugify==8.0.3 +python-slugify==8.0.4 # via code-annotations pytz==2024.1 # via # -r requirements/base.in - # django - # djangorestframework # event-tracking # xblock pyyaml==6.0.1 @@ -220,7 +232,7 @@ requests==2.31.0 # httmock # responses # slumber -responses==0.24.1 +responses==0.25.0 # via -r requirements/test.in rules==3.3 # via -r requirements/base.in @@ -237,12 +249,12 @@ slumber==0.7.1 # via edx-rest-api-client sqlparse==0.4.4 # via django -stevedore==5.1.0 +stevedore==5.2.0 # via # code-annotations # edx-django-utils # edx-opaque-keys -testfixtures==7.2.2 +testfixtures==8.1.0 # via -r requirements/test.in text-unidecode==1.3 # via python-slugify @@ -250,16 +262,16 @@ tomli==2.0.1 # via # coverage # pytest -typing-extensions==4.9.0 +typing-extensions==4.10.0 # via # asgiref # edx-opaque-keys # kombu -tzdata==2023.4 +tzdata==2024.1 # via # backports-zoneinfo # celery -urllib3==2.2.0 +urllib3==2.2.1 # via # requests # responses @@ -273,7 +285,7 @@ web-fragments==2.1.0 # via xblock webob==1.8.7 # via xblock -xblock==1.10.0 +xblock==3.0.0 # via edx-when # The following packages are considered to be unsafe in a requirements file: