"""Custom marshmallow fields.""" import datetime import re from marshmallow import fields class UnifiedDate(fields.Field): """Field that serializes unified date string.""" date_pattern = re.compile(r"^\d{4}-\d{2}-\d{2}$") date_format = "%Y-%m-%dT%H:%M:%SZ" def _serialize(self, value, attr, obj, **kwargs): if value is None: return None if isinstance(value, (datetime.datetime, datetime.date)): return value.strftime(self.date_format) elif self.date_pattern.match(value): return datetime.datetime.strptime(value, "%Y-%m-%d").strftime( self.date_format ) return value