Source code for ox.apps.mails.serializers

from caps.serializers import OwnedSerializer
from rest_framework import serializers

from ox.core.serializers import RelatedField
from ox.apps.files.models import File
from ox.apps.content.serializers import RichTextField, StripCharField

from . import models


__all__ = (
    "MailAccountSerializer",
    "MailSerializer",
)


[docs] class MailAccountSerializer(OwnedSerializer): class Meta: model = models.MailAccount fields = "__all__" extra_kwargs = { "smtp_password": {"write_only": True, "required": False, "allow_null": True}, # "imap_password": {"write_only": True, "required": False, "allow_null": True}, } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if self.instance: self.fields["smtp_password"].allow_blank = True def validate(self, data): if self.instance: data["smtp_password"] = data.get("smtp_password") or self.instance.smtp_password # if "imap_password" in data and data.get("imap_password") is None: # del data["imap_password"] return super().validate(data)
class BaseMailSerializer(OwnedSerializer): # TODO: filter owner for account and attachments account = RelatedField(queryset=models.MailAccount.objects.all(), allow_null=True) # contacts = RelatedField(many=True, queryset=models.Contact.objects.all(), required=False) # contact_lists = RelatedField(many=True, queryset=models.ContactList.objects.all(), required=False) subject = StripCharField() content = RichTextField(required=False, allow_blank=True) attachments = RelatedField(many=True, queryset=File.objects.all(), required=False) class Meta: fields = "__all__" read_only_fields = ("state",)
[docs] class MailSerializer(BaseMailSerializer): recipients = serializers.CharField() class Meta(BaseMailSerializer.Meta): model = models.Mail def validate_recipients(self, value): models.validate_email_list(value) return value