Skip to content

Commit

Permalink
Feature for model storage_link endpoint
Browse files Browse the repository at this point in the history
Draft storage link endpoint for models

Add v1 model storage links

pep
  • Loading branch information
sambles committed Sep 18, 2024
1 parent 9d2cc4a commit 64c05aa
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 2 deletions.
15 changes: 15 additions & 0 deletions src/server/oasisapi/analysis_models/v1_api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

from ..models import AnalysisModel, SettingsTemplate
from ...analyses.models import Analysis
from ...files.models import file_storage_link


class AnalysisModelSerializer(serializers.ModelSerializer):
Expand Down Expand Up @@ -45,6 +46,20 @@ def get_versions(self, instance):
return instance.get_absolute_versions_url(request=request, namespace=self.ns)


class AnalysisModelStorageSerializer(serializers.ModelSerializer):
settings_file = serializers.SerializerMethodField()

class Meta:
model = AnalysisModel
fields = (
'settings_file',
)

@swagger_serializer_method(serializer_or_field=serializers.CharField)
def get_settings_file(self, instance):
return file_storage_link(instance.resource_file, True)


class TemplateSerializer(serializers.ModelSerializer):
""" Catch-all Analysis settings Template Serializer,
intended to be called from a nested ViewSet
Expand Down
19 changes: 18 additions & 1 deletion src/server/oasisapi/analysis_models/v1_api/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,13 @@
from rest_framework.settings import api_settings

from ..models import AnalysisModel, SettingsTemplate
from .serializers import AnalysisModelSerializer, ModelVersionsSerializer, CreateTemplateSerializer, TemplateSerializer
from .serializers import (
AnalysisModelSerializer,
AnalysisModelStorageSerializer,
ModelVersionsSerializer,
CreateTemplateSerializer,
TemplateSerializer,
)

from ...data_files.v1_api.serializers import DataFileSerializer
from ...filters import TimeStampedFilter
Expand Down Expand Up @@ -192,6 +198,8 @@ def get_serializer_class(self):
return DataFileSerializer
elif self.action in ['versions']:
return ModelVersionsSerializer
elif self.action == 'storage_links':
return AnalysisModelStorageSerializer
else:
return super(AnalysisModelViewSet, self).get_serializer_class()

Expand Down Expand Up @@ -234,6 +242,15 @@ def data_files(self, request, pk=None, version=None):
df_serializer = DataFileSerializer(df, many=True, context=context)
return Response(df_serializer.data)

@action(methods=['get'], detail=True)
def storage_links(self, request, pk=None, version=None):
"""
get:
Gets the analyses storage backed link references, `object keys` or `file paths`
"""
serializer = self.get_serializer(self.get_object())
return Response(serializer.data)


class ModelSettingsView(viewsets.ModelViewSet):
queryset = AnalysisModel.objects.all()
Expand Down
16 changes: 15 additions & 1 deletion src/server/oasisapi/analysis_models/v2_api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from ...schemas.serializers import ModelParametersSerializer
from django.core.files import File
from tempfile import TemporaryFile
from ...files.models import RelatedFile
from ...files.models import RelatedFile, file_storage_link


def create_settings_file(data, user):
Expand All @@ -30,6 +30,20 @@ def create_settings_file(data, user):
)


class AnalysisModelStorageSerializer(serializers.ModelSerializer):
settings_file = serializers.SerializerMethodField()

class Meta:
model = AnalysisModel
fields = (
'settings_file',
)

@swagger_serializer_method(serializer_or_field=serializers.CharField)
def get_settings_file(self, instance):
return file_storage_link(instance.resource_file, True)


class AnalysisModelListSerializer(serializers.Serializer):
""" Read Only Model Deserializer for efficiently returning a list of all
entries in DB
Expand Down
12 changes: 12 additions & 0 deletions src/server/oasisapi/analysis_models/v2_api/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from .serializers import (
AnalysisModelSerializer,
AnalysisModelListSerializer,
AnalysisModelStorageSerializer,
ModelVersionsSerializer,
CreateTemplateSerializer,
TemplateSerializer,
Expand Down Expand Up @@ -209,6 +210,8 @@ def get_serializer_class(self):
return ModelScalingConfigSerializer
elif self.action in ['chunking_configuration']:
return ModelChunkingConfigSerializer
elif self.action == 'storage_links':
return AnalysisModelStorageSerializer
else:
return super(AnalysisModelViewSet, self).get_serializer_class()

Expand Down Expand Up @@ -433,6 +436,15 @@ def data_files(self, request, pk=None, version=None):
df_serializer = DataFileSerializer(df, many=True, context=context)
return Response(df_serializer.data)

@action(methods=['get'], detail=True)
def storage_links(self, request, pk=None, version=None):
"""
get:
Gets the analyses storage backed link references, `object keys` or `file paths`
"""
serializer = self.get_serializer(self.get_object())
return Response(serializer.data)


class ModelSettingsView(viewsets.ModelViewSet):
queryset = AnalysisModel.objects.all()
Expand Down

0 comments on commit 64c05aa

Please sign in to comment.