Skip to content
Snippets Groups Projects
Commit feb50ae4 authored by Samuel GAIST's avatar Samuel GAIST
Browse files

[databases][serializers] Refactor version handling ot match other assets

parent d0c64053
No related branches found
No related tags found
1 merge request!327Refactor update creation api
...@@ -25,8 +25,6 @@ ...@@ -25,8 +25,6 @@
# # # #
############################################################################### ###############################################################################
from django.conf import settings
from rest_framework import serializers from rest_framework import serializers
from ..common.serializers import VersionableSerializer from ..common.serializers import VersionableSerializer
...@@ -91,6 +89,7 @@ class DatabaseCreationSerializer(serializers.ModelSerializer): ...@@ -91,6 +89,7 @@ class DatabaseCreationSerializer(serializers.ModelSerializer):
declaration = JSONSerializerField(required=False) declaration = JSONSerializerField(required=False)
description = serializers.CharField(required=False, allow_blank=True) description = serializers.CharField(required=False, allow_blank=True)
previous_version = serializers.CharField(required=False) previous_version = serializers.CharField(required=False)
version = serializers.IntegerField(min_value=1)
class Meta: class Meta:
model = Database model = Database
...@@ -101,55 +100,53 @@ class DatabaseCreationSerializer(serializers.ModelSerializer): ...@@ -101,55 +100,53 @@ class DatabaseCreationSerializer(serializers.ModelSerializer):
"declaration", "declaration",
"code", "code",
"previous_version", "previous_version",
"version",
] ]
beat_core_class = beat.core.database beat_core_class = beat.core.database.Database
def validate(self, data): def validate(self, data):
user = self.context.get("user") user = self.context.get("user")
name = self.Meta.model.sanitize_name(data["name"]) name = self.Meta.model.sanitize_name(data["name"])
data["name"] = name data["name"] = name
version = data["version"]
if "previous_version" in data: if self.Meta.model.objects.filter(name=name, version=version).exists():
previous_version_id = self.Meta.beat_core_class.Storage( raise serializers.ValidationError(
settings.PREFIX, data["previous_version"] "{} {} version {} already exists".format(
self.Meta.model.__name__.lower(), name, version
)
) )
else:
previous_version_id = None
# Retrieve the previous version (if applicable) previous_version = data.get("previous_version")
if previous_version_id is not None:
if previous_version is not None:
try: try:
previous_version = self.Meta.model.objects.get( previous_object = self.Meta.model.objects.get(
name=previous_version_id.name, version=previous_version_id.version name=name, version=previous_version
) )
except Exception: except self.Meta.model.DoesNotExist:
raise serializers.ValidationError( raise serializers.ValidationError(
"Database '%s' not found" % previous_version_id.fullname {
"previous_version",
"Database '{}' version '{}' not found".format(
name, previous_version
),
}
) )
is_accessible = previous_version.accessibility_for(user) is_accessible = previous_object.accessibility_for(user)
if not is_accessible[0]: if not is_accessible[0]:
raise serializers.ValidationError("No access allowed") raise serializers.ValidationError("No access allowed")
data["previous_version"] = previous_version data["previous_version"] = previous_object
# Determine the version number if version - previous_object.version != 1:
last_version = None
if previous_version_id is not None:
if previous_version_id.name == name:
last_version = self.Meta.model.objects.filter(name=name).order_by(
"-version"
)[0]
if last_version is None:
if self.Meta.model.objects.filter(name=name).count() > 0:
raise serializers.ValidationError( raise serializers.ValidationError(
"This {} name already exists".format( "The requested version ({}) for this {} does not match"
self.Meta.model.__name__.lower() "the standard increment with {}".format(
version, self.Meta.model.__name__, previous_object.version
) )
) )
data["previous_version"] = previous_object
data["version"] = last_version.version + 1 if last_version is not None else 1
return data return data
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment