mirror of
https://github.com/lucaspalomodevelop/eventcally.git
synced 2026-03-13 00:07:22 +00:00
84 lines
2.3 KiB
Python
84 lines
2.3 KiB
Python
from dateutil.rrule import rrulestr
|
|
from marshmallow import ValidationError, fields
|
|
|
|
from project.api.fields import CustomDateTimeField
|
|
from project.api.schemas import IdSchemaMixin, SQLAlchemyBaseSchema
|
|
from project.models import EventDateDefinition
|
|
|
|
|
|
class EventDateDefinitionModelSchema(SQLAlchemyBaseSchema):
|
|
class Meta:
|
|
model = EventDateDefinition
|
|
load_instance = True
|
|
|
|
|
|
class EventDateDefinitionIdSchema(EventDateDefinitionModelSchema, IdSchemaMixin):
|
|
pass
|
|
|
|
|
|
def validate_recurrence_rule(recurrence_rule):
|
|
try:
|
|
rrulestr(recurrence_rule, forceset=True)
|
|
except Exception as e:
|
|
raise ValidationError(str(e))
|
|
|
|
|
|
class EventDateDefinitionBaseSchemaMixin(object):
|
|
start = CustomDateTimeField(
|
|
required=True,
|
|
metadata={
|
|
"description": "When the event will take place. If the event takes place regularly, enter when the first date will begin."
|
|
},
|
|
)
|
|
end = CustomDateTimeField(
|
|
metadata={
|
|
"description": "When the event will end. An event can last a maximum of 180 days. If the event takes place regularly, enter when the first date will end."
|
|
},
|
|
)
|
|
allday = fields.Bool(
|
|
load_default=False,
|
|
metadata={"description": "If the event is an all-day event."},
|
|
)
|
|
recurrence_rule = fields.Str(
|
|
validate=validate_recurrence_rule,
|
|
metadata={
|
|
"description": "If the event takes place regularly. Format: RFC 5545."
|
|
},
|
|
)
|
|
|
|
|
|
class EventDateDefinitionSchema(
|
|
EventDateDefinitionIdSchema, EventDateDefinitionBaseSchemaMixin
|
|
):
|
|
pass
|
|
|
|
|
|
class EventDateDefinitionDumpSchema(
|
|
EventDateDefinitionIdSchema, EventDateDefinitionBaseSchemaMixin
|
|
):
|
|
pass
|
|
|
|
|
|
class EventDateDefinitionWriteSchemaMixin(object):
|
|
pass
|
|
|
|
|
|
class EventDateDefinitionPostRequestSchema(
|
|
EventDateDefinitionModelSchema,
|
|
EventDateDefinitionBaseSchemaMixin,
|
|
EventDateDefinitionWriteSchemaMixin,
|
|
):
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
self.make_post_schema()
|
|
|
|
|
|
class EventDateDefinitionPatchRequestSchema(
|
|
EventDateDefinitionModelSchema,
|
|
EventDateDefinitionBaseSchemaMixin,
|
|
EventDateDefinitionWriteSchemaMixin,
|
|
):
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
self.make_patch_schema()
|