diff --git a/cms/djangoapps/contentstore/management/commands/backfill_course_tabs.py b/cms/djangoapps/contentstore/management/commands/backfill_course_tabs.py index 878a8dabaa27..e2a44d8a9fff 100644 --- a/cms/djangoapps/contentstore/management/commands/backfill_course_tabs.py +++ b/cms/djangoapps/contentstore/management/commands/backfill_course_tabs.py @@ -71,6 +71,5 @@ def handle(self, *args, **options): if error_keys: msg = 'The following courses encountered errors and were not updated:\n' - for error_key in error_keys: - msg += f' - {error_key}\n' + msg += ''.join([f' - {error_key}\n' for error_key in error_keys]) logger.info(msg) diff --git a/cms/djangoapps/contentstore/management/commands/export_content_library.py b/cms/djangoapps/contentstore/management/commands/export_content_library.py index 0b4cbfb1fbad..b56c172e374e 100644 --- a/cms/djangoapps/contentstore/management/commands/export_content_library.py +++ b/cms/djangoapps/contentstore/management/commands/export_content_library.py @@ -51,16 +51,15 @@ def handle(self, *args, **options): tarball = tasks.create_export_tarball(library, library_key, {}, None) except Exception as e: raise CommandError(f'Failed to export "{library_key}" with "{e}"') # lint-amnesty, pylint: disable=raise-missing-from - else: - with tarball: - # Save generated archive with keyed filename - prefix, suffix, n = str(library_key).replace(':', '+'), '.tar.gz', 0 - while os.path.exists(prefix + suffix): - n += 1 - prefix = '{}_{}'.format(prefix.rsplit('_', 1)[0], n) if n > 1 else f'{prefix}_1' - filename = prefix + suffix - target = os.path.join(dest_path, filename) - tarball.file.seek(0) - with open(target, 'wb') as f: - shutil.copyfileobj(tarball.file, f) - print(f'Library "{library.location.library_key}" exported to "{target}"') + with tarball: + # Save generated archive with keyed filename + prefix, suffix, n = str(library_key).replace(':', '+'), '.tar.gz', 0 + while os.path.exists(prefix + suffix): + n += 1 + prefix = '{}_{}'.format(prefix.rsplit('_', 1)[0], n) if n > 1 else f'{prefix}_1' + filename = prefix + suffix + target = os.path.join(dest_path, filename) + tarball.file.seek(0) + with open(target, 'wb') as f: + shutil.copyfileobj(tarball.file, f) + print(f'Library "{library.location.library_key}" exported to "{target}"') diff --git a/common/djangoapps/student/management/commands/bulk_change_enrollment_csv.py b/common/djangoapps/student/management/commands/bulk_change_enrollment_csv.py index a9c1d5349858..a938d2d50372 100644 --- a/common/djangoapps/student/management/commands/bulk_change_enrollment_csv.py +++ b/common/djangoapps/student/management/commands/bulk_change_enrollment_csv.py @@ -81,7 +81,7 @@ def handle(self, *args, **options): self.change_enrollments(csv_file) else: - CommandError('No file is provided. File is required') + CommandError('No file is provided. File is required') # pylint: disable=pointless-exception-statement def change_enrollments(self, csv_file): """ change the enrollments of the learners. """ diff --git a/common/djangoapps/student/models/user.py b/common/djangoapps/student/models/user.py index aa3de546ef2b..69d019f637c1 100644 --- a/common/djangoapps/student/models/user.py +++ b/common/djangoapps/student/models/user.py @@ -1020,7 +1020,7 @@ def check_user_reset_password_threshold(cls, user): return record.failure_count >= max_failures_allowed / 2, record.failure_count @classmethod - def clear_lockout_counter(cls, user): + def clear_lockout_counter(cls, user): # pylint: disable=useless-return """ Removes the lockout counters (normally called after a successful login) """ diff --git a/common/djangoapps/track/views/segmentio.py b/common/djangoapps/track/views/segmentio.py index 2ab5306232c5..8a35a0e421cf 100644 --- a/common/djangoapps/track/views/segmentio.py +++ b/common/djangoapps/track/views/segmentio.py @@ -205,9 +205,8 @@ def track_segmentio_event(request): # pylint: disable=too-many-statements raise EventValidationError(ERROR_USER_NOT_EXIST) # lint-amnesty, pylint: disable=raise-missing-from except ValueError: raise EventValidationError(ERROR_INVALID_USER_ID) # lint-amnesty, pylint: disable=raise-missing-from - else: - context['user_id'] = user.id - context['username'] = user.username + context['user_id'] = user.id + context['username'] = user.username # course_id is expected to be provided in the context when applicable course_id = context.get('course_id') diff --git a/lms/djangoapps/discussion/rest_api/api.py b/lms/djangoapps/discussion/rest_api/api.py index 19ccf26d19a4..0f23404ca2d2 100644 --- a/lms/djangoapps/discussion/rest_api/api.py +++ b/lms/djangoapps/discussion/rest_api/api.py @@ -1010,7 +1010,7 @@ def get_thread_list( if view in ["unread", "unanswered", "unresponded"]: query_params[view] = "true" else: - ValidationError({ + ValidationError({ # pylint: disable=pointless-exception-statement "view": [f"Invalid value. '{view}' must be 'unread' or 'unanswered'"] }) diff --git a/lms/djangoapps/discussion/tasks.py b/lms/djangoapps/discussion/tasks.py index 3fef4f5f7cef..d483388f54ae 100644 --- a/lms/djangoapps/discussion/tasks.py +++ b/lms/djangoapps/discussion/tasks.py @@ -120,8 +120,6 @@ def send_ace_message(context): # lint-amnesty, pylint: disable=missing-function log.info('Sending forum comment notification with context %s', message_context) ace.send(message, limit_to_channels=[ChannelType.PUSH]) _track_notification_sent(message, context) - else: - return @shared_task(base=LoggedTask) diff --git a/lms/djangoapps/experiments/flags.py b/lms/djangoapps/experiments/flags.py index b83a7751fae7..3b45bcee5b5c 100644 --- a/lms/djangoapps/experiments/flags.py +++ b/lms/djangoapps/experiments/flags.py @@ -245,7 +245,7 @@ def get_bucket(self, course_key=None, track=True): if ( track and hasattr(request, 'session') and session_key not in request.session and - not masquerading_as_specific_student and not anonymous + not masquerading_as_specific_student and not anonymous # pylint: disable=used-before-assignment ): segment.track( user_id=user.id, diff --git a/lms/djangoapps/static_template_view/views.py b/lms/djangoapps/static_template_view/views.py index a788f77a95fd..f8962897c033 100644 --- a/lms/djangoapps/static_template_view/views.py +++ b/lms/djangoapps/static_template_view/views.py @@ -92,8 +92,7 @@ def render_press_release(request, slug): resp = render_to_response('static_templates/press_releases/' + template, {}) except TemplateDoesNotExist: raise Http404 # lint-amnesty, pylint: disable=raise-missing-from - else: - return resp + return resp @fix_crum_request diff --git a/lms/envs/test.py b/lms/envs/test.py index a9e8aaf9f2e2..632f5c1d703e 100644 --- a/lms/envs/test.py +++ b/lms/envs/test.py @@ -412,7 +412,11 @@ FACEBOOK_API_VERSION = "v2.8" ######### custom courses ######### -INSTALLED_APPS += ['lms.djangoapps.ccx', 'openedx.core.djangoapps.ccxcon.apps.CCXConnectorConfig'] +INSTALLED_APPS += [ + 'lms.djangoapps.ccx', + 'openedx.core.djangoapps.ccxcon.apps.CCXConnectorConfig', + 'openedx.core.djangoapps.content_staging', +] FEATURES['CUSTOM_COURSES_EDX'] = True # Set dummy values for profile image settings. diff --git a/openedx/core/djangoapps/credit/models.py b/openedx/core/djangoapps/credit/models.py index 2a9fa2088551..9c14a15104b9 100644 --- a/openedx/core/djangoapps/credit/models.py +++ b/openedx/core/djangoapps/credit/models.py @@ -514,7 +514,6 @@ def remove_requirement_status(cls, username, requirement): ) ) log.error(log_msg) - return @classmethod def retire_user(cls, retirement): diff --git a/openedx/core/djangoapps/credit/tasks.py b/openedx/core/djangoapps/credit/tasks.py index 312e278a985f..79ef613e3d19 100644 --- a/openedx/core/djangoapps/credit/tasks.py +++ b/openedx/core/djangoapps/credit/tasks.py @@ -41,8 +41,7 @@ def update_credit_course_requirements(course_id): except (InvalidKeyError, ItemNotFoundError, InvalidCreditRequirements) as exc: LOGGER.error('Error on adding the requirements for course %s - %s', course_id, str(exc)) raise update_credit_course_requirements.retry(args=[course_id], exc=exc) - else: - LOGGER.info('Requirements added for course %s', course_id) + LOGGER.info('Requirements added for course %s', course_id) def _get_course_credit_requirements(course_key): diff --git a/openedx/core/djangoapps/enrollments/data.py b/openedx/core/djangoapps/enrollments/data.py index 9986830a3491..b76042f72c9d 100644 --- a/openedx/core/djangoapps/enrollments/data.py +++ b/openedx/core/djangoapps/enrollments/data.py @@ -341,8 +341,7 @@ def get_course_enrollment_info(course_id, include_expired=False): msg = f"Requested enrollment information for unknown course {course_id}" log.warning(msg) raise CourseNotFoundError(msg) # lint-amnesty, pylint: disable=raise-missing-from - else: - return CourseSerializer(course, include_expired=include_expired).data + return CourseSerializer(course, include_expired=include_expired).data def get_user_roles(username): diff --git a/openedx/core/djangoapps/safe_sessions/middleware.py b/openedx/core/djangoapps/safe_sessions/middleware.py index f3948217efd9..950a3e08c54f 100644 --- a/openedx/core/djangoapps/safe_sessions/middleware.py +++ b/openedx/core/djangoapps/safe_sessions/middleware.py @@ -244,14 +244,13 @@ def parse(cls, safe_cookie_string): raise SafeCookieError( # lint-amnesty, pylint: disable=raise-missing-from f"SafeCookieData BWC parse error: {safe_cookie_string!r}." ) - else: - if safe_cookie_data.version != cls.CURRENT_VERSION: - raise SafeCookieError( - "SafeCookieData version {!r} is not supported. Current version is {}.".format( - safe_cookie_data.version, - cls.CURRENT_VERSION, - )) - return safe_cookie_data + if safe_cookie_data.version != cls.CURRENT_VERSION: + raise SafeCookieError( + "SafeCookieData version {!r} is not supported. Current version is {}.".format( + safe_cookie_data.version, + cls.CURRENT_VERSION, + )) + return safe_cookie_data def __str__(self): """ diff --git a/openedx/core/djangoapps/user_api/management/commands/bulk_user_org_email_optout.py b/openedx/core/djangoapps/user_api/management/commands/bulk_user_org_email_optout.py index e465ff5610ed..d194e58ee880 100644 --- a/openedx/core/djangoapps/user_api/management/commands/bulk_user_org_email_optout.py +++ b/openedx/core/djangoapps/user_api/management/commands/bulk_user_org_email_optout.py @@ -135,11 +135,10 @@ def handle(self, *args, **options): optout_rows[end_idx][0], optout_rows[end_idx][1], str(err)) raise - else: - cursor.execute('COMMIT;') - log.info("Committed opt-out for rows (%s, %s) through (%s, %s).", - optout_rows[start_idx][0], optout_rows[start_idx][1], - optout_rows[end_idx][0], optout_rows[end_idx][1]) + cursor.execute('COMMIT;') + log.info("Committed opt-out for rows (%s, %s) through (%s, %s).", + optout_rows[start_idx][0], optout_rows[start_idx][1], + optout_rows[end_idx][0], optout_rows[end_idx][1]) log.info("Sleeping %s seconds...", sleep_between) time.sleep(sleep_between) curr_row_idx += chunk_size diff --git a/openedx/core/lib/api/view_utils.py b/openedx/core/lib/api/view_utils.py index 054755ae3cc1..d876e49ae579 100644 --- a/openedx/core/lib/api/view_utils.py +++ b/openedx/core/lib/api/view_utils.py @@ -265,8 +265,7 @@ def __len__(self): def __iter__(self): # Yield all the known data first - for item in self._data: - yield item + yield from self._data # Capture and yield data from the underlying iterator # until it is exhausted diff --git a/openedx/core/lib/celery/task_utils.py b/openedx/core/lib/celery/task_utils.py index 738f074be68c..9a54f1b3a550 100644 --- a/openedx/core/lib/celery/task_utils.py +++ b/openedx/core/lib/celery/task_utils.py @@ -50,9 +50,8 @@ def emulate_http_request(site=None, user=None, middleware_classes=None): for middleware in reversed(middleware_instances): _run_method_if_implemented(middleware, 'process_exception', request, exc) raise - else: - for middleware in reversed(middleware_instances): - _run_method_if_implemented(middleware, 'process_response', request, response) + for middleware in reversed(middleware_instances): + _run_method_if_implemented(middleware, 'process_response', request, response) def _run_method_if_implemented(instance, method_name, *args, **kwargs): diff --git a/pavelib/paver_tests/utils.py b/pavelib/paver_tests/utils.py index 1db26cf76a4c..b2278c0d4d8b 100644 --- a/pavelib/paver_tests/utils.py +++ b/pavelib/paver_tests/utils.py @@ -93,5 +93,3 @@ def unexpected_fail_on_npm_install(*args, **kwargs): # pylint: disable=unused-a """ if ["npm", "install", "--verbose"] == args[0]: # lint-amnesty, pylint: disable=no-else-raise raise BuildFailure('Subprocess return code: 50') - else: - return diff --git a/pylintrc b/pylintrc index 96b657e46eea..7801f4590730 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.0 # ------------------------------ [MASTER] ignore = ,.git,.tox,migrations,node_modules,.pycharm_helpers @@ -259,6 +259,7 @@ enable = useless-suppression, disable = bad-indentation, + broad-exception-raised, consider-using-f-string, duplicate-code, file-ignored, @@ -313,6 +314,10 @@ disable = c-extension-no-member, no-name-in-module, unnecessary-lambda-assignment, + too-many-positional-arguments, + use-dict-literal, + possibly-used-before-assignment, + superfluous-parens, [REPORTS] output-format = text @@ -407,6 +412,6 @@ ext-import-graph = int-import-graph = [EXCEPTIONS] -overgeneral-exceptions = Exception +overgeneral-exceptions = builtins.Exception -# 567bf30b121db79bc07a7028651f7efa0724e8a4 +# 2e978edfd219a1e769192ec8de3d37667862cdb8 diff --git a/pylintrc_tweaks b/pylintrc_tweaks index 7911c08af9b2..583bbf0a627c 100644 --- a/pylintrc_tweaks +++ b/pylintrc_tweaks @@ -33,6 +33,10 @@ disable+ = c-extension-no-member, no-name-in-module, unnecessary-lambda-assignment, + too-many-positional-arguments, + use-dict-literal, + possibly-used-before-assignment, + superfluous-parens [BASIC] attr-rgx = [a-z_][a-z0-9_]{2,40}$ diff --git a/requirements/constraints.txt b/requirements/constraints.txt index 6fb109d62f09..76496d2b07e2 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -182,11 +182,9 @@ pymongo<4.4.1 # Issue for unpinning: https://github.com/edx/edx-arch-experiments/issues/760 social-auth-app-django<=5.4.1 -# Date: 2023-11-05 -# urllib3>=2.0.0 conflicts with elastic search && snowflake-connector-python packages -# which require urllib3<2 for now. -# Issue for unpinning: https://github.com/openedx/edx-platform/issues/32222 -urllib3<2.0.0 +# Date: 2024-10-14 +# The edx-enterprise is currently using edx-rest-api-client==5.7.1, which needs to be updated first. +edx-rest-api-client==5.7.1 # Date: 2024-04-24 # xmlsec==1.3.14 breaking tests or all builds, can be removed once a fix is available diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index b92ad29f8abf..23558ed60912 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -6,11 +6,11 @@ # -e git+https://github.com/anupdhabarde/edx-proctoring-proctortrack.git@31c6c9923a51c903ae83760ecbbac191363aa2a2#egg=edx_proctoring_proctortrack # via -r requirements/edx/github.in -acid-xblock==0.3.1 +acid-xblock==0.4.1 # via -r requirements/edx/kernel.in -aiohappyeyeballs==2.4.0 +aiohappyeyeballs==2.4.3 # via aiohttp -aiohttp==3.10.6 +aiohttp==3.10.8 # via # geoip2 # openai @@ -70,13 +70,13 @@ bleach[css]==6.1.0 # xblock-poll boto==2.49.0 # via -r requirements/edx/kernel.in -boto3==1.35.27 +boto3==1.35.31 # via # -r requirements/edx/kernel.in # django-ses # fs-s3fs # ora2 -botocore==1.35.27 +botocore==1.35.31 # via # -r requirements/edx/kernel.in # boto3 @@ -87,7 +87,7 @@ cachecontrol==0.14.0 # via firebase-admin cachetools==5.5.0 # via google-auth -camel-converter[pydantic]==3.1.2 +camel-converter[pydantic]==4.0.0 # via meilisearch celery==5.4.0 # via @@ -621,11 +621,11 @@ googleapis-common-protos==1.65.0 # via # google-api-core # grpcio-status -grpcio==1.66.1 +grpcio==1.66.2 # via # google-api-core # grpcio-status -grpcio-status==1.66.1 +grpcio-status==1.66.2 # via google-api-core gunicorn==23.0.0 # via -r requirements/edx/kernel.in @@ -639,7 +639,7 @@ httplib2==0.22.0 # via # google-api-python-client # google-auth-httplib2 -icalendar==5.0.13 +icalendar==6.0.0 # via -r requirements/edx/kernel.in idna==3.10 # via @@ -769,7 +769,7 @@ multidict==6.1.0 # yarl mysqlclient==2.2.4 # via -r requirements/edx/kernel.in -newrelic==9.13.0 +newrelic==10.0.0 # via # -r requirements/edx/bundled.in # edx-django-utils @@ -820,7 +820,7 @@ openedx-events==9.14.1 # edx-name-affirmation # event-tracking # ora2 -openedx-filters==1.10.0 +openedx-filters==1.11.0 # via # -r requirements/edx/kernel.in # lti-consumer-xblock @@ -829,7 +829,7 @@ openedx-learning==0.13.1 # via # -c requirements/edx/../constraints.txt # -r requirements/edx/kernel.in -openedx-mongodbproxy==0.2.1 +openedx-mongodbproxy==0.2.2 # via -r requirements/edx/kernel.in optimizely-sdk==4.1.1 # via @@ -911,7 +911,7 @@ pycountry==24.6.1 # via -r requirements/edx/kernel.in pycparser==2.22 # via cffi -pycryptodomex==3.20.0 +pycryptodomex==3.21.0 # via # -r requirements/edx/kernel.in # edx-proctoring @@ -1017,7 +1017,6 @@ pytz==2024.2 # edx-tincan-py35 # event-tracking # fs - # icalendar # interchange # olxcleaner # ora2 @@ -1039,7 +1038,7 @@ random2==1.0.2 # via -r requirements/edx/kernel.in recommender-xblock==2.2.1 # via -r requirements/edx/bundled.in -redis==5.0.8 +redis==5.1.0 # via # -r requirements/edx/kernel.in # walrus @@ -1208,6 +1207,7 @@ typing-extensions==4.12.2 tzdata==2024.2 # via # celery + # icalendar # kombu unicodecsv==0.14.1 # via @@ -1237,7 +1237,7 @@ voluptuous==0.15.2 # via ora2 walrus==0.9.4 # via edx-event-bus-redis -watchdog==5.0.2 +watchdog==5.0.3 # via -r requirements/edx/paver.txt wcwidth==0.2.13 # via prompt-toolkit @@ -1291,7 +1291,7 @@ xmlsec==1.3.13 # python3-saml xss-utils==0.6.0 # via -r requirements/edx/kernel.in -yarl==1.12.1 +yarl==1.13.1 # via aiohttp zipp==3.20.2 # via importlib-metadata diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index a5713bc3dd33..48904fc52f28 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -12,16 +12,16 @@ accessible-pygments==0.0.5 # via # -r requirements/edx/doc.txt # pydata-sphinx-theme -acid-xblock==0.3.1 +acid-xblock==0.4.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -aiohappyeyeballs==2.4.0 +aiohappyeyeballs==2.4.3 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # aiohttp -aiohttp==3.10.6 +aiohttp==3.10.8 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -81,7 +81,7 @@ asn1crypto==1.5.1 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # snowflake-connector-python -astroid==2.13.5 +astroid==3.3.4 # via # -r requirements/edx/testing.txt # pylint @@ -140,14 +140,14 @@ boto==2.49.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -boto3==1.35.27 +boto3==1.35.31 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # django-ses # fs-s3fs # ora2 -botocore==1.35.27 +botocore==1.35.31 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -172,7 +172,7 @@ cachetools==5.5.0 # -r requirements/edx/testing.txt # google-auth # tox -camel-converter[pydantic]==3.1.2 +camel-converter[pydantic]==4.0.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -325,7 +325,7 @@ defusedxml==0.7.1 # social-auth-core diff-cover==9.2.0 # via -r requirements/edx/testing.txt -dill==0.3.8 +dill==0.3.9 # via # -r requirements/edx/testing.txt # pylint @@ -879,7 +879,7 @@ execnet==2.1.1 # pytest-xdist factory-boy==3.3.1 # via -r requirements/edx/testing.txt -faker==30.0.0 +faker==30.1.0 # via # -r requirements/edx/testing.txt # factory-boy @@ -1009,13 +1009,13 @@ grimp==3.4.1 # via # -r requirements/edx/testing.txt # import-linter -grpcio==1.66.1 +grpcio==1.66.2 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # google-api-core # grpcio-status -grpcio-status==1.66.1 +grpcio-status==1.66.2 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1045,7 +1045,7 @@ httplib2==0.22.0 # google-auth-httplib2 httpretty==1.1.4 # via -r requirements/edx/testing.txt -icalendar==5.0.13 +icalendar==6.0.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1164,10 +1164,6 @@ lazy==1.6 # lti-consumer-xblock # ora2 # xblock -lazy-object-proxy==1.10.0 - # via - # -r requirements/edx/testing.txt - # astroid libsass==0.10.0 # via # -c requirements/edx/../constraints.txt @@ -1290,7 +1286,7 @@ mysqlclient==2.2.4 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -newrelic==9.13.0 +newrelic==10.0.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1368,7 +1364,7 @@ openedx-events==9.14.1 # edx-name-affirmation # event-tracking # ora2 -openedx-filters==1.10.0 +openedx-filters==1.11.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1379,7 +1375,7 @@ openedx-learning==0.13.1 # -c requirements/edx/../constraints.txt # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -openedx-mongodbproxy==0.2.1 +openedx-mongodbproxy==0.2.2 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1542,7 +1538,7 @@ pycparser==2.22 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # cffi -pycryptodomex==3.20.0 +pycryptodomex==3.21.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1598,9 +1594,8 @@ pylatexenc==2.10 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # olxcleaner -pylint==2.15.10 +pylint==3.3.1 # via - # -c requirements/edx/../constraints.txt # -r requirements/edx/testing.txt # edx-lint # pylint-celery @@ -1620,7 +1615,7 @@ pylint-plugin-utils==0.8.2 # -r requirements/edx/testing.txt # pylint-celery # pylint-django -pylint-pytest==0.3.0 +pylint-pytest==1.1.7 # via -r requirements/edx/testing.txt pylti1p3==2.0.0 # via @@ -1666,7 +1661,7 @@ pyproject-api==1.8.0 # via # -r requirements/edx/testing.txt # tox -pyproject-hooks==1.1.0 +pyproject-hooks==1.2.0 # via # -r requirements/edx/../pip-tools.txt # build @@ -1767,7 +1762,6 @@ pytz==2024.2 # edx-tincan-py35 # event-tracking # fs - # icalendar # interchange # olxcleaner # ora2 @@ -1799,7 +1793,7 @@ recommender-xblock==2.2.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -redis==5.0.8 +redis==5.1.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -2087,7 +2081,7 @@ tinycss2==1.2.1 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # bleach -tomli==2.0.1 +tomli==2.0.2 # via django-stubs tomlkit==0.13.2 # via @@ -2095,7 +2089,7 @@ tomlkit==0.13.2 # -r requirements/edx/testing.txt # pylint # snowflake-connector-python -tox==4.20.0 +tox==4.21.0 # via -r requirements/edx/testing.txt tqdm==4.66.5 # via @@ -2122,6 +2116,7 @@ typing-extensions==4.12.2 # django-stubs-ext # djangorestframework-stubs # edx-opaque-keys + # faker # fastapi # grimp # import-linter @@ -2137,6 +2132,7 @@ tzdata==2024.2 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # celery + # icalendar # kombu unicodecsv==0.14.1 # via @@ -2165,7 +2161,7 @@ user-util==1.1.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -uvicorn==0.30.6 +uvicorn==0.31.0 # via # -r requirements/edx/testing.txt # pact-python @@ -2176,7 +2172,7 @@ vine==5.1.0 # amqp # celery # kombu -virtualenv==20.26.5 +virtualenv==20.26.6 # via # -r requirements/edx/testing.txt # tox @@ -2185,14 +2181,14 @@ voluptuous==0.15.2 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # ora2 -vulture==2.12 +vulture==2.13 # via -r requirements/edx/development.in walrus==0.9.4 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edx-event-bus-redis -watchdog==5.0.2 +watchdog==5.0.3 # via # -r requirements/edx/development.in # -r requirements/edx/doc.txt @@ -2231,7 +2227,6 @@ wrapt==1.16.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt - # astroid xblock[django]==5.1.0 # via # -r requirements/edx/doc.txt @@ -2276,7 +2271,7 @@ xss-utils==0.6.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -yarl==1.12.1 +yarl==1.13.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index 57f36577a5db..a94b7f8fb4c5 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -8,13 +8,13 @@ # via -r requirements/edx/base.txt accessible-pygments==0.0.5 # via pydata-sphinx-theme -acid-xblock==0.3.1 +acid-xblock==0.4.1 # via -r requirements/edx/base.txt -aiohappyeyeballs==2.4.0 +aiohappyeyeballs==2.4.3 # via # -r requirements/edx/base.txt # aiohttp -aiohttp==3.10.6 +aiohttp==3.10.8 # via # -r requirements/edx/base.txt # geoip2 @@ -102,13 +102,13 @@ bleach[css]==6.1.0 # xblock-poll boto==2.49.0 # via -r requirements/edx/base.txt -boto3==1.35.27 +boto3==1.35.31 # via # -r requirements/edx/base.txt # django-ses # fs-s3fs # ora2 -botocore==1.35.27 +botocore==1.35.31 # via # -r requirements/edx/base.txt # boto3 @@ -123,7 +123,7 @@ cachetools==5.5.0 # via # -r requirements/edx/base.txt # google-auth -camel-converter[pydantic]==3.1.2 +camel-converter[pydantic]==4.0.0 # via # -r requirements/edx/base.txt # meilisearch @@ -735,12 +735,12 @@ googleapis-common-protos==1.65.0 # -r requirements/edx/base.txt # google-api-core # grpcio-status -grpcio==1.66.1 +grpcio==1.66.2 # via # -r requirements/edx/base.txt # google-api-core # grpcio-status -grpcio-status==1.66.1 +grpcio-status==1.66.2 # via # -r requirements/edx/base.txt # google-api-core @@ -757,7 +757,7 @@ httplib2==0.22.0 # -r requirements/edx/base.txt # google-api-python-client # google-auth-httplib2 -icalendar==5.0.13 +icalendar==6.0.0 # via -r requirements/edx/base.txt idna==3.10 # via @@ -923,7 +923,7 @@ multidict==6.1.0 # yarl mysqlclient==2.2.4 # via -r requirements/edx/base.txt -newrelic==9.13.0 +newrelic==10.0.0 # via # -r requirements/edx/base.txt # edx-django-utils @@ -979,7 +979,7 @@ openedx-events==9.14.1 # edx-name-affirmation # event-tracking # ora2 -openedx-filters==1.10.0 +openedx-filters==1.11.0 # via # -r requirements/edx/base.txt # lti-consumer-xblock @@ -988,7 +988,7 @@ openedx-learning==0.13.1 # via # -c requirements/edx/../constraints.txt # -r requirements/edx/base.txt -openedx-mongodbproxy==0.2.1 +openedx-mongodbproxy==0.2.2 # via -r requirements/edx/base.txt optimizely-sdk==4.1.1 # via @@ -1094,7 +1094,7 @@ pycparser==2.22 # via # -r requirements/edx/base.txt # cffi -pycryptodomex==3.20.0 +pycryptodomex==3.21.0 # via # -r requirements/edx/base.txt # edx-proctoring @@ -1222,7 +1222,6 @@ pytz==2024.2 # edx-tincan-py35 # event-tracking # fs - # icalendar # interchange # olxcleaner # ora2 @@ -1245,7 +1244,7 @@ random2==1.0.2 # via -r requirements/edx/base.txt recommender-xblock==2.2.1 # via -r requirements/edx/base.txt -redis==5.0.8 +redis==5.1.0 # via # -r requirements/edx/base.txt # walrus @@ -1489,6 +1488,7 @@ tzdata==2024.2 # via # -r requirements/edx/base.txt # celery + # icalendar # kombu unicodecsv==0.14.1 # via @@ -1524,7 +1524,7 @@ walrus==0.9.4 # via # -r requirements/edx/base.txt # edx-event-bus-redis -watchdog==5.0.2 +watchdog==5.0.3 # via -r requirements/edx/base.txt wcwidth==0.2.13 # via @@ -1583,7 +1583,7 @@ xmlsec==1.3.13 # python3-saml xss-utils==0.6.0 # via -r requirements/edx/base.txt -yarl==1.12.1 +yarl==1.13.1 # via # -r requirements/edx/base.txt # aiohttp diff --git a/requirements/edx/paver.txt b/requirements/edx/paver.txt index a0b1896919d4..fdb59749c4d9 100644 --- a/requirements/edx/paver.txt +++ b/requirements/edx/paver.txt @@ -61,7 +61,7 @@ urllib3==1.26.20 # via # -c requirements/edx/../constraints.txt # requests -watchdog==5.0.2 +watchdog==5.0.3 # via -r requirements/edx/paver.in wrapt==1.16.0 # via -r requirements/edx/paver.in diff --git a/requirements/edx/semgrep.txt b/requirements/edx/semgrep.txt index 102289def277..34437381b3ae 100644 --- a/requirements/edx/semgrep.txt +++ b/requirements/edx/semgrep.txt @@ -15,7 +15,7 @@ boltons==21.0.0 # face # glom # semgrep -bracex==2.5 +bracex==2.5.post1 # via wcmatch certifi==2024.8.30 # via requests @@ -60,7 +60,7 @@ referencing==0.35.1 # jsonschema-specifications requests==2.32.3 # via semgrep -rich==13.8.1 +rich==13.9.1 # via semgrep rpds-py==0.20.0 # via @@ -72,7 +72,7 @@ ruamel-yaml-clib==0.2.8 # via ruamel-yaml semgrep==1.52.0 # via -r requirements/edx/semgrep.in -tomli==2.0.1 +tomli==2.0.2 # via semgrep typing-extensions==4.12.2 # via semgrep diff --git a/requirements/edx/testing.in b/requirements/edx/testing.in index b903768f4de6..64ddaa047ca7 100644 --- a/requirements/edx/testing.in +++ b/requirements/edx/testing.in @@ -43,6 +43,6 @@ singledispatch # Backport of functools.singledispatch from Python 3.4 testfixtures # Provides a LogCapture utility used by several tests tox # virtualenv management for tests unidiff # Required by coverage_pytest_plugin -pylint-pytest==0.3.0 # A Pylint plugin to suppress pytest-related false positives. +pylint-pytest==1.1.7 # A Pylint plugin to suppress pytest-related false positives. pact-python # Library for contract testing py # Needed for pytest configurations, was previously been fetched through tox diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 4f26caa9582a..5f7dcc42726a 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -6,13 +6,13 @@ # -e git+https://github.com/anupdhabarde/edx-proctoring-proctortrack.git@31c6c9923a51c903ae83760ecbbac191363aa2a2#egg=edx_proctoring_proctortrack # via -r requirements/edx/base.txt -acid-xblock==0.3.1 +acid-xblock==0.4.1 # via -r requirements/edx/base.txt -aiohappyeyeballs==2.4.0 +aiohappyeyeballs==2.4.3 # via # -r requirements/edx/base.txt # aiohttp -aiohttp==3.10.6 +aiohttp==3.10.8 # via # -r requirements/edx/base.txt # geoip2 @@ -55,7 +55,7 @@ asn1crypto==1.5.1 # via # -r requirements/edx/base.txt # snowflake-connector-python -astroid==2.13.5 +astroid==3.3.4 # via # pylint # pylint-celery @@ -102,13 +102,13 @@ bleach[css]==6.1.0 # xblock-poll boto==2.49.0 # via -r requirements/edx/base.txt -boto3==1.35.27 +boto3==1.35.31 # via # -r requirements/edx/base.txt # django-ses # fs-s3fs # ora2 -botocore==1.35.27 +botocore==1.35.31 # via # -r requirements/edx/base.txt # boto3 @@ -124,7 +124,7 @@ cachetools==5.5.0 # -r requirements/edx/base.txt # google-auth # tox -camel-converter[pydantic]==3.1.2 +camel-converter[pydantic]==4.0.0 # via # -r requirements/edx/base.txt # meilisearch @@ -247,7 +247,7 @@ defusedxml==0.7.1 # social-auth-core diff-cover==9.2.0 # via -r requirements/edx/coverage.txt -dill==0.3.8 +dill==0.3.9 # via pylint distlib==0.3.8 # via virtualenv @@ -674,7 +674,7 @@ execnet==2.1.1 # via pytest-xdist factory-boy==3.3.1 # via -r requirements/edx/testing.in -faker==30.0.0 +faker==30.1.0 # via factory-boy fastapi==0.115.0 # via pact-python @@ -771,12 +771,12 @@ googleapis-common-protos==1.65.0 # grpcio-status grimp==3.4.1 # via import-linter -grpcio==1.66.1 +grpcio==1.66.2 # via # -r requirements/edx/base.txt # google-api-core # grpcio-status -grpcio-status==1.66.1 +grpcio-status==1.66.2 # via # -r requirements/edx/base.txt # google-api-core @@ -797,7 +797,7 @@ httplib2==0.22.0 # google-auth-httplib2 httpretty==1.1.4 # via -r requirements/edx/testing.in -icalendar==5.0.13 +icalendar==6.0.0 # via -r requirements/edx/base.txt idna==3.10 # via @@ -887,8 +887,6 @@ lazy==1.6 # lti-consumer-xblock # ora2 # xblock -lazy-object-proxy==1.10.0 - # via astroid libsass==0.10.0 # via # -c requirements/edx/../constraints.txt @@ -974,7 +972,7 @@ multidict==6.1.0 # yarl mysqlclient==2.2.4 # via -r requirements/edx/base.txt -newrelic==9.13.0 +newrelic==10.0.0 # via # -r requirements/edx/base.txt # edx-django-utils @@ -1030,7 +1028,7 @@ openedx-events==9.14.1 # edx-name-affirmation # event-tracking # ora2 -openedx-filters==1.10.0 +openedx-filters==1.11.0 # via # -r requirements/edx/base.txt # lti-consumer-xblock @@ -1039,7 +1037,7 @@ openedx-learning==0.13.1 # via # -c requirements/edx/../constraints.txt # -r requirements/edx/base.txt -openedx-mongodbproxy==0.2.1 +openedx-mongodbproxy==0.2.2 # via -r requirements/edx/base.txt optimizely-sdk==4.1.1 # via @@ -1164,7 +1162,7 @@ pycparser==2.22 # via # -r requirements/edx/base.txt # cffi -pycryptodomex==3.20.0 +pycryptodomex==3.21.0 # via # -r requirements/edx/base.txt # edx-proctoring @@ -1206,9 +1204,8 @@ pylatexenc==2.10 # via # -r requirements/edx/base.txt # olxcleaner -pylint==2.15.10 +pylint==3.3.1 # via - # -c requirements/edx/../constraints.txt # edx-lint # pylint-celery # pylint-django @@ -1222,7 +1219,7 @@ pylint-plugin-utils==0.8.2 # via # pylint-celery # pylint-django -pylint-pytest==0.3.0 +pylint-pytest==1.1.7 # via -r requirements/edx/testing.in pylti1p3==2.0.0 # via -r requirements/edx/base.txt @@ -1340,7 +1337,6 @@ pytz==2024.2 # edx-tincan-py35 # event-tracking # fs - # icalendar # interchange # olxcleaner # ora2 @@ -1362,7 +1358,7 @@ random2==1.0.2 # via -r requirements/edx/base.txt recommender-xblock==2.2.1 # via -r requirements/edx/base.txt -redis==5.0.8 +redis==5.1.0 # via # -r requirements/edx/base.txt # walrus @@ -1554,7 +1550,7 @@ tomlkit==0.13.2 # -r requirements/edx/base.txt # pylint # snowflake-connector-python -tox==4.20.0 +tox==4.21.0 # via -r requirements/edx/testing.in tqdm==4.66.5 # via @@ -1566,6 +1562,7 @@ typing-extensions==4.12.2 # -r requirements/edx/base.txt # django-countries # edx-opaque-keys + # faker # fastapi # grimp # import-linter @@ -1578,6 +1575,7 @@ tzdata==2024.2 # via # -r requirements/edx/base.txt # celery + # icalendar # kombu unicodecsv==0.14.1 # via @@ -1601,7 +1599,7 @@ urllib3==1.26.20 # requests user-util==1.1.0 # via -r requirements/edx/base.txt -uvicorn==0.30.6 +uvicorn==0.31.0 # via pact-python vine==5.1.0 # via @@ -1609,7 +1607,7 @@ vine==5.1.0 # amqp # celery # kombu -virtualenv==20.26.5 +virtualenv==20.26.6 # via tox voluptuous==0.15.2 # via @@ -1619,7 +1617,7 @@ walrus==0.9.4 # via # -r requirements/edx/base.txt # edx-event-bus-redis -watchdog==5.0.2 +watchdog==5.0.3 # via -r requirements/edx/base.txt wcwidth==0.2.13 # via @@ -1644,9 +1642,7 @@ webob==1.8.8 # -r requirements/edx/base.txt # xblock wrapt==1.16.0 - # via - # -r requirements/edx/base.txt - # astroid + # via -r requirements/edx/base.txt xblock[django]==5.1.0 # via # -r requirements/edx/base.txt @@ -1680,7 +1676,7 @@ xmlsec==1.3.13 # python3-saml xss-utils==0.6.0 # via -r requirements/edx/base.txt -yarl==1.12.1 +yarl==1.13.1 # via # -r requirements/edx/base.txt # aiohttp diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt index 5bcb2aa55084..109e472d2831 100644 --- a/requirements/pip-tools.txt +++ b/requirements/pip-tools.txt @@ -14,7 +14,7 @@ packaging==24.1 # via build pip-tools==7.4.1 # via -r requirements/pip-tools.in -pyproject-hooks==1.1.0 +pyproject-hooks==1.2.0 # via # build # pip-tools diff --git a/scripts/user_retirement/requirements/base.txt b/scripts/user_retirement/requirements/base.txt index 9f57da73d0c2..6f20d1e27c9b 100644 --- a/scripts/user_retirement/requirements/base.txt +++ b/scripts/user_retirement/requirements/base.txt @@ -10,9 +10,9 @@ attrs==24.2.0 # via zeep backoff==2.2.1 # via -r scripts/user_retirement/requirements/base.in -boto3==1.35.27 +boto3==1.35.31 # via -r scripts/user_retirement/requirements/base.in -botocore==1.35.27 +botocore==1.35.31 # via # boto3 # s3transfer @@ -83,7 +83,7 @@ lxml==4.9.4 # zeep more-itertools==10.5.0 # via simple-salesforce -newrelic==9.13.0 +newrelic==10.0.0 # via edx-django-utils pbr==6.1.0 # via stevedore diff --git a/scripts/user_retirement/requirements/testing.txt b/scripts/user_retirement/requirements/testing.txt index d5aac1cd062f..9796a0efb0a9 100644 --- a/scripts/user_retirement/requirements/testing.txt +++ b/scripts/user_retirement/requirements/testing.txt @@ -14,11 +14,11 @@ attrs==24.2.0 # zeep backoff==2.2.1 # via -r scripts/user_retirement/requirements/base.txt -boto3==1.35.27 +boto3==1.35.31 # via # -r scripts/user_retirement/requirements/base.txt # moto -botocore==1.35.27 +botocore==1.35.31 # via # -r scripts/user_retirement/requirements/base.txt # boto3 @@ -132,7 +132,7 @@ more-itertools==10.5.0 # simple-salesforce moto==4.2.14 # via -r scripts/user_retirement/requirements/testing.in -newrelic==9.13.0 +newrelic==10.0.0 # via # -r scripts/user_retirement/requirements/base.txt # edx-django-utils diff --git a/xmodule/capa/tests/test_input_templates.py b/xmodule/capa/tests/test_input_templates.py index 4b14bd5ef86c..3048f62095de 100644 --- a/xmodule/capa/tests/test_input_templates.py +++ b/xmodule/capa/tests/test_input_templates.py @@ -76,8 +76,7 @@ def render_to_xml(self, context_dict): except Exception as exc: raise TemplateError("Could not parse XML from '{0}': {1}".format( # lint-amnesty, pylint: disable=raise-missing-from xml_str, str(exc))) - else: - return xml + return xml def assert_has_xpath(self, xml_root, xpath, context_dict, exact_num=1): """ diff --git a/xmodule/split_test_block.py b/xmodule/split_test_block.py index 05ca3a5db454..52f40547879a 100644 --- a/xmodule/split_test_block.py +++ b/xmodule/split_test_block.py @@ -419,9 +419,8 @@ def log_child_render(self, request, suffix=''): # lint-amnesty, pylint: disable ) ) raise - else: - self.runtime.publish(self, 'xblock.split_test.child_render', {'child_id': child_id}) - return Response() + self.runtime.publish(self, 'xblock.split_test.child_render', {'child_id': child_id}) + return Response() def get_icon_class(self): return self.child.get_icon_class() if self.child else 'other'