class RelatedCodebaseReleaseSerializer(serializers.ModelSerializer): absolute_url = serializers.URLField( source='get_absolute_url', read_only=True, help_text=_('URL to the detail page of the codebase')) release_contributors = ReleaseContributorSerializer( read_only=True, many=True, source='index_ordered_release_contributors', ) submitter = LinkedUserSerializer(read_only=True, label='Submitter') first_published_at = serializers.DateTimeField( format=DATE_PUBLISHED_FORMAT, read_only=True) last_published_on = serializers.DateTimeField(format=DATE_PUBLISHED_FORMAT, read_only=True) class Meta: model = CodebaseRelease fields = ( 'absolute_url', 'release_contributors', 'submitter', 'first_published_at', 'last_published_on', 'version_number', 'live', 'draft', )
class CodebaseReleaseSerializer(serializers.ModelSerializer): absolute_url = serializers.URLField( source='get_absolute_url', read_only=True, help_text=_('URL to the detail page of the codebase')) citation_text = serializers.ReadOnlyField() codebase = CodebaseSerializer(read_only=True) release_contributors = ReleaseContributorSerializer( read_only=True, source='index_ordered_release_contributors', many=True) date_created = serializers.DateTimeField(format=YMD_DATETIME_FORMAT, read_only=True) first_published_at = serializers.DateTimeField( format=DATE_PUBLISHED_FORMAT, read_only=True) last_published_on = serializers.DateTimeField(format=DATE_PUBLISHED_FORMAT, read_only=True) license = LicenseSerializer() live = serializers.ReadOnlyField() os_display = serializers.ReadOnlyField(source='get_os_display') platforms = TagSerializer(many=True, source='platform_tags') programming_languages = TagSerializer(many=True) submitter = LinkedUserSerializer(read_only=True, label='Submitter') version_number = serializers.ReadOnlyField() release_notes = MarkdownField(max_length=2048) urls = serializers.SerializerMethodField() review_status = serializers.SerializerMethodField() def get_urls(self, instance): request_peer_review_url = instance.get_request_peer_review_url() review = instance.get_review() review_url = review.get_absolute_url() if review else None notify_reviewers_of_changes_url = instance.get_notify_reviewers_of_changes_url( ) if review else None return { 'request_peer_review': request_peer_review_url, 'review': review_url, 'notify_reviewers_of_changes': notify_reviewers_of_changes_url } def get_review_status(self, instance): return instance.review.status if instance.get_review() else None class Meta: model = CodebaseRelease fields = ( 'absolute_url', 'citation_text', 'release_contributors', 'date_created', 'dependencies', 'release_notes', 'documentation', 'doi', 'download_count', 'embargo_end_date', 'first_published_at', 'last_modified', 'last_published_on', 'license', 'live', 'os', 'os_display', 'peer_reviewed', 'platforms', 'programming_languages', 'submitted_package', 'submitter', 'codebase', 'review_status', 'version_number', 'id', 'share_url', 'urls', )
class CodebaseSerializer(serializers.ModelSerializer, FeaturedImageMixin): absolute_url = serializers.URLField(source='get_absolute_url', read_only=True) all_contributors = ContributorSerializer(many=True, read_only=True) date_created = serializers.DateTimeField( read_only=True, default=serializers.CreateOnlyDefault(timezone.now)) download_count = serializers.IntegerField(read_only=True) first_published_at = serializers.DateTimeField( format=DATE_PUBLISHED_FORMAT, read_only=True) last_published_on = serializers.DateTimeField(format=DATE_PUBLISHED_FORMAT, read_only=True) latest_version_number = serializers.ReadOnlyField( source='latest_version.version_number') releases = serializers.SerializerMethodField() submitter = LinkedUserSerializer(read_only=True, default=serializers.CurrentUserDefault()) summarized_description = serializers.CharField(read_only=True) identifier = serializers.ReadOnlyField() tags = TagSerializer(many=True) # FIXME: output should be raw markdown, not rendered description = MarkdownField() def get_releases(self, obj): request = self.context.get('request') user = request.user if request else User.get_anonymous() queryset = CodebaseRelease.objects.filter( codebase_id=obj.pk).accessible(user).order_by('-version_number') # queryset = obj.releases.order_by('-version_number') return RelatedCodebaseReleaseSerializer(queryset, read_only=True, many=True, context=self.context).data def create(self, validated_data): serialized_tags = TagSerializer(many=True, data=validated_data.pop('tags')) codebase = Codebase(**validated_data) codebase.submitter = self.context['request'].user codebase.identifier = codebase.uuid set_tags(codebase, serialized_tags) codebase.save() return codebase def update(self, instance, validated_data): validated_data['draft'] = False return update(super().update, instance, validated_data) class Meta: model = Codebase fields = ( 'absolute_url', 'all_contributors', 'date_created', 'download_count', 'featured_image', 'repository_url', 'first_published_at', 'last_published_on', 'latest_version_number', 'releases', 'submitter', 'summarized_description', 'tags', 'description', 'title', 'doi', 'identifier', 'id', 'references_text', 'associated_publication_text', 'replication_text', 'peer_reviewed', )