Skip to content

Commit

Permalink
Only read settings JSON on create / partial update
Browse files Browse the repository at this point in the history
  • Loading branch information
sambles committed Jun 21, 2024
1 parent d6eebf8 commit 43057aa
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/server/oasisapi/analyses/v2_api/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -263,9 +263,9 @@ def get_queryset(self):
return super().get_queryset().select_related(*self.file_action_types).prefetch_related('complex_model_data_files')

def get_serializer_class(self):
if self.action in ['create', 'options', 'update', 'partial_update', 'retrieve']:
if self.action in ['create', 'options', 'update', 'partial_update']:
return super().get_serializer_class()
elif self.action in ['list']:
elif self.action in ['list', 'retrieve']:
return AnalysisListSerializer
elif self.action == 'copy':
return AnalysisCopySerializer
Expand Down
37 changes: 37 additions & 0 deletions src/server/oasisapi/analysis_models/v2_api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,43 @@
from ...schemas.serializers import ModelParametersSerializer, AnalysisSettingsSerializer



class AnalysisModelListSerializer(serializers.Serializer):
""" Read Only Model Deserializer for efficiently returning a list of all
entries in DB
"""
id = serializers.IntegerField(read_only=True)
name = serializers.CharField(read_only=True)
created = serializers.DateTimeField(read_only=True)
modified = serializers.DateTimeField(read_only=True)
settings = serializers.SerializerMethodField()
versions = serializers.SerializerMethodField()
scaling_configuration = serializers.SerializerMethodField()
chunking_configuration = serializers.SerializerMethodField()
groups = serializers.SlugRelatedField(many=True, read_only=False, slug_field='name', required=False, queryset=Group.objects.all())
settings = serializers.SerializerMethodField()

@swagger_serializer_method(serializer_or_field=serializers.URLField)
def get_settings(self, instance):
request = self.context.get('request')
return instance.get_absolute_settings_url(request=request, namespace=self.namespace)

@swagger_serializer_method(serializer_or_field=serializers.URLField)
def get_versions(self, instance):
request = self.context.get('request')
return instance.get_absolute_versions_url(request=request, namespace=self.namespace)

@swagger_serializer_method(serializer_or_field=serializers.URLField)
def get_scaling_configuration(self, instance):
request = self.context.get('request')
return instance.get_absolute_scaling_configuration_url(request=request, namespace=self.namespace)

@swagger_serializer_method(serializer_or_field=serializers.URLField)
def get_chunking_configuration(self, instance):
request = self.context.get('request')
return instance.get_absolute_chunking_configuration_url(request=request, namespace=self.namespace)


class AnalysisModelSerializer(serializers.ModelSerializer):
settings = serializers.SerializerMethodField()
versions = serializers.SerializerMethodField()
Expand Down
3 changes: 3 additions & 0 deletions src/server/oasisapi/analysis_models/v2_api/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from ..models import AnalysisModel, SettingsTemplate
from .serializers import (
AnalysisModelSerializer,
AnalysisModelListSerializer,
ModelVersionsSerializer,
CreateTemplateSerializer,
TemplateSerializer,
Expand Down Expand Up @@ -194,6 +195,8 @@ class AnalysisModelViewSet(VerifyGroupAccessModelViewSet):
def get_serializer_class(self):
if self.action in ['resource_file', 'set_resource_file']:
return RelatedFileSerializer
elif self.action in ['list', 'retrieve']:
return AnalysisModelListSerializer
elif self.action in ['data_files']:
return DataFileSerializer
elif self.action in ['versions']:
Expand Down

0 comments on commit 43057aa

Please sign in to comment.