from rest_framework import serializers
|
|
from .models import Webhook, WebhookAction
|
|
|
class WebhookSerializer(serializers.ModelSerializer):
|
|
actions = serializers.ListField(
|
child=serializers.ChoiceField(choices=WebhookAction.ACTIONS), default=[], source='_actions'
|
)
|
|
class Meta:
|
model = Webhook
|
fields = (
|
'id',
|
'organization',
|
'project',
|
'url',
|
'send_payload',
|
'send_for_all_actions',
|
'headers',
|
'is_active',
|
'actions',
|
'created_at',
|
'updated_at',
|
)
|
read_only_fields = ('id', 'organization', 'created_at', 'updated_at')
|
|
def validate(self, attrs):
|
actions = attrs.pop('_actions', [])
|
instance = Webhook(**attrs)
|
instance.validate_actions(actions)
|
attrs['_actions'] = actions
|
return attrs
|
|
def create(self, validated_data):
|
actions = validated_data.pop('_actions', [])
|
instance = Webhook.objects.create(**validated_data)
|
instance.set_actions(actions)
|
return instance
|
|
def update(self, instance, validated_data):
|
actions = validated_data.pop('_actions', [])
|
instance = super().update(instance, validated_data)
|
instance.set_actions(actions)
|
return instance
|
|
def to_representation(self, instance):
|
instance._actions = instance.get_actions()
|
return super().to_representation(instance)
|
|
|
class WebhookSerializerForUpdate(WebhookSerializer):
|
"""Serializer class for updating webhooks
|
|
Used to forbid updating project field."""
|
|
class Meta(WebhookSerializer.Meta):
|
read_only_fields = WebhookSerializer.Meta.read_only_fields + ('project',)
|