Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added model storage_links endpoint #1113

Merged
merged 2 commits into from
Sep 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 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,22 @@ def get_versions(self, instance):
return instance.get_absolute_versions_url(request=request, namespace=self.ns)


class AnalysisModelStorageSerializer(serializers.ModelSerializer):
settings_file = serializers.SerializerMethodField()
ns = 'v1-models'

class Meta:
ref_name = __qualname__.split('.')[0] + 'V1'
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
Loading