47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
"""Notification app serializers."""
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from rest_framework import serializers
|
|
from notification import models
|
|
from utils.methods import get_user_ip
|
|
|
|
|
|
class SubscribeSerializer(serializers.ModelSerializer):
|
|
"""Subscribe serializer."""
|
|
|
|
email = serializers.EmailField(required=False, source='send_to')
|
|
|
|
class Meta:
|
|
"""Meta class."""
|
|
|
|
model = models.Subscriber
|
|
fields = ('email', 'state',)
|
|
read_only_fields = ('state',)
|
|
|
|
def validate(self, attrs):
|
|
"""Validate attrs."""
|
|
request = self.context.get('request')
|
|
user = request.user
|
|
|
|
# validate email
|
|
email = attrs.get('send_to')
|
|
if user.is_authenticated:
|
|
if email is not None and email != user.email:
|
|
raise serializers.ValidationError(_('Does not match user email'))
|
|
else:
|
|
if email is None:
|
|
raise serializers.ValidationError({'email': _('This field is required.')})
|
|
|
|
# append info
|
|
attrs['email'] = email
|
|
attrs['country_code'] = request.country_code
|
|
attrs['locale'] = request.locale
|
|
attrs['ip_address'] = get_user_ip(request)
|
|
if user.is_authenticated:
|
|
attrs['user'] = user
|
|
return attrs
|
|
|
|
def create(self, validated_data):
|
|
"""Create obj."""
|
|
obj = models.Subscriber.objects.make_subscriber(**validated_data)
|
|
return obj
|