ConceptPortal-public/rsconcept/backend/apps/rsform/serializers/synthesis.py
2024-06-21 21:46:38 +03:00

118 lines
4.0 KiB
Python

''' Synthesis serializers. '''
from rest_framework import serializers
from ..models.Synthesis import (
InputNode,
OperationNode,
SynthesisEdge,
SynthesisGraph,
SynthesisSubstitution
)
class SynthesisGraphSerializer(serializers.ModelSerializer):
class Meta:
model = SynthesisGraph
fields = '__all__'
def create(self, validated_data):
graph, created = SynthesisGraph.objects.update_or_create(
id=validated_data['id'],
defaults={'status': validated_data['status']}
)
return graph
class InputNodeSerializer(serializers.ModelSerializer):
class Meta:
model = InputNode
fields = '__all__'
def create(self, validated_data_list):
for validated_data in validated_data_list:
input_node, created = InputNode.objects.update_or_create(
id=validated_data['id'] if validated_data.get('id') else None,
defaults={
'graph_id': validated_data['graph_id'],
'vertical_coordinate': validated_data['vertical_coordinate'],
'horizontal_coordinate': validated_data['horizontal_coordinate'],
'rsform_id': validated_data['rsform_id'],
}
)
return
class OperationNodeSerializer(serializers.ModelSerializer):
class Meta:
model = OperationNode
fields = '__all__'
def create(self, validated_data_list):
operations = []
for validated_data in validated_data_list:
operation_node, created = OperationNode.objects.update_or_create(
id=validated_data['id'],
defaults={
'graph_id': validated_data['graph_id'],
'vertical_coordinate': validated_data['vertical_coordinate'],
'horizontal_coordinate': validated_data['horizontal_coordinate'],
'rsform_id': validated_data['rsform_id'],
'left_parent': validated_data.get('left_parent'),
'right_parent': validated_data.get('right_parent'),
}
)
operations.append(operation_node)
return operations
class SynthesisSubstitutionSerializer(serializers.ModelSerializer):
class Meta:
model = SynthesisSubstitution
fields = '__all__'
def create(self, validated_data_list):
substitutions = []
for validated_data in validated_data_list:
substitution, created = SynthesisSubstitution.objects.update_or_create(
id=validated_data['id'],
defaults={
'operation_id': validated_data['operation_id'],
'graph_id': validated_data['graph_id'],
'leftCst': validated_data['leftCst'],
'rightCst': validated_data['rightCst'],
'deleteRight': validated_data['deleteRight'],
'takeLeftTerm': validated_data['takeLeftTerm'],
}
)
substitutions.append(substitution)
return substitutions
class SynthesisEdgeSerializer(serializers.ModelSerializer):
class Meta:
model = SynthesisEdge
fields = '__all__'
def create(self, validated_data_list):
for validated_data in validated_data_list:
substitution, created = SynthesisEdge.objects.update_or_create(
id=validated_data['id'],
defaults={
'graph_id': validated_data['graph_id'],
'decoded_id': validated_data['decoded_id'],
'source_handle': validated_data['source_handle'],
'node_from': validated_data['node_from'],
'node_to': validated_data['node_to'],
}
)
return
class RunSingleSynthesis(serializers.Serializer):
operationId = serializers.IntegerField()
class RunSingleSynthesisResponse(serializers.Serializer):
rsformId = serializers.IntegerField()