-
Notifications
You must be signed in to change notification settings - Fork 53
/
viewsets.py
73 lines (60 loc) · 2.33 KB
/
viewsets.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
from gettext import gettext as _
from django_filters.rest_framework import filterset
from rest_framework.decorators import detail_route
from rest_framework.exceptions import ValidationError
from pulpcore.plugin.models import Repository
from pulpcore.plugin.viewsets import (
ContentViewSet,
ImporterViewSet,
OperationPostponedResponse,
PublisherViewSet)
from . import tasks
from .models import AnsibleRole, AnsibleImporter, AnsiblePublisher
from .serializers import AnsibleRoleSerializer, AnsibleImporterSerializer, AnsiblePublisherSerializer
class AnsibleRoleFilter(filterset.FilterSet):
class Meta:
model = AnsibleRole
fields = [
'name',
'namespace',
'version'
]
class AnsibleRoleViewSet(ContentViewSet):
endpoint_name = 'ansible'
queryset = AnsibleRole.objects.all()
serializer_class = AnsibleRoleSerializer
filter_class = AnsibleRoleFilter
class AnsibleImporterViewSet(ImporterViewSet):
endpoint_name = 'ansible'
queryset = AnsibleImporter.objects.all()
serializer_class = AnsibleImporterSerializer
@detail_route(methods=('post',))
def sync(self, request, pk):
importer = self.get_object()
repository = self.get_resource(request.data['repository'], Repository)
if not importer.feed_url:
raise ValidationError(detail=_('A feed_url must be specified.'))
result = tasks.synchronize.apply_async_with_reservation(
[repository, importer],
kwargs={
'importer_pk': importer.pk,
'repository_pk': repository.pk
}
)
return OperationPostponedResponse([result], request)
class AnsiblePublisherViewSet(PublisherViewSet):
endpoint_name = 'ansible'
queryset = AnsiblePublisher.objects.all()
serializer_class = AnsiblePublisherSerializer
@detail_route(methods=('post',))
def publish(self, request, pk):
publisher = self.get_object()
repository = self.get_resource(request.data['repository'], Repository)
result = tasks.publish.apply_async_with_reservation(
[repository, publisher],
kwargs={
'publisher_pk': str(publisher.pk),
'repository_pk': repository.pk
}
)
return OperationPostponedResponse([result], request)