40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
![]() |
''' Serializers for prompt template data access. '''
|
||
|
|
||
|
from rest_framework import serializers
|
||
|
|
||
|
from shared import messages as msg
|
||
|
|
||
|
from ..models import PromptTemplate
|
||
|
|
||
|
|
||
|
class PromptTemplateSerializer(serializers.ModelSerializer):
|
||
|
'''Serializer for PromptTemplate, enforcing permissions and ownership logic.'''
|
||
|
class Meta:
|
||
|
''' serializer metadata. '''
|
||
|
model = PromptTemplate
|
||
|
fields = ['id', 'owner', 'is_shared', 'label', 'description', 'text']
|
||
|
read_only_fields = ['id', 'owner']
|
||
|
|
||
|
def validate_label(self, value):
|
||
|
user = self.context['request'].user
|
||
|
if PromptTemplate.objects.filter(owner=user, label=value).exists():
|
||
|
raise serializers.ValidationError(msg.promptLabelTaken(value))
|
||
|
return value
|
||
|
|
||
|
def validate_is_shared(self, value):
|
||
|
user = self.context['request'].user
|
||
|
if value and not (user.is_superuser or user.is_staff):
|
||
|
raise serializers.ValidationError(msg.promptSharedPermissionDenied())
|
||
|
return value
|
||
|
|
||
|
def create(self, validated_data):
|
||
|
validated_data['owner'] = self.context['request'].user
|
||
|
return super().create(validated_data)
|
||
|
|
||
|
def update(self, instance, validated_data):
|
||
|
user = self.context['request'].user
|
||
|
if 'is_shared' in validated_data:
|
||
|
if validated_data['is_shared'] and not (user.is_superuser or user.is_staff):
|
||
|
raise serializers.ValidationError(msg.promptSharedPermissionDenied())
|
||
|
return super().update(instance, validated_data)
|