from marshmallow import Schema, fields, validate from ..validators import validate_datetime_greater_than_now class TermOfDefenceSchema(Schema): start_date = fields.DateTime(validate=validate_datetime_greater_than_now, required=True) end_date = fields.DateTime(validate=validate_datetime_greater_than_now, required=True) project_supervisors = fields.List(fields.Integer(required=True), validate=validate.Length(3, 3)) class ProjectSupervisorForTermOfDefenceSchema(Schema): id = fields.Str() first_name = fields.Str() last_name = fields.Str() class TermOfDefenceItemSchema(Schema): id = fields.Integer() start_date = fields.DateTime() end_date = fields.DateTime() members_of_committee = fields.List(fields.Nested(ProjectSupervisorForTermOfDefenceSchema)) class TermOfDefenceListSchema(Schema): term_of_defences = fields.List(fields.Nested(TermOfDefenceItemSchema)) class StudentDataItemSchema(Schema): index = fields.Integer() first_name = fields.Str() last_name = fields.Str() class GroupDataItemSchema(Schema): name = fields.Str() students = fields.List(fields.Nested(StudentDataItemSchema)) class AssignedGroupToTermOfDefenceItemSchema(TermOfDefenceItemSchema): group = fields.Nested(GroupDataItemSchema) class AssignedGroupToTermOfDefenceListSchema(Schema): term_of_defences = fields.List(fields.Nested(AssignedGroupToTermOfDefenceItemSchema)) class ProjectSupervisorForTemporaryAvailabilitySchema(Schema): id = fields.Str() first_name = fields.Str() last_name = fields.Str() class TemporaryAvailabilityItemSchema(Schema): start_date = fields.DateTime() end_date = fields.DateTime() project_supervisor = fields.Nested(ProjectSupervisorForTemporaryAvailabilitySchema) class TemporaryAvailabilityListSchema(Schema): temporary_availabilities = fields.List(fields.Nested(TemporaryAvailabilityItemSchema))