Skip to content

Commit

Permalink
POST settings on model creation working
Browse files Browse the repository at this point in the history
  • Loading branch information
sambles committed Jun 25, 2024
1 parent 43057aa commit 6e6097d
Showing 1 changed file with 28 additions and 8 deletions.
36 changes: 28 additions & 8 deletions src/server/oasisapi/analysis_models/v2_api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,27 @@
from ...permissions.group_auth import validate_and_update_groups, validate_data_files
from ...schemas.serializers import ModelParametersSerializer, AnalysisSettingsSerializer

from django.core.files import File
from tempfile import TemporaryFile
from ...files.models import RelatedFile


def create_settings_file(data, user, serializer):
json_serializer = serializer()
with TemporaryFile() as tmp_file:
tmp_file.write(data.encode('utf-8'))
tmp_file.seek(0)

return RelatedFile.objects.create(
file=File(tmp_file, name=json_serializer.filename),
filename=json_serializer.filename,
content_type='application/json',
creator=user,
)


class AnalysisModelListSerializer(serializers.Serializer):
""" Read Only Model Deserializer for efficiently returning a list of all
""" Read Only Model Deserializer for efficiently returning a list of all
entries in DB
"""
id = serializers.IntegerField(read_only=True)
Expand Down Expand Up @@ -88,21 +105,24 @@ def validate(self, attrs):
return attrs

def to_internal_value(self, data):
import ipdb; ipdb.set_trace()
settings = data.get('settings', {})
data = super(AnalysisModelSerializer, self).to_internal_value(data)
if self.instance:
# update
for x in self.create_only_fields:
data.pop(x)
data['settings'] = ModelParametersSerializer().validate_json(settings)
return data


def create(self, validated_data):
def create(self, validated_data, settings=None):
data = validated_data.copy()
data_settings = data.pop('settings', {})
if 'request' in self.context:
data['creator'] = self.context.get('request').user
return super(AnalysisModelSerializer, self).create(data)

obj_model = super(AnalysisModelSerializer, self).create(data)
if data_settings:
obj_model.resource_file = create_settings_file(data_settings, data['creator'], ModelParametersSerializer)
obj_model.save()

return obj_model


@swagger_serializer_method(serializer_or_field=ModelParametersSerializer)
Expand Down

0 comments on commit 6e6097d

Please sign in to comment.