diff --git a/cms/djangoapps/contentstore/asset_storage_handlers.py b/cms/djangoapps/contentstore/asset_storage_handlers.py index 1c9ba46702b9..29c8800fa0c2 100644 --- a/cms/djangoapps/contentstore/asset_storage_handlers.py +++ b/cms/djangoapps/contentstore/asset_storage_handlers.py @@ -575,7 +575,7 @@ def _get_thumbnail_asset_key(asset, course_key): # TODO: this method needs improvement. These view decorators should be at the top in an actual view method, -# but this is just a method called by the asset_handler. The asset_handler used by the public studio content API +# but this is just a method called by the asset_handler. The asset_handler used by the public CMS API # just ignores all of this stuff. @require_http_methods(('DELETE', 'POST', 'PUT')) @login_required diff --git a/cms/djangoapps/contentstore/rest_api/v1/serializers/xblock.py b/cms/djangoapps/contentstore/rest_api/v1/serializers/xblock.py new file mode 100644 index 000000000000..68d44af0ffd5 --- /dev/null +++ b/cms/djangoapps/contentstore/rest_api/v1/serializers/xblock.py @@ -0,0 +1,15 @@ +""" +API Serializers for xblocks +""" + + +# TODO: implement and use serializer +# from rest_framework import serializers + +# class XblockSerializer(serializers.Serializer): +# """Serializer for xblocks""" +# id=serializers.CharField(required=False) +# display_name=serializers.CharField(required=False) +# category=serializers.CharField(required=False) +# data=serializers.CharField(required=False) +# metadata=serializers.DictField(required=False) diff --git a/cms/djangoapps/contentstore/rest_api/v1/views/assets.py b/cms/djangoapps/contentstore/rest_api/v1/views/assets.py index 3508020a85b4..dc95087a125d 100644 --- a/cms/djangoapps/contentstore/rest_api/v1/views/assets.py +++ b/cms/djangoapps/contentstore/rest_api/v1/views/assets.py @@ -1,5 +1,5 @@ """ -Public rest API endpoints for the Studio Content API Assets. +Public rest API endpoints for the CMS API Assets. """ import logging from rest_framework.generics import RetrieveUpdateDestroyAPIView, CreateAPIView @@ -21,7 +21,7 @@ @view_auth_classes() class AssetsView(DeveloperErrorViewMixin, RetrieveUpdateDestroyAPIView, CreateAPIView): """ - public rest API endpoints for the Studio Content API Assets. + public rest API endpoints for the CMS API Assets. course_key: required argument, needed to authorize course authors and identify the asset. asset_key_string: required argument, needed to identify the asset. """ diff --git a/cms/djangoapps/contentstore/rest_api/v1/views/tests/test_assets.py b/cms/djangoapps/contentstore/rest_api/v1/views/tests/test_assets.py index 9d1bee5fd727..908af1d1bc94 100644 --- a/cms/djangoapps/contentstore/rest_api/v1/views/tests/test_assets.py +++ b/cms/djangoapps/contentstore/rest_api/v1/views/tests/test_assets.py @@ -1,7 +1,7 @@ """ -Tests for the xblock view of the Studio Content API. This tests only the view itself, +Tests for the xblock view of the CMS API. This tests only the view itself, not the underlying Xblock service. It checks that the assets_handler method of the Xblock service is called with the expected parameters. """ diff --git a/cms/djangoapps/contentstore/rest_api/v1/views/tests/test_xblock.py b/cms/djangoapps/contentstore/rest_api/v1/views/tests/test_xblock.py index 688a6cc0cd64..f8d871a5bef0 100644 --- a/cms/djangoapps/contentstore/rest_api/v1/views/tests/test_xblock.py +++ b/cms/djangoapps/contentstore/rest_api/v1/views/tests/test_xblock.py @@ -1,5 +1,5 @@ """ -Tests for the xblock view of the Studio Content API. This tests only the view itself, +Tests for the xblock view of the CMS API. This tests only the view itself, not the underlying Xblock service. It checks that the xblock_handler method of the Xblock service is called with the expected parameters. """ diff --git a/cms/djangoapps/contentstore/rest_api/v1/views/transcripts.py b/cms/djangoapps/contentstore/rest_api/v1/views/transcripts.py index af23a81fb867..e4e8ff866799 100644 --- a/cms/djangoapps/contentstore/rest_api/v1/views/transcripts.py +++ b/cms/djangoapps/contentstore/rest_api/v1/views/transcripts.py @@ -1,5 +1,5 @@ """ -Public rest API endpoints for the Studio Content API video assets. +Public rest API endpoints for the CMS API video assets. """ import logging from rest_framework.generics import ( @@ -29,7 +29,7 @@ @view_auth_classes() class TranscriptView(DeveloperErrorViewMixin, CreateAPIView, RetrieveAPIView, DestroyAPIView): """ - public rest API endpoints for the Studio Content API video transcripts. + public rest API endpoints for the CMS API video transcripts. course_key: required argument, needed to authorize course authors and identify the video. edx_video_id: optional query parameter, needed to identify the transcript. language_code: optional query parameter, needed to identify the transcript. diff --git a/cms/djangoapps/contentstore/rest_api/v1/views/videos.py b/cms/djangoapps/contentstore/rest_api/v1/views/videos.py index 46282b2eb61d..a6e776b77c09 100644 --- a/cms/djangoapps/contentstore/rest_api/v1/views/videos.py +++ b/cms/djangoapps/contentstore/rest_api/v1/views/videos.py @@ -1,5 +1,5 @@ """ -Public rest API endpoints for the Studio Content API video assets. +Public rest API endpoints for the CMS API video assets. """ import logging from rest_framework.generics import ( @@ -31,7 +31,7 @@ @view_auth_classes() class VideosView(DeveloperErrorViewMixin, CreateAPIView, RetrieveAPIView, DestroyAPIView): """ - public rest API endpoints for the Studio Content API video assets. + public rest API endpoints for the CMS API video assets. course_key: required argument, needed to authorize course authors and identify the video. video_id: required argument, needed to identify the video. """ diff --git a/cms/djangoapps/contentstore/rest_api/v1/views/xblock.py b/cms/djangoapps/contentstore/rest_api/v1/views/xblock.py index 2da54811d4b3..13087c6cd381 100644 --- a/cms/djangoapps/contentstore/rest_api/v1/views/xblock.py +++ b/cms/djangoapps/contentstore/rest_api/v1/views/xblock.py @@ -1,5 +1,5 @@ """ -Public rest API endpoints for the Studio Content API. +Public rest API endpoints for the CMS API. """ import logging from rest_framework.generics import RetrieveUpdateDestroyAPIView, CreateAPIView @@ -9,11 +9,13 @@ from openedx.core.lib.api.view_utils import DeveloperErrorViewMixin, view_auth_classes from common.djangoapps.util.json_request import expect_json_in_class_view -from ....api import course_author_access_required - +from cms.djangoapps.contentstore.api import course_author_access_required from cms.djangoapps.contentstore.xblock_storage_handlers import view_handlers import cms.djangoapps.contentstore.toggles as contentstore_toggles +# from cms.djangoapps.contentstore.rest_api.v1.serializers import XblockSerializer + + log = logging.getLogger(__name__) toggles = contentstore_toggles handle_xblock = view_handlers.handle_xblock @@ -22,11 +24,13 @@ @view_auth_classes() class XblockView(DeveloperErrorViewMixin, RetrieveUpdateDestroyAPIView, CreateAPIView): """ - Public rest API endpoints for the Studio Content API. + Public rest API endpoints for the CMS API. course_key: required argument, needed to authorize course authors. usage_key_string (optional): xblock identifier, for example in the form of "block-v1:+type@+block@" """ + # TODO: uncomment next line after XblockSerializer is implemented + # serializer_class = XblockSerializer def dispatch(self, request, *args, **kwargs): # TODO: probably want to refactor this to a decorator. diff --git a/cms/djangoapps/contentstore/xblock_storage_handlers/view_handlers.py b/cms/djangoapps/contentstore/xblock_storage_handlers/view_handlers.py index f7d369630769..425f97e3751f 100644 --- a/cms/djangoapps/contentstore/xblock_storage_handlers/view_handlers.py +++ b/cms/djangoapps/contentstore/xblock_storage_handlers/view_handlers.py @@ -175,7 +175,7 @@ def handle_xblock(request, usage_key_string=None): """ Service method with all business logic for handling xblock requests. This method is used both by the internal xblock_handler API and by - the public studio content API. + the public CMS API. """ if usage_key_string: usage_key = usage_key_with_run(usage_key_string) diff --git a/cms/envs/common.py b/cms/envs/common.py index cbc100bcabe6..ba8d2d26f2f6 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -1791,6 +1791,9 @@ # Blockstore 'blockstore.apps.bundles', + + # alternative swagger generator for CMS API + 'drf_spectacular', ] @@ -2771,3 +2774,16 @@ #### django-simple-history## # disable indexing on date field its coming django-simple-history. SIMPLE_HISTORY_DATE_INDEX = False + +# This affects the CMS API swagger docs but not the legacy swagger docs under /api-docs/. +REST_FRAMEWORK['DEFAULT_SCHEMA_CLASS'] = 'drf_spectacular.openapi.AutoSchema' + +# These fields override the spectacular settings default values. +# Any fields not included here will use the default values. +SPECTACULAR_SETTINGS = { + 'TITLE': 'CMS API', + 'DESCRIPTION': 'Experimental API to edit xblocks and course content. Danger: Do not use on running courses!', + 'VERSION': '1.0.0', + 'SERVE_INCLUDE_SCHEMA': False, + 'PREPROCESSING_HOOKS': ['cms.lib.spectacular.cms_api_filter'], # restrict spectacular to CMS API endpoints +} diff --git a/cms/lib/spectacular.py b/cms/lib/spectacular.py new file mode 100644 index 000000000000..d05d71353157 --- /dev/null +++ b/cms/lib/spectacular.py @@ -0,0 +1,19 @@ +""" Helper functions for drf-spectacular """ + + +def cms_api_filter(endpoints): + """ + At the moment, we are only enabling drf-spectacular for the CMS API. + Filter out endpoints that are not part of the CMS API. + """ + filtered = [] + for (path, path_regex, method, callback) in endpoints: + # Add only paths to the list that are part of the CMS API + if ( + path.startswith("/api/contentstore/v1/xblock") or + path.startswith("/api/contentstore/v1/videos") or + path.startswith("/api/contentstore/v1/video_transcripts") or + path.startswith("/api/contentstore/v1/file_assets") + ): + filtered.append((path, path_regex, method, callback)) + return filtered diff --git a/cms/urls.py b/cms/urls.py index aae5aeefbd49..540d3cc8db04 100644 --- a/cms/urls.py +++ b/cms/urls.py @@ -8,9 +8,10 @@ from django.urls import include from django.urls import path, re_path from django.utils.translation import gettext_lazy as _ +from django.contrib import admin +from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView from auth_backends.urls import oauth2_urlpatterns from edx_api_doc_tools import make_docs_urls -from django.contrib import admin import openedx.core.djangoapps.common_views.xblock import openedx.core.djangoapps.debug.views @@ -340,3 +341,9 @@ urlpatterns += [ path('api/content_tagging/', include(('openedx.features.content_tagging.urls'))), ] + +# studio-content-api specific API docs (using drf-spectacular and openapi-v3) +urlpatterns += [ + re_path('^cms-api/ui/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'), + re_path('^cms-api/schema/', SpectacularAPIView.as_view(), name='schema'), +] diff --git a/requirements/edx-sandbox/py38.txt b/requirements/edx-sandbox/py38.txt index bc49374be05f..ee53d16072b1 100644 --- a/requirements/edx-sandbox/py38.txt +++ b/requirements/edx-sandbox/py38.txt @@ -14,7 +14,7 @@ click==8.1.6 # nltk codejail-includes==1.0.0 # via -r requirements/edx-sandbox/py38.in -contourpy==1.1.0 +contourpy==1.1.1 # via matplotlib cryptography==38.0.4 # via @@ -38,7 +38,7 @@ markupsafe==2.1.3 # via # chem # openedx-calc -matplotlib==3.7.2 +matplotlib==3.7.3 # via -r requirements/edx-sandbox/py38.in mpmath==1.3.0 # via sympy @@ -65,7 +65,7 @@ pillow==9.5.0 # matplotlib pycparser==2.21 # via cffi -pyparsing==3.0.9 +pyparsing==3.1.1 # via # -r requirements/edx-sandbox/py38.in # chem @@ -94,5 +94,5 @@ sympy==1.12 # openedx-calc tqdm==4.66.1 # via nltk -zipp==3.16.2 +zipp==3.17.0 # via importlib-resources diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index 379317a31123..52cef5293cd7 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -209,6 +209,7 @@ django==3.2.21 # done-xblock # drf-jwt # drf-nested-routers + # drf-spectacular # drf-yasg # edx-ace # edx-api-doc-tools @@ -252,7 +253,7 @@ django==3.2.21 # xss-utils django-appconf==1.0.5 # via django-statici18n -django-cache-memoize==0.1.10 +django-cache-memoize==0.2.0 # via edx-enterprise django-celery-results==2.5.1 # via -r requirements/edx/kernel.in @@ -283,7 +284,7 @@ django-environ==0.11.2 # via openedx-blockstore django-fernet-fields-v2==0.9 # via edx-enterprise -django-filter==23.2 +django-filter==23.3 # via # -r requirements/edx/kernel.in # edx-enterprise @@ -341,7 +342,7 @@ django-sekizai==4.1.0 # openedx-django-wiki django-ses==3.5.0 # via -r requirements/edx/bundled.in -django-simple-history==3.3.0 +django-simple-history==3.4.0 # via # -r requirements/edx/kernel.in # edx-enterprise @@ -385,6 +386,7 @@ djangorestframework==3.14.0 # django-user-tasks # drf-jwt # drf-nested-routers + # drf-spectacular # drf-yasg # edx-api-doc-tools # edx-completion @@ -410,6 +412,8 @@ drf-jwt==1.19.2 # via edx-drf-extensions drf-nested-routers==0.93.4 # via openedx-blockstore +drf-spectacular==0.26.4 + # via -r requirements/edx/kernel.in drf-yasg==1.21.5 # via # -c requirements/edx/../constraints.txt @@ -470,7 +474,7 @@ edx-django-utils==5.7.0 # openedx-blockstore # ora2 # super-csv -edx-drf-extensions==8.9.2 +edx-drf-extensions==8.10.0 # via # -r requirements/edx/kernel.in # edx-completion @@ -570,7 +574,7 @@ event-tracking==2.2.0 # edx-search fastavro==1.8.3 # via openedx-events -filelock==3.12.3 +filelock==3.12.4 # via snowflake-connector-python frozenlist==1.4.0 # via @@ -600,7 +604,7 @@ html5lib==1.1 # via # -r requirements/edx/kernel.in # ora2 -icalendar==5.0.7 +icalendar==5.0.8 # via -r requirements/edx/kernel.in idna==3.4 # via @@ -616,7 +620,9 @@ importlib-resources==6.0.1 # jsonschema # jsonschema-specifications inflection==0.5.1 - # via drf-yasg + # via + # drf-spectacular + # drf-yasg interchange==2021.0.4 # via py2neo ipaddress==1.0.23 @@ -647,7 +653,9 @@ jsonfield==3.1.0 # lti-consumer-xblock # ora2 jsonschema==4.19.0 - # via optimizely-sdk + # via + # drf-spectacular + # optimizely-sdk jsonschema-specifications==2023.7.1 # via jsonschema jwcrypto==1.5.0 @@ -658,7 +666,7 @@ kombu==5.3.2 # via celery laboratory==1.0.2 # via -r requirements/edx/kernel.in -lazy==1.5 +lazy==1.6 # via # -r requirements/edx/paver.txt # acid-xblock @@ -849,7 +857,7 @@ pycountry==22.3.5 # via -r requirements/edx/kernel.in pycparser==2.21 # via cffi -pycryptodomex==3.18.0 +pycryptodomex==3.19.0 # via # -r requirements/edx/kernel.in # edx-proctoring @@ -917,7 +925,6 @@ python-dateutil==2.8.2 # botocore # celery # edx-ace - # edx-drf-extensions # edx-enterprise # edx-proctoring # icalendar @@ -965,6 +972,7 @@ pyyaml==6.0.1 # via # -r requirements/edx/kernel.in # code-annotations + # drf-spectacular # edx-django-release-util # edx-i18n-tools # xblock @@ -1009,7 +1017,7 @@ requests-oauthlib==1.3.1 # via # -r requirements/edx/kernel.in # social-auth-core -rpds-py==0.10.2 +rpds-py==0.10.3 # via # jsonschema # referencing @@ -1057,7 +1065,6 @@ six==1.16.0 # edx-ccx-keys # edx-codejail # edx-django-release-util - # edx-drf-extensions # edx-milestones # edx-rbac # event-tracking @@ -1122,7 +1129,7 @@ super-csv==3.1.0 # via edx-bulk-grades sympy==1.12 # via openedx-calc -testfixtures==7.1.0 +testfixtures==7.2.0 # via edx-enterprise text-unidecode==1.3 # via python-slugify @@ -1134,13 +1141,12 @@ tqdm==4.66.1 # via # nltk # openai -typing-extensions==4.7.1 +typing-extensions==4.8.0 # via # -r requirements/edx/paver.txt # asgiref # django-countries # edx-opaque-keys - # filelock # kombu # pylti1p3 # snowflake-connector-python @@ -1155,6 +1161,7 @@ unicodecsv==0.14.1 uritemplate==4.1.1 # via # coreapi + # drf-spectacular # drf-yasg urllib3==1.26.16 # via @@ -1236,7 +1243,7 @@ xss-utils==0.5.0 # via -r requirements/edx/kernel.in yarl==1.9.2 # via aiohttp -zipp==3.16.2 +zipp==3.17.0 # via # importlib-metadata # importlib-resources diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index b93931b74651..5695e1f88a7b 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -370,6 +370,7 @@ django==3.2.21 # done-xblock # drf-jwt # drf-nested-routers + # drf-spectacular # drf-yasg # edx-ace # edx-api-doc-tools @@ -416,7 +417,7 @@ django-appconf==1.0.5 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # django-statici18n -django-cache-memoize==0.1.10 +django-cache-memoize==0.2.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -468,7 +469,7 @@ django-fernet-fields-v2==0.9 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edx-enterprise -django-filter==23.2 +django-filter==23.3 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -551,7 +552,7 @@ django-ses==3.5.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -django-simple-history==3.3.0 +django-simple-history==3.4.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -612,6 +613,7 @@ djangorestframework==3.14.0 # django-user-tasks # drf-jwt # drf-nested-routers + # drf-spectacular # drf-yasg # edx-api-doc-tools # edx-completion @@ -657,6 +659,10 @@ drf-nested-routers==0.93.4 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # openedx-blockstore +drf-spectacular==0.26.4 + # via + # -r requirements/edx/doc.txt + # -r requirements/edx/testing.txt drf-yasg==1.21.5 # via # -c requirements/edx/../constraints.txt @@ -735,7 +741,7 @@ edx-django-utils==5.7.0 # openedx-blockstore # ora2 # super-csv -edx-drf-extensions==8.9.2 +edx-drf-extensions==8.10.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -903,7 +909,7 @@ fastavro==1.8.3 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # openedx-events -filelock==3.12.3 +filelock==3.12.4 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -943,7 +949,7 @@ gitdb==4.0.10 # via # -r requirements/edx/doc.txt # gitpython -gitpython==3.1.35 +gitpython==3.1.36 # via -r requirements/edx/doc.txt glob2==0.7 # via @@ -981,7 +987,7 @@ httpx==0.23.3 # via # -r requirements/edx/testing.txt # pact-python -icalendar==5.0.7 +icalendar==5.0.8 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1020,6 +1026,7 @@ inflection==0.5.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt + # drf-spectacular # drf-yasg iniconfig==2.0.0 # via @@ -1086,6 +1093,7 @@ jsonschema==4.19.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt + # drf-spectacular # optimizely-sdk # sphinxcontrib-openapi jsonschema-specifications==2023.7.1 @@ -1108,7 +1116,7 @@ laboratory==1.0.2 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -lazy==1.5 +lazy==1.6 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1461,7 +1469,7 @@ pycparser==2.21 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # cffi -pycryptodomex==3.18.0 +pycryptodomex==3.19.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1477,7 +1485,7 @@ pydantic-core==2.6.3 # via # -r requirements/edx/testing.txt # pydantic -pydata-sphinx-theme==0.13.3 +pydata-sphinx-theme==0.14.0 # via # -r requirements/edx/doc.txt # sphinx-book-theme @@ -1628,7 +1636,6 @@ python-dateutil==2.8.2 # botocore # celery # edx-ace - # edx-drf-extensions # edx-enterprise # edx-proctoring # faker @@ -1695,6 +1702,7 @@ pyyaml==6.0.1 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # code-annotations + # drf-spectacular # edx-django-release-util # edx-i18n-tools # sphinxcontrib-openapi @@ -1759,7 +1767,7 @@ rfc3986[idna2008]==1.5.0 # via # -r requirements/edx/testing.txt # httpx -rpds-py==0.10.2 +rpds-py==0.10.3 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -1837,7 +1845,6 @@ six==1.16.0 # edx-ccx-keys # edx-codejail # edx-django-release-util - # edx-drf-extensions # edx-lint # edx-milestones # edx-rbac @@ -1865,7 +1872,7 @@ slumber==0.7.1 # edx-bulk-grades # edx-enterprise # edx-rest-api-client -smmap==5.0.0 +smmap==5.0.1 # via # -r requirements/edx/doc.txt # gitdb @@ -1998,7 +2005,7 @@ sympy==1.12 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # openedx-calc -testfixtures==7.1.0 +testfixtures==7.2.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -2048,7 +2055,7 @@ tqdm==4.66.1 # -r requirements/edx/testing.txt # nltk # openai -types-pytz==2023.3.0.1 +types-pytz==2023.3.1.0 # via django-stubs types-pyyaml==6.0.12.11 # via @@ -2058,7 +2065,7 @@ types-requests==2.31.0.2 # via djangorestframework-stubs types-urllib3==1.26.25.14 # via types-requests -typing-extensions==4.7.1 +typing-extensions==4.8.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -2072,7 +2079,6 @@ typing-extensions==4.7.1 # edx-opaque-keys # faker # fastapi - # filelock # grimp # import-linter # kombu @@ -2103,6 +2109,7 @@ uritemplate==4.1.1 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # coreapi + # drf-spectacular # drf-yasg urllib3==1.26.16 # via @@ -2239,7 +2246,7 @@ yarl==1.9.2 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # aiohttp -zipp==3.16.2 +zipp==3.17.0 # via # -r requirements/edx/../pip-tools.txt # -r requirements/edx/doc.txt diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index ece3802a84db..adeb3520e9db 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -256,6 +256,7 @@ django==3.2.21 # done-xblock # drf-jwt # drf-nested-routers + # drf-spectacular # drf-yasg # edx-ace # edx-api-doc-tools @@ -301,7 +302,7 @@ django-appconf==1.0.5 # via # -r requirements/edx/base.txt # django-statici18n -django-cache-memoize==0.1.10 +django-cache-memoize==0.2.0 # via # -r requirements/edx/base.txt # edx-enterprise @@ -340,7 +341,7 @@ django-fernet-fields-v2==0.9 # via # -r requirements/edx/base.txt # edx-enterprise -django-filter==23.2 +django-filter==23.3 # via # -r requirements/edx/base.txt # edx-enterprise @@ -404,7 +405,7 @@ django-sekizai==4.1.0 # openedx-django-wiki django-ses==3.5.0 # via -r requirements/edx/base.txt -django-simple-history==3.3.0 +django-simple-history==3.4.0 # via # -r requirements/edx/base.txt # edx-enterprise @@ -448,6 +449,7 @@ djangorestframework==3.14.0 # django-user-tasks # drf-jwt # drf-nested-routers + # drf-spectacular # drf-yasg # edx-api-doc-tools # edx-completion @@ -483,6 +485,8 @@ drf-nested-routers==0.93.4 # via # -r requirements/edx/base.txt # openedx-blockstore +drf-spectacular==0.26.4 + # via -r requirements/edx/base.txt drf-yasg==1.21.5 # via # -c requirements/edx/../constraints.txt @@ -544,7 +548,7 @@ edx-django-utils==5.7.0 # openedx-blockstore # ora2 # super-csv -edx-drf-extensions==8.9.2 +edx-drf-extensions==8.10.0 # via # -r requirements/edx/base.txt # edx-completion @@ -654,7 +658,7 @@ fastavro==1.8.3 # via # -r requirements/edx/base.txt # openedx-events -filelock==3.12.3 +filelock==3.12.4 # via # -r requirements/edx/base.txt # snowflake-connector-python @@ -681,7 +685,7 @@ geoip2==4.7.0 # via -r requirements/edx/base.txt gitdb==4.0.10 # via gitpython -gitpython==3.1.35 +gitpython==3.1.36 # via -r requirements/edx/doc.in glob2==0.7 # via -r requirements/edx/base.txt @@ -693,7 +697,7 @@ html5lib==1.1 # via # -r requirements/edx/base.txt # ora2 -icalendar==5.0.7 +icalendar==5.0.8 # via -r requirements/edx/base.txt idna==3.4 # via @@ -717,6 +721,7 @@ importlib-resources==6.0.1 inflection==0.5.1 # via # -r requirements/edx/base.txt + # drf-spectacular # drf-yasg interchange==2021.0.4 # via @@ -763,6 +768,7 @@ jsonfield==3.1.0 jsonschema==4.19.0 # via # -r requirements/edx/base.txt + # drf-spectacular # optimizely-sdk # sphinxcontrib-openapi jsonschema-specifications==2023.7.1 @@ -780,7 +786,7 @@ kombu==5.3.2 # celery laboratory==1.0.2 # via -r requirements/edx/base.txt -lazy==1.5 +lazy==1.6 # via # -r requirements/edx/base.txt # acid-xblock @@ -1012,14 +1018,14 @@ pycparser==2.21 # via # -r requirements/edx/base.txt # cffi -pycryptodomex==3.18.0 +pycryptodomex==3.19.0 # via # -r requirements/edx/base.txt # edx-proctoring # lti-consumer-xblock # pyjwkest # snowflake-connector-python -pydata-sphinx-theme==0.13.3 +pydata-sphinx-theme==0.14.0 # via sphinx-book-theme pygments==2.16.1 # via @@ -1093,7 +1099,6 @@ python-dateutil==2.8.2 # botocore # celery # edx-ace - # edx-drf-extensions # edx-enterprise # edx-proctoring # icalendar @@ -1145,6 +1150,7 @@ pyyaml==6.0.1 # via # -r requirements/edx/base.txt # code-annotations + # drf-spectacular # edx-django-release-util # edx-i18n-tools # sphinxcontrib-openapi @@ -1194,7 +1200,7 @@ requests-oauthlib==1.3.1 # via # -r requirements/edx/base.txt # social-auth-core -rpds-py==0.10.2 +rpds-py==0.10.3 # via # -r requirements/edx/base.txt # jsonschema @@ -1253,7 +1259,6 @@ six==1.16.0 # edx-ccx-keys # edx-codejail # edx-django-release-util - # edx-drf-extensions # edx-milestones # edx-rbac # event-tracking @@ -1277,7 +1282,7 @@ slumber==0.7.1 # edx-bulk-grades # edx-enterprise # edx-rest-api-client -smmap==5.0.0 +smmap==5.0.1 # via gitdb snowballstemmer==2.2.0 # via sphinx @@ -1367,7 +1372,7 @@ sympy==1.12 # via # -r requirements/edx/base.txt # openedx-calc -testfixtures==7.1.0 +testfixtures==7.2.0 # via # -r requirements/edx/base.txt # edx-enterprise @@ -1388,13 +1393,12 @@ tqdm==4.66.1 # -r requirements/edx/base.txt # nltk # openai -typing-extensions==4.7.1 +typing-extensions==4.8.0 # via # -r requirements/edx/base.txt # asgiref # django-countries # edx-opaque-keys - # filelock # kombu # pydata-sphinx-theme # pylti1p3 @@ -1412,6 +1416,7 @@ uritemplate==4.1.1 # via # -r requirements/edx/base.txt # coreapi + # drf-spectacular # drf-yasg urllib3==1.26.16 # via @@ -1505,7 +1510,7 @@ yarl==1.9.2 # via # -r requirements/edx/base.txt # aiohttp -zipp==3.16.2 +zipp==3.17.0 # via # -r requirements/edx/base.txt # importlib-metadata diff --git a/requirements/edx/kernel.in b/requirements/edx/kernel.in index 13e2ec3a2b36..dd3403655d28 100644 --- a/requirements/edx/kernel.in +++ b/requirements/edx/kernel.in @@ -58,6 +58,7 @@ django-user-tasks django-waffle django-webpack-loader # Used to wire webpack bundles into the django asset pipeline djangorestframework +drf-spectacular edx-ace edx-api-doc-tools edx-auth-backends # Allow Studio to use LMS SSO diff --git a/requirements/edx/paver.txt b/requirements/edx/paver.txt index 4c498e9476c6..962fdec088fa 100644 --- a/requirements/edx/paver.txt +++ b/requirements/edx/paver.txt @@ -14,7 +14,7 @@ edx-opaque-keys==2.5.0 # via -r requirements/edx/paver.in idna==3.4 # via requests -lazy==1.5 +lazy==1.6 # via -r requirements/edx/paver.in libsass==0.10.0 # via @@ -52,7 +52,7 @@ stevedore==5.1.0 # via # -r requirements/edx/paver.in # edx-opaque-keys -typing-extensions==4.7.1 +typing-extensions==4.8.0 # via edx-opaque-keys urllib3==1.26.16 # via diff --git a/requirements/edx/semgrep.txt b/requirements/edx/semgrep.txt index f11f4660f7b9..e5a31e360d42 100644 --- a/requirements/edx/semgrep.txt +++ b/requirements/edx/semgrep.txt @@ -15,7 +15,7 @@ boltons==21.0.0 # face # glom # semgrep -bracex==2.3.post1 +bracex==2.4 # via wcmatch certifi==2023.7.22 # via requests @@ -68,9 +68,9 @@ referencing==0.30.2 # jsonschema-specifications requests==2.31.0 # via semgrep -rich==13.5.2 +rich==13.5.3 # via semgrep -rpds-py==0.10.0 +rpds-py==0.10.3 # via # jsonschema # referencing @@ -78,11 +78,11 @@ ruamel-yaml==0.17.32 # via semgrep ruamel-yaml-clib==0.2.7 # via ruamel-yaml -semgrep==1.38.0 +semgrep==1.41.0 # via -r requirements/edx/semgrep.in tomli==2.0.1 # via semgrep -typing-extensions==4.7.1 +typing-extensions==4.8.0 # via # rich # semgrep @@ -95,5 +95,5 @@ urllib3==1.26.16 # semgrep wcmatch==8.5 # via semgrep -zipp==3.16.2 +zipp==3.17.0 # via importlib-resources diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 8b4f297efc40..d883982730e0 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -289,6 +289,7 @@ django==3.2.21 # done-xblock # drf-jwt # drf-nested-routers + # drf-spectacular # drf-yasg # edx-ace # edx-api-doc-tools @@ -334,7 +335,7 @@ django-appconf==1.0.5 # via # -r requirements/edx/base.txt # django-statici18n -django-cache-memoize==0.1.10 +django-cache-memoize==0.2.0 # via # -r requirements/edx/base.txt # edx-enterprise @@ -373,7 +374,7 @@ django-fernet-fields-v2==0.9 # via # -r requirements/edx/base.txt # edx-enterprise -django-filter==23.2 +django-filter==23.3 # via # -r requirements/edx/base.txt # edx-enterprise @@ -437,7 +438,7 @@ django-sekizai==4.1.0 # openedx-django-wiki django-ses==3.5.0 # via -r requirements/edx/base.txt -django-simple-history==3.3.0 +django-simple-history==3.4.0 # via # -r requirements/edx/base.txt # edx-enterprise @@ -481,6 +482,7 @@ djangorestframework==3.14.0 # django-user-tasks # drf-jwt # drf-nested-routers + # drf-spectacular # drf-yasg # edx-api-doc-tools # edx-completion @@ -513,6 +515,8 @@ drf-nested-routers==0.93.4 # via # -r requirements/edx/base.txt # openedx-blockstore +drf-spectacular==0.26.4 + # via -r requirements/edx/base.txt drf-yasg==1.21.5 # via # -c requirements/edx/../constraints.txt @@ -574,7 +578,7 @@ edx-django-utils==5.7.0 # openedx-blockstore # ora2 # super-csv -edx-drf-extensions==8.9.2 +edx-drf-extensions==8.10.0 # via # -r requirements/edx/base.txt # edx-completion @@ -699,7 +703,7 @@ fastavro==1.8.3 # via # -r requirements/edx/base.txt # openedx-events -filelock==3.12.3 +filelock==3.12.4 # via # -r requirements/edx/base.txt # snowflake-connector-python @@ -750,7 +754,7 @@ httpretty==1.1.4 # via -r requirements/edx/testing.in httpx==0.23.3 # via pact-python -icalendar==5.0.7 +icalendar==5.0.8 # via -r requirements/edx/base.txt idna==3.4 # via @@ -776,6 +780,7 @@ importlib-resources==6.0.1 inflection==0.5.1 # via # -r requirements/edx/base.txt + # drf-spectacular # drf-yasg iniconfig==2.0.0 # via pytest @@ -829,6 +834,7 @@ jsonfield==3.1.0 jsonschema==4.19.0 # via # -r requirements/edx/base.txt + # drf-spectacular # optimizely-sdk jsonschema-specifications==2023.7.1 # via @@ -845,7 +851,7 @@ kombu==5.3.2 # celery laboratory==1.0.2 # via -r requirements/edx/base.txt -lazy==1.5 +lazy==1.6 # via # -r requirements/edx/base.txt # acid-xblock @@ -1099,7 +1105,7 @@ pycparser==2.21 # via # -r requirements/edx/base.txt # cffi -pycryptodomex==3.18.0 +pycryptodomex==3.19.0 # via # -r requirements/edx/base.txt # edx-proctoring @@ -1227,7 +1233,6 @@ python-dateutil==2.8.2 # botocore # celery # edx-ace - # edx-drf-extensions # edx-enterprise # edx-proctoring # faker @@ -1281,6 +1286,7 @@ pyyaml==6.0.1 # via # -r requirements/edx/base.txt # code-annotations + # drf-spectacular # edx-django-release-util # edx-i18n-tools # xblock @@ -1331,7 +1337,7 @@ requests-oauthlib==1.3.1 # social-auth-core rfc3986[idna2008]==1.5.0 # via httpx -rpds-py==0.10.2 +rpds-py==0.10.3 # via # -r requirements/edx/base.txt # jsonschema @@ -1396,7 +1402,6 @@ six==1.16.0 # edx-ccx-keys # edx-codejail # edx-django-release-util - # edx-drf-extensions # edx-lint # edx-milestones # edx-rbac @@ -1479,7 +1484,7 @@ sympy==1.12 # via # -r requirements/edx/base.txt # openedx-calc -testfixtures==7.1.0 +testfixtures==7.2.0 # via # -r requirements/edx/base.txt # -r requirements/edx/testing.in @@ -1516,7 +1521,7 @@ tqdm==4.66.1 # -r requirements/edx/base.txt # nltk # openai -typing-extensions==4.7.1 +typing-extensions==4.8.0 # via # -r requirements/edx/base.txt # annotated-types @@ -1526,7 +1531,6 @@ typing-extensions==4.7.1 # edx-opaque-keys # faker # fastapi - # filelock # grimp # import-linter # kombu @@ -1552,6 +1556,7 @@ uritemplate==4.1.1 # via # -r requirements/edx/base.txt # coreapi + # drf-spectacular # drf-yasg urllib3==1.26.16 # via @@ -1652,7 +1657,7 @@ yarl==1.9.2 # via # -r requirements/edx/base.txt # aiohttp -zipp==3.16.2 +zipp==3.17.0 # via # -r requirements/edx/base.txt # importlib-metadata diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt index a4b79a932dda..f9aebfe766c5 100644 --- a/requirements/pip-tools.txt +++ b/requirements/pip-tools.txt @@ -25,7 +25,7 @@ tomli==2.0.1 # pyproject-hooks wheel==0.41.2 # via pip-tools -zipp==3.16.2 +zipp==3.17.0 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/pip.txt b/requirements/pip.txt index a53f711a5dcd..3e7d8f4a813f 100644 --- a/requirements/pip.txt +++ b/requirements/pip.txt @@ -10,5 +10,5 @@ wheel==0.41.2 # The following packages are considered to be unsafe in a requirements file: pip==23.2.1 # via -r requirements/pip.in -setuptools==68.2.1 +setuptools==68.2.2 # via -r requirements/pip.in