"""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') state_display = serializers.CharField(source='get_state_display', read_only=True) class Meta: """Meta class.""" model = models.Subscriber fields = ('email', 'state', 'state_display') read_only_fields = ('state', 'state_display') 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