From ef4b5bc2d3404232b3f6d21d4d856c9b3cc74590 Mon Sep 17 00:00:00 2001 From: Manuel Kaufmann Date: Tue, 2 Jan 2024 10:40:05 +0100 Subject: [PATCH] APIv3: return `permissions` expandable field on projects Add `?expand=permissions` to project list/detail API endpoints. Related https://github.com/readthedocs/ext-theme/issues/128 --- readthedocs/api/v3/serializers.py | 15 +++++++++++++++ readthedocs/api/v3/views.py | 1 + 2 files changed, 16 insertions(+) diff --git a/readthedocs/api/v3/serializers.py b/readthedocs/api/v3/serializers.py index cab929f874a..bd333c98dc3 100644 --- a/readthedocs/api/v3/serializers.py +++ b/readthedocs/api/v3/serializers.py @@ -12,6 +12,7 @@ from taggit.serializers import TaggitSerializer, TagListSerializerField from readthedocs.builds.models import Build, Version +from readthedocs.core.permissions import AdminPermission from readthedocs.core.resolver import Resolver from readthedocs.core.utils import slugify from readthedocs.core.utils.extend import SettingsOverrideObject @@ -591,6 +592,14 @@ class ProjectUpdateSerializer(SettingsOverrideObject): _default_class = ProjectUpdateSerializerBase +class ProjectPermissionSerializer(serializers.Serializer): + admin = serializers.SerializerMethodField() + + def get_admin(self, obj): + user = self.context.get("request").user + return AdminPermission.is_admin(user, obj) + + class ProjectSerializer(FlexFieldsModelSerializer): """ @@ -674,6 +683,12 @@ class Meta: "read_only": True, }, ), + "permissions": ( + ProjectPermissionSerializer, + { + "source": "*", + }, + ), } def __init__(self, *args, **kwargs): diff --git a/readthedocs/api/v3/views.py b/readthedocs/api/v3/views.py index 4df4d7a2b35..08a88101cbc 100644 --- a/readthedocs/api/v3/views.py +++ b/readthedocs/api/v3/views.py @@ -126,6 +126,7 @@ class ProjectsViewSetBase( "active_versions.last_build", "active_versions.last_build.config", "organization", + "permissions", "teams", ]