diff --git a/forum/backend.py b/forum/backend.py index 194f5113..b939503e 100644 --- a/forum/backend.py +++ b/forum/backend.py @@ -2,6 +2,8 @@ from typing import Callable, Optional +from edx_django_utils.monitoring import set_custom_attribute # type: ignore[import-untyped] + from forum.backends.mongodb.api import MongoBackend from forum.backends.mysql.api import MySQLBackend @@ -37,7 +39,15 @@ def get_backend( """Return a factory function that lazily loads the backend API based on course_id.""" def _get_backend() -> MongoBackend | MySQLBackend: - if is_mysql_backend_enabled(course_id): + backend_enabled = is_mysql_backend_enabled(course_id) + + # Track which backend is being used + backend_type = "mysql" if backend_enabled else "mongodb" + set_custom_attribute("forum.backend", backend_type) + if course_id: + set_custom_attribute("forum.backend.course_id", str(course_id)) + + if backend_enabled: return MySQLBackend() return MongoBackend() diff --git a/forum/backends/mongodb/comments.py b/forum/backends/mongodb/comments.py index 527fc0b0..32d313b8 100644 --- a/forum/backends/mongodb/comments.py +++ b/forum/backends/mongodb/comments.py @@ -4,6 +4,7 @@ from typing import Any, Optional from bson import ObjectId +from edx_django_utils.monitoring import set_custom_attribute # type: ignore[import-untyped] from forum.backends.mongodb.contents import BaseContents from forum.backends.mongodb.threads import CommentThread @@ -102,6 +103,18 @@ def insert( Returns: str: The ID of the inserted document. """ + # Track comment insertion + set_custom_attribute("forum.backend.operation", "insert_comment") + set_custom_attribute("forum.thread_id", comment_thread_id) + set_custom_attribute("forum.course_id", course_id) + set_custom_attribute("forum.author_id", author_id) + set_custom_attribute("forum.comment_depth", str(depth)) + if parent_id: + set_custom_attribute("forum.parent_comment_id", parent_id) + set_custom_attribute("forum.is_child_comment", True) + else: + set_custom_attribute("forum.is_child_comment", False) + date = datetime.now() comment_data = { "votes": self.get_votes_dict(up=[], down=[]), @@ -275,6 +288,13 @@ def delete( # type: ignore[override] Returns: The number of comments deleted. """ + # Track comment deletion + set_custom_attribute("forum.backend.operation", "delete_comment") + set_custom_attribute("forum.comment_id", _id) + set_custom_attribute("forum.delete_mode", mode) + if deleted_by: + set_custom_attribute("forum.deleted_by", deleted_by) + comment = self.get(_id) if not comment: return 0, 0 diff --git a/forum/backends/mongodb/threads.py b/forum/backends/mongodb/threads.py index 9b5da85f..3e392113 100644 --- a/forum/backends/mongodb/threads.py +++ b/forum/backends/mongodb/threads.py @@ -4,6 +4,7 @@ from typing import Any, Optional from bson import ObjectId +from edx_django_utils.monitoring import set_custom_attribute # type: ignore[import-untyped] from forum.backends.mongodb.contents import BaseContents from forum.backends.mongodb.users import Users @@ -20,6 +21,9 @@ class CommentThread(BaseContents): def delete(self, _id: str) -> int: """Delete CommentThread""" + set_custom_attribute("forum.backend.operation", "delete_thread") + set_custom_attribute("forum.thread_id", _id) + result = super().delete(_id) get_handler_by_name("comment_thread_deleted").send( sender=self.__class__, comment_thread_id=_id @@ -142,6 +146,15 @@ def insert( if historical_abuse_flaggers is None: historical_abuse_flaggers = [] + # Track thread insertion + set_custom_attribute("forum.backend.operation", "insert_thread") + set_custom_attribute("forum.thread_type", thread_type) + set_custom_attribute("forum.course_id", course_id) + set_custom_attribute("forum.commentable_id", commentable_id) + set_custom_attribute("forum.author_id", author_id) + if group_id: + set_custom_attribute("forum.group_id", str(group_id)) + date = datetime.now() thread_data = { "votes": self.get_votes_dict(up=[], down=[]), diff --git a/forum/backends/mysql/api.py b/forum/backends/mysql/api.py index 63102e44..ee161a2c 100644 --- a/forum/backends/mysql/api.py +++ b/forum/backends/mysql/api.py @@ -24,6 +24,7 @@ When, ) from django.utils import timezone +from edx_django_utils.monitoring import set_custom_attribute # type: ignore[import-untyped] from rest_framework import status from rest_framework.response import Response @@ -1686,6 +1687,10 @@ def create_comment(cls, data: dict[str, Any]) -> str: @classmethod def delete_comment(cls, comment_id: str) -> None: """Delete comment from comment_id.""" + set_custom_attribute("forum.backend.operation", "delete_comment") + set_custom_attribute("forum.comment_id", comment_id) + set_custom_attribute("forum.delete_mode", "hard") + comment = Comment.objects.get(pk=comment_id) if comment.parent: cls.update_child_count_in_parent_comment(str(comment.parent.pk), -1) @@ -1701,6 +1706,12 @@ def soft_delete_comment( Returns: tuple: (responses_deleted, replies_deleted) """ + set_custom_attribute("forum.backend.operation", "delete_comment") + set_custom_attribute("forum.comment_id", comment_id) + set_custom_attribute("forum.delete_mode", "soft") + if deleted_by: + set_custom_attribute("forum.deleted_by", deleted_by) + comment = Comment.objects.get(pk=comment_id) deleted_user: Optional[User] = None if deleted_by: @@ -2044,6 +2055,17 @@ def get_commentables_counts_based_on_type(course_id: str) -> dict[str, Any]: @staticmethod def update_comment(comment_id: str, **kwargs: Any) -> int: """Updates a comment in the database.""" + # Track comment update + set_custom_attribute("forum.backend.operation", "update_comment") + set_custom_attribute("forum.comment_id", comment_id) + + # Track what's being updated + update_fields = [k for k in kwargs if kwargs.get(k) is not None] + if update_fields: + set_custom_attribute("forum.update_fields", ",".join(update_fields)) + if "course_id" in kwargs: + set_custom_attribute("forum.course_id", kwargs["course_id"]) + try: comment = Comment.objects.get(id=comment_id) except Comment.DoesNotExist: @@ -2244,6 +2266,9 @@ def get_subscriptions(cls, query: dict[str, Any]) -> list[dict[str, Any]]: @staticmethod def delete_thread(thread_id: str) -> int: """Delete thread from thread_id.""" + set_custom_attribute("forum.backend.operation", "delete_thread") + set_custom_attribute("forum.thread_id", thread_id) + try: thread = CommentThread.objects.get(pk=thread_id) except ObjectDoesNotExist: @@ -2254,6 +2279,12 @@ def delete_thread(thread_id: str) -> int: @staticmethod def soft_delete_thread(thread_id: str, deleted_by: Optional[str] = None) -> int: """Soft delete thread by marking it as deleted.""" + set_custom_attribute("forum.backend.operation", "delete_thread") + set_custom_attribute("forum.thread_id", thread_id) + set_custom_attribute("forum.delete_mode", "soft") + if deleted_by: + set_custom_attribute("forum.deleted_by", deleted_by) + try: thread = CommentThread.objects.get(pk=thread_id) except ObjectDoesNotExist: @@ -2268,6 +2299,17 @@ def soft_delete_thread(thread_id: str, deleted_by: Optional[str] = None) -> int: @staticmethod def create_thread(data: dict[str, Any]) -> str: """Create thread.""" + # Track thread creation + set_custom_attribute("forum.backend.operation", "create_thread") + set_custom_attribute("forum.course_id", data["course_id"]) + set_custom_attribute("forum.thread_type", data.get("thread_type", "discussion")) + set_custom_attribute( + "forum.commentable_id", data.get("commentable_id", "course") + ) + set_custom_attribute("forum.author_id", data["author_id"]) + if "group_id" in data: + set_custom_attribute("forum.group_id", str(data["group_id"])) + optional_args = {} if group_id := data.get("group_id"): optional_args["group_id"] = group_id @@ -2292,6 +2334,17 @@ def update_thread( **kwargs: Any, ) -> int: """Updates a thread document in the database.""" + # Track thread update + set_custom_attribute("forum.backend.operation", "update_thread") + set_custom_attribute("forum.thread_id", thread_id) + + # Track what's being updated + update_fields = [k for k in kwargs if kwargs.get(k) is not None] + if update_fields: + set_custom_attribute("forum.update_fields", ",".join(update_fields)) + if "course_id" in kwargs: + set_custom_attribute("forum.course_id", kwargs["course_id"]) + thread = CommentThread.objects.get(id=thread_id) if "thread_type" in kwargs: diff --git a/forum/backends/mysql/models.py b/forum/backends/mysql/models.py index 637cd629..e836498e 100644 --- a/forum/backends/mysql/models.py +++ b/forum/backends/mysql/models.py @@ -15,7 +15,7 @@ from django.db.models import QuerySet from django.utils import timezone from django.utils.translation import gettext_lazy as _ -from model_utils.models import TimeStampedModel +from model_utils.models import TimeStampedModel # pylint: disable=import-error from opaque_keys.edx.django.models import CourseKeyField from forum.utils import validate_upvote_or_downvote diff --git a/forum/migration_helpers.py b/forum/migration_helpers.py index 149ea030..fd8394b6 100644 --- a/forum/migration_helpers.py +++ b/forum/migration_helpers.py @@ -26,7 +26,6 @@ ) from forum.utils import make_aware, get_trunc_title - logger = logging.getLogger(__name__) diff --git a/forum/settings/common.py b/forum/settings/common.py index dbecd9cd..ab8d35c9 100644 --- a/forum/settings/common.py +++ b/forum/settings/common.py @@ -9,6 +9,9 @@ def plugin_settings(settings: Any) -> None: """ Common settings for forum app """ + # Configure Datadog monitoring + settings.OPENEDX_TELEMETRY = ["edx_django_utils.monitoring.DatadogBackend"] + # Search backend if getattr(settings, "MEILISEARCH_ENABLED", False): settings.FORUM_SEARCH_BACKEND = getattr( diff --git a/forum/views/comments.py b/forum/views/comments.py index 2dd4bf2b..046877a8 100644 --- a/forum/views/comments.py +++ b/forum/views/comments.py @@ -1,5 +1,6 @@ """Forum Comments API Views.""" +from edx_django_utils.monitoring import set_custom_attribute # type: ignore[import-untyped] from rest_framework import status from rest_framework.permissions import AllowAny from rest_framework.request import Request @@ -38,6 +39,9 @@ def get(self, request: Request, comment_id: str) -> Response: Response: The details of the comment for the given comment_id. """ + set_custom_attribute("forum.operation", "get_comment") + set_custom_attribute("forum.comment_id", comment_id) + try: data = get_parent_comment(comment_id) except ForumV2RequestError: @@ -65,8 +69,16 @@ def post(self, request: Request, comment_id: str) -> Response: Response: The details of the comment that is created. """ + set_custom_attribute("forum.operation", "create_child_comment") + set_custom_attribute("forum.parent_comment_id", comment_id) + + request_data = request.data + if "course_id" in request_data: + set_custom_attribute("forum.course_id", request_data["course_id"]) + if "user_id" in request_data: + set_custom_attribute("forum.author_id", request_data["user_id"]) + try: - request_data = request.data comment = create_child_comment( comment_id, request_data["body"], @@ -99,8 +111,20 @@ def put(self, request: Request, comment_id: str) -> Response: Response: The details of the comment that is updated. """ + set_custom_attribute("forum.operation", "update_comment") + set_custom_attribute("forum.comment_id", comment_id) + + # Track what fields are being updated + request_data = request.data + if request_data: + update_fields = [ + k for k in request_data.keys() if request_data.get(k) is not None + ] + set_custom_attribute("forum.update_fields", ",".join(update_fields)) + if "course_id" in request_data: + set_custom_attribute("forum.course_id", request_data["course_id"]) + try: - request_data = request.data if anonymous := request_data.get("anonymous"): anonymous = str_to_bool(anonymous) if anonymous_to_peers := request_data.get("anonymous_to_peers"): @@ -146,6 +170,9 @@ def delete(self, request: Request, comment_id: str) -> Response: Response: The details of the comment that is deleted. """ + set_custom_attribute("forum.operation", "delete_comment") + set_custom_attribute("forum.comment_id", comment_id) + try: deleted_comment = delete_comment(comment_id) except ForumV2RequestError: @@ -179,8 +206,16 @@ def post(self, request: Request, thread_id: str) -> Response: Response: The details of the comment that is created. """ + set_custom_attribute("forum.operation", "create_parent_comment") + set_custom_attribute("forum.thread_id", thread_id) + + request_data = request.data + if "course_id" in request_data: + set_custom_attribute("forum.course_id", request_data["course_id"]) + if "user_id" in request_data: + set_custom_attribute("forum.author_id", request_data["user_id"]) + try: - request_data = request.data comment = create_parent_comment( thread_id, request_data["body"], diff --git a/forum/views/threads.py b/forum/views/threads.py index 893bd2a3..7feb2d75 100644 --- a/forum/views/threads.py +++ b/forum/views/threads.py @@ -3,6 +3,7 @@ import logging from typing import Any +from edx_django_utils.monitoring import set_custom_attribute # type: ignore[import-untyped] from rest_framework import status from rest_framework.permissions import AllowAny from rest_framework.request import Request @@ -42,8 +43,22 @@ def get(self, request: Request, thread_id: str) -> Response: Returns: Response: A Response object containing the serialized thread data or an error message. """ + set_custom_attribute("forum.operation", "get_thread") + set_custom_attribute("forum.thread_id", thread_id) + try: params = request.query_params.dict() + + # Track request parameters + if "user_id" in params: + set_custom_attribute("forum.user_id", params["user_id"]) + if "with_responses" in params: + set_custom_attribute("forum.with_responses", params["with_responses"]) + if "resp_limit" in params: + set_custom_attribute("forum.resp_limit", params["resp_limit"]) + if "resp_skip" in params: + set_custom_attribute("forum.resp_skip", params["resp_skip"]) + data = get_thread(thread_id, params) except ForumV2RequestError as error: return Response( @@ -64,6 +79,9 @@ def delete(self, request: Request, thread_id: str) -> Response: Response: The details of the thread that is deleted. """ + set_custom_attribute("forum.operation", "delete_thread") + set_custom_attribute("forum.thread_id", thread_id) + try: serialized_data = delete_thread(thread_id) return Response(serialized_data, status=status.HTTP_200_OK) @@ -85,6 +103,15 @@ def put(self, request: Request, thread_id: str) -> Response: Response: The details of the thread that is updated. """ + set_custom_attribute("forum.operation", "update_thread") + set_custom_attribute("forum.thread_id", thread_id) + + # Track what fields are being updated + if request.data: + update_fields = list(request.data.keys()) + set_custom_attribute("forum.update_fields", ",".join(update_fields)) + if "course_id" in request.data: + set_custom_attribute("forum.course_id", request.data["course_id"]) try: serialized_data = update_thread(thread_id, **request.data) @@ -117,6 +144,19 @@ def post(self, request: Request) -> Response: Response: The details of the thread that is created. """ + set_custom_attribute("forum.operation", "create_thread") + + # Track thread creation context + if "course_id" in request.data: + set_custom_attribute("forum.course_id", request.data["course_id"]) + if "thread_type" in request.data: + set_custom_attribute("forum.thread_type", request.data["thread_type"]) + if "commentable_id" in request.data: + set_custom_attribute("forum.commentable_id", request.data["commentable_id"]) + if "user_id" in request.data: + set_custom_attribute("forum.author_id", request.data["user_id"]) + if "group_id" in request.data: + set_custom_attribute("forum.group_id", str(request.data["group_id"])) try: params = request.data diff --git a/forum/views/votes.py b/forum/views/votes.py index 2153c5cd..edc4c611 100644 --- a/forum/views/votes.py +++ b/forum/views/votes.py @@ -2,6 +2,7 @@ Vote Views """ +from edx_django_utils.monitoring import set_custom_attribute # type: ignore[import-untyped] from rest_framework import status from rest_framework.request import Request from rest_framework.response import Response @@ -52,6 +53,13 @@ def put(self, request: Request, thread_id: str) -> Response: Returns: Response: The HTTP response with the result of the vote operation. """ + set_custom_attribute("forum.operation", "vote_thread") + set_custom_attribute("forum.thread_id", thread_id) + if "user_id" in request.data: + set_custom_attribute("forum.user_id", request.data["user_id"]) + if "value" in request.data: + set_custom_attribute("forum.vote_type", request.data["value"]) + try: thread_response = update_thread_votes( thread_id, request.data["user_id"], request.data["value"] @@ -72,8 +80,13 @@ def delete(self, request: Request, thread_id: str) -> Response: Returns: Response: The HTTP response with the result of the remove vote operation. """ + set_custom_attribute("forum.operation", "remove_vote_thread") + set_custom_attribute("forum.thread_id", thread_id) + user_id = request.query_params.get("user_id", "") + if user_id: + set_custom_attribute("forum.user_id", user_id) + try: - user_id = request.query_params.get("user_id", "") thread_response = delete_thread_vote(thread_id, user_id) except (ForumV2RequestError, KeyError) as e: return Response({"error": str(e)}, status=status.HTTP_400_BAD_REQUEST) @@ -117,6 +130,13 @@ def put(self, request: Request, comment_id: str) -> Response: Returns: Response: The HTTP response with the result of the vote operation. """ + set_custom_attribute("forum.operation", "vote_comment") + set_custom_attribute("forum.comment_id", comment_id) + if "user_id" in request.data: + set_custom_attribute("forum.user_id", request.data["user_id"]) + if "value" in request.data: + set_custom_attribute("forum.vote_type", request.data["value"]) + try: comment_response = update_comment_votes( comment_id, request.data["user_id"], request.data["value"] @@ -137,8 +157,13 @@ def delete(self, request: Request, comment_id: str) -> Response: Returns: Response: The HTTP response with the result of the remove vote operation. """ + set_custom_attribute("forum.operation", "remove_vote_comment") + set_custom_attribute("forum.comment_id", comment_id) + user_id = request.query_params.get("user_id", "") + if user_id: + set_custom_attribute("forum.user_id", user_id) + try: - user_id = request.query_params.get("user_id", "") comment_response = delete_comment_vote(comment_id, user_id) except (ForumV2RequestError, KeyError) as e: return Response({"error": str(e)}, status=status.HTTP_400_BAD_REQUEST) diff --git a/requirements/base.in b/requirements/base.in index ab0c2866..64742ecc 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -13,3 +13,5 @@ pymongo elasticsearch edx-search # meilisearch backend mysqlclient +ddtrace +edx-django-utils diff --git a/requirements/base.txt b/requirements/base.txt index 449bdd19..11f87d12 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.12 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade @@ -8,27 +8,33 @@ amqp==5.3.1 # via kombu annotated-types==0.7.0 # via pydantic -asgiref==3.9.1 +anyio==4.13.0 + # via httpx +asgiref==3.11.1 # via django -attrs==25.3.0 +attrs==26.1.0 # via openedx-events -beautifulsoup4==4.13.5 +beautifulsoup4==4.14.3 # via -r requirements/base.in -billiard==4.2.1 +billiard==4.2.4 # via celery -camel-converter[pydantic]==4.0.1 +bytecode==0.17.0 + # via ddtrace +camel-converter[pydantic]==5.1.0 # via meilisearch -celery==5.5.3 +celery==5.6.3 # via event-tracking -certifi==2025.8.3 +certifi==2026.2.25 # via # elasticsearch + # httpcore + # httpx # requests -cffi==1.17.1 +cffi==2.0.0 # via pynacl -charset-normalizer==3.4.3 +charset-normalizer==3.4.7 # via requests -click==8.2.1 +click==8.3.2 # via # celery # click-didyoumean @@ -42,13 +48,16 @@ click-plugins==1.1.1.2 # via celery click-repl==0.3.0 # via celery -code-annotations==2.3.0 +code-annotations==2.3.2 # via edx-toggles -django==4.2.23 +ddtrace==4.7.0 + # via -r requirements/base.in +django==5.2.13 # via - # -c https:/raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/base.in # django-crum + # django-model-utils # django-waffle # djangorestframework # edx-django-utils @@ -60,84 +69,102 @@ django-crum==0.7.9 # via # edx-django-utils # edx-toggles +django-model-utils==5.0.0 + # via -r requirements/base.in django-waffle==5.0.0 # via # edx-django-utils # edx-toggles -djangorestframework==3.16.1 +djangorestframework==3.17.1 # via -r requirements/base.in -dnspython==2.7.0 +dnspython==2.8.0 # via pymongo edx-ccx-keys==2.0.2 # via openedx-events -edx-django-utils==8.0.0 +edx-django-utils==8.0.1 # via + # -r requirements/base.in # edx-toggles # event-tracking # openedx-events -edx-opaque-keys[django]==3.0.0 +edx-opaque-keys[django]==4.0.0 # via # edx-ccx-keys # openedx-events -edx-search==4.1.3 +edx-search==5.0.0 # via -r requirements/base.in -edx-toggles==5.4.1 +edx-toggles==6.0.0 # via # edx-search # event-tracking elasticsearch==7.13.4 # via - # -c https:/raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/base.in # edx-search -event-tracking==3.3.0 +envier==0.6.1 + # via ddtrace +event-tracking==4.0.0 # via edx-search -fastavro==1.12.0 +fastavro==1.12.1 # via openedx-events -idna==3.10 - # via requests +h11==0.16.0 + # via httpcore +httpcore==1.0.9 + # via httpx +httpx==0.28.1 + # via typesense +idna==3.11 + # via + # anyio + # httpx + # requests +importlib-metadata==8.7.1 + # via opentelemetry-api jinja2==3.1.6 # via code-annotations -kombu==5.5.4 +kombu==5.6.2 # via celery -markupsafe==3.0.2 +markupsafe==3.0.3 # via jinja2 -meilisearch==0.37.0 +meilisearch==0.40.0 # via edx-search -mysqlclient==2.2.7 +mysqlclient==2.2.8 # via -r requirements/base.in openedx-atlas==0.7.0 # via -r requirements/base.in openedx-events==10.5.0 # via event-tracking -packaging==25.0 +opentelemetry-api==1.41.0 + # via ddtrace +packaging==26.0 # via kombu prompt-toolkit==3.0.52 # via click-repl -psutil==7.0.0 +psutil==7.2.2 # via edx-django-utils -pycparser==2.22 +pycparser==3.0 # via cffi -pydantic==2.11.7 +pydantic==2.13.0 # via camel-converter -pydantic-core==2.33.2 +pydantic-core==2.46.0 # via pydantic -pymongo==4.14.1 +pymongo==4.16.0 # via # -r requirements/base.in # edx-opaque-keys # event-tracking -pynacl==1.5.0 +pynacl==1.6.2 # via edx-django-utils python-dateutil==2.9.0.post0 # via celery python-slugify==8.0.4 # via code-annotations -pytz==2025.2 +pytz==2026.1.post1 # via event-tracking -pyyaml==6.0.2 +pyyaml==6.0.3 # via code-annotations -requests==2.32.5 +requests==2.33.1 # via # -r requirements/base.in # meilisearch @@ -146,28 +173,35 @@ six==1.17.0 # edx-ccx-keys # event-tracking # python-dateutil -soupsieve==2.8 +soupsieve==2.8.3 # via beautifulsoup4 -sqlparse==0.5.3 +sqlparse==0.5.5 # via django -stevedore==5.5.0 +stevedore==5.7.0 # via # code-annotations # edx-django-utils # edx-opaque-keys text-unidecode==1.3 # via python-slugify +typesense==2.0.0 + # via edx-search typing-extensions==4.15.0 # via + # anyio # beautifulsoup4 # edx-opaque-keys + # opentelemetry-api # pydantic # pydantic-core + # typesense # typing-inspection -typing-inspection==0.4.1 +typing-inspection==0.4.2 # via pydantic -tzdata==2025.2 +tzdata==2026.1 # via kombu +tzlocal==5.3.1 + # via celery urllib3==1.26.20 # via # elasticsearch @@ -177,8 +211,12 @@ vine==5.1.0 # amqp # celery # kombu -wcwidth==0.2.13 +wcwidth==0.6.0 # via prompt-toolkit +wrapt==2.1.2 + # via ddtrace +zipp==3.23.0 + # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/ci.txt b/requirements/ci.txt index 748a1284..f18a1e82 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.12 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade @@ -12,60 +12,70 @@ annotated-types==0.7.0 # via # -r requirements/quality.txt # pydantic -asgiref==3.9.1 +anyio==4.13.0 + # via + # -r requirements/quality.txt + # httpx +asgiref==3.11.1 # via # -r requirements/quality.txt # django -astroid==3.3.11 +astroid==4.0.4 # via # -r requirements/quality.txt # pylint # pylint-celery -attrs==25.3.0 +attrs==26.1.0 # via # -r requirements/quality.txt # openedx-events -beautifulsoup4==4.13.5 +backports-tarfile==1.2.0 + # via + # -r requirements/quality.txt + # jaraco-context +beautifulsoup4==4.14.3 # via -r requirements/quality.txt -billiard==4.2.1 +billiard==4.2.4 # via # -r requirements/quality.txt # celery -black==25.1.0 +black==26.3.1 # via -r requirements/ci.in -build==1.3.0 +build==1.4.3 # via -r requirements/quality.txt -cachetools==6.2.0 +bytecode==0.17.0 + # via + # -r requirements/quality.txt + # ddtrace +cachetools==7.0.5 # via # -r requirements/quality.txt # tox -camel-converter[pydantic]==4.0.1 +camel-converter[pydantic]==5.1.0 # via # -r requirements/quality.txt # meilisearch -celery==5.5.3 +celery==5.6.3 # via # -r requirements/quality.txt # event-tracking -certifi==2025.8.3 +certifi==2026.2.25 # via # -r requirements/quality.txt # elasticsearch + # httpcore + # httpx # requests -cffi==1.17.1 +cffi==2.0.0 # via # -r requirements/quality.txt # cryptography # pynacl -chardet==5.2.0 - # via - # -r requirements/quality.txt - # tox -charset-normalizer==3.4.3 +charset-normalizer==3.4.7 # via # -r requirements/quality.txt # requests -click==8.2.1 +click==8.3.2 # via # -r requirements/quality.txt # black @@ -93,7 +103,7 @@ click-repl==0.3.0 # via # -r requirements/quality.txt # celery -code-annotations==2.3.0 +code-annotations==2.3.2 # via # -r requirements/quality.txt # edx-lint @@ -102,15 +112,17 @@ colorama==0.4.6 # via # -r requirements/quality.txt # tox -coverage[toml]==7.10.5 +coverage[toml]==7.13.5 # via # -r requirements/quality.txt # pytest-cov -cryptography==45.0.6 +cryptography==46.0.7 # via # -r requirements/quality.txt # secretstorage -dill==0.4.0 +ddtrace==4.7.0 + # via -r requirements/quality.txt +dill==0.4.1 # via # -r requirements/quality.txt # pylint @@ -118,11 +130,12 @@ distlib==0.4.0 # via # -r requirements/quality.txt # virtualenv -django==4.2.23 +django==5.2.13 # via - # -c https:/raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/quality.txt # django-crum + # django-model-utils # django-stubs # django-stubs-ext # django-waffle @@ -137,11 +150,13 @@ django-crum==0.7.9 # -r requirements/quality.txt # edx-django-utils # edx-toggles -django-stubs==5.2.2 +django-model-utils==5.0.0 + # via -r requirements/quality.txt +django-stubs==6.0.2 # via # -r requirements/quality.txt # djangorestframework-stubs -django-stubs-ext==5.2.2 +django-stubs-ext==6.0.2 # via # -r requirements/quality.txt # django-stubs @@ -150,15 +165,15 @@ django-waffle==5.0.0 # -r requirements/quality.txt # edx-django-utils # edx-toggles -djangorestframework==3.16.1 +djangorestframework==3.17.1 # via -r requirements/quality.txt -djangorestframework-stubs==3.16.2 +djangorestframework-stubs==3.16.9 # via -r requirements/quality.txt -dnspython==2.7.0 +dnspython==2.8.0 # via # -r requirements/quality.txt # pymongo -docutils==0.22 +docutils==0.22.4 # via # -r requirements/quality.txt # readme-renderer @@ -166,59 +181,83 @@ edx-ccx-keys==2.0.2 # via # -r requirements/quality.txt # openedx-events -edx-django-utils==8.0.0 +edx-django-utils==8.0.1 # via # -r requirements/quality.txt # edx-toggles # event-tracking # openedx-events -edx-lint==5.6.0 +edx-lint==6.0.0 # via -r requirements/quality.txt -edx-opaque-keys[django]==3.0.0 +edx-opaque-keys[django]==4.0.0 # via # -r requirements/quality.txt # edx-ccx-keys # openedx-events -edx-search==4.1.3 +edx-search==5.0.0 # via -r requirements/quality.txt -edx-toggles==5.4.1 +edx-toggles==6.0.0 # via # -r requirements/quality.txt # edx-search # event-tracking elasticsearch==7.13.4 # via - # -c https:/raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/quality.txt # edx-search -event-tracking==3.3.0 +envier==0.6.1 + # via + # -r requirements/quality.txt + # ddtrace +event-tracking==4.0.0 # via # -r requirements/quality.txt # edx-search -faker==37.6.0 +faker==40.13.0 # via -r requirements/quality.txt -fastavro==1.12.0 +fastavro==1.12.1 # via # -r requirements/quality.txt # openedx-events -filelock==3.19.1 +filelock==3.25.2 # via # -r requirements/quality.txt + # python-discovery # tox # virtualenv +h11==0.16.0 + # via + # -r requirements/quality.txt + # httpcore +httpcore==1.0.9 + # via + # -r requirements/quality.txt + # httpx +httpx==0.28.1 + # via + # -r requirements/quality.txt + # typesense id==1.5.0 # via # -r requirements/quality.txt # twine -idna==3.10 +idna==3.11 # via # -r requirements/quality.txt + # anyio + # httpx # requests -iniconfig==2.1.0 +importlib-metadata==8.7.1 + # via + # -r requirements/quality.txt + # keyring + # opentelemetry-api +iniconfig==2.3.0 # via # -r requirements/quality.txt # pytest -isort==6.0.1 +isort==8.0.1 # via # -r requirements/quality.txt # pylint @@ -226,11 +265,11 @@ jaraco-classes==3.4.0 # via # -r requirements/quality.txt # keyring -jaraco-context==6.0.1 +jaraco-context==6.1.2 # via # -r requirements/quality.txt # keyring -jaraco-functools==4.3.0 +jaraco-functools==4.4.0 # via # -r requirements/quality.txt # keyring @@ -243,19 +282,23 @@ jinja2==3.1.6 # via # -r requirements/quality.txt # code-annotations -keyring==25.6.0 +keyring==25.7.0 # via # -r requirements/quality.txt # twine -kombu==5.5.4 +kombu==5.6.2 # via # -r requirements/quality.txt # celery +librt==0.9.0 + # via + # -r requirements/quality.txt + # mypy markdown-it-py==4.0.0 # via # -r requirements/quality.txt # rich -markupsafe==3.0.2 +markupsafe==3.0.3 # via # -r requirements/quality.txt # jinja2 @@ -267,27 +310,27 @@ mdurl==0.1.2 # via # -r requirements/quality.txt # markdown-it-py -meilisearch==0.37.0 +meilisearch==0.40.0 # via # -r requirements/quality.txt # edx-search mongomock==4.3.0 # via -r requirements/quality.txt -more-itertools==10.7.0 +more-itertools==11.0.2 # via # -r requirements/quality.txt # jaraco-classes # jaraco-functools -mypy==1.17.1 +mypy==1.20.1 # via -r requirements/quality.txt mypy-extensions==1.1.0 # via # -r requirements/quality.txt # black # mypy -mysqlclient==2.2.7 +mysqlclient==2.2.8 # via -r requirements/quality.txt -nh3==0.3.0 +nh3==0.3.4 # via # -r requirements/quality.txt # readme-renderer @@ -297,7 +340,11 @@ openedx-events==10.5.0 # via # -r requirements/quality.txt # event-tracking -packaging==25.0 +opentelemetry-api==1.41.0 + # via + # -r requirements/quality.txt + # ddtrace +packaging==26.0 # via # -r requirements/quality.txt # black @@ -308,16 +355,17 @@ packaging==25.0 # pytest # tox # twine -pathspec==0.12.1 +pathspec==1.0.4 # via # -r requirements/quality.txt # black # mypy -platformdirs==4.4.0 +platformdirs==4.9.6 # via # -r requirements/quality.txt # black # pylint + # python-discovery # tox # virtualenv pluggy==1.6.0 @@ -330,33 +378,33 @@ prompt-toolkit==3.0.52 # via # -r requirements/quality.txt # click-repl -psutil==7.0.0 +psutil==7.2.2 # via # -r requirements/quality.txt # edx-django-utils pycodestyle==2.14.0 # via -r requirements/quality.txt -pycparser==2.22 +pycparser==3.0 # via # -r requirements/quality.txt # cffi -pydantic==2.11.7 +pydantic==2.13.0 # via # -r requirements/quality.txt # camel-converter -pydantic-core==2.33.2 +pydantic-core==2.46.0 # via # -r requirements/quality.txt # pydantic pydocstyle==6.3.0 # via -r requirements/quality.txt -pygments==2.19.2 +pygments==2.20.0 # via # -r requirements/quality.txt # pytest # readme-renderer # rich -pylint==3.3.8 +pylint==4.0.5 # via # -r requirements/quality.txt # edx-lint @@ -367,7 +415,7 @@ pylint-celery==0.3 # via # -r requirements/quality.txt # edx-lint -pylint-django==2.6.1 +pylint-django==2.7.0 # via # -r requirements/quality.txt # edx-lint @@ -376,16 +424,16 @@ pylint-plugin-utils==0.9.0 # -r requirements/quality.txt # pylint-celery # pylint-django -pymongo==4.14.1 +pymongo==4.16.0 # via # -r requirements/quality.txt # edx-opaque-keys # event-tracking -pynacl==1.5.0 +pynacl==1.6.2 # via # -r requirements/quality.txt # edx-django-utils -pyproject-api==1.9.1 +pyproject-api==1.10.0 # via # -r requirements/quality.txt # tox @@ -393,29 +441,36 @@ pyproject-hooks==1.2.0 # via # -r requirements/quality.txt # build -pytest==8.4.1 +pytest==9.0.3 # via # -r requirements/quality.txt # pytest-cov # pytest-django -pytest-cov==6.2.1 +pytest-cov==7.1.0 # via -r requirements/quality.txt -pytest-django==4.11.1 +pytest-django==4.12.0 # via -r requirements/quality.txt python-dateutil==2.9.0.post0 # via # -r requirements/quality.txt # celery +python-discovery==1.2.2 + # via + # -r requirements/quality.txt + # tox + # virtualenv python-slugify==8.0.4 # via # -r requirements/quality.txt # code-annotations -pytz==2025.2 +pytokens==0.4.1 + # via black +pytz==2026.1.post1 # via # -r requirements/quality.txt # event-tracking # mongomock -pyyaml==6.0.2 +pyyaml==6.0.3 # via # -r requirements/quality.txt # code-annotations @@ -423,10 +478,9 @@ readme-renderer==44.0 # via # -r requirements/quality.txt # twine -requests==2.32.5 +requests==2.33.1 # via # -r requirements/quality.txt - # djangorestframework-stubs # id # meilisearch # requests-toolbelt @@ -439,11 +493,11 @@ rfc3986==2.0.0 # via # -r requirements/quality.txt # twine -rich==14.1.0 +rich==15.0.0 # via # -r requirements/quality.txt # twine -secretstorage==3.3.3 +secretstorage==3.5.0 # via # -r requirements/quality.txt # keyring @@ -462,15 +516,15 @@ snowballstemmer==3.0.1 # via # -r requirements/quality.txt # pydocstyle -soupsieve==2.8 +soupsieve==2.8.3 # via # -r requirements/quality.txt # beautifulsoup4 -sqlparse==0.5.3 +sqlparse==0.5.5 # via # -r requirements/quality.txt # django -stevedore==5.5.0 +stevedore==5.7.0 # via # -r requirements/quality.txt # code-annotations @@ -480,54 +534,70 @@ text-unidecode==1.3 # via # -r requirements/quality.txt # python-slugify -tomlkit==0.13.3 +tomli-w==1.2.0 + # via + # -r requirements/quality.txt + # tox +tomlkit==0.14.0 # via # -r requirements/quality.txt # pylint -tox==4.28.4 +tox==4.52.1 # via -r requirements/quality.txt -twine==6.1.0 +twine==6.2.0 # via -r requirements/quality.txt types-beautifulsoup4==4.12.0.20250516 # via -r requirements/quality.txt -types-html5lib==1.1.11.20250809 +types-html5lib==1.1.11.20260408 # via # -r requirements/quality.txt # types-beautifulsoup4 -types-pyyaml==6.0.12.20250822 +types-pyyaml==6.0.12.20260408 # via # -r requirements/quality.txt # django-stubs # djangorestframework-stubs types-requests==2.31.0.6 - # via - # -r requirements/quality.txt - # djangorestframework-stubs + # via -r requirements/quality.txt types-urllib3==1.26.25.14 # via # -r requirements/quality.txt # types-requests +types-webencodings==0.5.0.20260408 + # via + # -r requirements/quality.txt + # types-html5lib +typesense==2.0.0 + # via + # -r requirements/quality.txt + # edx-search typing-extensions==4.15.0 # via # -r requirements/quality.txt + # anyio # beautifulsoup4 # django-stubs # django-stubs-ext # djangorestframework-stubs # edx-opaque-keys # mypy + # opentelemetry-api # pydantic # pydantic-core + # typesense # typing-inspection -typing-inspection==0.4.1 +typing-inspection==0.4.2 # via # -r requirements/quality.txt # pydantic -tzdata==2025.2 +tzdata==2026.1 # via # -r requirements/quality.txt - # faker # kombu +tzlocal==5.3.1 + # via + # -r requirements/quality.txt + # celery urllib3==1.26.20 # via # -r requirements/quality.txt @@ -540,14 +610,22 @@ vine==5.1.0 # amqp # celery # kombu -virtualenv==20.34.0 +virtualenv==21.2.1 # via # -r requirements/quality.txt # tox -wcwidth==0.2.13 +wcwidth==0.6.0 # via # -r requirements/quality.txt # prompt-toolkit +wrapt==2.1.2 + # via + # -r requirements/quality.txt + # ddtrace +zipp==3.23.0 + # via + # -r requirements/quality.txt + # importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/dev.txt b/requirements/dev.txt index 5e01b88a..d64137c7 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.12 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade @@ -14,78 +14,91 @@ annotated-types==0.7.0 # -r requirements/ci.txt # -r requirements/quality.txt # pydantic -asgiref==3.9.1 +anyio==4.13.0 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt + # httpx +asgiref==3.11.1 # via # -r requirements/ci.txt # -r requirements/quality.txt # django -astroid==3.3.11 +astroid==4.0.4 # via # -r requirements/ci.txt # -r requirements/quality.txt # pylint # pylint-celery -attrs==25.3.0 +attrs==26.1.0 # via # -r requirements/ci.txt # -r requirements/quality.txt # openedx-events -beautifulsoup4==4.13.5 +backports-tarfile==1.2.0 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt + # jaraco-context +beautifulsoup4==4.14.3 # via # -r requirements/ci.txt # -r requirements/quality.txt -billiard==4.2.1 +billiard==4.2.4 # via # -r requirements/ci.txt # -r requirements/quality.txt # celery -black==25.1.0 +black==26.3.1 # via -r requirements/ci.txt -build==1.3.0 +build==1.4.3 # via # -r requirements/ci.txt # -r requirements/pip-tools.txt # -r requirements/quality.txt # pip-tools -cachetools==6.2.0 +bytecode==0.17.0 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt + # ddtrace +cachetools==7.0.5 # via # -r requirements/ci.txt # -r requirements/quality.txt # tox -camel-converter[pydantic]==4.0.1 +camel-converter[pydantic]==5.1.0 # via # -r requirements/ci.txt # -r requirements/quality.txt # meilisearch -celery==5.5.3 +celery==5.6.3 # via # -r requirements/ci.txt # -r requirements/quality.txt # event-tracking -certifi==2025.8.3 +certifi==2026.2.25 # via # -r requirements/ci.txt # -r requirements/quality.txt # elasticsearch + # httpcore + # httpx # requests -cffi==1.17.1 +cffi==2.0.0 # via # -r requirements/ci.txt # -r requirements/quality.txt # cryptography # pynacl -chardet==5.2.0 - # via - # -r requirements/ci.txt - # -r requirements/quality.txt - # diff-cover - # tox -charset-normalizer==3.4.3 +chardet==7.4.2 + # via diff-cover +charset-normalizer==3.4.7 # via # -r requirements/ci.txt # -r requirements/quality.txt # requests -click==8.2.1 +click==8.3.2 # via # -r requirements/ci.txt # -r requirements/pip-tools.txt @@ -120,7 +133,7 @@ click-repl==0.3.0 # -r requirements/ci.txt # -r requirements/quality.txt # celery -code-annotations==2.3.0 +code-annotations==2.3.2 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -131,19 +144,23 @@ colorama==0.4.6 # -r requirements/ci.txt # -r requirements/quality.txt # tox -coverage[toml]==7.10.5 +coverage[toml]==7.13.5 # via # -r requirements/ci.txt # -r requirements/quality.txt # pytest-cov -cryptography==45.0.6 +cryptography==46.0.7 # via # -r requirements/ci.txt # -r requirements/quality.txt # secretstorage -diff-cover==9.6.0 +ddtrace==4.7.0 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt +diff-cover==10.2.0 # via -r requirements/dev.in -dill==0.4.0 +dill==0.4.1 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -153,12 +170,13 @@ distlib==0.4.0 # -r requirements/ci.txt # -r requirements/quality.txt # virtualenv -django==4.2.23 +django==5.2.13 # via - # -c https:/raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/ci.txt # -r requirements/quality.txt # django-crum + # django-model-utils # django-stubs # django-stubs-ext # django-waffle @@ -175,12 +193,16 @@ django-crum==0.7.9 # -r requirements/quality.txt # edx-django-utils # edx-toggles -django-stubs==5.2.2 +django-model-utils==5.0.0 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt +django-stubs==6.0.2 # via # -r requirements/ci.txt # -r requirements/quality.txt # djangorestframework-stubs -django-stubs-ext==5.2.2 +django-stubs-ext==6.0.2 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -191,20 +213,20 @@ django-waffle==5.0.0 # -r requirements/quality.txt # edx-django-utils # edx-toggles -djangorestframework==3.16.1 +djangorestframework==3.17.1 # via # -r requirements/ci.txt # -r requirements/quality.txt -djangorestframework-stubs==3.16.2 +djangorestframework-stubs==3.16.9 # via # -r requirements/ci.txt # -r requirements/quality.txt -dnspython==2.7.0 +dnspython==2.8.0 # via # -r requirements/ci.txt # -r requirements/quality.txt # pymongo -docutils==0.22 +docutils==0.22.4 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -214,30 +236,30 @@ edx-ccx-keys==2.0.2 # -r requirements/ci.txt # -r requirements/quality.txt # openedx-events -edx-django-utils==8.0.0 +edx-django-utils==8.0.1 # via # -r requirements/ci.txt # -r requirements/quality.txt # edx-toggles # event-tracking # openedx-events -edx-i18n-tools==1.9.0 +edx-i18n-tools==2.0.0 # via -r requirements/dev.in -edx-lint==5.6.0 +edx-lint==6.0.0 # via # -r requirements/ci.txt # -r requirements/quality.txt -edx-opaque-keys[django]==3.0.0 +edx-opaque-keys[django]==4.0.0 # via # -r requirements/ci.txt # -r requirements/quality.txt # edx-ccx-keys # openedx-events -edx-search==4.1.3 +edx-search==5.0.0 # via # -r requirements/ci.txt # -r requirements/quality.txt -edx-toggles==5.4.1 +edx-toggles==6.0.0 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -245,46 +267,75 @@ edx-toggles==5.4.1 # event-tracking elasticsearch==7.13.4 # via - # -c https:/raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/ci.txt # -r requirements/quality.txt # edx-search -event-tracking==3.3.0 +envier==0.6.1 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt + # ddtrace +event-tracking==4.0.0 # via # -r requirements/ci.txt # -r requirements/quality.txt # edx-search -faker==37.6.0 +faker==40.13.0 # via # -r requirements/ci.txt # -r requirements/quality.txt -fastavro==1.12.0 +fastavro==1.12.1 # via # -r requirements/ci.txt # -r requirements/quality.txt # openedx-events -filelock==3.19.1 +filelock==3.25.2 # via # -r requirements/ci.txt # -r requirements/quality.txt + # python-discovery # tox # virtualenv +h11==0.16.0 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt + # httpcore +httpcore==1.0.9 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt + # httpx +httpx==0.28.1 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt + # typesense id==1.5.0 # via # -r requirements/ci.txt # -r requirements/quality.txt # twine -idna==3.10 +idna==3.11 # via # -r requirements/ci.txt # -r requirements/quality.txt + # anyio + # httpx # requests -iniconfig==2.1.0 +importlib-metadata==8.7.1 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt + # keyring + # opentelemetry-api +iniconfig==2.3.0 # via # -r requirements/ci.txt # -r requirements/quality.txt # pytest -isort==6.0.1 +isort==8.0.1 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -294,12 +345,12 @@ jaraco-classes==3.4.0 # -r requirements/ci.txt # -r requirements/quality.txt # keyring -jaraco-context==6.0.1 +jaraco-context==6.1.2 # via # -r requirements/ci.txt # -r requirements/quality.txt # keyring -jaraco-functools==4.3.0 +jaraco-functools==4.4.0 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -316,28 +367,33 @@ jinja2==3.1.6 # -r requirements/quality.txt # code-annotations # diff-cover -keyring==25.6.0 +keyring==25.7.0 # via # -r requirements/ci.txt # -r requirements/quality.txt # twine -kombu==5.5.4 +kombu==5.6.2 # via # -r requirements/ci.txt # -r requirements/quality.txt # celery -lxml[html-clean]==6.0.1 +librt==0.9.0 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt + # mypy +lxml[html-clean]==6.0.4 # via # edx-i18n-tools # lxml-html-clean -lxml-html-clean==0.4.2 +lxml-html-clean==0.4.4 # via lxml markdown-it-py==4.0.0 # via # -r requirements/ci.txt # -r requirements/quality.txt # rich -markupsafe==3.0.2 +markupsafe==3.0.3 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -352,7 +408,7 @@ mdurl==0.1.2 # -r requirements/ci.txt # -r requirements/quality.txt # markdown-it-py -meilisearch==0.37.0 +meilisearch==0.40.0 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -361,13 +417,13 @@ mongomock==4.3.0 # via # -r requirements/ci.txt # -r requirements/quality.txt -more-itertools==10.7.0 +more-itertools==11.0.2 # via # -r requirements/ci.txt # -r requirements/quality.txt # jaraco-classes # jaraco-functools -mypy==1.17.1 +mypy==1.20.1 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -377,11 +433,11 @@ mypy-extensions==1.1.0 # -r requirements/quality.txt # black # mypy -mysqlclient==2.2.7 +mysqlclient==2.2.8 # via # -r requirements/ci.txt # -r requirements/quality.txt -nh3==0.3.0 +nh3==0.3.4 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -395,7 +451,12 @@ openedx-events==10.5.0 # -r requirements/ci.txt # -r requirements/quality.txt # event-tracking -packaging==25.0 +opentelemetry-api==1.41.0 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt + # ddtrace +packaging==26.0 # via # -r requirements/ci.txt # -r requirements/pip-tools.txt @@ -408,22 +469,24 @@ packaging==25.0 # pytest # tox # twine + # wheel path==16.16.0 # via edx-i18n-tools -pathspec==0.12.1 +pathspec==1.0.4 # via # -r requirements/ci.txt # -r requirements/quality.txt # black # mypy -pip-tools==7.5.0 +pip-tools==7.5.3 # via -r requirements/pip-tools.txt -platformdirs==4.4.0 +platformdirs==4.9.6 # via # -r requirements/ci.txt # -r requirements/quality.txt # black # pylint + # python-discovery # tox # virtualenv pluggy==1.6.0 @@ -441,7 +504,7 @@ prompt-toolkit==3.0.52 # -r requirements/ci.txt # -r requirements/quality.txt # click-repl -psutil==7.0.0 +psutil==7.2.2 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -450,17 +513,17 @@ pycodestyle==2.14.0 # via # -r requirements/ci.txt # -r requirements/quality.txt -pycparser==2.22 +pycparser==3.0 # via # -r requirements/ci.txt # -r requirements/quality.txt # cffi -pydantic==2.11.7 +pydantic==2.13.0 # via # -r requirements/ci.txt # -r requirements/quality.txt # camel-converter -pydantic-core==2.33.2 +pydantic-core==2.46.0 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -469,7 +532,7 @@ pydocstyle==6.3.0 # via # -r requirements/ci.txt # -r requirements/quality.txt -pygments==2.19.2 +pygments==2.20.0 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -477,7 +540,7 @@ pygments==2.19.2 # pytest # readme-renderer # rich -pylint==3.3.8 +pylint==4.0.5 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -490,7 +553,7 @@ pylint-celery==0.3 # -r requirements/ci.txt # -r requirements/quality.txt # edx-lint -pylint-django==2.6.1 +pylint-django==2.7.0 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -501,18 +564,18 @@ pylint-plugin-utils==0.9.0 # -r requirements/quality.txt # pylint-celery # pylint-django -pymongo==4.14.1 +pymongo==4.16.0 # via # -r requirements/ci.txt # -r requirements/quality.txt # edx-opaque-keys # event-tracking -pynacl==1.5.0 +pynacl==1.6.2 # via # -r requirements/ci.txt # -r requirements/quality.txt # edx-django-utils -pyproject-api==1.9.1 +pyproject-api==1.10.0 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -524,17 +587,17 @@ pyproject-hooks==1.2.0 # -r requirements/quality.txt # build # pip-tools -pytest==8.4.1 +pytest==9.0.3 # via # -r requirements/ci.txt # -r requirements/quality.txt # pytest-cov # pytest-django -pytest-cov==6.2.1 +pytest-cov==7.1.0 # via # -r requirements/ci.txt # -r requirements/quality.txt -pytest-django==4.11.1 +pytest-django==4.12.0 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -543,18 +606,28 @@ python-dateutil==2.9.0.post0 # -r requirements/ci.txt # -r requirements/quality.txt # celery +python-discovery==1.2.2 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt + # tox + # virtualenv python-slugify==8.0.4 # via # -r requirements/ci.txt # -r requirements/quality.txt # code-annotations -pytz==2025.2 +pytokens==0.4.1 + # via + # -r requirements/ci.txt + # black +pytz==2026.1.post1 # via # -r requirements/ci.txt # -r requirements/quality.txt # event-tracking # mongomock -pyyaml==6.0.2 +pyyaml==6.0.3 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -565,11 +638,10 @@ readme-renderer==44.0 # -r requirements/ci.txt # -r requirements/quality.txt # twine -requests==2.32.5 +requests==2.33.1 # via # -r requirements/ci.txt # -r requirements/quality.txt - # djangorestframework-stubs # id # meilisearch # requests-toolbelt @@ -584,12 +656,12 @@ rfc3986==2.0.0 # -r requirements/ci.txt # -r requirements/quality.txt # twine -rich==14.1.0 +rich==15.0.0 # via # -r requirements/ci.txt # -r requirements/quality.txt # twine -secretstorage==3.3.3 +secretstorage==3.5.0 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -612,17 +684,17 @@ snowballstemmer==3.0.1 # -r requirements/ci.txt # -r requirements/quality.txt # pydocstyle -soupsieve==2.8 +soupsieve==2.8.3 # via # -r requirements/ci.txt # -r requirements/quality.txt # beautifulsoup4 -sqlparse==0.5.3 +sqlparse==0.5.5 # via # -r requirements/ci.txt # -r requirements/quality.txt # django -stevedore==5.5.0 +stevedore==5.7.0 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -634,16 +706,21 @@ text-unidecode==1.3 # -r requirements/ci.txt # -r requirements/quality.txt # python-slugify -tomlkit==0.13.3 +tomli-w==1.2.0 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt + # tox +tomlkit==0.14.0 # via # -r requirements/ci.txt # -r requirements/quality.txt # pylint -tox==4.28.4 +tox==4.52.1 # via # -r requirements/ci.txt # -r requirements/quality.txt -twine==6.1.0 +twine==6.2.0 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -651,12 +728,12 @@ types-beautifulsoup4==4.12.0.20250516 # via # -r requirements/ci.txt # -r requirements/quality.txt -types-html5lib==1.1.11.20250809 +types-html5lib==1.1.11.20260408 # via # -r requirements/ci.txt # -r requirements/quality.txt # types-beautifulsoup4 -types-pyyaml==6.0.12.20250822 +types-pyyaml==6.0.12.20260408 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -666,36 +743,52 @@ types-requests==2.31.0.6 # via # -r requirements/ci.txt # -r requirements/quality.txt - # djangorestframework-stubs types-urllib3==1.26.25.14 # via # -r requirements/ci.txt # -r requirements/quality.txt # types-requests +types-webencodings==0.5.0.20260408 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt + # types-html5lib +typesense==2.0.0 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt + # edx-search typing-extensions==4.15.0 # via # -r requirements/ci.txt # -r requirements/quality.txt + # anyio # beautifulsoup4 # django-stubs # django-stubs-ext # djangorestframework-stubs # edx-opaque-keys # mypy + # opentelemetry-api # pydantic # pydantic-core + # typesense # typing-inspection -typing-inspection==0.4.1 +typing-inspection==0.4.2 # via # -r requirements/ci.txt # -r requirements/quality.txt # pydantic -tzdata==2025.2 +tzdata==2026.1 # via # -r requirements/ci.txt # -r requirements/quality.txt - # faker # kombu +tzlocal==5.3.1 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt + # celery urllib3==1.26.20 # via # -r requirements/ci.txt @@ -710,20 +803,30 @@ vine==5.1.0 # amqp # celery # kombu -virtualenv==20.34.0 +virtualenv==21.2.1 # via # -r requirements/ci.txt # -r requirements/quality.txt # tox -wcwidth==0.2.13 +wcwidth==0.6.0 # via # -r requirements/ci.txt # -r requirements/quality.txt # prompt-toolkit -wheel==0.45.1 +wheel==0.46.3 # via # -r requirements/pip-tools.txt # pip-tools +wrapt==2.1.2 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt + # ddtrace +zipp==3.23.0 + # via + # -r requirements/ci.txt + # -r requirements/quality.txt + # importlib-metadata # The following packages are considered to be unsafe in a requirements file: # pip diff --git a/requirements/doc.txt b/requirements/doc.txt index e48ac9c0..c79f310c 100644 --- a/requirements/doc.txt +++ b/requirements/doc.txt @@ -1,10 +1,12 @@ # -# This file is autogenerated by pip-compile with Python 3.12 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade # -alabaster==0.7.16 +accessible-pygments==0.0.5 + # via pydata-sphinx-theme +alabaster==1.0.0 # via sphinx amqp==5.3.1 # via @@ -14,59 +16,69 @@ annotated-types==0.7.0 # via # -r requirements/test.txt # pydantic -asgiref==3.9.1 +anyio==4.13.0 + # via + # -r requirements/test.txt + # httpx +asgiref==3.11.1 # via # -r requirements/test.txt # django -attrs==25.3.0 +attrs==26.1.0 # via # -r requirements/test.txt # openedx-events -babel==2.17.0 +babel==2.18.0 # via # pydata-sphinx-theme # sphinx -beautifulsoup4==4.13.5 +backports-tarfile==1.2.0 + # via + # -r requirements/test.txt + # jaraco-context +beautifulsoup4==4.14.3 # via # -r requirements/test.txt # pydata-sphinx-theme -billiard==4.2.1 +billiard==4.2.4 # via # -r requirements/test.txt # celery -build==1.3.0 +build==1.4.3 # via -r requirements/test.txt -cachetools==6.2.0 +bytecode==0.17.0 + # via + # -r requirements/test.txt + # ddtrace +cachetools==7.0.5 # via # -r requirements/test.txt # tox -camel-converter[pydantic]==4.0.1 +camel-converter[pydantic]==5.1.0 # via # -r requirements/test.txt # meilisearch -celery==5.5.3 +celery==5.6.3 # via # -r requirements/test.txt # event-tracking -certifi==2025.8.3 +certifi==2026.2.25 # via # -r requirements/test.txt # elasticsearch + # httpcore + # httpx # requests -cffi==1.17.1 +cffi==2.0.0 # via # -r requirements/test.txt # cryptography # pynacl -chardet==5.2.0 - # via - # -r requirements/test.txt - # tox -charset-normalizer==3.4.3 +charset-normalizer==3.4.7 # via # -r requirements/test.txt # requests -click==8.2.1 +click==8.3.2 # via # -r requirements/test.txt # celery @@ -87,7 +99,7 @@ click-repl==0.3.0 # via # -r requirements/test.txt # celery -code-annotations==2.3.0 +code-annotations==2.3.2 # via # -r requirements/test.txt # edx-toggles @@ -95,23 +107,26 @@ colorama==0.4.6 # via # -r requirements/test.txt # tox -coverage[toml]==7.10.5 +coverage[toml]==7.13.5 # via # -r requirements/test.txt # pytest-cov -cryptography==45.0.6 +cryptography==46.0.7 # via # -r requirements/test.txt # secretstorage +ddtrace==4.7.0 + # via -r requirements/test.txt distlib==0.4.0 # via # -r requirements/test.txt # virtualenv -django==4.2.23 +django==5.2.13 # via - # -c https:/raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/test.txt # django-crum + # django-model-utils # django-waffle # djangorestframework # edx-django-utils @@ -124,20 +139,22 @@ django-crum==0.7.9 # -r requirements/test.txt # edx-django-utils # edx-toggles +django-model-utils==5.0.0 + # via -r requirements/test.txt django-waffle==5.0.0 # via # -r requirements/test.txt # edx-django-utils # edx-toggles -djangorestframework==3.16.1 +djangorestframework==3.17.1 # via -r requirements/test.txt -dnspython==2.7.0 +dnspython==2.8.0 # via # -r requirements/test.txt # pymongo doc8==0.11.2 # via -r requirements/doc.in -docutils==0.22 +docutils==0.22.4 # via # -r requirements/test.txt # doc8 @@ -149,55 +166,79 @@ edx-ccx-keys==2.0.2 # via # -r requirements/test.txt # openedx-events -edx-django-utils==8.0.0 +edx-django-utils==8.0.1 # via # -r requirements/test.txt # edx-toggles # event-tracking # openedx-events -edx-opaque-keys[django]==3.0.0 +edx-opaque-keys[django]==4.0.0 # via # -r requirements/test.txt # edx-ccx-keys # openedx-events -edx-search==4.1.3 +edx-search==5.0.0 # via -r requirements/test.txt -edx-toggles==5.4.1 +edx-toggles==6.0.0 # via # -r requirements/test.txt # edx-search # event-tracking elasticsearch==7.13.4 # via - # -c https:/raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/test.txt # edx-search -event-tracking==3.3.0 +envier==0.6.1 + # via + # -r requirements/test.txt + # ddtrace +event-tracking==4.0.0 # via # -r requirements/test.txt # edx-search -faker==37.6.0 +faker==40.13.0 # via -r requirements/test.txt -fastavro==1.12.0 +fastavro==1.12.1 # via # -r requirements/test.txt # openedx-events -filelock==3.19.1 +filelock==3.25.2 # via # -r requirements/test.txt + # python-discovery # tox # virtualenv +h11==0.16.0 + # via + # -r requirements/test.txt + # httpcore +httpcore==1.0.9 + # via + # -r requirements/test.txt + # httpx +httpx==0.28.1 + # via + # -r requirements/test.txt + # typesense id==1.5.0 # via # -r requirements/test.txt # twine -idna==3.10 +idna==3.11 # via # -r requirements/test.txt + # anyio + # httpx # requests -imagesize==1.4.1 +imagesize==2.0.0 # via sphinx -iniconfig==2.1.0 +importlib-metadata==8.7.1 + # via + # -r requirements/test.txt + # keyring + # opentelemetry-api +iniconfig==2.3.0 # via # -r requirements/test.txt # pytest @@ -205,11 +246,11 @@ jaraco-classes==3.4.0 # via # -r requirements/test.txt # keyring -jaraco-context==6.0.1 +jaraco-context==6.1.2 # via # -r requirements/test.txt # keyring -jaraco-functools==4.3.0 +jaraco-functools==4.4.0 # via # -r requirements/test.txt # keyring @@ -223,11 +264,11 @@ jinja2==3.1.6 # -r requirements/test.txt # code-annotations # sphinx -keyring==25.6.0 +keyring==25.7.0 # via # -r requirements/test.txt # twine -kombu==5.5.4 +kombu==5.6.2 # via # -r requirements/test.txt # celery @@ -235,7 +276,7 @@ markdown-it-py==4.0.0 # via # -r requirements/test.txt # rich -markupsafe==3.0.2 +markupsafe==3.0.3 # via # -r requirements/test.txt # jinja2 @@ -243,20 +284,20 @@ mdurl==0.1.2 # via # -r requirements/test.txt # markdown-it-py -meilisearch==0.37.0 +meilisearch==0.40.0 # via # -r requirements/test.txt # edx-search mongomock==4.3.0 # via -r requirements/test.txt -more-itertools==10.7.0 +more-itertools==11.0.2 # via # -r requirements/test.txt # jaraco-classes # jaraco-functools -mysqlclient==2.2.7 +mysqlclient==2.2.8 # via -r requirements/test.txt -nh3==0.3.0 +nh3==0.3.4 # via # -r requirements/test.txt # readme-renderer @@ -266,7 +307,11 @@ openedx-events==10.5.0 # via # -r requirements/test.txt # event-tracking -packaging==25.0 +opentelemetry-api==1.41.0 + # via + # -r requirements/test.txt + # ddtrace +packaging==26.0 # via # -r requirements/test.txt # build @@ -277,9 +322,10 @@ packaging==25.0 # sphinx # tox # twine -platformdirs==4.4.0 +platformdirs==4.9.6 # via # -r requirements/test.txt + # python-discovery # tox # virtualenv pluggy==1.6.0 @@ -292,42 +338,44 @@ prompt-toolkit==3.0.52 # via # -r requirements/test.txt # click-repl -psutil==7.0.0 +psutil==7.2.2 # via # -r requirements/test.txt # edx-django-utils -pycparser==2.22 +pycparser==3.0 # via # -r requirements/test.txt # cffi -pydantic==2.11.7 +pydantic==2.13.0 # via # -r requirements/test.txt # camel-converter -pydantic-core==2.33.2 +pydantic-core==2.46.0 # via # -r requirements/test.txt # pydantic -pydata-sphinx-theme==0.8.0 +pydata-sphinx-theme==0.16.1 # via sphinx-book-theme -pygments==2.19.2 +pygments==2.20.0 # via # -r requirements/test.txt + # accessible-pygments # doc8 + # pydata-sphinx-theme # pytest # readme-renderer # rich # sphinx -pymongo==4.14.1 +pymongo==4.16.0 # via # -r requirements/test.txt # edx-opaque-keys # event-tracking -pynacl==1.5.0 +pynacl==1.6.2 # via # -r requirements/test.txt # edx-django-utils -pyproject-api==1.9.1 +pyproject-api==1.10.0 # via # -r requirements/test.txt # tox @@ -335,38 +383,42 @@ pyproject-hooks==1.2.0 # via # -r requirements/test.txt # build -pytest==8.4.1 +pytest==9.0.3 # via # -r requirements/test.txt # pytest-cov # pytest-django -pytest-cov==6.2.1 +pytest-cov==7.1.0 # via -r requirements/test.txt -pytest-django==4.11.1 +pytest-django==4.12.0 # via -r requirements/test.txt python-dateutil==2.9.0.post0 # via # -r requirements/test.txt # celery +python-discovery==1.2.2 + # via + # -r requirements/test.txt + # tox + # virtualenv python-slugify==8.0.4 # via # -r requirements/test.txt # code-annotations -pytz==2025.2 +pytz==2026.1.post1 # via # -r requirements/test.txt # event-tracking # mongomock -pyyaml==6.0.2 +pyyaml==6.0.3 # via # -r requirements/test.txt # code-annotations - # sphinx-book-theme readme-renderer==44.0 # via # -r requirements/test.txt # twine -requests==2.32.5 +requests==2.33.1 # via # -r requirements/test.txt # id @@ -378,17 +430,19 @@ requests-toolbelt==1.0.0 # via # -r requirements/test.txt # twine -restructuredtext-lint==1.4.0 +restructuredtext-lint==2.0.2 # via doc8 rfc3986==2.0.0 # via # -r requirements/test.txt # twine -rich==14.1.0 +rich==15.0.0 # via # -r requirements/test.txt # twine -secretstorage==3.3.3 +roman-numerals==4.1.0 + # via sphinx +secretstorage==3.5.0 # via # -r requirements/test.txt # keyring @@ -404,16 +458,16 @@ six==1.17.0 # python-dateutil snowballstemmer==3.0.1 # via sphinx -soupsieve==2.8 +soupsieve==2.8.3 # via # -r requirements/test.txt # beautifulsoup4 -sphinx==3.5.3 +sphinx==9.0.4 # via # -r requirements/doc.in # pydata-sphinx-theme # sphinx-book-theme -sphinx-book-theme==0.3.3 +sphinx-book-theme==1.2.0 # via -r requirements/doc.in sphinxcontrib-applehelp==2.0.0 # via sphinx @@ -427,11 +481,11 @@ sphinxcontrib-qthelp==2.0.0 # via sphinx sphinxcontrib-serializinghtml==2.0.0 # via sphinx -sqlparse==0.5.3 +sqlparse==0.5.5 # via # -r requirements/test.txt # django -stevedore==5.5.0 +stevedore==5.7.0 # via # -r requirements/test.txt # code-annotations @@ -442,27 +496,42 @@ text-unidecode==1.3 # via # -r requirements/test.txt # python-slugify -tox==4.28.4 +tomli-w==1.2.0 + # via + # -r requirements/test.txt + # tox +tox==4.52.1 # via -r requirements/test.txt -twine==6.1.0 +twine==6.2.0 # via -r requirements/test.txt +typesense==2.0.0 + # via + # -r requirements/test.txt + # edx-search typing-extensions==4.15.0 # via # -r requirements/test.txt + # anyio # beautifulsoup4 # edx-opaque-keys + # opentelemetry-api # pydantic # pydantic-core + # pydata-sphinx-theme + # typesense # typing-inspection -typing-inspection==0.4.1 +typing-inspection==0.4.2 # via # -r requirements/test.txt # pydantic -tzdata==2025.2 +tzdata==2026.1 # via # -r requirements/test.txt - # faker # kombu +tzlocal==5.3.1 + # via + # -r requirements/test.txt + # celery urllib3==1.26.20 # via # -r requirements/test.txt @@ -475,14 +544,22 @@ vine==5.1.0 # amqp # celery # kombu -virtualenv==20.34.0 +virtualenv==21.2.1 # via # -r requirements/test.txt # tox -wcwidth==0.2.13 +wcwidth==0.6.0 # via # -r requirements/test.txt # prompt-toolkit +wrapt==2.1.2 + # via + # -r requirements/test.txt + # ddtrace +zipp==3.23.0 + # via + # -r requirements/test.txt + # importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt index bfdc0512..e00a0547 100644 --- a/requirements/pip-tools.txt +++ b/requirements/pip-tools.txt @@ -1,22 +1,24 @@ # -# This file is autogenerated by pip-compile with Python 3.12 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade # -build==1.3.0 +build==1.4.3 # via pip-tools -click==8.2.1 +click==8.3.2 # via pip-tools -packaging==25.0 - # via build -pip-tools==7.5.0 +packaging==26.0 + # via + # build + # wheel +pip-tools==7.5.3 # via -r requirements/pip-tools.in pyproject-hooks==1.2.0 # via # build # pip-tools -wheel==0.45.1 +wheel==0.46.3 # via pip-tools # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/pip.txt b/requirements/pip.txt index fca60af6..341a251b 100644 --- a/requirements/pip.txt +++ b/requirements/pip.txt @@ -1,16 +1,16 @@ # -# This file is autogenerated by pip-compile with Python 3.12 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade # -wheel==0.45.1 +packaging==26.0 + # via wheel +wheel==0.46.3 # via -r requirements/pip.in # The following packages are considered to be unsafe in a requirements file: -pip==24.2 - # via - # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt - # -r requirements/pip.in -setuptools==80.9.0 +pip==26.0.1 + # via -r requirements/pip.in +setuptools==82.0.1 # via -r requirements/pip.in diff --git a/requirements/quality.txt b/requirements/quality.txt index fe0a2766..d6f8eb1a 100644 --- a/requirements/quality.txt +++ b/requirements/quality.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.12 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade @@ -12,57 +12,67 @@ annotated-types==0.7.0 # via # -r requirements/test.txt # pydantic -asgiref==3.9.1 +anyio==4.13.0 + # via + # -r requirements/test.txt + # httpx +asgiref==3.11.1 # via # -r requirements/test.txt # django -astroid==3.3.11 +astroid==4.0.4 # via # pylint # pylint-celery -attrs==25.3.0 +attrs==26.1.0 # via # -r requirements/test.txt # openedx-events -beautifulsoup4==4.13.5 +backports-tarfile==1.2.0 + # via + # -r requirements/test.txt + # jaraco-context +beautifulsoup4==4.14.3 # via -r requirements/test.txt -billiard==4.2.1 +billiard==4.2.4 # via # -r requirements/test.txt # celery -build==1.3.0 +build==1.4.3 # via -r requirements/test.txt -cachetools==6.2.0 +bytecode==0.17.0 + # via + # -r requirements/test.txt + # ddtrace +cachetools==7.0.5 # via # -r requirements/test.txt # tox -camel-converter[pydantic]==4.0.1 +camel-converter[pydantic]==5.1.0 # via # -r requirements/test.txt # meilisearch -celery==5.5.3 +celery==5.6.3 # via # -r requirements/test.txt # event-tracking -certifi==2025.8.3 +certifi==2026.2.25 # via # -r requirements/test.txt # elasticsearch + # httpcore + # httpx # requests -cffi==1.17.1 +cffi==2.0.0 # via # -r requirements/test.txt # cryptography # pynacl -chardet==5.2.0 - # via - # -r requirements/test.txt - # tox -charset-normalizer==3.4.3 +charset-normalizer==3.4.7 # via # -r requirements/test.txt # requests -click==8.2.1 +click==8.3.2 # via # -r requirements/test.txt # celery @@ -87,7 +97,7 @@ click-repl==0.3.0 # via # -r requirements/test.txt # celery -code-annotations==2.3.0 +code-annotations==2.3.2 # via # -r requirements/test.txt # edx-lint @@ -96,25 +106,28 @@ colorama==0.4.6 # via # -r requirements/test.txt # tox -coverage[toml]==7.10.5 +coverage[toml]==7.13.5 # via # -r requirements/test.txt # pytest-cov -cryptography==45.0.6 +cryptography==46.0.7 # via # -r requirements/test.txt # secretstorage -dill==0.4.0 +ddtrace==4.7.0 + # via -r requirements/test.txt +dill==0.4.1 # via pylint distlib==0.4.0 # via # -r requirements/test.txt # virtualenv -django==4.2.23 +django==5.2.13 # via - # -c https:/raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/test.txt # django-crum + # django-model-utils # django-stubs # django-stubs-ext # django-waffle @@ -129,24 +142,26 @@ django-crum==0.7.9 # -r requirements/test.txt # edx-django-utils # edx-toggles -django-stubs==5.2.2 +django-model-utils==5.0.0 + # via -r requirements/test.txt +django-stubs==6.0.2 # via djangorestframework-stubs -django-stubs-ext==5.2.2 +django-stubs-ext==6.0.2 # via django-stubs django-waffle==5.0.0 # via # -r requirements/test.txt # edx-django-utils # edx-toggles -djangorestframework==3.16.1 +djangorestframework==3.17.1 # via -r requirements/test.txt -djangorestframework-stubs==3.16.2 +djangorestframework-stubs==3.16.9 # via -r requirements/quality.in -dnspython==2.7.0 +dnspython==2.8.0 # via # -r requirements/test.txt # pymongo -docutils==0.22 +docutils==0.22.4 # via # -r requirements/test.txt # readme-renderer @@ -154,59 +169,83 @@ edx-ccx-keys==2.0.2 # via # -r requirements/test.txt # openedx-events -edx-django-utils==8.0.0 +edx-django-utils==8.0.1 # via # -r requirements/test.txt # edx-toggles # event-tracking # openedx-events -edx-lint==5.6.0 +edx-lint==6.0.0 # via -r requirements/quality.in -edx-opaque-keys[django]==3.0.0 +edx-opaque-keys[django]==4.0.0 # via # -r requirements/test.txt # edx-ccx-keys # openedx-events -edx-search==4.1.3 +edx-search==5.0.0 # via -r requirements/test.txt -edx-toggles==5.4.1 +edx-toggles==6.0.0 # via # -r requirements/test.txt # edx-search # event-tracking elasticsearch==7.13.4 # via - # -c https:/raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/test.txt # edx-search -event-tracking==3.3.0 +envier==0.6.1 + # via + # -r requirements/test.txt + # ddtrace +event-tracking==4.0.0 # via # -r requirements/test.txt # edx-search -faker==37.6.0 +faker==40.13.0 # via -r requirements/test.txt -fastavro==1.12.0 +fastavro==1.12.1 # via # -r requirements/test.txt # openedx-events -filelock==3.19.1 +filelock==3.25.2 # via # -r requirements/test.txt + # python-discovery # tox # virtualenv +h11==0.16.0 + # via + # -r requirements/test.txt + # httpcore +httpcore==1.0.9 + # via + # -r requirements/test.txt + # httpx +httpx==0.28.1 + # via + # -r requirements/test.txt + # typesense id==1.5.0 # via # -r requirements/test.txt # twine -idna==3.10 +idna==3.11 # via # -r requirements/test.txt + # anyio + # httpx # requests -iniconfig==2.1.0 +importlib-metadata==8.7.1 + # via + # -r requirements/test.txt + # keyring + # opentelemetry-api +iniconfig==2.3.0 # via # -r requirements/test.txt # pytest -isort==6.0.1 +isort==8.0.1 # via # -r requirements/quality.in # pylint @@ -214,11 +253,11 @@ jaraco-classes==3.4.0 # via # -r requirements/test.txt # keyring -jaraco-context==6.0.1 +jaraco-context==6.1.2 # via # -r requirements/test.txt # keyring -jaraco-functools==4.3.0 +jaraco-functools==4.4.0 # via # -r requirements/test.txt # keyring @@ -231,19 +270,21 @@ jinja2==3.1.6 # via # -r requirements/test.txt # code-annotations -keyring==25.6.0 +keyring==25.7.0 # via # -r requirements/test.txt # twine -kombu==5.5.4 +kombu==5.6.2 # via # -r requirements/test.txt # celery +librt==0.9.0 + # via mypy markdown-it-py==4.0.0 # via # -r requirements/test.txt # rich -markupsafe==3.0.2 +markupsafe==3.0.3 # via # -r requirements/test.txt # jinja2 @@ -253,24 +294,24 @@ mdurl==0.1.2 # via # -r requirements/test.txt # markdown-it-py -meilisearch==0.37.0 +meilisearch==0.40.0 # via # -r requirements/test.txt # edx-search mongomock==4.3.0 # via -r requirements/test.txt -more-itertools==10.7.0 +more-itertools==11.0.2 # via # -r requirements/test.txt # jaraco-classes # jaraco-functools -mypy==1.17.1 +mypy==1.20.1 # via -r requirements/quality.in mypy-extensions==1.1.0 # via mypy -mysqlclient==2.2.7 +mysqlclient==2.2.8 # via -r requirements/test.txt -nh3==0.3.0 +nh3==0.3.4 # via # -r requirements/test.txt # readme-renderer @@ -280,7 +321,11 @@ openedx-events==10.5.0 # via # -r requirements/test.txt # event-tracking -packaging==25.0 +opentelemetry-api==1.41.0 + # via + # -r requirements/test.txt + # ddtrace +packaging==26.0 # via # -r requirements/test.txt # build @@ -290,12 +335,13 @@ packaging==25.0 # pytest # tox # twine -pathspec==0.12.1 +pathspec==1.0.4 # via mypy -platformdirs==4.4.0 +platformdirs==4.9.6 # via # -r requirements/test.txt # pylint + # python-discovery # tox # virtualenv pluggy==1.6.0 @@ -308,33 +354,33 @@ prompt-toolkit==3.0.52 # via # -r requirements/test.txt # click-repl -psutil==7.0.0 +psutil==7.2.2 # via # -r requirements/test.txt # edx-django-utils pycodestyle==2.14.0 # via -r requirements/quality.in -pycparser==2.22 +pycparser==3.0 # via # -r requirements/test.txt # cffi -pydantic==2.11.7 +pydantic==2.13.0 # via # -r requirements/test.txt # camel-converter -pydantic-core==2.33.2 +pydantic-core==2.46.0 # via # -r requirements/test.txt # pydantic pydocstyle==6.3.0 # via -r requirements/quality.in -pygments==2.19.2 +pygments==2.20.0 # via # -r requirements/test.txt # pytest # readme-renderer # rich -pylint==3.3.8 +pylint==4.0.5 # via # edx-lint # pylint-celery @@ -342,22 +388,22 @@ pylint==3.3.8 # pylint-plugin-utils pylint-celery==0.3 # via edx-lint -pylint-django==2.6.1 +pylint-django==2.7.0 # via edx-lint pylint-plugin-utils==0.9.0 # via # pylint-celery # pylint-django -pymongo==4.14.1 +pymongo==4.16.0 # via # -r requirements/test.txt # edx-opaque-keys # event-tracking -pynacl==1.5.0 +pynacl==1.6.2 # via # -r requirements/test.txt # edx-django-utils -pyproject-api==1.9.1 +pyproject-api==1.10.0 # via # -r requirements/test.txt # tox @@ -365,29 +411,34 @@ pyproject-hooks==1.2.0 # via # -r requirements/test.txt # build -pytest==8.4.1 +pytest==9.0.3 # via # -r requirements/test.txt # pytest-cov # pytest-django -pytest-cov==6.2.1 +pytest-cov==7.1.0 # via -r requirements/test.txt -pytest-django==4.11.1 +pytest-django==4.12.0 # via -r requirements/test.txt python-dateutil==2.9.0.post0 # via # -r requirements/test.txt # celery +python-discovery==1.2.2 + # via + # -r requirements/test.txt + # tox + # virtualenv python-slugify==8.0.4 # via # -r requirements/test.txt # code-annotations -pytz==2025.2 +pytz==2026.1.post1 # via # -r requirements/test.txt # event-tracking # mongomock -pyyaml==6.0.2 +pyyaml==6.0.3 # via # -r requirements/test.txt # code-annotations @@ -395,10 +446,9 @@ readme-renderer==44.0 # via # -r requirements/test.txt # twine -requests==2.32.5 +requests==2.33.1 # via # -r requirements/test.txt - # djangorestframework-stubs # id # meilisearch # requests-toolbelt @@ -411,11 +461,11 @@ rfc3986==2.0.0 # via # -r requirements/test.txt # twine -rich==14.1.0 +rich==15.0.0 # via # -r requirements/test.txt # twine -secretstorage==3.3.3 +secretstorage==3.5.0 # via # -r requirements/test.txt # keyring @@ -432,15 +482,15 @@ six==1.17.0 # python-dateutil snowballstemmer==3.0.1 # via pydocstyle -soupsieve==2.8 +soupsieve==2.8.3 # via # -r requirements/test.txt # beautifulsoup4 -sqlparse==0.5.3 +sqlparse==0.5.5 # via # -r requirements/test.txt # django -stevedore==5.5.0 +stevedore==5.7.0 # via # -r requirements/test.txt # code-annotations @@ -450,47 +500,61 @@ text-unidecode==1.3 # via # -r requirements/test.txt # python-slugify -tomlkit==0.13.3 +tomli-w==1.2.0 + # via + # -r requirements/test.txt + # tox +tomlkit==0.14.0 # via pylint -tox==4.28.4 +tox==4.52.1 # via -r requirements/test.txt -twine==6.1.0 +twine==6.2.0 # via -r requirements/test.txt types-beautifulsoup4==4.12.0.20250516 # via -r requirements/quality.in -types-html5lib==1.1.11.20250809 +types-html5lib==1.1.11.20260408 # via types-beautifulsoup4 -types-pyyaml==6.0.12.20250822 +types-pyyaml==6.0.12.20260408 # via # django-stubs # djangorestframework-stubs types-requests==2.31.0.6 - # via - # -r requirements/quality.in - # djangorestframework-stubs + # via -r requirements/quality.in types-urllib3==1.26.25.14 # via types-requests +types-webencodings==0.5.0.20260408 + # via types-html5lib +typesense==2.0.0 + # via + # -r requirements/test.txt + # edx-search typing-extensions==4.15.0 # via # -r requirements/test.txt + # anyio # beautifulsoup4 # django-stubs # django-stubs-ext # djangorestframework-stubs # edx-opaque-keys # mypy + # opentelemetry-api # pydantic # pydantic-core + # typesense # typing-inspection -typing-inspection==0.4.1 +typing-inspection==0.4.2 # via # -r requirements/test.txt # pydantic -tzdata==2025.2 +tzdata==2026.1 # via # -r requirements/test.txt - # faker # kombu +tzlocal==5.3.1 + # via + # -r requirements/test.txt + # celery urllib3==1.26.20 # via # -r requirements/test.txt @@ -503,14 +567,22 @@ vine==5.1.0 # amqp # celery # kombu -virtualenv==20.34.0 +virtualenv==21.2.1 # via # -r requirements/test.txt # tox -wcwidth==0.2.13 +wcwidth==0.6.0 # via # -r requirements/test.txt # prompt-toolkit +wrapt==2.1.2 + # via + # -r requirements/test.txt + # ddtrace +zipp==3.23.0 + # via + # -r requirements/test.txt + # importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/test.txt b/requirements/test.txt index 87b4932d..cddd1c28 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.12 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # make upgrade @@ -12,49 +12,59 @@ annotated-types==0.7.0 # via # -r requirements/base.txt # pydantic -asgiref==3.9.1 +anyio==4.13.0 + # via + # -r requirements/base.txt + # httpx +asgiref==3.11.1 # via # -r requirements/base.txt # django -attrs==25.3.0 +attrs==26.1.0 # via # -r requirements/base.txt # openedx-events -beautifulsoup4==4.13.5 +backports-tarfile==1.2.0 + # via jaraco-context +beautifulsoup4==4.14.3 # via -r requirements/base.txt -billiard==4.2.1 +billiard==4.2.4 # via # -r requirements/base.txt # celery -build==1.3.0 +build==1.4.3 # via -r requirements/test.in -cachetools==6.2.0 +bytecode==0.17.0 + # via + # -r requirements/base.txt + # ddtrace +cachetools==7.0.5 # via tox -camel-converter[pydantic]==4.0.1 +camel-converter[pydantic]==5.1.0 # via # -r requirements/base.txt # meilisearch -celery==5.5.3 +celery==5.6.3 # via # -r requirements/base.txt # event-tracking -certifi==2025.8.3 +certifi==2026.2.25 # via # -r requirements/base.txt # elasticsearch + # httpcore + # httpx # requests -cffi==1.17.1 +cffi==2.0.0 # via # -r requirements/base.txt # cryptography # pynacl -chardet==5.2.0 - # via tox -charset-normalizer==3.4.3 +charset-normalizer==3.4.7 # via # -r requirements/base.txt # requests -click==8.2.1 +click==8.3.2 # via # -r requirements/base.txt # celery @@ -75,23 +85,26 @@ click-repl==0.3.0 # via # -r requirements/base.txt # celery -code-annotations==2.3.0 +code-annotations==2.3.2 # via # -r requirements/base.txt # -r requirements/test.in # edx-toggles colorama==0.4.6 # via tox -coverage[toml]==7.10.5 +coverage[toml]==7.13.5 # via pytest-cov -cryptography==45.0.6 +cryptography==46.0.7 # via secretstorage +ddtrace==4.7.0 + # via -r requirements/base.txt distlib==0.4.0 # via virtualenv # via - # -c https:/raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/base.txt # django-crum + # django-model-utils # django-waffle # djangorestframework # edx-django-utils @@ -104,73 +117,99 @@ django-crum==0.7.9 # -r requirements/base.txt # edx-django-utils # edx-toggles +django-model-utils==5.0.0 + # via -r requirements/base.txt django-waffle==5.0.0 # via # -r requirements/base.txt # edx-django-utils # edx-toggles -djangorestframework==3.16.1 +djangorestframework==3.17.1 # via -r requirements/base.txt -dnspython==2.7.0 +dnspython==2.8.0 # via # -r requirements/base.txt # pymongo -docutils==0.22 +docutils==0.22.4 # via readme-renderer edx-ccx-keys==2.0.2 # via # -r requirements/base.txt # openedx-events -edx-django-utils==8.0.0 +edx-django-utils==8.0.1 # via # -r requirements/base.txt # edx-toggles # event-tracking # openedx-events -edx-opaque-keys[django]==3.0.0 +edx-opaque-keys[django]==4.0.0 # via # -r requirements/base.txt # edx-ccx-keys # openedx-events -edx-search==4.1.3 +edx-search==5.0.0 # via -r requirements/base.txt -edx-toggles==5.4.1 +edx-toggles==6.0.0 # via # -r requirements/base.txt # edx-search # event-tracking elasticsearch==7.13.4 # via - # -c https:/raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/base.txt # edx-search -event-tracking==3.3.0 +envier==0.6.1 + # via + # -r requirements/base.txt + # ddtrace +event-tracking==4.0.0 # via # -r requirements/base.txt # edx-search -faker==37.6.0 +faker==40.13.0 # via -r requirements/test.in -fastavro==1.12.0 +fastavro==1.12.1 # via # -r requirements/base.txt # openedx-events -filelock==3.19.1 +filelock==3.25.2 # via + # python-discovery # tox # virtualenv +h11==0.16.0 + # via + # -r requirements/base.txt + # httpcore +httpcore==1.0.9 + # via + # -r requirements/base.txt + # httpx +httpx==0.28.1 + # via + # -r requirements/base.txt + # typesense id==1.5.0 # via twine -idna==3.10 +idna==3.11 # via # -r requirements/base.txt + # anyio + # httpx # requests -iniconfig==2.1.0 +importlib-metadata==8.7.1 + # via + # -r requirements/base.txt + # keyring + # opentelemetry-api +iniconfig==2.3.0 # via pytest jaraco-classes==3.4.0 # via keyring -jaraco-context==6.0.1 +jaraco-context==6.1.2 # via keyring -jaraco-functools==4.3.0 +jaraco-functools==4.4.0 # via keyring jeepney==0.9.0 # via @@ -180,33 +219,33 @@ jinja2==3.1.6 # via # -r requirements/base.txt # code-annotations -keyring==25.6.0 +keyring==25.7.0 # via twine -kombu==5.5.4 +kombu==5.6.2 # via # -r requirements/base.txt # celery markdown-it-py==4.0.0 # via rich -markupsafe==3.0.2 +markupsafe==3.0.3 # via # -r requirements/base.txt # jinja2 mdurl==0.1.2 # via markdown-it-py -meilisearch==0.37.0 +meilisearch==0.40.0 # via # -r requirements/base.txt # edx-search mongomock==4.3.0 # via -r requirements/test.in -more-itertools==10.7.0 +more-itertools==11.0.2 # via # jaraco-classes # jaraco-functools -mysqlclient==2.2.7 +mysqlclient==2.2.8 # via -r requirements/base.txt -nh3==0.3.0 +nh3==0.3.4 # via readme-renderer openedx-atlas==0.7.0 # via -r requirements/base.txt @@ -214,7 +253,11 @@ openedx-events==10.5.0 # via # -r requirements/base.txt # event-tracking -packaging==25.0 +opentelemetry-api==1.41.0 + # via + # -r requirements/base.txt + # ddtrace +packaging==26.0 # via # -r requirements/base.txt # build @@ -224,8 +267,9 @@ packaging==25.0 # pytest # tox # twine -platformdirs==4.4.0 +platformdirs==4.9.6 # via + # python-discovery # tox # virtualenv pluggy==1.6.0 @@ -237,68 +281,72 @@ prompt-toolkit==3.0.52 # via # -r requirements/base.txt # click-repl -psutil==7.0.0 +psutil==7.2.2 # via # -r requirements/base.txt # edx-django-utils -pycparser==2.22 +pycparser==3.0 # via # -r requirements/base.txt # cffi -pydantic==2.11.7 +pydantic==2.13.0 # via # -r requirements/base.txt # camel-converter -pydantic-core==2.33.2 +pydantic-core==2.46.0 # via # -r requirements/base.txt # pydantic -pygments==2.19.2 +pygments==2.20.0 # via # pytest # readme-renderer # rich -pymongo==4.14.1 +pymongo==4.16.0 # via # -r requirements/base.txt # edx-opaque-keys # event-tracking -pynacl==1.5.0 +pynacl==1.6.2 # via # -r requirements/base.txt # edx-django-utils -pyproject-api==1.9.1 +pyproject-api==1.10.0 # via tox pyproject-hooks==1.2.0 # via build -pytest==8.4.1 +pytest==9.0.3 # via # pytest-cov # pytest-django -pytest-cov==6.2.1 +pytest-cov==7.1.0 # via -r requirements/test.in -pytest-django==4.11.1 +pytest-django==4.12.0 # via -r requirements/test.in python-dateutil==2.9.0.post0 # via # -r requirements/base.txt # celery +python-discovery==1.2.2 + # via + # tox + # virtualenv python-slugify==8.0.4 # via # -r requirements/base.txt # code-annotations -pytz==2025.2 +pytz==2026.1.post1 # via # -r requirements/base.txt # event-tracking # mongomock -pyyaml==6.0.2 +pyyaml==6.0.3 # via # -r requirements/base.txt # code-annotations readme-renderer==44.0 # via twine -requests==2.32.5 +requests==2.33.1 # via # -r requirements/base.txt # id @@ -309,9 +357,9 @@ requests-toolbelt==1.0.0 # via twine rfc3986==2.0.0 # via twine -rich==14.1.0 +rich==15.0.0 # via twine -secretstorage==3.3.3 +secretstorage==3.5.0 # via keyring sentinels==1.1.1 # via mongomock @@ -321,15 +369,15 @@ six==1.17.0 # edx-ccx-keys # event-tracking # python-dateutil -soupsieve==2.8 +soupsieve==2.8.3 # via # -r requirements/base.txt # beautifulsoup4 -sqlparse==0.5.3 +sqlparse==0.5.5 # via # -r requirements/base.txt # django -stevedore==5.5.0 +stevedore==5.7.0 # via # -r requirements/base.txt # code-annotations @@ -339,27 +387,39 @@ text-unidecode==1.3 # via # -r requirements/base.txt # python-slugify -tox==4.28.4 +tomli-w==1.2.0 + # via tox +tox==4.52.1 # via -r requirements/test.in -twine==6.1.0 +twine==6.2.0 # via -r requirements/test.in +typesense==2.0.0 + # via + # -r requirements/base.txt + # edx-search typing-extensions==4.15.0 # via # -r requirements/base.txt + # anyio # beautifulsoup4 # edx-opaque-keys + # opentelemetry-api # pydantic # pydantic-core + # typesense # typing-inspection -typing-inspection==0.4.1 +typing-inspection==0.4.2 # via # -r requirements/base.txt # pydantic -tzdata==2025.2 +tzdata==2026.1 # via # -r requirements/base.txt - # faker # kombu +tzlocal==5.3.1 + # via + # -r requirements/base.txt + # celery urllib3==1.26.20 # via # -r requirements/base.txt @@ -372,12 +432,20 @@ vine==5.1.0 # amqp # celery # kombu -virtualenv==20.34.0 +virtualenv==21.2.1 # via tox -wcwidth==0.2.13 +wcwidth==0.6.0 # via # -r requirements/base.txt # prompt-toolkit +wrapt==2.1.2 + # via + # -r requirements/base.txt + # ddtrace +zipp==3.23.0 + # via + # -r requirements/base.txt + # importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/setup.py b/setup.py index 19c52af7..6eef312c 100755 --- a/setup.py +++ b/setup.py @@ -2,6 +2,7 @@ """ Package metadata for forum. """ + import os import re import sys diff --git a/tests/test_backends/test_mongodb/test_comments.py b/tests/test_backends/test_mongodb/test_comments.py index 4b255054..05831775 100644 --- a/tests/test_backends/test_mongodb/test_comments.py +++ b/tests/test_backends/test_mongodb/test_comments.py @@ -2,6 +2,7 @@ """ Tests for the `Comment` model. """ + from forum.backends.mongodb import Comment diff --git a/tests/test_management/test_commands/test_migration_commands.py b/tests/test_management/test_commands/test_migration_commands.py index 06965897..c6ac9281 100644 --- a/tests/test_management/test_commands/test_migration_commands.py +++ b/tests/test_management/test_commands/test_migration_commands.py @@ -23,7 +23,6 @@ ) from forum.utils import get_trunc_title - pytestmark = pytest.mark.django_db