def post(self, request, lib_key_str): """ Add a new XBlock to this content library """ library_key = LibraryLocatorV2.from_string(lib_key_str) api.require_permission_for_library_key( library_key, request.user, permissions.CAN_EDIT_THIS_CONTENT_LIBRARY) serializer = LibraryXBlockCreationSerializer(data=request.data) serializer.is_valid(raise_exception=True) parent_block_usage_str = serializer.validated_data.pop( "parent_block", None) if parent_block_usage_str: # Add this as a child of an existing block: parent_block_usage = LibraryUsageLocatorV2.from_string( parent_block_usage_str) if parent_block_usage.context_key != library_key: raise ValidationError( detail={ "parent_block": "Usage ID doesn't match library ID in the URL." }) result = api.create_library_block_child( parent_block_usage, **serializer.validated_data) else: # Create a new regular top-level block: try: result = api.create_library_block(library_key, **serializer.validated_data) except api.IncompatibleTypesError as err: raise ValidationError(detail={'block_type': str(err)}, ) return Response(LibraryXBlockMetadataSerializer(result).data)
def get(self, request, usage_key_str): """ Get metadata about an existing XBlock in the content library """ key = LibraryUsageLocatorV2.from_string(usage_key_str) api.require_permission_for_library_key(key.lib_key, request.user, permissions.CAN_VIEW_THIS_CONTENT_LIBRARY) result = api.get_library_block(key) return Response(LibraryXBlockMetadataSerializer(result).data)
def get(self, request, lib_key_str): """ Get the list of all top-level blocks in this content library """ key = LibraryLocatorV2.from_string(lib_key_str) api.require_permission_for_library_key(key, request.user, permissions.CAN_VIEW_THIS_CONTENT_LIBRARY) result = api.get_library_blocks(key) return Response(LibraryXBlockMetadataSerializer(result, many=True).data)
def get(self, request, lib_key_str): """ Get the list of all top-level blocks in this content library """ key = LibraryLocatorV2.from_string(lib_key_str) text_search = request.query_params.get('text_search', None) api.require_permission_for_library_key(key, request.user, permissions.CAN_VIEW_THIS_CONTENT_LIBRARY) result = api.get_library_blocks(key, text_search=text_search) # Verify `pagination` param to maintain compatibility with older # non pagination-aware clients if request.GET.get('pagination', 'false').lower() == 'true': paginator = LibraryApiPagination() result = paginator.paginate_queryset(result, request) serializer = LibraryXBlockMetadataSerializer(result, many=True) return paginator.get_paginated_response(serializer.data) return Response(LibraryXBlockMetadataSerializer(result, many=True).data)