mirror of
git://git.yoctoproject.org/layerindex-web.git
synced 2025-07-19 12:49:01 +02:00

These are a little less useful than the other items but if we want to be able to create a clone of a layer index then we need them. Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
225 lines
7.9 KiB
Python
225 lines
7.9 KiB
Python
from layerindex.models import Branch, LayerItem, LayerMaintainer, YPCompatibleVersion, LayerNote, LayerBranch, LayerDependency, Recipe, Machine, Distro, BBClass, Source, Patch, PackageConfig, StaticBuildDep, DynamicBuildDep, RecipeFileDependency, BBAppend, IncFile
|
|
from rest_framework import viewsets, serializers
|
|
from layerindex.querysethelper import params_to_queryset, get_search_tuple
|
|
|
|
class DynamicFieldsModelSerializer(serializers.ModelSerializer):
|
|
"""
|
|
A ModelSerializer that takes an additional "fields" argument that
|
|
controls which fields should be displayed. Borrowed from the Django
|
|
REST Framework documentation.
|
|
"""
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
# Don't pass the 'fields' arg up to the superclass
|
|
fields = kwargs.pop('fields', None)
|
|
|
|
# Instantiate the superclass normally
|
|
super(DynamicFieldsModelSerializer, self).__init__(*args, **kwargs)
|
|
|
|
if fields is not None:
|
|
# Drop any fields that are not specified in the `fields` argument.
|
|
allowed = set(fields)
|
|
existing = set(self.fields)
|
|
for field_name in existing - allowed:
|
|
self.fields.pop(field_name)
|
|
|
|
class ParametricSearchableModelViewSet(viewsets.ReadOnlyModelViewSet):
|
|
def get_queryset(self):
|
|
model = self.__class__.serializer_class.Meta.model
|
|
qs = self.queryset
|
|
(filter_string, search_term, ordering_string) = get_search_tuple(self.request, model)
|
|
return params_to_queryset(model, qs, filter_string, search_term, ordering_string)
|
|
|
|
class BranchSerializer(DynamicFieldsModelSerializer):
|
|
class Meta:
|
|
model = Branch
|
|
fields = '__all__'
|
|
|
|
class BranchViewSet(ParametricSearchableModelViewSet):
|
|
queryset = Branch.objects.all()
|
|
serializer_class = BranchSerializer
|
|
|
|
class LayerItemSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = LayerItem
|
|
fields = '__all__'
|
|
|
|
class LayerItemViewSet(ParametricSearchableModelViewSet):
|
|
queryset = LayerItem.objects.filter(status__in=['P', 'X'])
|
|
serializer_class = LayerItemSerializer
|
|
|
|
class LayerBranchSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = LayerBranch
|
|
fields = '__all__'
|
|
|
|
class LayerBranchViewSet(ParametricSearchableModelViewSet):
|
|
queryset = LayerBranch.objects.filter(layer__status__in=['P', 'X'])
|
|
serializer_class = LayerBranchSerializer
|
|
|
|
class LayerDependencySerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = LayerDependency
|
|
fields = '__all__'
|
|
|
|
class LayerDependencyViewSet(ParametricSearchableModelViewSet):
|
|
queryset = LayerDependency.objects.filter(layerbranch__layer__status__in=['P', 'X'])
|
|
serializer_class = LayerDependencySerializer
|
|
|
|
class LayerMaintainerSerializer(DynamicFieldsModelSerializer):
|
|
class Meta:
|
|
model = LayerMaintainer
|
|
fields = '__all__'
|
|
|
|
class LayerMaintainerViewSet(ParametricSearchableModelViewSet):
|
|
queryset = LayerMaintainer.objects.filter(layerbranch__layer__status__in=['P', 'X'])
|
|
serializer_class = LayerMaintainerSerializer
|
|
|
|
class LayerNoteSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = LayerNote
|
|
fields = '__all__'
|
|
|
|
class LayerNoteViewSet(ParametricSearchableModelViewSet):
|
|
queryset = LayerNote.objects.filter(layer__status__in=['P', 'X'])
|
|
serializer_class = LayerNoteSerializer
|
|
|
|
class SourceSerializer(DynamicFieldsModelSerializer):
|
|
class Meta:
|
|
model = Source
|
|
fields = '__all__'
|
|
|
|
class PatchSerializer(DynamicFieldsModelSerializer):
|
|
class Meta:
|
|
model = Patch
|
|
fields = '__all__'
|
|
|
|
class PackageConfigSerializer(DynamicFieldsModelSerializer):
|
|
class Meta:
|
|
model = PackageConfig
|
|
fields = '__all__'
|
|
|
|
builddeps = serializers.SerializerMethodField()
|
|
|
|
def get_builddeps(self, package_config):
|
|
return package_config.dynamicbuilddep_set.values_list('name', flat=True)
|
|
|
|
class RecipeFileDependencySerializer(DynamicFieldsModelSerializer):
|
|
class Meta:
|
|
model = RecipeFileDependency
|
|
fields = '__all__'
|
|
|
|
class RecipeSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Recipe
|
|
fields = '__all__'
|
|
|
|
sources = serializers.SerializerMethodField()
|
|
patches = serializers.SerializerMethodField()
|
|
package_configs = serializers.SerializerMethodField()
|
|
staticbuilddeps = serializers.SerializerMethodField()
|
|
filedeps = serializers.SerializerMethodField()
|
|
|
|
def get_sources(self, recipe):
|
|
qs = recipe.source_set.all()
|
|
serializer = SourceSerializer(instance=qs, many=True, read_only=True, fields=('url', 'sha256sum'))
|
|
return serializer.data
|
|
|
|
def get_patches(self, recipe):
|
|
qs = recipe.patch_set.all()
|
|
serializer = PatchSerializer(instance=qs, many=True, read_only=True, fields=('path', 'src_path', 'status', 'status_extra', 'apply_order', 'applied', 'striplevel'))
|
|
return serializer.data
|
|
|
|
def get_package_configs(self, recipe):
|
|
qs = recipe.packageconfig_set.all()
|
|
serializer = PackageConfigSerializer(instance=qs, many=True, read_only=True, fields=('feature', 'with_option', 'without_option', 'builddeps'))
|
|
return serializer.data
|
|
|
|
def get_staticbuilddeps(self, recipe):
|
|
return recipe.staticbuilddep_set.values_list('name', flat=True)
|
|
|
|
def get_filedeps(self, recipe):
|
|
qs = recipe.recipefiledependency_set.all()
|
|
serializer = RecipeFileDependencySerializer(instance=qs, many=True, read_only=True, fields=('layerbranch', 'path'))
|
|
return serializer.data
|
|
|
|
class RecipeViewSet(ParametricSearchableModelViewSet):
|
|
queryset = Recipe.objects.all()
|
|
serializer_class = RecipeSerializer
|
|
|
|
class MachineSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Machine
|
|
fields = '__all__'
|
|
|
|
class MachineViewSet(ParametricSearchableModelViewSet):
|
|
queryset = Machine.objects.all()
|
|
serializer_class = MachineSerializer
|
|
|
|
class DistroSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Distro
|
|
fields = '__all__'
|
|
|
|
class DistroViewSet(ParametricSearchableModelViewSet):
|
|
queryset = Distro.objects.all()
|
|
serializer_class = DistroSerializer
|
|
|
|
class ClassSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = BBClass
|
|
fields = '__all__'
|
|
|
|
class ClassViewSet(ParametricSearchableModelViewSet):
|
|
queryset = BBClass.objects.all()
|
|
serializer_class = ClassSerializer
|
|
|
|
class YPCompatibleVersionSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = YPCompatibleVersion
|
|
fields = '__all__'
|
|
|
|
class LayerSerializer(serializers.ModelSerializer):
|
|
"""
|
|
A more fleshed-out LayerBranch serializer for external applications
|
|
"""
|
|
branch = BranchSerializer(read_only=True, fields=('id', 'name'))
|
|
layer = LayerItemSerializer(read_only=True)
|
|
yp_compatible_version = YPCompatibleVersionSerializer(read_only=True)
|
|
maintainers = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = LayerBranch
|
|
fields = '__all__'
|
|
|
|
def get_maintainers(self, layerbranch):
|
|
qs = layerbranch.layermaintainer_set.filter(status='A')
|
|
serializer = LayerMaintainerSerializer(instance=qs, many=True, read_only=True, fields=('name', 'email', 'responsibility'))
|
|
return serializer.data
|
|
|
|
class LayerViewSet(ParametricSearchableModelViewSet):
|
|
"""
|
|
A more fleshed-out LayerBranch viewset for external applications
|
|
"""
|
|
queryset = LayerBranch.objects.filter(layer__status__in=['P', 'X'])
|
|
serializer_class = LayerSerializer
|
|
|
|
class AppendSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = BBAppend
|
|
fields = '__all__'
|
|
|
|
class AppendViewSet(ParametricSearchableModelViewSet):
|
|
queryset = BBAppend.objects.all()
|
|
serializer_class = AppendSerializer
|
|
|
|
class IncFileSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = IncFile
|
|
fields = '__all__'
|
|
|
|
class IncFileViewSet(ParametricSearchableModelViewSet):
|
|
queryset = IncFile.objects.all()
|
|
serializer_class = IncFileSerializer
|
|
|