From 5063bc8b2da7ce9427517440fc5a9b794fc1ecee Mon Sep 17 00:00:00 2001 From: Mikko Nieminen Date: Fri, 21 Jun 2024 10:54:35 +0200 Subject: [PATCH] fix generateschema issues (#1442), add dependencies (#1444) --- .github/ISSUE_TEMPLATE/release_cleanup.md | 1 + CHANGELOG.rst | 6 ++++++ filesfolders/views_api.py | 8 ++++++++ projectroles/views_ajax.py | 1 + projectroles/views_api.py | 3 +++ requirements/local.txt | 4 ++++ timeline/views_api.py | 2 ++ 7 files changed, 25 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/release_cleanup.md b/.github/ISSUE_TEMPLATE/release_cleanup.md index a762ab40..7b623c80 100644 --- a/.github/ISSUE_TEMPLATE/release_cleanup.md +++ b/.github/ISSUE_TEMPLATE/release_cleanup.md @@ -27,6 +27,7 @@ TBA - [ ] Update version number and date in `CHANGELOG` - [ ] Update version number and date in `Major Changes` doc - [ ] Ensure docs can be built without errors +- [ ] Ensure `generateschema` runs without errors or warnings (until in CI) ## Notes diff --git a/CHANGELOG.rst b/CHANGELOG.rst index cffece7d..60d044c1 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -61,6 +61,7 @@ Changed - Update download URL in ``get_chromedriver_url.py`` (#1385) - Add ``AUTH_LDAP_USER_SEARCH_BASE`` as a Django setting (#1410) - Change ``ATOMIC_REQUESTS`` recommendation and default to ``True`` (#1281) + - Add OpenAPI dependencies (#1444) - **Filesfolders** - Add migration required by Django v4.2 (#1396) - Add app specific media type and versioning (#1278) @@ -97,6 +98,8 @@ Fixed - **General** - ``README.rst`` badge rendering (#1402) +- **Filesfolders** + - OpenAPI ``generateschema`` errors and warnings (#1442) - **Projectroles** - ``SODARUser.update_full_name()`` not working with existing name (#1371) - Legacy public guest access in child category breaks category updating (#1404) @@ -109,8 +112,11 @@ Fixed - Invalid URLs for remote peer projects in project detail view (#1435) - Redundant ``Project.get_source_site()`` calls in project detail view (#1436) - ``RemoteSite.get_access_date()`` invalid date sorting (#1437) + - OpenAPI ``generateschema`` compatibility (#1440, #1442) - **Sodarcache** - REST API set view ``app_name`` incorrectly set (#1405) +- **Timeline** + - OpenAPI ``generateschema`` warnings (#1442) Removed ------- diff --git a/filesfolders/views_api.py b/filesfolders/views_api.py index 0b728547..4be42c01 100644 --- a/filesfolders/views_api.py +++ b/filesfolders/views_api.py @@ -6,6 +6,7 @@ GenericAPIView, ) from rest_framework.renderers import JSONRenderer +from rest_framework.schemas.openapi import AutoSchema from rest_framework.versioning import AcceptHeaderVersioning # Projectroles dependency @@ -197,6 +198,7 @@ class FolderListCreateAPIView( pagination_class = SODARPageNumberPagination project_type = PROJECT_TYPE_PROJECT + schema = AutoSchema(operation_id_base='ListCreateFolder') serializer_class = FolderSerializer @@ -226,6 +228,7 @@ class FolderRetrieveUpdateDestroyAPIView( lookup_field = 'sodar_uuid' lookup_url_kwarg = 'folder' project_type = PROJECT_TYPE_PROJECT + schema = AutoSchema(operation_id_base='UpdateDestroyFolder') serializer_class = FolderSerializer @@ -265,6 +268,7 @@ class FileListCreateAPIView( pagination_class = SODARPageNumberPagination project_type = PROJECT_TYPE_PROJECT + schema = AutoSchema(operation_id_base='ListCreateFile') serializer_class = FileSerializer @@ -296,6 +300,7 @@ class FileRetrieveUpdateDestroyAPIView( lookup_field = 'sodar_uuid' lookup_url_kwarg = 'file' project_type = PROJECT_TYPE_PROJECT + schema = AutoSchema(operation_id_base='UpdateDestroyFile') serializer_class = FileSerializer @@ -316,6 +321,7 @@ class FileServeAPIView( lookup_field = 'sodar_uuid' lookup_url_kwarg = 'file' permission_required = 'filesfolders.view_data' + schema = None class HyperLinkListCreateAPIView( @@ -352,6 +358,7 @@ class HyperLinkListCreateAPIView( pagination_class = SODARPageNumberPagination project_type = PROJECT_TYPE_PROJECT + schema = AutoSchema(operation_id_base='ListCreateHyperLink') serializer_class = HyperLinkSerializer @@ -382,4 +389,5 @@ class HyperLinkRetrieveUpdateDestroyAPIView( lookup_field = 'sodar_uuid' lookup_url_kwarg = 'hyperlink' project_type = PROJECT_TYPE_PROJECT + schema = AutoSchema(operation_id_base='UpdateDestroyHyperLink') serializer_class = HyperLinkSerializer diff --git a/projectroles/views_ajax.py b/projectroles/views_ajax.py index 019194fa..4a6adfa9 100644 --- a/projectroles/views_ajax.py +++ b/projectroles/views_ajax.py @@ -64,6 +64,7 @@ class instead of SODARBaseAjaxView is needed. allow_anonymous = False authentication_classes = [SessionAuthentication] renderer_classes = [JSONRenderer] + schema = None @property def permission_classes(self): diff --git a/projectroles/views_api.py b/projectroles/views_api.py index b47417c2..df4dc63c 100644 --- a/projectroles/views_api.py +++ b/projectroles/views_api.py @@ -31,6 +31,7 @@ ) from rest_framework.renderers import JSONRenderer from rest_framework.response import Response +from rest_framework.schemas.openapi import AutoSchema from rest_framework.versioning import AcceptHeaderVersioning from rest_framework.views import APIView @@ -1066,6 +1067,7 @@ class ProjectSettingRetrieveAPIView( # NOTE: Update project settings perm is checked manually permission_required = 'projectroles.view_project' + schema = AutoSchema(operation_id_base='AppSettingProject') serializer_class = AppSettingSerializer def get_object(self): @@ -1237,6 +1239,7 @@ class UserSettingRetrieveAPIView( # NOTE: Update project settings perm is checked manually permission_required = 'projectroles.view_project' + schema = AutoSchema(operation_id_base='AppSettingUser') serializer_class = AppSettingSerializer def get_object(self): diff --git a/requirements/local.txt b/requirements/local.txt index 9af523c3..d4ddb463 100644 --- a/requirements/local.txt +++ b/requirements/local.txt @@ -8,3 +8,7 @@ django-debug-toolbar>=4.3.0, <4.4 # improved REPL ipdb>=0.13.13, <0.14 + +# OpenAPI support +uritemplate>=4.1.1, <4.2 +pyyaml>=6.0.1, <6.1 diff --git a/timeline/views_api.py b/timeline/views_api.py index 3dc38ac7..7b3a3ebe 100644 --- a/timeline/views_api.py +++ b/timeline/views_api.py @@ -4,6 +4,7 @@ from rest_framework.generics import ListAPIView, RetrieveAPIView from rest_framework.permissions import IsAuthenticated from rest_framework.renderers import JSONRenderer +from rest_framework.schemas.openapi import AutoSchema from rest_framework.versioning import AcceptHeaderVersioning # Projectroles dependency @@ -63,6 +64,7 @@ class ProjectTimelineEventListAPIView( pagination_class = SODARPageNumberPagination permission_required = 'timeline.view_timeline' + schema = AutoSchema(operation_id_base='ListTimelineEvent') serializer_class = TimelineEventSerializer def get_queryset(self):