diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c1160fc07b..941460933a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ jobs: fail-fast: false matrix: os: ["ubuntu-latest"] - python-version: ["3.8", "3.11", "3.12"] + python-version: ["3.11", "3.12"] node-version: ["20"] toxenv: [ @@ -56,7 +56,7 @@ jobs: run: tox - name: Run Coverage - if: matrix.python-version == '3.8' && matrix.toxenv == 'django42-drflatest' + if: matrix.python-version == '3.12' && matrix.toxenv == 'django42-drflatest' uses: codecov/codecov-action@v4 with: flags: unittests diff --git a/.github/workflows/migrations-check.yml b/.github/workflows/migrations-check.yml index 9471a83a33..1d34e9b389 100644 --- a/.github/workflows/migrations-check.yml +++ b/.github/workflows/migrations-check.yml @@ -14,7 +14,7 @@ jobs: strategy: matrix: os: [ ubuntu-latest ] - python-version: [ "3.8", "3.11", "3.12" ] + python-version: ["3.11", "3.12"] steps: - name: Checkout repo diff --git a/edx_proctoring/__init__.py b/edx_proctoring/__init__.py index 8078aa3666..2a16027d96 100644 --- a/edx_proctoring/__init__.py +++ b/edx_proctoring/__init__.py @@ -3,4 +3,4 @@ """ # Be sure to update the version number in edx_proctoring/package.json -__version__ = '5.0.0' +__version__ = '5.0.1' diff --git a/edx_proctoring/api.py b/edx_proctoring/api.py index 117b725576..62742617a5 100644 --- a/edx_proctoring/api.py +++ b/edx_proctoring/api.py @@ -160,6 +160,7 @@ def get_proctoring_settings_by_exam_id(exam_id): return proctoring_settings_data +# pylint: disable=too-many-positional-arguments def create_exam(course_id, content_id, exam_name, time_limit_mins, due_date=None, is_proctored=True, is_practice_exam=False, external_id=None, is_active=True, hide_after_due=False, backend=None): @@ -365,6 +366,7 @@ def _get_review_policy_by_exam_id(exam_id): return None +# pylint: disable=too-many-positional-arguments def update_exam(exam_id, exam_name=None, time_limit_mins=None, due_date=constants.MINIMUM_TIME, is_proctored=None, is_practice_exam=None, external_id=None, is_active=None, hide_after_due=None, backend=None): @@ -920,6 +922,7 @@ def _create_and_decline_attempt(exam_id, user_id): ) +# pylint: disable=too-many-positional-arguments def _register_proctored_exam_attempt(user_id, exam_id, exam, attempt_code, review_policy, verified_name=None): """ Call the proctoring backend to register the exam attempt. If there are exceptions @@ -1390,7 +1393,7 @@ def _is_attempt_resumable(attempt_obj, to_status): return attempt_obj.is_resumable -# pylint: disable=inconsistent-return-statements +# pylint: disable=inconsistent-return-statements,too-many-positional-arguments def update_attempt_status(attempt_id, to_status, raise_if_not_found=True, cascade_effects=True, timeout_timestamp=None, update_attributable_to=None): @@ -1669,6 +1672,7 @@ def update_attempt_status(attempt_id, to_status, if email: try: email.send() + # pylint: disable=broad-exception-caught except Exception as err: log.exception( ('Exception occurred while trying to send proctoring attempt ' diff --git a/edx_proctoring/backends/backend.py b/edx_proctoring/backends/backend.py index 2b4ac8c0fd..78fea1595c 100644 --- a/edx_proctoring/backends/backend.py +++ b/edx_proctoring/backends/backend.py @@ -112,7 +112,7 @@ def get_attempt(self, attempt): """ return attempt - # pylint: disable=unused-argument + # pylint: disable=unused-argument,too-many-positional-arguments def get_instructor_url( self, course_id, user, exam_id=None, attempt_id=None, show_configuration_dashboard=False, encrypted_video_review_url=None diff --git a/edx_proctoring/backends/rest.py b/edx_proctoring/backends/rest.py index 963fc1d46a..f10e756ab6 100644 --- a/edx_proctoring/backends/rest.py +++ b/edx_proctoring/backends/rest.py @@ -274,7 +274,7 @@ def on_exam_saved(self, exam): try: response = self.session.post(url, json=exam) data = response.json() - except Exception as exc: + except Exception as exc: # pylint: disable=broad-exception-caught if response: if hasattr(exc, 'response') and exc.response is not None: content = exc.response.content @@ -289,6 +289,7 @@ def on_exam_saved(self, exam): data = {} return data.get('id') + # pylint: disable=too-many-positional-arguments def get_instructor_url( self, course_id, user, exam_id=None, attempt_id=None, show_configuration_dashboard=False, encrypted_video_review_url=None diff --git a/edx_proctoring/backends/software_secure.py b/edx_proctoring/backends/software_secure.py index 3c1f2b81a8..ab83b5f5af 100644 --- a/edx_proctoring/backends/software_secure.py +++ b/edx_proctoring/backends/software_secure.py @@ -39,6 +39,7 @@ class SoftwareSecureBackendProvider(ProctoringBackendProvider): verbose_name = 'RPNow' passing_statuses = SoftwareSecureReviewStatus.passing_statuses + # pylint: disable=too-many-positional-arguments def __init__(self, organization, exam_sponsor, exam_register_endpoint, secret_key_id, secret_key, crypto_key, software_download_url, video_review_aes_key=None, send_email=False, **kwargs): @@ -391,6 +392,7 @@ def get_video_review_aes_key(self): """ return self.video_review_aes_key + # pylint: disable=too-many-positional-arguments def get_instructor_url( self, course_id, user, exam_id=None, attempt_id=None, show_configuration_dashboard=False, encrypted_video_review_url=None @@ -409,7 +411,7 @@ def get_instructor_url( # reformat video url as per MST-871 findings reformatted_url = decrypted_video_url.replace('DirectLink-Generic', 'DirectLink-HTML5') return reformatted_url - except Exception as err: + except Exception as err: # pylint: disable=broad-exception-caught log.exception( 'Could not decrypt video url for attempt_id=%(attempt_id)s ' 'due to the following error: %(error_string)s', diff --git a/edx_proctoring/backends/tests/test_backend.py b/edx_proctoring/backends/tests/test_backend.py index 5695acb3f3..e51b0d88a9 100644 --- a/edx_proctoring/backends/tests/test_backend.py +++ b/edx_proctoring/backends/tests/test_backend.py @@ -88,6 +88,7 @@ def on_exam_saved(self, exam): self.last_exam = exam return exam.get('external_id', None) or 'externalid' + # pylint: disable=too-many-positional-arguments def get_instructor_url( self, course_id, user, exam_id=None, attempt_id=None, show_configuration_dashboard=False, encrypted_video_review_url=None diff --git a/edx_proctoring/models.py b/edx_proctoring/models.py index 38bb91bb82..a4f8bceaba 100644 --- a/edx_proctoring/models.py +++ b/edx_proctoring/models.py @@ -428,6 +428,7 @@ class Meta: verbose_name = 'proctored exam attempt' @classmethod + # pylint: disable=too-many-positional-arguments def create_exam_attempt(cls, exam_id, user_id, attempt_code, taking_as_proctored, is_sample_attempt, external_id, review_policy_id=None, status=None, time_remaining_seconds=None): diff --git a/edx_proctoring/rules.py b/edx_proctoring/rules.py index 81a084fe57..8ccd74e886 100644 --- a/edx_proctoring/rules.py +++ b/edx_proctoring/rules.py @@ -12,5 +12,4 @@ def is_in_reviewer_group(user, attempt): return user.groups.filter(name=backend_group).exists() -# pylint: disable-next=unsupported-binary-operation rules.add_perm('edx_proctoring.can_review_attempt', is_in_reviewer_group | rules.is_staff) diff --git a/edx_proctoring/tests/test_api.py b/edx_proctoring/tests/test_api.py index f6d20a863e..0850562942 100644 --- a/edx_proctoring/tests/test_api.py +++ b/edx_proctoring/tests/test_api.py @@ -2636,6 +2636,7 @@ def test_requirement_status_order(self): (None, False, 2, 1, 1, 0), ) @ddt.unpack + # pylint: disable=too-many-positional-arguments def test_are_prerequisite_satisifed(self, content_id, expected_are_prerequisites_satisifed, expected_len_satisfied_prerequisites, @@ -2667,6 +2668,7 @@ def test_are_prerequisite_satisifed(self, content_id, (None, False, 2, 0, 1, 1), ) @ddt.unpack + # pylint: disable=too-many-positional-arguments def test_declined_prerequisites(self, content_id, expected_are_prerequisites_satisifed, expected_len_satisfied_prerequisites, diff --git a/edx_proctoring/tests/test_services.py b/edx_proctoring/tests/test_services.py index d03c3361be..e85b6d09cc 100644 --- a/edx_proctoring/tests/test_services.py +++ b/edx_proctoring/tests/test_services.py @@ -40,7 +40,7 @@ def get_credit_state(self, user_id, course_key, return_course_info=False): # py """ return self.status - # pylint: disable=unused-argument + # pylint: disable=unused-argument,too-many-positional-arguments def set_credit_requirement_status(self, user_id, course_key_or_id, req_namespace, req_name, status="satisfied", reason=None): """ @@ -148,6 +148,7 @@ def is_course_staff(self, user, course_id): """ return self.is_user_course_staff + # pylint: disable=too-many-positional-arguments def send_support_notification(self, course_id, exam_name, student_username, review_status, review_url): """ Mocked implementation of send_support_notification @@ -244,6 +245,7 @@ def __init__(self, rejected_exam_overrides_grade=True): self.overrides = {} self.rejected_exam_overrides_grade = rejected_exam_overrides_grade + # pylint: disable=too-many-positional-arguments def init_grade(self, user_id, course_key_or_id, usage_key_or_id, earned_all, earned_graded): """Initialize a grade in MockGradesService for testing. Actual GradesService does not have this method.""" key = (user_id, course_key_or_id, usage_key_or_id) @@ -268,6 +270,7 @@ def get_subsection_grade_override(self, user_id, course_key_or_id, usage_key_or_ key = (user_id, course_key_or_id, usage_key_or_id) return self.overrides.get(key) + # pylint: disable=too-many-positional-arguments def override_subsection_grade(self, user_id, course_key_or_id, usage_key_or_id, earned_all=None, earned_graded=None, overrider=None, comment=None): """Sets grade override earned points for key (user_id + course_key + subsection)""" @@ -387,6 +390,7 @@ def get_user_course_outline(self, course_key, user, at_time): class MockVerifiedName: """Mock VerifiedName object""" + # pylint: disable=too-many-positional-arguments def __init__( self, user, verified_name, profile_name, verification_attempt_id=None, proctored_exam_attempt_id=None, status=None, @@ -408,6 +412,7 @@ def get_verified_name(self, user, is_verified=False, statuses_to_exclude=None): """ Return mock VerifiedName """ return self.verified_name + # pylint: disable=too-many-positional-arguments def create_verified_name( self, user, verified_name, profile_name, verification_attempt_id=None, proctored_exam_attempt_id=None, status=None, diff --git a/edx_proctoring/tests/test_views.py b/edx_proctoring/tests/test_views.py index a6cb2728d5..aef30172f1 100644 --- a/edx_proctoring/tests/test_views.py +++ b/edx_proctoring/tests/test_views.py @@ -2137,6 +2137,7 @@ def test_staff_only_allowed(self): (VerificientOnboardingProfileStatus.expired, ProctoredExamStudentAttemptStatus.expired) ) @ddt.unpack + # pylint: disable=too-many-positional-arguments def test_instructor_onboarding_with_api_endpoint(self, api_status, attempt_status, mocked_onboarding_api, mocked_switch_is_active, mock_logger): mocked_switch_is_active.return_value = True diff --git a/edx_proctoring/tests/utils.py b/edx_proctoring/tests/utils.py index d0a0978a26..4f8cd54e06 100644 --- a/edx_proctoring/tests/utils.py +++ b/edx_proctoring/tests/utils.py @@ -284,6 +284,7 @@ def _create_disabled_exam(self): is_active=False ) + # pylint: disable=too-many-positional-arguments def _create_exam_attempt( self, exam_id, status=ProctoredExamStudentAttemptStatus.created, is_practice_exam=False, time_remaining_seconds=None, ready_to_resume=False, resumed=False diff --git a/edx_proctoring/views.py b/edx_proctoring/views.py index 061bc4cdca..d11cee34ed 100644 --- a/edx_proctoring/views.py +++ b/edx_proctoring/views.py @@ -531,7 +531,7 @@ def get(self, request, exam_id=None, course_id=None, content_id=None): course_id=course_id, active_only=True ) - return Response(data) + return Response(data) # pylint: disable=possibly-used-before-assignment class RegisterProctoredExamsView(ProctoredAPIView): @@ -1411,7 +1411,7 @@ def put(self, request, attempt_id): elif action == 'mark_ready_to_resume': exam_attempt_id = mark_exam_attempt_as_ready_to_resume(attempt_id) - data = {"exam_attempt_id": exam_attempt_id} + data = {"exam_attempt_id": exam_attempt_id} # pylint: disable=possibly-used-before-assignment return Response(data) @method_decorator(require_course_or_global_staff) diff --git a/package.json b/package.json index e64c27cbb8..75230d4f71 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@edx/edx-proctoring", "//": "Note that the version format is slightly different than that of the Python version when using prereleases.", - "version": "5.0.0", + "version": "5.0.1", "main": "edx_proctoring/static/index.js", "scripts": { "test": "gulp test" diff --git a/pylintrc b/pylintrc index 30b48d7f40..5615f7bb71 100644 --- a/pylintrc +++ b/pylintrc @@ -64,7 +64,7 @@ # SERIOUSLY. # # ------------------------------ -# Generated by edx-lint version: 5.3.0 +# Generated by edx-lint version: 5.4.1 # ------------------------------ [MASTER] ignore = migrations @@ -259,6 +259,7 @@ enable = useless-suppression, disable = bad-indentation, + broad-exception-raised, consider-using-f-string, duplicate-code, file-ignored, @@ -383,6 +384,6 @@ ext-import-graph = int-import-graph = [EXCEPTIONS] -overgeneral-exceptions = Exception +overgeneral-exceptions = builtins.Exception -# 66a80a29c927e6656f947afa98e8a5ee9306d889 +# 35ad72eb2d70bd89672c701e858623248c41c419 diff --git a/requirements/base.txt b/requirements/base.txt index bfae4703e1..76de9b3316 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,37 +1,30 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade # -amqp==5.2.0 +amqp==5.3.1 # via kombu appdirs==1.4.4 # via fs asgiref==3.8.1 # via django -attrs==23.2.0 +attrs==24.2.0 # via openedx-events -backports-zoneinfo[tzdata]==0.2.1 ; python_version < "3.9" - # via - # -c requirements/constraints.txt - # celery - # django - # djangorestframework - # kombu -billiard==4.2.0 +billiard==4.2.1 # via celery -celery==5.3.6 +celery==5.4.0 # via # -c requirements/constraints.txt # event-tracking -certifi==2024.2.2 +certifi==2024.8.30 # via requests -cffi==1.16.0 +cffi==1.17.1 # via # cryptography # pynacl -charset-normalizer==3.3.2 +charset-normalizer==3.4.0 # via requests click==8.1.7 # via @@ -48,11 +41,11 @@ click-plugins==1.1.1 # via celery click-repl==0.3.0 # via celery -code-annotations==1.8.0 +code-annotations==1.8.2 # via edx-toggles -cryptography==42.0.5 +cryptography==43.0.3 # via pyjwt -django==4.2.11 +django==4.2.16 # via # -c requirements/common_constraints.txt # -r requirements/base.in @@ -73,9 +66,9 @@ django-crum==0.7.9 # -r requirements/base.in # edx-django-utils # edx-toggles -django-ipware==6.0.4 +django-ipware==7.0.1 # via -r requirements/base.in -django-model-utils==4.5.0 +django-model-utils==5.0.0 # via # -r requirements/base.in # edx-when @@ -83,7 +76,7 @@ django-simple-history==3.1.1 # via # -c requirements/constraints.txt # -r requirements/base.in -django-waffle==4.1.0 +django-waffle==4.2.0 # via # -r requirements/base.in # edx-django-utils @@ -93,14 +86,18 @@ django-webpack-loader==0.7.0 # via # -c requirements/constraints.txt # -r requirements/base.in -djangorestframework==3.15.1 +djangorestframework==3.15.2 # via # -r requirements/base.in # drf-jwt # edx-drf-extensions +dnspython==2.7.0 + # via pymongo drf-jwt==1.19.2 # via edx-drf-extensions -edx-django-utils==5.12.0 +edx-ccx-keys==1.3.0 + # via openedx-events +edx-django-utils==7.0.1 # via # edx-drf-extensions # edx-rest-api-client @@ -108,66 +105,67 @@ edx-django-utils==5.12.0 # edx-when # event-tracking # openedx-events -edx-drf-extensions==10.3.0 +edx-drf-extensions==10.5.0 # via # -r requirements/base.in # edx-when -edx-opaque-keys[django]==2.5.1 +edx-opaque-keys[django]==2.11.0 # via # -r requirements/base.in + # edx-ccx-keys # edx-drf-extensions # edx-when # openedx-events -edx-rest-api-client==5.7.0 +edx-rest-api-client==6.0.0 # via -r requirements/base.in edx-toggles==5.2.0 # via event-tracking edx-when==2.5.0 # via -r requirements/base.in -event-tracking==2.3.2 +event-tracking==3.0.0 # via -r requirements/base.in -fastavro==1.9.4 +fastavro==1.9.7 # via openedx-events fs==2.4.16 # via xblock -idna==3.6 +idna==3.10 # via requests -jinja2==3.1.3 +jinja2==3.1.4 # via code-annotations jsonfield==3.1.0 # via -r requirements/base.in -kombu==5.3.6 +kombu==5.4.2 # via celery -lxml==5.2.1 +lxml==5.3.0 # via xblock -mako==1.3.2 +mako==1.3.6 # via xblock -markupsafe==2.1.5 +markupsafe==3.0.2 # via # jinja2 # mako # xblock -newrelic==9.8.0 +newrelic==10.3.0 # via edx-django-utils -openedx-events==9.7.0 +openedx-events==9.15.0 # via event-tracking -pbr==6.0.0 +pbr==6.1.0 # via stevedore -prompt-toolkit==3.0.43 +prompt-toolkit==3.0.48 # via click-repl -psutil==5.9.8 +psutil==6.1.0 # via edx-django-utils pycparser==2.22 # via cffi -pycryptodomex==3.20.0 +pycryptodomex==3.21.0 # via -r requirements/base.in -pyjwt[crypto]==2.8.0 +pyjwt[crypto]==2.10.0 # via # -r requirements/base.in # drf-jwt # edx-drf-extensions # edx-rest-api-client -pymongo==3.13.0 +pymongo==4.4.0 # via # edx-opaque-keys # event-tracking @@ -178,56 +176,51 @@ python-dateutil==2.9.0.post0 # -r requirements/base.in # celery # xblock -python-ipware==2.0.2 +python-ipware==3.0.0 # via django-ipware python-slugify==8.0.4 # via code-annotations -pytz==2024.1 +pytz==2024.2 # via # -r requirements/base.in # event-tracking # xblock -pyyaml==6.0.1 +pyyaml==6.0.2 # via # code-annotations # xblock -requests==2.31.0 +requests==2.32.3 # via # edx-drf-extensions # edx-rest-api-client - # slumber -rules==3.3 +rules==3.5 # via -r requirements/base.in semantic-version==2.10.0 # via edx-drf-extensions -simplejson==3.19.2 +simplejson==3.19.3 # via xblock six==1.16.0 # via + # edx-ccx-keys # event-tracking # fs # python-dateutil -slumber==0.7.1 - # via edx-rest-api-client -sqlparse==0.4.4 +sqlparse==0.5.2 # via django -stevedore==5.2.0 +stevedore==5.4.0 # via # code-annotations # edx-django-utils # edx-opaque-keys text-unidecode==1.3 # via python-slugify -typing-extensions==4.11.0 +typing-extensions==4.12.2 + # via edx-opaque-keys +tzdata==2024.2 # via - # asgiref - # edx-opaque-keys - # kombu -tzdata==2024.1 - # via - # backports-zoneinfo # celery -urllib3==2.2.1 + # kombu +urllib3==2.2.3 # via requests vine==5.1.0 # via @@ -238,9 +231,9 @@ wcwidth==0.2.13 # via prompt-toolkit web-fragments==2.2.0 # via xblock -webob==1.8.7 +webob==1.8.9 # via xblock -xblock==3.1.0 +xblock==5.1.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 74a9f410ef..f429cad2c4 100644 --- a/requirements/celery50.txt +++ b/requirements/celery50.txt @@ -1,9 +1,9 @@ -amqp==5.2.0 -billiard==4.2.0 -celery==5.3.6 +amqp==5.3.1 +billiard==4.2.1 +celery==5.4.0 click==8.1.7 click-didyoumean==0.3.1 click-repl==0.3.0 -kombu==5.3.6 -prompt-toolkit==3.0.43 +kombu==5.4.2 +prompt-toolkit==3.0.48 vine==5.1.0 diff --git a/requirements/ci.txt b/requirements/ci.txt index 2e918e8dec..e1bdb03613 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -1,40 +1,36 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade # -cachetools==5.3.3 +cachetools==5.5.0 # via tox chardet==5.2.0 # via tox colorama==0.4.6 # via tox -coverage==7.4.4 +coverage==7.6.7 # via -r requirements/ci.in -distlib==0.3.8 +distlib==0.3.9 # via virtualenv -filelock==3.13.3 +filelock==3.16.1 # via # tox # virtualenv -packaging==24.0 +packaging==24.2 # via # pyproject-api # tox -platformdirs==4.2.0 +platformdirs==4.3.6 # via # tox # virtualenv -pluggy==1.4.0 +pluggy==1.5.0 # via tox -pyproject-api==1.6.1 +pyproject-api==1.8.0 # via tox -tomli==2.0.1 - # via - # pyproject-api - # tox -tox==4.14.2 +tox==4.23.2 # via -r requirements/ci.in -virtualenv==20.25.1 +virtualenv==20.27.1 # via tox diff --git a/requirements/common_constraints.txt b/requirements/common_constraints.txt index 2b6d23d193..048bed579e 100644 --- a/requirements/common_constraints.txt +++ b/requirements/common_constraints.txt @@ -16,22 +16,17 @@ # Note: Changes to this file will automatically be used by other repos, referencing # this file from Github directly. It does not require packaging in edx-lint. - # using LTS django version 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 +# See https://github.com/openedx/edx-platform/issues/35126 for more info 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 +# Cause: https://github.com/openedx/edx-lint/issues/458 +# This can be unpinned once https://github.com/openedx/edx-lint/issues/459 has been resolved. +pip<24.3 diff --git a/requirements/dev.txt b/requirements/dev.txt index 093b26b601..1c518de1cb 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,22 +1,18 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade # -annotated-types==0.6.0 +annotated-types==0.7.0 # via pydantic asgiref==3.8.1 # via django -astroid==3.1.0 +astroid==3.3.5 # via # pylint # pylint-celery -backports-zoneinfo==0.2.1 ; python_version < "3.9" - # via - # -c requirements/constraints.txt - # django -cachetools==5.3.3 +cachetools==5.5.0 # via tox chardet==5.2.0 # via @@ -31,93 +27,92 @@ click==8.1.7 # typer click-log==0.4.0 # via edx-lint -code-annotations==1.8.0 +code-annotations==1.8.2 # via edx-lint colorama==0.4.6 # via tox -diff-cover==8.0.3 +diff-cover==9.2.0 # via -r requirements/dev.in -dill==0.3.8 +dill==0.3.9 # via pylint -distlib==0.3.8 +distlib==0.3.9 # via virtualenv -django==4.2.11 +django==4.2.16 # via # -c requirements/common_constraints.txt # -r requirements/dev.in # -r requirements/quality.in # edx-i18n-tools -docutils==0.20.1 +docutils==0.21.2 # via rstcheck-core -edx-i18n-tools==1.3.0 +edx-i18n-tools==1.6.3 # via -r requirements/dev.in -edx-lint==5.3.6 +edx-lint==5.4.1 # via # -r requirements/dev.in # -r requirements/quality.in -filelock==3.13.3 +filelock==3.16.1 # via # tox # virtualenv -importlib-metadata==6.11.0 - # via - # -c requirements/common_constraints.txt - # rstcheck - # rstcheck-core isort==5.13.2 # via # -r requirements/quality.in # pylint -jinja2==3.1.3 +jinja2==3.1.4 # via # code-annotations # diff-cover -lxml==5.2.1 - # via edx-i18n-tools +lxml[html-clean,html_clean]==5.3.0 + # via + # edx-i18n-tools + # lxml-html-clean +lxml-html-clean==0.4.1 + # via lxml markdown-it-py==3.0.0 # via rich -markupsafe==2.1.5 +markupsafe==3.0.2 # via jinja2 mccabe==0.7.0 # via pylint mdurl==0.1.2 # via markdown-it-py -packaging==24.0 +packaging==24.2 # via # pyproject-api # tox -path==16.13.0 +path==16.16.0 # via # edx-i18n-tools # path-py path-py==12.5.0 # via -r requirements/dev.in -pbr==6.0.0 +pbr==6.1.0 # via stevedore -platformdirs==4.2.0 +platformdirs==4.3.6 # via # pylint # tox # virtualenv -pluggy==1.4.0 +pluggy==1.5.0 # via # diff-cover # tox polib==1.2.0 # via edx-i18n-tools -pycodestyle==2.11.1 +pycodestyle==2.12.1 # via -r requirements/quality.in -pydantic==2.6.4 +pydantic==2.10.1 # via rstcheck-core -pydantic-core==2.16.3 +pydantic-core==2.27.1 # via pydantic pydocstyle==6.3.0 # via -r requirements/quality.in -pygments==2.17.2 +pygments==2.18.0 # via # diff-cover # rich -pylint==3.1.0 +pylint==3.3.1 # via # edx-lint # pylint-celery @@ -125,23 +120,23 @@ pylint==3.1.0 # pylint-plugin-utils pylint-celery==0.3 # via edx-lint -pylint-django==2.5.5 +pylint-django==2.6.1 # via edx-lint pylint-plugin-utils==0.8.2 # via # pylint-celery # pylint-django -pyproject-api==1.6.1 +pyproject-api==1.8.0 # via tox python-slugify==8.0.4 # via code-annotations -pyyaml==6.0.1 +pyyaml==6.0.2 # via # code-annotations # edx-i18n-tools -rich==13.7.1 +rich==13.9.4 # via typer -rstcheck==6.2.1 +rstcheck==6.2.4 # via -r requirements/quality.in rstcheck-core==1.2.1 # via rstcheck @@ -151,38 +146,24 @@ six==1.16.0 # via edx-lint snowballstemmer==2.2.0 # via pydocstyle -sqlparse==0.4.4 +sqlparse==0.5.2 # via django -stevedore==5.2.0 +stevedore==5.4.0 # via code-annotations text-unidecode==1.3 # via python-slugify -tomli==2.0.1 - # via - # pylint - # pyproject-api - # tox -tomlkit==0.12.4 +tomlkit==0.13.2 # via pylint -tox==4.14.2 +tox==4.23.2 # via -r requirements/dev.in -typer[all]==0.12.1 +typer==0.13.1 # via rstcheck -typing-extensions==4.11.0 +typing-extensions==4.12.2 # via - # annotated-types - # asgiref - # astroid # pydantic # pydantic-core - # pylint - # rich - # rstcheck - # rstcheck-core # typer -virtualenv==20.25.1 +virtualenv==20.27.1 # via tox -wheel==0.43.0 +wheel==0.45.0 # via -r requirements/dev.in -zipp==3.18.1 - # via importlib-metadata diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt index c1c0f19ae3..b96ba0b611 100644 --- a/requirements/pip-tools.txt +++ b/requirements/pip-tools.txt @@ -1,36 +1,25 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade # -build==1.2.1 +build==1.2.2.post1 # via pip-tools click==8.1.7 # via - # -c requirements/constraints.txt + # -c /home/runner/work/edx-proctoring/edx-proctoring/requirements/constraints.txt # pip-tools -importlib-metadata==6.11.0 - # via - # -c requirements/common_constraints.txt - # build -packaging==24.0 +packaging==24.2 # via build pip-tools==7.4.1 # via -r requirements/pip-tools.in -pyproject-hooks==1.0.0 - # via - # build - # pip-tools -tomli==2.0.1 +pyproject-hooks==1.2.0 # via # build # pip-tools - # pyproject-hooks -wheel==0.43.0 +wheel==0.45.0 # via pip-tools -zipp==3.18.1 - # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # pip diff --git a/requirements/pip.txt b/requirements/pip.txt index ffca1b7c6c..7a0d2f01c7 100644 --- a/requirements/pip.txt +++ b/requirements/pip.txt @@ -1,10 +1,10 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade # -wheel==0.43.0 +wheel==0.45.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 2b25916a66..65a352d126 100644 --- a/requirements/quality.txt +++ b/requirements/quality.txt @@ -1,21 +1,17 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade # -annotated-types==0.6.0 +annotated-types==0.7.0 # via pydantic asgiref==3.8.1 # via django -astroid==3.1.0 +astroid==3.3.5 # via # pylint # pylint-celery -backports-zoneinfo==0.2.1 ; python_version < "3.9" - # via - # -c requirements/constraints.txt - # django click==8.1.7 # via # -c requirements/constraints.txt @@ -25,52 +21,47 @@ click==8.1.7 # typer click-log==0.4.0 # via edx-lint -code-annotations==1.8.0 +code-annotations==1.8.2 # via edx-lint -dill==0.3.8 +dill==0.3.9 # via pylint -django==4.2.11 +django==4.2.16 # via # -c requirements/common_constraints.txt # -r requirements/quality.in -docutils==0.20.1 +docutils==0.21.2 # via rstcheck-core -edx-lint==5.3.6 +edx-lint==5.4.1 # via -r requirements/quality.in -importlib-metadata==6.11.0 - # via - # -c requirements/common_constraints.txt - # rstcheck - # rstcheck-core isort==5.13.2 # via # -r requirements/quality.in # pylint -jinja2==3.1.3 +jinja2==3.1.4 # via code-annotations markdown-it-py==3.0.0 # via rich -markupsafe==2.1.5 +markupsafe==3.0.2 # via jinja2 mccabe==0.7.0 # via pylint mdurl==0.1.2 # via markdown-it-py -pbr==6.0.0 +pbr==6.1.0 # via stevedore -platformdirs==4.2.0 +platformdirs==4.3.6 # via pylint -pycodestyle==2.11.1 +pycodestyle==2.12.1 # via -r requirements/quality.in -pydantic==2.6.4 +pydantic==2.10.1 # via rstcheck-core -pydantic-core==2.16.3 +pydantic-core==2.27.1 # via pydantic pydocstyle==6.3.0 # via -r requirements/quality.in -pygments==2.17.2 +pygments==2.18.0 # via rich -pylint==3.1.0 +pylint==3.3.1 # via # edx-lint # pylint-celery @@ -78,7 +69,7 @@ pylint==3.1.0 # pylint-plugin-utils pylint-celery==0.3 # via edx-lint -pylint-django==2.5.5 +pylint-django==2.6.1 # via edx-lint pylint-plugin-utils==0.8.2 # via @@ -86,11 +77,11 @@ pylint-plugin-utils==0.8.2 # pylint-django python-slugify==8.0.4 # via code-annotations -pyyaml==6.0.1 +pyyaml==6.0.2 # via code-annotations -rich==13.7.1 +rich==13.9.4 # via typer -rstcheck==6.2.1 +rstcheck==6.2.4 # via -r requirements/quality.in rstcheck-core==1.2.1 # via rstcheck @@ -100,29 +91,18 @@ six==1.16.0 # via edx-lint snowballstemmer==2.2.0 # via pydocstyle -sqlparse==0.4.4 +sqlparse==0.5.2 # via django -stevedore==5.2.0 +stevedore==5.4.0 # via code-annotations text-unidecode==1.3 # via python-slugify -tomli==2.0.1 - # via pylint -tomlkit==0.12.4 +tomlkit==0.13.2 # via pylint -typer[all]==0.12.1 +typer==0.13.1 # via rstcheck -typing-extensions==4.11.0 +typing-extensions==4.12.2 # via - # annotated-types - # asgiref - # astroid # pydantic # pydantic-core - # pylint - # rich - # rstcheck - # rstcheck-core # typer -zipp==3.18.1 - # via importlib-metadata diff --git a/requirements/test.txt b/requirements/test.txt index 413ab890f4..ba244b3a03 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade @@ -9,26 +9,19 @@ appdirs==1.4.4 # via fs asgiref==3.8.1 # via django -attrs==23.2.0 +attrs==24.2.0 # via openedx-events -backports-zoneinfo[tzdata]==0.2.1 ; python_version < "3.9" - # via - # -c requirements/constraints.txt - # celery - # django - # djangorestframework - # kombu # via celery # via # -c requirements/constraints.txt # event-tracking -certifi==2024.2.2 +certifi==2024.8.30 # via requests -cffi==1.16.0 +cffi==1.17.1 # via # cryptography # pynacl -charset-normalizer==3.3.2 +charset-normalizer==3.4.0 # via requests # via # -c requirements/constraints.txt @@ -42,13 +35,13 @@ charset-normalizer==3.3.2 click-plugins==1.1.1 # via celery # via celery -code-annotations==1.8.0 +code-annotations==1.8.2 # via # -r requirements/test.in # edx-toggles -coverage[toml]==7.4.4 +coverage[toml]==7.6.7 # via pytest-cov -cryptography==42.0.5 +cryptography==43.0.3 # via pyjwt ddt==1.7.2 # via -r requirements/test.in @@ -73,9 +66,9 @@ django-crum==0.7.9 # -r requirements/base.in # edx-django-utils # edx-toggles -django-ipware==6.0.4 +django-ipware==7.0.1 # via -r requirements/base.in -django-model-utils==4.5.0 +django-model-utils==5.0.0 # via # -r requirements/base.in # edx-when @@ -83,7 +76,7 @@ django-simple-history==3.1.1 # via # -c requirements/constraints.txt # -r requirements/base.in -django-waffle==4.1.0 +django-waffle==4.2.0 # via # -r requirements/base.in # edx-django-utils @@ -97,9 +90,13 @@ django-webpack-loader==0.7.0 # -r requirements/base.in # drf-jwt # edx-drf-extensions +dnspython==2.7.0 + # via pymongo drf-jwt==1.19.2 # via edx-drf-extensions -edx-django-utils==5.12.0 +edx-ccx-keys==1.3.0 + # via openedx-events +edx-django-utils==7.0.1 # via # edx-drf-extensions # edx-rest-api-client @@ -107,33 +104,32 @@ edx-django-utils==5.12.0 # edx-when # event-tracking # openedx-events -edx-drf-extensions==10.3.0 +edx-drf-extensions==10.5.0 # via # -r requirements/base.in # edx-when -edx-i18n-tools==1.3.0 +edx-i18n-tools==1.6.3 # via -r requirements/test.in -edx-opaque-keys[django]==2.5.1 +edx-opaque-keys[django]==2.11.0 # via # -r requirements/base.in + # edx-ccx-keys # edx-drf-extensions # edx-when # openedx-events -edx-rest-api-client==5.7.0 +edx-rest-api-client==6.0.0 # via -r requirements/base.in edx-toggles==5.2.0 # via event-tracking edx-when==2.5.0 # via -r requirements/base.in -event-tracking==2.3.2 +event-tracking==3.0.0 # via -r requirements/base.in -exceptiongroup==1.2.0 - # via pytest execnet==2.1.1 # via pytest-xdist -fastavro==1.9.4 +fastavro==1.9.7 # via openedx-events -freezegun==1.4.0 +freezegun==1.5.1 # via -r requirements/test.in fs==2.4.16 # via xblock @@ -141,71 +137,74 @@ httmock==1.4.0 # via -r requirements/test.in httpretty==1.1.4 # via -r requirements/test.in -idna==3.6 +idna==3.10 # via requests iniconfig==2.0.0 # via pytest -jinja2==3.1.3 +jinja2==3.1.4 # via code-annotations jsonfield==3.1.0 # via -r requirements/base.in # via celery -lxml==5.2.1 +lxml[html-clean,html_clean]==5.3.0 # via # edx-i18n-tools + # lxml-html-clean # xblock -mako==1.3.2 +lxml-html-clean==0.4.1 + # via lxml +mako==1.3.6 # via xblock -markupsafe==2.1.5 +markupsafe==3.0.2 # via # jinja2 # mako # xblock mock==5.1.0 # via -r requirements/test.in -newrelic==9.8.0 +newrelic==10.3.0 # via edx-django-utils -openedx-events==9.7.0 +openedx-events==9.15.0 # via event-tracking -packaging==24.0 +packaging==24.2 # via pytest -path==16.13.0 +path==16.16.0 # via edx-i18n-tools -pbr==6.0.0 +pbr==6.1.0 # via stevedore -pluggy==1.4.0 +pluggy==1.5.0 # via pytest polib==1.2.0 # via edx-i18n-tools # via click-repl -psutil==5.9.8 +psutil==6.1.0 # via edx-django-utils pycparser==2.22 # via cffi -pycryptodomex==3.20.0 +pycryptodomex==3.21.0 # via -r requirements/base.in -pyjwt[crypto]==2.8.0 +pyjwt[crypto]==2.10.0 # via # -r requirements/base.in # drf-jwt # edx-drf-extensions # edx-rest-api-client -pymongo==3.13.0 +pymongo==4.4.0 # via # edx-opaque-keys # event-tracking pynacl==1.5.0 # via edx-django-utils -pytest==8.1.1 +pytest==8.3.3 # via # pytest-cov # pytest-django # pytest-xdist -pytest-cov==5.0.0 +pytest-cov==6.0.0 # via -r requirements/test.in -pytest-django==4.8.0 +pytest-django==4.9.0 # via -r requirements/test.in -pytest-xdist==3.5.0 +pytest-xdist==3.6.1 # via -r requirements/test.in python-dateutil==2.9.0.post0 # via @@ -213,68 +212,59 @@ python-dateutil==2.9.0.post0 # celery # freezegun # xblock -python-ipware==2.0.2 +python-ipware==3.0.0 # via django-ipware python-slugify==8.0.4 # via code-annotations -pytz==2024.1 +pytz==2024.2 # via # -r requirements/base.in # event-tracking # xblock -pyyaml==6.0.1 +pyyaml==6.0.2 # via # code-annotations # edx-i18n-tools # responses # xblock -requests==2.31.0 +requests==2.32.3 # via # edx-drf-extensions # edx-rest-api-client # httmock # responses - # slumber -responses==0.25.0 +responses==0.25.3 # via -r requirements/test.in -rules==3.3 +rules==3.5 # via -r requirements/base.in semantic-version==2.10.0 # via edx-drf-extensions -simplejson==3.19.2 +simplejson==3.19.3 # via xblock six==1.16.0 # via + # edx-ccx-keys # event-tracking # fs # python-dateutil -slumber==0.7.1 - # via edx-rest-api-client -sqlparse==0.4.4 +sqlparse==0.5.2 # via django -stevedore==5.2.0 +stevedore==5.4.0 # via # code-annotations # edx-django-utils # edx-opaque-keys -testfixtures==8.1.0 +testfixtures==8.3.0 # via -r requirements/test.in text-unidecode==1.3 # via python-slugify -tomli==2.0.1 - # via - # coverage - # pytest -typing-extensions==4.11.0 - # via - # asgiref - # edx-opaque-keys - # kombu -tzdata==2024.1 +typing-extensions==4.12.2 + # via edx-opaque-keys +tzdata==2024.2 # via - # backports-zoneinfo # celery -urllib3==2.2.1 + # kombu +urllib3==2.2.3 # via # requests # responses @@ -286,9 +276,9 @@ wcwidth==0.2.13 # via prompt-toolkit web-fragments==2.2.0 # via xblock -webob==1.8.7 +webob==1.8.9 # via xblock -xblock==3.1.0 +xblock==5.1.0 # via edx-when # The following packages are considered to be unsafe in a requirements file: