2023-07-24 22:34:03 +03:00
|
|
|
import json
|
2023-07-15 17:46:19 +03:00
|
|
|
from rest_framework import serializers
|
|
|
|
|
2023-07-24 22:34:03 +03:00
|
|
|
import pyconcept
|
2023-07-18 14:55:40 +03:00
|
|
|
from .models import Constituenta, RSForm
|
2023-07-15 17:46:19 +03:00
|
|
|
|
|
|
|
|
|
|
|
class FileSerializer(serializers.Serializer):
|
|
|
|
file = serializers.FileField(allow_empty_file=False)
|
|
|
|
|
|
|
|
|
|
|
|
class ExpressionSerializer(serializers.Serializer):
|
|
|
|
expression = serializers.CharField()
|
|
|
|
|
|
|
|
|
|
|
|
class RSFormSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
|
|
model = RSForm
|
|
|
|
fields = '__all__'
|
|
|
|
read_only_fields = ('owner', 'id')
|
2023-07-18 14:55:40 +03:00
|
|
|
|
|
|
|
|
|
|
|
class ConstituentaSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
|
|
model = Constituenta
|
|
|
|
fields = '__all__'
|
|
|
|
read_only_fields = ('id', 'order', 'alias', 'csttype')
|
|
|
|
|
|
|
|
def update(self, instance: Constituenta, validated_data):
|
|
|
|
instance.schema.save()
|
|
|
|
return super().update(instance, validated_data)
|
2023-07-23 15:23:01 +03:00
|
|
|
|
|
|
|
|
2023-07-24 22:34:03 +03:00
|
|
|
class StandaloneCstSerializer(serializers.ModelSerializer):
|
|
|
|
id = serializers.IntegerField()
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Constituenta
|
|
|
|
exclude = ('schema', )
|
|
|
|
|
|
|
|
def validate(self, attrs):
|
|
|
|
try:
|
|
|
|
attrs['object'] = Constituenta.objects.get(pk=attrs['id'])
|
|
|
|
except Constituenta.DoesNotExist:
|
|
|
|
raise serializers.ValidationError({f"{attrs['id']}": 'Конституента не существует'})
|
|
|
|
return attrs
|
|
|
|
|
|
|
|
|
|
|
|
class CstCreateSerializer(serializers.Serializer):
|
2023-07-23 15:23:01 +03:00
|
|
|
alias = serializers.CharField(max_length=8)
|
|
|
|
csttype = serializers.CharField(max_length=10)
|
|
|
|
insert_after = serializers.IntegerField(required=False)
|
2023-07-24 22:34:03 +03:00
|
|
|
|
|
|
|
|
|
|
|
class CstListSerlializer(serializers.Serializer):
|
|
|
|
items = serializers.ListField(
|
|
|
|
child=StandaloneCstSerializer()
|
|
|
|
)
|
|
|
|
|
|
|
|
def validate(self, attrs):
|
|
|
|
schema = self.context['schema']
|
|
|
|
cstList = []
|
|
|
|
for item in attrs['items']:
|
|
|
|
cst = item['object']
|
|
|
|
if (cst.schema != schema):
|
|
|
|
raise serializers.ValidationError(
|
|
|
|
{'items': f'Конституенты должны относиться к данной схеме: {item}'})
|
|
|
|
cstList.append(cst)
|
|
|
|
attrs['constituents'] = cstList
|
|
|
|
return attrs
|
|
|
|
|
|
|
|
|
|
|
|
class CstMoveSerlializer(CstListSerlializer):
|
|
|
|
move_to = serializers.IntegerField()
|
|
|
|
|
|
|
|
|
|
|
|
class RSFormDetailsSerlializer(serializers.BaseSerializer):
|
|
|
|
class Meta:
|
|
|
|
model = RSForm
|
|
|
|
|
|
|
|
def to_representation(self, instance: RSForm):
|
|
|
|
trs = pyconcept.check_schema(json.dumps(instance.to_json()))
|
|
|
|
trs = trs.replace('entityUID', 'id')
|
|
|
|
result = json.loads(trs)
|
|
|
|
result['id'] = instance.id
|
|
|
|
result['time_update'] = instance.time_update
|
|
|
|
result['time_create'] = instance.time_create
|
|
|
|
result['is_common'] = instance.is_common
|
|
|
|
result['owner'] = (instance.owner.pk if instance.owner is not None else None)
|
|
|
|
return result
|