Ejemplo n.º 1
0
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',
        )
Ejemplo n.º 2
0
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',
        )
Ejemplo n.º 3
0
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',
        )