api/serializers/emails.py (94 lines of code) (raw):

"""API serializers for api/views/emails.py""" from django.db.models import prefetch_related_objects from rest_framework import exceptions, serializers from emails.models import DomainAddress, RelayAddress class PremiumValidatorsMixin: # the user must be premium to set block_list_emails=True def validate_block_list_emails(self, value): if not value: return value if not hasattr(self, "context"): raise AttributeError("self must have attribute context") user = self.context["request"].user prefetch_related_objects([user], "socialaccount_set", "profile") if not user.profile.has_premium: raise exceptions.AuthenticationFailed( "Must be premium to set block_list_emails." ) return value class RelayAddressSerializer(PremiumValidatorsMixin, serializers.ModelSerializer): mask_type = serializers.CharField(default="random", read_only=True, required=False) class Meta: model = RelayAddress fields = [ "mask_type", "enabled", "description", "generated_for", "block_list_emails", "used_on", # read-only "id", "address", "domain", "full_address", "created_at", "last_modified_at", "last_used_at", "num_forwarded", "num_blocked", "num_level_one_trackers_blocked", "num_replied", "num_spam", ] read_only_fields = [ "id", "mask_type", "address", "domain", "full_address", "created_at", "last_modified_at", "last_used_at", "num_forwarded", "num_blocked", "num_level_one_trackers_blocked", "num_replied", "num_spam", ] class DomainAddressSerializer(PremiumValidatorsMixin, serializers.ModelSerializer): mask_type = serializers.CharField(default="custom", read_only=True, required=False) class Meta: model = DomainAddress fields = [ "mask_type", "enabled", "description", "block_list_emails", "used_on", # read-only "id", "address", "domain", "full_address", "created_at", "last_modified_at", "last_used_at", "num_forwarded", "num_blocked", "num_level_one_trackers_blocked", "num_replied", "num_spam", ] read_only_fields = [ "id", "mask_type", "domain", "full_address", "created_at", "last_modified_at", "last_used_at", "num_forwarded", "num_blocked", "num_level_one_trackers_blocked", "num_replied", "num_spam", ] class FirstForwardedEmailSerializer(serializers.Serializer): mask = serializers.EmailField(required=True)