Skip to content

Commit 4fd60c4

Browse files
authored
feat: Create content in library permission added to API response (#34934)
1 parent 5e3181c commit 4fd60c4

3 files changed

Lines changed: 24 additions & 16 deletions

File tree

openedx/core/djangoapps/content_libraries/serializers.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@
1212
LICENSE_OPTIONS,
1313
)
1414
from openedx.core.djangoapps.content_libraries.models import (
15-
ContentLibraryPermission, ContentLibraryBlockImportTask
15+
ContentLibraryPermission, ContentLibraryBlockImportTask,
16+
ContentLibrary
1617
)
1718
from openedx.core.lib.api.serializers import CourseKeyField
19+
from . import permissions
1820

1921

2022
DATETIME_FORMAT = '%Y-%m-%dT%H:%M:%SZ'
@@ -34,7 +36,7 @@ class ContentLibraryMetadataSerializer(serializers.Serializer):
3436
org = serializers.SlugField(source="key.org")
3537
slug = serializers.CharField(source="key.slug", validators=(validate_unicode_slug, ))
3638
bundle_uuid = serializers.UUIDField(format='hex_verbose', read_only=True)
37-
collection_uuid = serializers.UUIDField(format='hex_verbose', write_only=True)
39+
#collection_uuid = serializers.UUIDField(format='hex_verbose', write_only=True)
3840
title = serializers.CharField()
3941
description = serializers.CharField(allow_blank=True)
4042
num_blocks = serializers.IntegerField(read_only=True)
@@ -46,6 +48,24 @@ class ContentLibraryMetadataSerializer(serializers.Serializer):
4648
has_unpublished_changes = serializers.BooleanField(read_only=True)
4749
has_unpublished_deletes = serializers.BooleanField(read_only=True)
4850
license = serializers.ChoiceField(choices=LICENSE_OPTIONS, default=ALL_RIGHTS_RESERVED)
51+
can_edit_library = serializers.SerializerMethodField()
52+
53+
def get_can_edit_library(self, obj):
54+
"""
55+
Verifies if the user in request has permission
56+
to edit a library.
57+
"""
58+
request = self.context.get('request', None)
59+
if request is None:
60+
return False
61+
62+
user = request.user
63+
64+
if not user:
65+
return False
66+
67+
library_obj = ContentLibrary.objects.get_by_key(obj.key)
68+
return user.has_perm(permissions.CAN_EDIT_THIS_CONTENT_LIBRARY, obj=library_obj)
4969

5070

5171
class ContentLibraryUpdateSerializer(serializers.Serializer):

openedx/core/djangoapps/content_libraries/tests/base.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
"""
22
Tests for Learning-Core-based Content Libraries
33
"""
4-
import uuid
54
from contextlib import contextmanager
65
from io import BytesIO
76
from urllib.parse import urlencode
@@ -128,10 +127,6 @@ def _create_library(
128127
"description": description,
129128
"type": library_type,
130129
"license": license_type,
131-
# We're not actually using this value any more, but we're keeping it
132-
# in the API testing for backwards compatibility for just a little
133-
# longer. TODO: Remove this once the frontend stops sending it.
134-
"collection_uuid": uuid.uuid4(),
135130
}, expect_response)
136131

137132
def _list_libraries(self, query_params_dict=None, expect_response=200):

openedx/core/djangoapps/content_libraries/views.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -250,14 +250,6 @@ def post(self, request):
250250
)
251251
org = Organization.objects.get(short_name=org_name)
252252

253-
# Backwards compatibility: ignore the no-longer used "collection_uuid"
254-
# parameter. This was necessary with Blockstore, but not used for
255-
# Learning Core. TODO: This can be removed once the frontend stops
256-
# sending it to us. This whole bit of deserialization is kind of weird
257-
# though, with the renames and such. Look into this later for clennup.
258-
# Ref: https://github.com/openedx/edx-platform/issues/34283
259-
data.pop("collection_uuid", None)
260-
261253
try:
262254
with atomic():
263255
result = api.create_library(org=org, **data)
@@ -283,7 +275,8 @@ def get(self, request, lib_key_str):
283275
key = LibraryLocatorV2.from_string(lib_key_str)
284276
api.require_permission_for_library_key(key, request.user, permissions.CAN_VIEW_THIS_CONTENT_LIBRARY)
285277
result = api.get_library(key)
286-
return Response(ContentLibraryMetadataSerializer(result).data)
278+
serializer = ContentLibraryMetadataSerializer(result, context={'request': self.request})
279+
return Response(serializer.data)
287280

288281
@convert_exceptions
289282
def patch(self, request, lib_key_str):

0 commit comments

Comments
 (0)