Skip to content
Snippets Groups Projects

Refactor update creation api

Merged Samuel GAIST requested to merge refactor_update_creation_api into master
All threads resolved!
1 file
+ 57
33
Compare changes
  • Side-by-side
  • Inline
@@ -27,7 +27,12 @@
from rest_framework import serializers
from ..common.serializers import ContributionSerializer, VersionableSerializer, DynamicFieldsSerializer, ContributionCreationSerializer
from ..common.serializers import (
ContributionSerializer,
VersionableSerializer,
DynamicFieldsSerializer,
ContributionCreationSerializer,
)
from ..algorithms.models import Algorithm
from ..databases.models import Database, DatabaseSet
@@ -36,7 +41,7 @@ from .models import DataFormat
import beat.core.dataformat
#----------------------------------------------------------
# ----------------------------------------------------------
class DataFormatCreationSerializer(ContributionCreationSerializer):
@@ -45,7 +50,7 @@ class DataFormatCreationSerializer(ContributionCreationSerializer):
beat_core_class = beat.core.dataformat
#----------------------------------------------------------
# ----------------------------------------------------------
class BaseSerializer(DynamicFieldsSerializer):
@@ -53,37 +58,37 @@ class BaseSerializer(DynamicFieldsSerializer):
accessibility = serializers.SerializerMethodField()
class Meta(DynamicFieldsSerializer.Meta):
fields = '__all__'
default_fields = ['name', 'short_description', 'accessibility']
fields = "__all__"
default_fields = ["name", "short_description", "accessibility"]
def get_accessibility(self, obj):
return obj.get_sharing_display().lower()
#----------------------------------------------------------
# ----------------------------------------------------------
class ReferencedDataFormatSerializer(BaseSerializer):
class Meta(BaseSerializer.Meta):
model = DataFormat
default_fields = BaseSerializer.Meta.default_fields + ['creation_date']
default_fields = BaseSerializer.Meta.default_fields + ["creation_date"]
#----------------------------------------------------------
# ----------------------------------------------------------
class ReferencingSerializer(BaseSerializer):
is_owner = serializers.SerializerMethodField()
class Meta(BaseSerializer.Meta):
default_fields = BaseSerializer.Meta.default_fields + ['is_owner', 'version',]
default_fields = BaseSerializer.Meta.default_fields + ["is_owner", "version"]
def get_is_owner(self, obj):
if hasattr(obj, 'author'):
return obj.author == self.context.get('user')
if hasattr(obj, "author"):
return obj.author == self.context.get("user")
#----------------------------------------------------------
# ----------------------------------------------------------
class ReferencingDataFormatSerializer(ReferencingSerializer):
@@ -91,7 +96,7 @@ class ReferencingDataFormatSerializer(ReferencingSerializer):
model = DataFormat
#----------------------------------------------------------
# ----------------------------------------------------------
class ReferencingAlgorithmSerializer(ReferencingSerializer):
@@ -99,59 +104,78 @@ class ReferencingAlgorithmSerializer(ReferencingSerializer):
model = Algorithm
#----------------------------------------------------------
# ----------------------------------------------------------
class ReferencingDatabaseSerializer(VersionableSerializer):
class Meta:
model = Database
default_fields = ['name', 'short_description']
default_fields = ["name", "short_description"]
#----------------------------------------------------------
# ----------------------------------------------------------
class DataFormatSerializer(ContributionSerializer):
extend = serializers.SerializerMethodField()
referenced_dataformats = ReferencedDataFormatSerializer(many=True, source="referenced_formats")
needed_dataformats = ReferencedDataFormatSerializer(many=True, source='all_needed_dataformats')
referenced_dataformats = ReferencedDataFormatSerializer(
many=True, source="referenced_formats"
)
needed_dataformats = ReferencedDataFormatSerializer(
many=True, source="all_needed_dataformats"
)
referencing_dataformats = serializers.SerializerMethodField()
referencing_algorithms = serializers.SerializerMethodField()
referencing_databases = serializers.SerializerMethodField()
class Meta(ContributionSerializer.Meta):
model = DataFormat
default_fields = ContributionSerializer.Meta.default_fields + ['extend']
default_fields = ContributionSerializer.Meta.default_fields + ["extend"]
def get_extend(self, obj):
return obj.extend.fullname() if obj.extend else None
def get_referencing_dataformats(self, obj):
user = self.context.get('user')
user = self.context.get("user")
dataformats = obj.referencing.for_user(user, True)
serializer = ReferencingDataFormatSerializer(dataformats, many=True, context=self.context)
serializer = ReferencingDataFormatSerializer(
dataformats, many=True, context=self.context
)
return serializer.data
def get_referencing_algorithms(self, obj):
user = self.context.get('user')
algorithms = Algorithm.objects.for_user(user, True).filter(endpoints=obj.algorithm_endpoints.all()).distinct()
serializer = ReferencingAlgorithmSerializer(algorithms, many=True, context=self.context)
user = self.context.get("user")
algorithms = (
Algorithm.objects.for_user(user, True)
.filter(endpoints=obj.algorithm_endpoints.all())
.distinct()
)
serializer = ReferencingAlgorithmSerializer(
algorithms, many=True, context=self.context
)
return serializer.data
def get_referencing_databases(self, obj):
databaseset = DatabaseSet.objects.filter(template__outputs=obj.database_outputs.distinct())
databases = Database.objects.filter(protocols__sets=databaseset).distinct().order_by('name')
serializer = ReferencingDatabaseSerializer(databases, many=True, context=self.context)
databaseset = DatabaseSet.objects.filter(
template__outputs=obj.database_outputs.distinct()
)
databases = (
Database.objects.filter(protocols__sets=databaseset)
.distinct()
.order_by("name")
)
serializer = ReferencingDatabaseSerializer(
databases, many=True, context=self.context
)
return serializer.data
#----------------------------------------------------------
# ----------------------------------------------------------
class FullDataFormatSerializer(DataFormatSerializer):
class Meta(DataFormatSerializer.Meta):
default_fields = DataFormatSerializer.Meta.default_fields + DataFormatSerializer.Meta.extra_fields
default_fields = (
DataFormatSerializer.Meta.default_fields
+ DataFormatSerializer.Meta.extra_fields
)
Loading