Skip to content

Commit

Permalink
Remove RepositoryPublishURLSerializer and use PublicationSerializer
Browse files Browse the repository at this point in the history
  • Loading branch information
David Davis committed Apr 26, 2019
1 parent 20a7a54 commit 769f3df
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 58 deletions.
1 change: 0 additions & 1 deletion pulpcore/app/serializers/__init__.py
Expand Up @@ -38,7 +38,6 @@
ExporterSerializer,
RemoteSerializer,
PublisherSerializer,
RepositoryPublishURLSerializer,
RepositorySerializer,
RepositorySyncURLSerializer,
RepositoryVersionSerializer,
Expand Down
40 changes: 38 additions & 2 deletions pulpcore/app/serializers/publication.py
Expand Up @@ -16,14 +16,16 @@
RelatedField,
MasterModelSerializer,
ModelSerializer,
validate_unknown_fields,
)


class PublicationSerializer(MasterModelSerializer):
_href = DetailIdentityField()
publisher = DetailRelatedField(
help_text=_('The publisher that created this publication.'),
queryset=models.Publisher.objects.all()
queryset=models.Publisher.objects.all(),
required=False,
)
_distributions = serializers.HyperlinkedRelatedField(
help_text=_('This publication is currently being served as'
Expand All @@ -36,8 +38,41 @@ class PublicationSerializer(MasterModelSerializer):
view_name='versions-detail',
lookup_field='number',
parent_lookup_kwargs={'repository_pk': 'repository__pk'},
read_only=True,
queryset=models.RepositoryVersion.objects.all(),
required=False,
)
repository = serializers.HyperlinkedRelatedField(
help_text=_('A URI of the repository to be published.'),
required=False,
label=_('Repository'),
queryset=models.Repository.objects.all(),
view_name='repositories-detail',
)

def validate(self, data):
if hasattr(self, 'initial_data'):
validate_unknown_fields(self.initial_data, self.fields)

repository = data.pop('repository', None)
repository_version = data.get('repository_version')
if not repository and not repository_version:
raise serializers.ValidationError(
_("Either the 'repository' or 'repository_version' need to be specified"))
elif not repository and repository_version:
return data
elif repository and not repository_version:
version = models.RepositoryVersion.latest(repository)
if version:
new_data = {'repository_version': version}
new_data.update(data)
return new_data
else:
raise serializers.ValidationError(
detail=_('Repository has no version available to publish'))
raise serializers.ValidationError(
_("Either the 'repository' or 'repository_version' need to be specified "
"but not both.")
)

class Meta:
abstract = True
Expand All @@ -46,6 +81,7 @@ class Meta:
'publisher',
'_distributions',
'repository_version',
'repository'
)


Expand Down
47 changes: 0 additions & 47 deletions pulpcore/app/serializers/repository.py
Expand Up @@ -14,7 +14,6 @@
MasterModelSerializer,
ModelSerializer,
)
from pulpcore.app.serializers import validate_unknown_fields


class RepositorySerializer(ModelSerializer):
Expand Down Expand Up @@ -168,52 +167,6 @@ class Meta:
)


class RepositoryPublishURLSerializer(serializers.Serializer):

repository = serializers.HyperlinkedRelatedField(
help_text=_('A URI of the repository to be synchronized.'),
required=False,
label=_('Repository'),
queryset=models.Repository.objects.all(),
view_name='repositories-detail',
)

repository_version = NestedRelatedField(
help_text=_('A URI of the repository version to be published.'),
required=False,
label=_('Repository Version'),
queryset=models.RepositoryVersion.objects.all(),
view_name='versions-detail',
lookup_field='number',
parent_lookup_kwargs={'repository_pk': 'repository__pk'},
)

def validate(self, data):
if hasattr(self, 'initial_data'):
validate_unknown_fields(self.initial_data, self.fields)

repository = data.pop('repository', None)
repository_version = data.get('repository_version')
if not repository and not repository_version:
raise serializers.ValidationError(
_("Either the 'repository' or 'repository_version' need to be specified"))
elif not repository and repository_version:
return data
elif repository and not repository_version:
version = models.RepositoryVersion.latest(repository)
if version:
new_data = {'repository_version': version}
new_data.update(data)
return new_data
else:
raise serializers.ValidationError(
detail=_('Repository has no version available to publish'))
raise serializers.ValidationError(
_("Either the 'repository' or 'repository_version' need to be specified "
"but not both.")
)


class ExporterSerializer(MasterModelSerializer):
_href = DetailIdentityField()
name = serializers.CharField(
Expand Down
16 changes: 8 additions & 8 deletions pulpcore/tests/unit/serializers/test_repository.py
Expand Up @@ -4,54 +4,54 @@
from pulpcore.app.models import Distribution
from pulpcore.app.serializers import (
DistributionSerializer,
RepositoryPublishURLSerializer,
PublicationSerializer,
)
from rest_framework import serializers


class TestRepositoryPublishURLSerializer(TestCase):
class TestPublicationSerializer(TestCase):

@mock.patch('pulpcore.app.serializers.repository.models.RepositoryVersion')
def test_validate_repository_only(self, mock_version):
mock_repo = mock.MagicMock()
data = {'repository': mock_repo}
serializer = RepositoryPublishURLSerializer()
serializer = PublicationSerializer()
new_data = serializer.validate(data)
self.assertEqual(new_data, {'repository_version': mock_version.latest.return_value})
mock_version.latest.assert_called_once_with(mock_repo)

def test_validate_repository_version_only(self):
mock_version = mock.MagicMock()
data = {'repository_version': mock_version}
serializer = RepositoryPublishURLSerializer()
serializer = PublicationSerializer()
new_data = serializer.validate(data)
self.assertEqual(new_data, {'repository_version': mock_version})

def test_validate_repository_and_repository_version(self):
mock_version = mock.MagicMock()
mock_repository = mock.MagicMock()
data = {'repository_version': mock_version, 'repository': mock_repository}
serializer = RepositoryPublishURLSerializer()
serializer = PublicationSerializer()
with self.assertRaises(serializers.ValidationError):
serializer.validate(data)

def test_validate_no_repository_no_version(self):
serializer = RepositoryPublishURLSerializer()
serializer = PublicationSerializer()
with self.assertRaises(serializers.ValidationError):
serializer.validate({})

@mock.patch('pulpcore.app.serializers.repository.models.RepositoryVersion')
def test_validate_repository_only_unknown_field(self, mock_version):
mock_repo = mock.MagicMock()
data = {'repository': mock_repo, 'unknown_field': 'unknown'}
serializer = RepositoryPublishURLSerializer(data=data)
serializer = PublicationSerializer(data=data)
with self.assertRaises(serializers.ValidationError):
serializer.validate(data)

def test_validate_repository_version_only_unknown_field(self):
mock_version = mock.MagicMock()
data = {'repository_version': mock_version, 'unknown_field': 'unknown'}
serializer = RepositoryPublishURLSerializer(data=data)
serializer = PublicationSerializer(data=data)
with self.assertRaises(serializers.ValidationError):
serializer.validate(data)

Expand Down

0 comments on commit 769f3df

Please sign in to comment.