diff --git a/platform_plugin_turnitin/apps.py b/platform_plugin_turnitin/apps.py index 323b062..e4acc1e 100644 --- a/platform_plugin_turnitin/apps.py +++ b/platform_plugin_turnitin/apps.py @@ -32,4 +32,6 @@ def ready(self) -> None: Perform application initialization once the Django platform has been initialized. """ super().ready() - from platform_plugin_turnitin.turnitin import TurnitinXBlock + from platform_plugin_turnitin.turnitin import ( # no-qa pylint: disable=import-outside-toplevel,unused-import + TurnitinXBlock, + ) diff --git a/platform_plugin_turnitin/models.py b/platform_plugin_turnitin/models.py index 779f20e..a2f1d60 100644 --- a/platform_plugin_turnitin/models.py +++ b/platform_plugin_turnitin/models.py @@ -18,8 +18,7 @@ class TurnitinSubmission(models.Model): - turnitin_submission_pdf_id (str): The unique identifier for the PDF version of the submission in Turnitin. - created_at (datetime): The date and time when the submission was created. - Methods: - - __str__: Returns a string representation of the submission, showing its ID and creation date. + .. no_pii: """ user = models.ForeignKey( @@ -28,6 +27,3 @@ class TurnitinSubmission(models.Model): turnitin_submission_id = models.CharField(max_length=255, blank=True, null=True) turnitin_submission_pdf_id = models.CharField(max_length=255, blank=True, null=True) created_at = models.DateTimeField(auto_now_add=True) - - def __str__(self): - return f"Submission: {self.turnitin_submission_id or 'Not Set'} - created at: {self.created_at}" diff --git a/platform_plugin_turnitin/settings/common.py b/platform_plugin_turnitin/settings/common.py index fe12430..1a81117 100644 --- a/platform_plugin_turnitin/settings/common.py +++ b/platform_plugin_turnitin/settings/common.py @@ -30,7 +30,7 @@ USE_TZ = True -def plugin_settings(settings): # pylint: disable=unused-argument +def plugin_settings(settings): """ Set of plugin settings used by the Open Edx platform. More info: https://github.com/edx/edx-platform/blob/master/openedx/core/djangoapps/plugins/README.rst @@ -41,3 +41,34 @@ def plugin_settings(settings): # pylint: disable=unused-argument settings.TURNITIN_TCA_INTEGRATION_FAMILY = None settings.TURNITIN_TCA_INTEGRATION_VERSION = None settings.TURNITIN_TCA_API_KEY = None + settings.TURNITIN_SIMILARY_REPORT_PAYLOAD = { + "indexing_settings": {"add_to_index": True}, + "generation_settings": { + "search_repositories": [ + "INTERNET", + "SUBMITTED_WORK", + "PUBLICATION", + "CROSSREF", + "CROSSREF_POSTED_CONTENT", + ], + "submission_auto_excludes": [], + "auto_exclude_self_matching_scope": "ALL", + "priority": "HIGH", + }, + "view_settings": { + "exclude_quotes": True, + "exclude_bibliography": True, + "exclude_citations": False, + "exclude_abstract": False, + "exclude_methods": False, + "exclude_custom_sections": False, + "exclude_preprints": False, + "exclude_small_matches": 8, + "exclude_internet": False, + "exclude_publications": False, + "exclude_crossref": False, + "exclude_crossref_posted_content": False, + "exclude_submitted_works": False, + }, + } + settings.TURNITIN_API_TIMEOUT = 30 diff --git a/platform_plugin_turnitin/settings/production.py b/platform_plugin_turnitin/settings/production.py index d4d3313..d861b05 100644 --- a/platform_plugin_turnitin/settings/production.py +++ b/platform_plugin_turnitin/settings/production.py @@ -3,7 +3,7 @@ """ -def plugin_settings(settings): # pylint: disable=unused-argument +def plugin_settings(settings): """ Set of plugin settings used by the Open Edx platform. More info: https://github.com/edx/edx-platform/blob/master/openedx/core/djangoapps/plugins/README.rst @@ -23,3 +23,11 @@ def plugin_settings(settings): # pylint: disable=unused-argument settings.TURNITIN_TCA_API_KEY = getattr(settings, "ENV_TOKENS", {}).get( "TURNITIN_TCA_API_KEY", settings.TURNITIN_TCA_API_KEY ) + + settings.TURNITIN_SIMILARY_REPORT_PAYLOAD = getattr(settings, "ENV_TOKENS", {}).get( + "TURNITIN_SIMILARY_REPORT_PAYLOAD", settings.TURNITIN_SIMILARY_REPORT_PAYLOAD + ) + + settings.TURNITIN_API_TIMEOUT = getattr(settings, "ENV_TOKENS", {}).get( + "TURNITIN_API_TIMEOUT", settings.TURNITIN_API_TIMEOUT + ) diff --git a/platform_plugin_turnitin/turnitin.py b/platform_plugin_turnitin/turnitin.py index 0e7b69c..3fb5f22 100644 --- a/platform_plugin_turnitin/turnitin.py +++ b/platform_plugin_turnitin/turnitin.py @@ -5,14 +5,15 @@ from http import HTTPStatus import pkg_resources -from django.contrib.auth.models import User +from django.conf import settings +from django.contrib.auth import get_user_model from django.utils import translation from webob import Response from xblock.core import XBlock -from xblock.fields import Integer, Scope from xblock.fragment import Fragment from xblockutils.resources import ResourceLoader +from platform_plugin_turnitin.models import TurnitinSubmission from platform_plugin_turnitin.turnitin_client.handlers import ( get_eula_page, get_similarity_report_info, @@ -24,7 +25,7 @@ put_upload_submission_file_content, ) -from .models import TurnitinSubmission +User = get_user_model() @XBlock.needs("user") @@ -44,8 +45,7 @@ def resource_string(self, path): def studio_view(self, context=None): """ - The primary view of the TurnitinXBlock, shown to students - when viewing courses. + Show primary view of the TurnitinXBlock, shown to students when viewing courses. """ if context: pass # TO-DO: do something based on the context. @@ -67,8 +67,7 @@ def studio_view(self, context=None): # TO-DO: change this view to display your data your own way. def student_view(self, context=None): """ - The primary view of the TurnitinXBlock, shown to students - when viewing courses. + Show primary view of the TurnitinXBlock, shown to students when viewing courses. """ if context: pass # TO-DO: do something based on the context. @@ -87,10 +86,9 @@ def student_view(self, context=None): frag.initialize_js("TurnitinXBlock") return frag - # ---------------------------------------------------------------------------- def get_user_data(self): """ - Fetches user-related data, including user ID, email, and name. + Fetch user-related data, including user ID, email, and name. Returns: dict: A dictionary containing user ID, email, and name. @@ -109,15 +107,15 @@ def get_user_data(self): def get_django_user(self): """ - Returns the django user. + Return the django user. """ current_user_id = self.get_user_data()["user_id"] return User.objects.get(id=current_user_id) @XBlock.json_handler - def get_eula_agreement(self, data, suffix=""): + def get_eula_agreement(self, data, suffix=""): # pylint: disable=unused-argument """ - Fetches the End User License Agreement (EULA) content. + Fetch the End User License Agreement (EULA) content. Args: data (dict): Input data for the request. @@ -130,9 +128,9 @@ def get_eula_agreement(self, data, suffix=""): return {"html": response.text, "status": response.status_code} @XBlock.json_handler - def accept_eula_agreement(self, data, suffix=""): + def accept_eula_agreement(self, data, suffix=""): # pylint: disable=unused-argument """ - Submits acceptance of the EULA for the current user. + Submit acceptance of the EULA for the current user. Args: data (dict): Input data for the request. @@ -153,7 +151,7 @@ def accept_eula_agreement(self, data, suffix=""): def create_turnitin_submission_object(self): """ - Constructs a Turnitin submission object based on the user's data. + Create a Turnitin submission object based on the user's data. Returns: Response: The response from the Turnitin submission API. @@ -163,7 +161,7 @@ def create_turnitin_submission_object(self): payload = { "owner": user_data["user_id"], - "title": self.location.block_id, + "title": self.location.block_id, # pylint: disable=no-member "submitter": user_data["user_id"], "owner_default_permission_set": "LEARNER", "submitter_default_permission_set": "INSTRUCTOR", @@ -189,9 +187,11 @@ def create_turnitin_submission_object(self): return post_create_submission(payload) @XBlock.handler - def upload_turnitin_submission_file(self, data, suffix=""): + def upload_turnitin_submission_file( + self, data, suffix="" + ): # pylint: disable=unused-argument """ - Handles the upload of the user's file to Turnitin. + Handle the upload of the user's file to Turnitin. Args: data (WebRequest): Web request containing the file to be uploaded. @@ -220,9 +220,9 @@ def upload_turnitin_submission_file(self, data, suffix=""): ) @XBlock.json_handler - def get_submission_status(self, data, suffix=""): + def get_submission_status(self, data, suffix=""): # pylint: disable=unused-argument """ - Retrieves the status of the latest Turnitin submission for the user. + Retrieve the status of the latest Turnitin submission for the user. Args: data (dict): Input data for the request. @@ -242,9 +242,11 @@ def get_submission_status(self, data, suffix=""): return response.json() @XBlock.json_handler - def generate_similarity_report(self, data, suffix=""): + def generate_similarity_report( + self, data, suffix="" + ): # pylint: disable=unused-argument """ - Initiates the generation of a similarity report for the user's latest Turnitin submission. + Initialize the generation of a similarity report for the user's latest Turnitin submission. Args: data (dict): Input data for the request. @@ -253,40 +255,7 @@ def generate_similarity_report(self, data, suffix=""): Returns: dict: The status of the similarity report generation process. """ - - payload = { - "indexing_settings": {"add_to_index": True}, - "generation_settings": { - "search_repositories": [ - "INTERNET", - "SUBMITTED_WORK", - "PUBLICATION", - "CROSSREF", - "CROSSREF_POSTED_CONTENT", - ], - "submission_auto_excludes": [ - "b84b77d1-da0f-4f45-b002-8aec4f4796d6", - "b86de142-bc44-4f95-8467-84af12b89217", - ], - "auto_exclude_self_matching_scope": "ALL", - "priority": "HIGH", - }, - "view_settings": { - "exclude_quotes": True, - "exclude_bibliography": True, - "exclude_citations": False, - "exclude_abstract": False, - "exclude_methods": False, - "exclude_custom_sections": False, - "exclude_preprints": False, - "exclude_small_matches": 8, - "exclude_internet": False, - "exclude_publications": False, - "exclude_crossref": False, - "exclude_crossref_posted_content": False, - "exclude_submitted_works": False, - }, - } + payload = getattr(settings, "TURNITIN_SIMILARY_REPORT_PAYLOAD") # pylint: disable=literal-used-as-attribute current_user = self.get_django_user() try: last_submission = TurnitinSubmission.objects.filter( @@ -300,9 +269,11 @@ def generate_similarity_report(self, data, suffix=""): return response.json() @XBlock.json_handler - def get_similarity_report_status(self, data, suffix=""): + def get_similarity_report_status( + self, data, suffix="" + ): # pylint: disable=unused-argument """ - Retrieves the status of the similarity report for the user's latest Turnitin submission. + Retrieve the status of the similarity report for the user's latest Turnitin submission. Args: data (dict): Input data for the request. @@ -322,9 +293,11 @@ def get_similarity_report_status(self, data, suffix=""): return response.json() @XBlock.json_handler - def create_similarity_viewer(self, data, suffix=""): + def create_similarity_viewer( + self, data, suffix="" + ): # pylint: disable=unused-argument """ - Creates a Turnitin similarity viewer for the user's latest submission. + Create a Turnitin similarity viewer for the user's latest submission. Args: data (dict): Input data for the request. @@ -366,13 +339,9 @@ def create_similarity_viewer(self, data, suffix=""): ) return response.json() - # ---------------------------------------------------------------------------- - - # TO-DO: change this to create the scenarios you'd like to see in the - # workbench while developing your XBlock. @staticmethod def workbench_scenarios(): - """A canned scenario for display in the workbench.""" + """Define a workbench scenarios.""" return [ ( "TurnitinXBlock", @@ -393,7 +362,8 @@ def workbench_scenarios(): @staticmethod def _get_statici18n_js_url(): """ - Returns the Javascript translation file for the currently selected language, if any. + Return the Javascript translation file for the currently selected language, if any. + Defaults to English if available. """ locale_code = translation.get_language() @@ -412,6 +382,6 @@ def _get_statici18n_js_url(): @staticmethod def get_dummy(): """ - Dummy method to generate initial i18n + Return a dummy translation to generate initial i18n. """ return translation.gettext_noop("Dummy") diff --git a/platform_plugin_turnitin/turnitin_client/handlers/__init__.py b/platform_plugin_turnitin/turnitin_client/handlers/__init__.py index 16e2230..f2ea4e8 100644 --- a/platform_plugin_turnitin/turnitin_client/handlers/__init__.py +++ b/platform_plugin_turnitin/turnitin_client/handlers/__init__.py @@ -1,9 +1,5 @@ -from .eula import ( - get_eula_acceptance_by_user, - get_eula_page, - get_eula_version_info, - post_accept_eula_version, -) +"""Handler module for Turnitin API integration""" +from .eula import get_eula_acceptance_by_user, get_eula_page, get_eula_version_info, post_accept_eula_version from .similarity_reports import ( get_similarity_report_info, get_similarity_report_pdf, diff --git a/platform_plugin_turnitin/turnitin_client/handlers/api_handler.py b/platform_plugin_turnitin/turnitin_client/handlers/api_handler.py index b37b1fb..c36c9b1 100644 --- a/platform_plugin_turnitin/turnitin_client/handlers/api_handler.py +++ b/platform_plugin_turnitin/turnitin_client/handlers/api_handler.py @@ -1,10 +1,11 @@ +""" +API handlers for turnitin integration +""" from typing import Dict, Optional import requests from django.conf import settings -from .utils import pretty_print_response - TII_API_URL = getattr(settings, "TURNITIN_TII_API_URL", None) TCA_INTEGRATION_FAMILY = getattr(settings, "TURNITIN_TCA_INTEGRATION_FAMILY", None) TCA_INTEGRATION_VERSION = getattr(settings, "TURNITIN_TCA_INTEGRATION_VERSION", None) @@ -69,7 +70,8 @@ def turnitin_api_handler( headers["Content-Type"] = "binary/octet-stream" headers["Content-Disposition"] = f'inline; filename="{uploaded_file.name}"' response = requests.put( - f"{TII_API_URL}/api/v1/{url_prefix}", headers=headers, data=uploaded_file + f"{TII_API_URL}/api/v1/{url_prefix}", headers=headers, data=uploaded_file, + timeout=settings.TURNITIN_API_TIMEOUT ) return response @@ -92,4 +94,4 @@ def get_features_enabled(): Returns all the features enabled in the Turnitin account. """ response = turnitin_api_handler("get", "features-enabled") - pretty_print_response(response) + return response diff --git a/platform_plugin_turnitin/turnitin_client/handlers/eula.py b/platform_plugin_turnitin/turnitin_client/handlers/eula.py index 25e79d1..07c9645 100644 --- a/platform_plugin_turnitin/turnitin_client/handlers/eula.py +++ b/platform_plugin_turnitin/turnitin_client/handlers/eula.py @@ -1,5 +1,7 @@ +""" +EULA handlers for turnitin xblock +""" from .api_handler import turnitin_api_handler -from .utils import pretty_print_response def get_eula_version_info(version: str = "latest", language: str = "EN"): @@ -9,7 +11,7 @@ def get_eula_version_info(version: str = "latest", language: str = "EN"): have to accept in order to send a file to Turnitin. """ response = turnitin_api_handler("get", f"eula/{version}?lang={language}") - pretty_print_response(response) + return response def get_eula_page(version: str = "v1beta", language: str = "en-US"): @@ -26,7 +28,6 @@ def post_accept_eula_version(payload, version: str = "v1beta"): This method should be invoked after the user has viewed the EULA content. """ response = turnitin_api_handler("post", f"eula/{version}/accept", payload) - pretty_print_response(response, "ACCEPT EULA") return response @@ -35,4 +36,4 @@ def get_eula_acceptance_by_user(user_id): Checks if a specific user has accepted a particular EULA version. """ response = turnitin_api_handler("get", f"eula/v1beta/accept/{user_id}") - pretty_print_response(response) + return response diff --git a/platform_plugin_turnitin/turnitin_client/handlers/similarity_reports.py b/platform_plugin_turnitin/turnitin_client/handlers/similarity_reports.py index 2f61ef3..e15ab1a 100644 --- a/platform_plugin_turnitin/turnitin_client/handlers/similarity_reports.py +++ b/platform_plugin_turnitin/turnitin_client/handlers/similarity_reports.py @@ -1,5 +1,7 @@ +""" +Similarity reports handlers +""" from .api_handler import turnitin_api_handler -from .utils import pretty_print_response def put_generate_similarity_report(submission_id, payload): @@ -9,7 +11,6 @@ def put_generate_similarity_report(submission_id, payload): response = turnitin_api_handler( "put", f"submissions/{submission_id}/similarity", payload ) - pretty_print_response(response, "REPORT GENERATION") return response @@ -21,7 +22,6 @@ def get_similarity_report_info(submission_id): COMPLETE """ response = turnitin_api_handler("get", f"submissions/{submission_id}/similarity") - pretty_print_response(response, "REPORT STATUS") return response @@ -34,7 +34,6 @@ def post_create_viewer_launch_url(submission_id, payload): response = turnitin_api_handler( "post", f"submissions/{submission_id}/viewer-url", payload ) - pretty_print_response(response, "URL VIEWER") return response @@ -46,7 +45,7 @@ def post_generate_similarity_report_pdf(submission_id): response = turnitin_api_handler( "post", f"submissions/{submission_id}/similarity/pdf" ) - pretty_print_response(response) + return response def get_similarity_report_pdf(submission_id, pdf_id): @@ -56,7 +55,7 @@ def get_similarity_report_pdf(submission_id, pdf_id): response = turnitin_api_handler( "get", f"submissions/{submission_id}/similarity/pdf/{pdf_id}" ) - pretty_print_response(response) + return response def get_similarity_report_pdf_status(submission_id, pdf_id): @@ -66,4 +65,4 @@ def get_similarity_report_pdf_status(submission_id, pdf_id): response = turnitin_api_handler( "get", f"submissions/{submission_id}/similarity/pdf/{pdf_id}/status" ) - pretty_print_response(response) + return response diff --git a/platform_plugin_turnitin/turnitin_client/handlers/submissions.py b/platform_plugin_turnitin/turnitin_client/handlers/submissions.py index 369b68c..90de133 100644 --- a/platform_plugin_turnitin/turnitin_client/handlers/submissions.py +++ b/platform_plugin_turnitin/turnitin_client/handlers/submissions.py @@ -1,5 +1,7 @@ +""" +Submissions hanlders +""" from .api_handler import turnitin_api_handler -from .utils import pretty_print_response def post_create_submission(payload): @@ -9,7 +11,6 @@ def post_create_submission(payload): related to an assessment sent by a student. """ response = turnitin_api_handler("post", "submissions", payload) - pretty_print_response(response, "CREATE SUBMISSION") return response @@ -23,7 +24,6 @@ def put_upload_submission_file_content(submission_id, file): is_upload=True, uploaded_file=file, ) - pretty_print_response(response, "UPLOAD FILE") return response @@ -39,7 +39,6 @@ def get_submission_info(submission_id): """ response = turnitin_api_handler("get", f"submissions/{submission_id}") - pretty_print_response(response, "SUBMISSION STATUS") return response @@ -51,7 +50,7 @@ def delete_submission(submission_id, is_hard_delete="false"): response = turnitin_api_handler( "delete", f"submissions/{submission_id}/?hard={is_hard_delete}" ) - pretty_print_response(response) + return response def put_recover_submission(submission_id): @@ -59,4 +58,4 @@ def put_recover_submission(submission_id): Recovers a submission that has been soft deleted """ response = turnitin_api_handler("put", f"submissions/{submission_id}/recover") - pretty_print_response(response) + return response diff --git a/platform_plugin_turnitin/turnitin_client/handlers/utils.py b/platform_plugin_turnitin/turnitin_client/handlers/utils.py deleted file mode 100644 index 8da4971..0000000 --- a/platform_plugin_turnitin/turnitin_client/handlers/utils.py +++ /dev/null @@ -1,13 +0,0 @@ -import json - - -def pretty_print_response(response, type_of=""): - """debug helper function""" - content = response.json() - print("\n\n") - print(f"------{type_of}------") - print("\n\n") - print(json.dumps(content, indent=4)) - print("\n\n") - print("------------") - print("\n\n") diff --git a/requirements/base.in b/requirements/base.in index 04b2f8d..c8fa182 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -4,3 +4,4 @@ Django # Web application framework xblock xblock-utils +requests diff --git a/requirements/base.txt b/requirements/base.txt index fc1d27b..dada3f5 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -8,12 +8,16 @@ appdirs==1.4.4 # via fs asgiref==3.7.2 # via django -boto3==1.28.60 +boto3==1.28.62 # via fs-s3fs -botocore==1.31.60 +botocore==1.31.62 # via # boto3 # s3transfer +certifi==2023.7.22 + # via requests +charset-normalizer==3.3.0 + # via requests django==3.2.22 # via # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt @@ -26,6 +30,8 @@ fs==2.4.16 # xblock fs-s3fs==1.1.1 # via openedx-django-pyfs +idna==3.4 + # via requests jmespath==1.0.1 # via # boto3 @@ -35,7 +41,9 @@ lazy==1.6 lxml==4.9.3 # via xblock mako==1.2.4 - # via xblock-utils + # via + # xblock + # xblock-utils markupsafe==2.1.3 # via # mako @@ -52,10 +60,14 @@ pytz==2023.3.post1 # xblock pyyaml==6.0.1 # via xblock +requests==2.31.0 + # via -r requirements/base.in s3transfer==0.7.0 # via boto3 -simplejson==3.19.1 - # via xblock-utils +simplejson==3.19.2 + # via + # xblock + # xblock-utils six==1.16.0 # via # fs @@ -66,14 +78,16 @@ sqlparse==0.4.4 typing-extensions==4.8.0 # via asgiref urllib3==1.26.17 - # via botocore + # via + # botocore + # requests web-fragments==2.1.0 # via # xblock # xblock-utils webob==1.8.7 # via xblock -xblock[django]==1.8.0 +xblock[django]==1.8.1 # via # -r requirements/base.in # xblock-utils diff --git a/requirements/dev.txt b/requirements/dev.txt index ee79818..f727f18 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -19,11 +19,11 @@ astroid==2.15.8 # pylint-celery black==23.9.1 # via -r requirements/dev.in -boto3==1.28.60 +boto3==1.28.62 # via # -r requirements/quality.txt # fs-s3fs -botocore==1.31.60 +botocore==1.31.62 # via # -r requirements/quality.txt # boto3 @@ -32,8 +32,16 @@ build==1.0.3 # via # -r requirements/pip-tools.txt # pip-tools +certifi==2023.7.22 + # via + # -r requirements/quality.txt + # requests chardet==5.2.0 # via diff-cover +charset-normalizer==3.3.0 + # via + # -r requirements/quality.txt + # requests click==8.1.7 # via # -r requirements/pip-tools.txt @@ -71,7 +79,7 @@ django==3.2.22 # -r requirements/quality.txt # edx-i18n-tools # openedx-django-pyfs -edx-i18n-tools==1.2.0 +edx-i18n-tools==1.3.0 # via -r requirements/dev.in edx-lint==5.3.4 # via -r requirements/quality.txt @@ -94,6 +102,10 @@ fs-s3fs==1.1.1 # via # -r requirements/quality.txt # openedx-django-pyfs +idna==3.4 + # via + # -r requirements/quality.txt + # requests importlib-metadata==6.8.0 # via # -r requirements/pip-tools.txt @@ -127,10 +139,12 @@ lazy-object-proxy==1.9.0 lxml==4.9.3 # via # -r requirements/quality.txt + # edx-i18n-tools # xblock mako==1.2.4 # via # -r requirements/quality.txt + # xblock # xblock-utils markupsafe==2.1.3 # via @@ -246,13 +260,16 @@ pyyaml==6.0.1 # code-annotations # edx-i18n-tools # xblock +requests==2.31.0 + # via -r requirements/quality.txt s3transfer==0.7.0 # via # -r requirements/quality.txt # boto3 -simplejson==3.19.1 +simplejson==3.19.2 # via # -r requirements/quality.txt + # xblock # xblock-utils six==1.16.0 # via @@ -314,6 +331,7 @@ urllib3==1.26.17 # via # -r requirements/quality.txt # botocore + # requests virtualenv==20.24.5 # via # -r requirements/ci.txt @@ -335,7 +353,7 @@ wrapt==1.15.0 # via # -r requirements/quality.txt # astroid -xblock[django]==1.8.0 +xblock[django]==1.8.1 # via # -r requirements/quality.txt # xblock-utils diff --git a/requirements/doc.txt b/requirements/doc.txt index 3f057b9..8d94fb3 100644 --- a/requirements/doc.txt +++ b/requirements/doc.txt @@ -22,11 +22,11 @@ babel==2.13.0 # sphinx beautifulsoup4==4.12.2 # via pydata-sphinx-theme -boto3==1.28.60 +boto3==1.28.62 # via # -r requirements/test.txt # fs-s3fs -botocore==1.31.60 +botocore==1.31.62 # via # -r requirements/test.txt # boto3 @@ -34,11 +34,15 @@ botocore==1.31.60 build==1.0.3 # via -r requirements/doc.in certifi==2023.7.22 - # via requests + # via + # -r requirements/test.txt + # requests cffi==1.16.0 # via cryptography charset-normalizer==3.3.0 - # via requests + # via + # -r requirements/test.txt + # requests click==8.1.7 # via # -r requirements/test.txt @@ -80,7 +84,9 @@ fs-s3fs==1.1.1 # -r requirements/test.txt # openedx-django-pyfs idna==3.4 - # via requests + # via + # -r requirements/test.txt + # requests imagesize==1.4.1 # via sphinx importlib-metadata==6.8.0 @@ -124,6 +130,7 @@ lxml==4.9.3 mako==1.2.4 # via # -r requirements/test.txt + # xblock # xblock-utils markdown-it-py==3.0.0 # via rich @@ -207,6 +214,7 @@ readme-renderer==42.0 # via twine requests==2.31.0 # via + # -r requirements/test.txt # requests-toolbelt # sphinx # twine @@ -224,9 +232,10 @@ s3transfer==0.7.0 # boto3 secretstorage==3.3.3 # via keyring -simplejson==3.19.1 +simplejson==3.19.2 # via # -r requirements/test.txt + # xblock # xblock-utils six==1.16.0 # via @@ -301,7 +310,7 @@ webob==1.8.7 # via # -r requirements/test.txt # xblock -xblock[django]==1.8.0 +xblock[django]==1.8.1 # via # -r requirements/test.txt # xblock-utils diff --git a/requirements/quality.txt b/requirements/quality.txt index 2fd0eed..837efd6 100644 --- a/requirements/quality.txt +++ b/requirements/quality.txt @@ -16,15 +16,23 @@ astroid==2.15.8 # via # pylint # pylint-celery -boto3==1.28.60 +boto3==1.28.62 # via # -r requirements/test.txt # fs-s3fs -botocore==1.31.60 +botocore==1.31.62 # via # -r requirements/test.txt # boto3 # s3transfer +certifi==2023.7.22 + # via + # -r requirements/test.txt + # requests +charset-normalizer==3.3.0 + # via + # -r requirements/test.txt + # requests click==8.1.7 # via # -r requirements/test.txt @@ -64,6 +72,10 @@ fs-s3fs==1.1.1 # via # -r requirements/test.txt # openedx-django-pyfs +idna==3.4 + # via + # -r requirements/test.txt + # requests iniconfig==2.0.0 # via # -r requirements/test.txt @@ -94,6 +106,7 @@ lxml==4.9.3 mako==1.2.4 # via # -r requirements/test.txt + # xblock # xblock-utils markupsafe==2.1.3 # via @@ -167,13 +180,16 @@ pyyaml==6.0.1 # -r requirements/test.txt # code-annotations # xblock +requests==2.31.0 + # via -r requirements/test.txt s3transfer==0.7.0 # via # -r requirements/test.txt # boto3 -simplejson==3.19.1 +simplejson==3.19.2 # via # -r requirements/test.txt + # xblock # xblock-utils six==1.16.0 # via @@ -214,6 +230,7 @@ urllib3==1.26.17 # via # -r requirements/test.txt # botocore + # requests web-fragments==2.1.0 # via # -r requirements/test.txt @@ -225,7 +242,7 @@ webob==1.8.7 # xblock wrapt==1.15.0 # via astroid -xblock[django]==1.8.0 +xblock[django]==1.8.1 # via # -r requirements/test.txt # xblock-utils diff --git a/requirements/test.txt b/requirements/test.txt index a7c0234..33031b4 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -12,15 +12,23 @@ asgiref==3.7.2 # via # -r requirements/base.txt # django -boto3==1.28.60 +boto3==1.28.62 # via # -r requirements/base.txt # fs-s3fs -botocore==1.31.60 +botocore==1.31.62 # via # -r requirements/base.txt # boto3 # s3transfer +certifi==2023.7.22 + # via + # -r requirements/base.txt + # requests +charset-normalizer==3.3.0 + # via + # -r requirements/base.txt + # requests click==8.1.7 # via code-annotations code-annotations==1.5.0 @@ -43,6 +51,10 @@ fs-s3fs==1.1.1 # via # -r requirements/base.txt # openedx-django-pyfs +idna==3.4 + # via + # -r requirements/base.txt + # requests iniconfig==2.0.0 # via pytest jinja2==3.1.2 @@ -63,6 +75,7 @@ lxml==4.9.3 mako==1.2.4 # via # -r requirements/base.txt + # xblock # xblock-utils markupsafe==2.1.3 # via @@ -105,13 +118,16 @@ pyyaml==6.0.1 # -r requirements/base.txt # code-annotations # xblock +requests==2.31.0 + # via -r requirements/base.txt s3transfer==0.7.0 # via # -r requirements/base.txt # boto3 -simplejson==3.19.1 +simplejson==3.19.2 # via # -r requirements/base.txt + # xblock # xblock-utils six==1.16.0 # via @@ -139,6 +155,7 @@ urllib3==1.26.17 # via # -r requirements/base.txt # botocore + # requests web-fragments==2.1.0 # via # -r requirements/base.txt @@ -148,7 +165,7 @@ webob==1.8.7 # via # -r requirements/base.txt # xblock -xblock[django]==1.8.0 +xblock[django]==1.8.1 # via # -r requirements/base.txt # xblock-utils