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