/
api.py
115 lines (89 loc) · 3.09 KB
/
api.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# -*- coding: utf-8 -*-
from ralph.accounts.api_simple import SimpleRalphUserSerializer
from ralph.api import RalphAPISerializer, RalphAPIViewSet, router
from ralph.api.serializers import ReversionHistoryAPISerializerMixin
from ralph.assets.api.serializers import BaseObjectSimpleSerializer
from ralph.licences.models import (
BaseObjectLicence,
Licence,
LicenceType,
LicenceUser,
Software
)
# ===========
# SERIALIZERS
# ===========
class LicenceTypeSerializer(RalphAPISerializer):
class Meta:
model = LicenceType
class LicenceUserSerializer(RalphAPISerializer):
user = SimpleRalphUserSerializer()
class Meta:
model = LicenceUser
class BaseObjectLicenceSerializer(
ReversionHistoryAPISerializerMixin,
RalphAPISerializer
):
class Meta:
model = BaseObjectLicence
def validate(self, data):
base_object_licence = BaseObjectLicence(**data)
base_object_licence.clean()
return data
class LicenceSerializer(BaseObjectSimpleSerializer):
base_objects = BaseObjectLicenceSerializer(
many=True, read_only=True, source='baseobjectlicence_set'
)
users = LicenceUserSerializer(
many=True, read_only=True, source='licenceuser_set'
)
class Meta:
model = Licence
depth = 1
exclude = ('content_type', 'service_env', 'configuration_path')
class SoftwareSerializer(RalphAPISerializer):
class Meta:
model = Software
# ========
# VIEWSETS
# ========
class BaseObjectLicenceViewSet(RalphAPIViewSet):
queryset = BaseObjectLicence.objects.all()
serializer_class = BaseObjectLicenceSerializer
select_related = [
'licence', 'licence__region', 'licence__manufacturer',
'licence__licence_type', 'licence__software', 'base_object',
'licence__budget_info', 'licence__office_infrastructure',
'licence__property_of',
]
save_serializer_class = BaseObjectLicenceSerializer
class LicenceTypeViewSet(RalphAPIViewSet):
queryset = LicenceType.objects.all()
serializer_class = LicenceTypeSerializer
class LicenceViewSet(RalphAPIViewSet):
queryset = Licence.objects.all()
serializer_class = LicenceSerializer
select_related = [
'region', 'manufacturer', 'office_infrastructure', 'licence_type',
'software'
]
prefetch_related = [
'tags', 'users', 'licenceuser_set__user',
'baseobjectlicence_set__base_object',
]
class LicenceUserViewSet(RalphAPIViewSet):
queryset = LicenceUser.objects.all()
serializer_class = LicenceUserSerializer
select_related = [
'licence', 'licence__region', 'licence__manufacturer',
'licence__licence_type', 'licence__software', 'user'
]
class SoftwareViewSet(RalphAPIViewSet):
queryset = Software.objects.all()
serializer_class = SoftwareSerializer
router.register(r'base-objects-licences', BaseObjectLicenceViewSet)
router.register(r'licences', LicenceViewSet)
router.register(r'licence-types', LicenceTypeViewSet)
router.register(r'licence-users', LicenceUserViewSet)
router.register(r'software', SoftwareViewSet)
urlpatterns = []