Example #1
0
class CollectionSerializer(serializers.ModelSerializer):
    namespace = fields.NamespaceObjectField()
    href = serializers.SerializerMethodField()
    versions_url = serializers.SerializerMethodField()
    latest_version = serializers.SerializerMethodField()

    class Meta:
        model = models.Collection
        fields = (
            'id',
            'href',
            'name',
            'namespace',
            'versions_url',
            'latest_version',
            'deprecated',
            'created',
            'modified',
        )

    def get_href(self, obj):
        return reverse(
            'api:v2:collection-detail',
            kwargs={
                'namespace': obj.namespace.name,
                'name': obj.name,
            },
            request=self.context.get('request'),
        )

    def get_versions_url(self, obj):
        return reverse(
            'api:v2:version-list',
            kwargs={
                'namespace': obj.namespace.name,
                'name': obj.name,
            },
            request=self.context.get('request'),
        )

    def get_latest_version(self, obj):
        if not obj.latest_version:
            return None
        version = obj.latest_version.version
        return {
            "version": version,
            "href": reverse(
                'api:v2:version-detail',
                kwargs={
                    'namespace': obj.namespace.name,
                    'name': obj.name,
                    'version': version,
                },
                request=self.context.get('request'),
            )
        }
Example #2
0
class VersionDetailSerializer(serializers.ModelSerializer):
    """Collection version with detailed data."""
    id = serializers.IntegerField(source='pk')
    href = fields.VersionUrlField(source='*')
    download_url = serializers.SerializerMethodField()
    artifact = serializers.SerializerMethodField()
    namespace = fields.NamespaceObjectField(source='collection.namespace')
    collection = serializers.SerializerMethodField()
    metadata = serializers.JSONField(binary=False)

    class Meta:
        model = models.CollectionVersion
        fields = (
            'id',
            'href',
            'download_url',
            'artifact',
            'namespace',
            'collection',
            'version',
            'hidden',
            'metadata',
        )

    def get_download_url(self, obj):
        ca = obj.get_content_artifact()
        return reverse(
            'api:artifact-download',
            kwargs={'filename': ca.relative_path},
            request=self.context.get('request'),
        )

    def get_artifact(self, obj):
        ca = obj.get_content_artifact()
        return BaseArtifactSerializer(ca).data

    def get_collection(self, obj):
        ns_name = obj.collection.namespace.name
        name = obj.collection.name
        result = {
            'id': obj.collection.pk,
            'href': reverse(
                'api:v2:collection-detail',
                kwargs={'namespace': ns_name, 'name': name},
                request=self.context.get('request'),
            ),
            'name': name,
        }
        return result
Example #3
0
class CollectionImportSerializer(BaseTaskSerializer):
    messages = _MessageSerializer(many=True)
    lint_records = serializers.JSONField()

    namespace = fields.NamespaceObjectField()
    imported_version = serializers.SerializerMethodField()

    class Meta:
        model = models.CollectionImport
        fields = BaseTaskSerializer.Meta.fields + (
            'namespace', 'name', 'version',
            'messages', 'lint_records', 'imported_version',
        )

    # TODO(cutwater): Replace with custom field
    def get_imported_version(self, obj):
        if obj.imported_version is None:
            return None
        return {
            'id': obj.imported_version.pk,
            'href': reverse('api:v2:version-detail',
                            args=[obj.imported_version.pk],
                            request=self.context.get('request')),
        }