Initial commit

This commit is contained in:
2025-07-11 13:52:19 +00:00
commit e0c489f625
362 changed files with 27286 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
from typing import Union
import modules.database.schemas.nodes.users as user_schemas
import modules.database.schemas.nodes.workers.workers as worker_schemas
import modules.database.schemas.nodes.schools.schools as school_schemas
user_entities = [
user_schemas.UserNode
]
worker_entities = Union[
worker_schemas.TeacherNode,
worker_schemas.StudentNode,
worker_schemas.SchoolAdminNode,
worker_schemas.DeveloperNode,
worker_schemas.SuperAdminNode,
]
school_entities = Union[
school_schemas.SchoolNode,
school_schemas.DepartmentNode,
school_schemas.SubjectClassNode,
school_schemas.RoomNode,
]
entities = Union[
user_entities,
worker_entities,
school_entities,
]
@@ -0,0 +1,52 @@
from typing import ClassVar
from modules.database.tools.neontology.basenode import BaseNode
class CCBaseNode(BaseNode):
__primarylabel__: ClassVar[str] = ''
__primaryproperty__: ClassVar[str] = 'unique_id'
unique_id: str
tldraw_snapshot: str
def to_dict(self):
return {
"__primarylabel__": self.__primarylabel__,
"unique_id": self.unique_id,
"tldraw_snapshot": self.tldraw_snapshot,
}
class UserBaseNode(CCBaseNode):
__primarylabel__: ClassVar[str] = ''
cc_username: str
user_email: str
user_db_name: str
user_name: str
user_type: str
def to_dict(self):
return {
"__primarylabel__": self.__primarylabel__,
"unique_id": self.unique_id,
"tldraw_snapshot": self.tldraw_snapshot,
"cc_username": self.cc_username,
"user_db_name": self.user_db_name,
"user_email": self.user_email,
"user_name": self.user_name,
"user_type": self.user_type,
}
class WorkerBaseNode(CCBaseNode):
__primarylabel__: ClassVar[str] = ''
worker_name: str
worker_email: str
worker_db_name: str
worker_type: str
def to_dict(self):
return {
"__primarylabel__": self.__primarylabel__,
"unique_id": self.unique_id,
"tldraw_snapshot": self.tldraw_snapshot,
"worker_name": self.worker_name,
"worker_email": self.worker_email,
"worker_db_name": self.worker_db_name,
"worker_type": self.worker_type,
}
@@ -0,0 +1,36 @@
import datetime
from typing import ClassVar
from .base_nodes import CCBaseNode
class CalendarNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'Calendar'
name: str
start_date: datetime.date
end_date: datetime.date
class CalendarYearNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'CalendarYear'
year: str
class CalendarMonthNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'CalendarMonth'
year: str
month: str
month_name: str
class CalendarWeekNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'CalendarWeek'
start_date: datetime.date
week_number: str
iso_week: str # ISO 8601 week
class CalendarDayNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'CalendarDay'
date: datetime.date
day_of_week: str
iso_day: str # ISO 8601 day
class CalendarTimeChunkNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'CalendarTimeChunk'
start_time: datetime.time
end_time: datetime.time
@@ -0,0 +1,56 @@
from typing import ClassVar, Optional
from ..base_nodes import CCBaseNode
class CurriculumBaseNode(CCBaseNode):
__primarylabel__: ClassVar[str] = ''
class KeyStageNode(CurriculumBaseNode):
__primarylabel__: ClassVar[str] = 'KeyStage'
key_stage: str
name: str
class KeyStageSyllabusNode(CurriculumBaseNode):
__primarylabel__: ClassVar[str] = 'KeyStageSyllabus'
id: str
name: str
key_stage: str
subject_name: str
class SubjectNode(CurriculumBaseNode):
__primarylabel__: ClassVar[str] = 'Subject'
id: str
name: str
class TopicNode(CurriculumBaseNode):
__primarylabel__: ClassVar[str] = 'Topic'
id: str
name: str
type: str
assessment_type: str
total_number_of_lessons_for_topic: str
class TopicLessonNode(CurriculumBaseNode):
__primarylabel__: ClassVar[str] = 'TopicLesson'
id: str
name: str
type: str
length: Optional[str] = None
suggested_activities: Optional[str] = None
skills_learned: Optional[str] = None
weblinks: Optional[str] = None
class LearningStatementNode(CurriculumBaseNode):
__primarylabel__: ClassVar[str] = 'LearningStatement'
id: str
name: str
type: str
class ScienceLabNode(CurriculumBaseNode):
__primarylabel__: ClassVar[str] = 'ScienceLab'
id: str
name: str
summary: Optional[str] = None
requirements: Optional[str] = None
procedure: Optional[str] = None
safety: Optional[str] = None
weblinks: Optional[str] = None
@@ -0,0 +1,14 @@
from typing import ClassVar, Optional
from ..base_nodes import CCBaseNode
class YearGroupNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'YearGroup'
year_group: str
name: str
class YearGroupSyllabusNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'YearGroupSyllabus'
id: str
name: str
year_group: str
subject_name: str
@@ -0,0 +1,60 @@
from typing import ClassVar, Optional
from ..base_nodes import CCBaseNode
class SchoolNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'School'
# Core identification fields (required for all databases)
id: str # School's unique identifier within its type
school_type: str # e.g., 'development', 'state', 'private', etc.
name: str
website: str = 'unknown'
# Public school fields (required for public database)
statutory_low_age: Optional[int] = None
statutory_high_age: Optional[int] = None
phase_of_education: Optional[str] = None
school_capacity: Optional[int] = None
religious_character: Optional[str] = None
ofsted_rating: Optional[str] = None
# Private school fields (required for private database)
establishment_number: Optional[str] = None
establishment_name: Optional[str] = None
establishment_type: Optional[str] = None
establishment_status: Optional[str] = None
@property
def database_id(self) -> str:
"""Get the full database identifier for this school"""
return f"{self.school_type}.{self.id}"
@property
def public_database_name(self) -> str:
"""Get the public database name for this school"""
return "cc.institutes"
@property
def private_database_name(self) -> str:
"""Get the private database name for this school"""
return f"cc.institutes.{self.database_id}"
@property
def curriculum_database_name(self) -> str:
"""Get the curriculum database name for this school"""
return f"{self.private_database_name}.curriculum"
class DepartmentNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'Department'
name: str
class SubjectClassNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'SubjectClass'
name: Optional[str] = 'unknown'
year_group_id: str
subject_id: str
class RoomNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'Room'
name: Optional[str] = 'unknown'
building_id: Optional[str] = 'unknown'
@@ -0,0 +1,88 @@
import datetime
from typing import ClassVar
from ..base_nodes import CCBaseNode
class SchoolTimetableNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'SchoolTimetable'
school_timetable_id: str
start_date: datetime.date
end_date: datetime.date
class AcademicYearNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'AcademicYear'
year: str
class AcademicTermNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'AcademicTerm'
term_name: str
term_number: str
start_date: datetime.date
end_date: datetime.date
class AcademicTermBreakNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'AcademicTermBreak'
term_break_name: str
start_date: datetime.date
end_date: datetime.date
class AcademicWeekNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'AcademicWeek'
academic_week_number: str
start_date: datetime.date
week_type: str
class HolidayWeekNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'HolidayWeek'
start_date: datetime.date
class AcademicDayNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'AcademicDay'
academic_day: str
date: datetime.date
day_of_week: str
day_type: str
class OffTimetableDayNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'OffTimetableDay'
date: datetime.date
day_of_week: str
class StaffDayNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'StaffDay'
date: datetime.date
day_of_week: str
class HolidayDayNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'HolidayDay'
date: datetime.date
day_of_week: str
class AcademicPeriodNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'AcademicPeriod'
name: str
date: datetime.date
start_time: datetime.datetime
end_time: datetime.datetime
period_code: str
class RegistrationPeriodNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'RegistrationPeriod'
name: str
date: datetime.date
start_time: datetime.datetime
end_time: datetime.datetime
period_code: str
class BreakPeriodNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'BreakPeriod'
name: str
date: datetime.date
start_time: datetime.datetime
end_time: datetime.datetime
class OffTimetablePeriodNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'OffTimetablePeriod'
name: str
date: datetime.date
start_time: datetime.datetime
end_time: datetime.datetime
@@ -0,0 +1,23 @@
from typing import ClassVar
from ..base_nodes import CCBaseNode
class DepartmentStructureNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'DepartmentStructure'
class PastoralStructureNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'PastoralStructure'
class CurriculumStructureNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'CurriculumStructure'
class SiteStructureNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'SiteStructure'
class StaffStructureNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'StaffStructure'
class StudentStructureNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'StudentStructure'
class ITAdminStructureNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'ITAdminStructure'
@@ -0,0 +1,8 @@
from typing import ClassVar
from ..base_nodes import CCBaseNode
class WorkerStructureNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'WorkerStructure'
class UserCalendarStructureNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'UserCalendarStructure'
@@ -0,0 +1,5 @@
from typing import ClassVar, Optional
from ..base_nodes import CCBaseNode
class WorkerTimetableStructureNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'WorkerTimetableStructure'
+5
View File
@@ -0,0 +1,5 @@
from typing import ClassVar
from .base_nodes import UserBaseNode
class UserNode(UserBaseNode):
__primarylabel__: ClassVar[str] = 'User'
@@ -0,0 +1,63 @@
import datetime
from typing import ClassVar, Optional, List, Union
from ..base_nodes import CCBaseNode
class EntityTimetableBaseNode(CCBaseNode):
start_date: datetime.date
end_date: datetime.date
class WorkerTimetableNode(EntityTimetableBaseNode):
__primarylabel__: ClassVar[str] = 'WorkerTimetable'
worker_timetable_id: str
class TeacherTimetableNode(EntityTimetableBaseNode):
__primarylabel__: ClassVar[str] = 'TeacherTimetable'
teacher_timetable_id: str
class UserTeacherTimetableNode(EntityTimetableBaseNode):
__primarylabel__: ClassVar[str] = 'UserTeacherTimetable'
user_teacher_timetable_id: str
class StudentTimetableNode(EntityTimetableBaseNode):
__primarylabel__: ClassVar[str] = 'StudentTimetable'
student_timetable_id: str
class SchoolAdminTimetableNode(EntityTimetableBaseNode):
__primarylabel__: ClassVar[str] = 'SchoolAdminTimetable'
school_admin_timetable_id: str
class DeveloperTimetableNode(EntityTimetableBaseNode):
__primarylabel__: ClassVar[str] = 'DeveloperTimetable'
developer_timetable_id: str
class SuperAdminTimetableNode(EntityTimetableBaseNode):
__primarylabel__: ClassVar[str] = 'SuperAdminTimetable'
super_admin_timetable_id: str
class TimetableLessonNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'TimetableLesson'
subject_class: str
date: datetime.date
start_time: datetime.time
end_time: datetime.time
period_code: str
class PlannedLessonNode(CCBaseNode):
__primarylabel__: ClassVar[str] = 'PlannedLesson'
date: datetime.date
start_time: datetime.time
end_time: datetime.time
period_code: str
subject_class: str
year_group: str
subject: str
teacher_code: str
planning_status: str
topic_code: Optional[str] = None
topic_name: Optional[str] = None
lesson_code: Optional[str] = None
lesson_name: Optional[str] = None
learning_statement_codes: Optional[List[str]] = None
learning_statements: Optional[List[str]] = None
learning_resource_codes: Optional[List[str]] = None
learning_resources: Optional[List[str]] = None
@@ -0,0 +1,19 @@
import datetime
from typing import ClassVar
from ..base_nodes import WorkerBaseNode
class SchoolAdminNode(WorkerBaseNode):
__primarylabel__: ClassVar[str] = 'SchoolAdmin'
class TeacherNode(WorkerBaseNode):
__primarylabel__: ClassVar[str] = 'Teacher'
class StudentNode(WorkerBaseNode):
__primarylabel__: ClassVar[str] = 'Student'
class DeveloperNode(WorkerBaseNode):
__primarylabel__: ClassVar[str] = 'Developer'
developer_role: str # To distinguish between admin/developer roles
class SuperAdminNode(WorkerBaseNode):
__primarylabel__: ClassVar[str] = 'SuperAdmin'
+29
View File
@@ -0,0 +1,29 @@
from typing import Union
import modules.database.schemas.nodes.users as user_schemas
import modules.database.schemas.nodes.workers.workers as worker_schemas
import modules.database.schemas.nodes.schools.schools as school_schemas
user_owners = Union[
user_schemas.UserNode
]
worker_owners = Union[
worker_schemas.TeacherNode,
worker_schemas.StudentNode,
worker_schemas.SchoolAdminNode,
worker_schemas.DeveloperNode,
worker_schemas.SuperAdminNode,
]
school_owners = Union[
school_schemas.SchoolNode,
school_schemas.DepartmentNode,
school_schemas.SubjectClassNode,
school_schemas.RoomNode,
]
owners = Union[
user_owners,
worker_owners,
school_owners,
]
@@ -0,0 +1,29 @@
import modules.database.schemas.nodes.calendars as calendar_schemas
from modules.database.tools.neontology.baserelationship import BaseRelationship
from typing import ClassVar
# Sequenced Relationships for Calendar
class YearFollowsYear(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'YEAR_FOLLOWS_YEAR'
source: calendar_schemas.CalendarYearNode
target: calendar_schemas.CalendarYearNode
class MonthFollowsMonth(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'MONTH_FOLLOWS_MONTH'
source: calendar_schemas.CalendarMonthNode
target: calendar_schemas.CalendarMonthNode
class WeekFollowsWeek(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'WEEK_FOLLOWS_WEEK'
source: calendar_schemas.CalendarWeekNode
target: calendar_schemas.CalendarWeekNode
class DayFollowsDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'DAY_FOLLOWS_DAY'
source: calendar_schemas.CalendarDayNode
target: calendar_schemas.CalendarDayNode
class TimeChunkFollowsTimeChunk(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'TIME_CHUNK_FOLLOWS_TIME_CHUNK'
source: calendar_schemas.CalendarTimeChunkNode
target: calendar_schemas.CalendarTimeChunkNode
@@ -0,0 +1,96 @@
import modules.database.schemas.nodes.schools.timetable as neo_timetable
import modules.database.schemas.nodes.calendars as neo_calendar
import modules.database.schemas.nodes.workers.timetable as neo_teacher_timetable
from modules.database.tools.neontology.baserelationship import BaseRelationship
from typing import ClassVar
class CalendarYearIsAcademicYear(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'IS_ACADEMIC_YEAR'
source: neo_calendar.CalendarYearNode
target: neo_timetable.AcademicYearNode
class AcademicYearIsCalendarYear(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'IS_CALENDAR_YEAR'
source: neo_timetable.AcademicYearNode
target: neo_calendar.CalendarYearNode
class CalendarWeekIsAcademicWeek(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'IS_ACADEMIC_WEEK'
source: neo_calendar.CalendarWeekNode
target: neo_timetable.AcademicWeekNode
class AcademicWeekIsCalendarWeek(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'IS_CALENDAR_WEEK'
source: neo_timetable.AcademicWeekNode
target: neo_calendar.CalendarWeekNode
class CalendarWeekIsHolidayWeek(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'IS_HOLIDAY_WEEK'
source: neo_calendar.CalendarWeekNode
target: neo_timetable.HolidayWeekNode
class HolidayWeekIsCalendarWeek(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'IS_CALENDAR_WEEK'
source: neo_timetable.HolidayWeekNode
target: neo_calendar.CalendarWeekNode
class CalendarDayIsAcademicDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'IS_ACADEMIC_DAY'
source: neo_calendar.CalendarDayNode
target: neo_timetable.AcademicDayNode
class AcademicDayIsCalendarDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'IS_CALENDAR_DAY'
source: neo_timetable.AcademicDayNode
target: neo_calendar.CalendarDayNode
class CalendarDayIsHolidayDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'IS_HOLIDAY_DAY'
source: neo_calendar.CalendarDayNode
target: neo_timetable.HolidayDayNode
class HolidayDayIsCalendarDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'IS_CALENDAR_DAY'
source: neo_timetable.HolidayDayNode
target: neo_calendar.CalendarDayNode
class CalendarDayIsOffTimetableDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'IS_OFF_TIMETABLE_DAY'
source: neo_calendar.CalendarDayNode
target: neo_timetable.OffTimetableDayNode
class OffTimetableDayIsCalendarDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'IS_CALENDAR_DAY'
source: neo_timetable.OffTimetableDayNode
target: neo_calendar.CalendarDayNode
class CalendarDayIsStaffDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'IS_STAFF_DAY'
source: neo_calendar.CalendarDayNode
target: neo_timetable.StaffDayNode
class StaffDayIsCalendarDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'IS_CALENDAR_DAY'
source: neo_timetable.StaffDayNode
target: neo_calendar.CalendarDayNode
# New relationships for user timetable
class CalendarDayHasTimetableLesson(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'HAS_TIMETABLE_LESSON'
source: neo_calendar.CalendarDayNode
target: neo_teacher_timetable.TimetableLessonNode
class TimetableLessonBelongsToCalendarDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'BELONGS_TO_CALENDAR_DAY'
source: neo_teacher_timetable.TimetableLessonNode
target: neo_calendar.CalendarDayNode
class CalendarDayHasPlannedLesson(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'HAS_PLANNED_LESSON'
source: neo_calendar.CalendarDayNode
target: neo_teacher_timetable.PlannedLessonNode
class PlannedLessonBelongsToCalendarDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'BELONGS_TO_CALENDAR_DAY'
source: neo_teacher_timetable.PlannedLessonNode
target: neo_calendar.CalendarDayNode
@@ -0,0 +1,34 @@
import modules.database.schemas.nodes.calendars as calendar_schemas
from modules.database.tools.neontology.baserelationship import BaseRelationship
from typing import ClassVar
## Calendar layer relationships
class CalendarIncludesYear(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'CALENDAR_INCLUDES_YEAR'
source: calendar_schemas.CalendarNode
target: calendar_schemas.CalendarYearNode
class YearIncludesMonth(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'YEAR_INCLUDES_MONTH'
source: calendar_schemas.CalendarYearNode
target: calendar_schemas.CalendarMonthNode
class YearIncludesWeek(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'YEAR_INCLUDES_WEEK'
source: calendar_schemas.CalendarYearNode
target: calendar_schemas.CalendarWeekNode
class MonthIncludesDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'MONTH_INCLUDES_DAY'
source: calendar_schemas.CalendarMonthNode
target: calendar_schemas.CalendarDayNode
class WeekIncludesDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'WEEK_INCLUDES_DAY'
source: calendar_schemas.CalendarWeekNode
target: calendar_schemas.CalendarDayNode
class DayIncludesTimeChunk(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'DAY_INCLUDES_TIME_CHUNK'
source: calendar_schemas.CalendarDayNode
target: calendar_schemas.CalendarTimeChunkNode
@@ -0,0 +1,119 @@
from typing import ClassVar
from modules.database.tools.neontology.baserelationship import BaseRelationship
import modules.database.schemas.nodes.schools.pastoral as pastoral_nodes
import modules.database.schemas.nodes.schools.curriculum as curriculum_nodes
import modules.database.schemas.nodes.structures.schools as school_structures
# Structure layer relationships
class CurriculumStructureIncludesKeyStage(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'CURRICULUM_STRUCTURE_INCLUDES_KEY_STAGE'
source: school_structures.CurriculumStructureNode
target: curriculum_nodes.KeyStageNode
class PastoralStructureIncludesYearGroup(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'PASTORAL_STRUCTURE_INCLUDES_YEAR_GROUP'
source: school_structures.PastoralStructureNode
target: pastoral_nodes.YearGroupNode
## Curriculum layer relationships
class SubjectForKeyStage(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'SUBJECT_FOR_KEY_STAGE'
source: curriculum_nodes.SubjectNode
target: curriculum_nodes.KeyStageNode
class SubjectHasYearGroupSyllabus(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'SUBJECT_HAS_YEAR_GROUP_SYLLABUS'
source: curriculum_nodes.SubjectNode
target: pastoral_nodes.YearGroupSyllabusNode
class SubjectHasKeyStageSyllabus(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'SUBJECT_HAS_KEY_STAGE_SYLLABUS'
source: curriculum_nodes.SubjectNode
target: curriculum_nodes.KeyStageSyllabusNode
class TopicPartOfYearGroupSyllabus(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'YEAR_SYLLABUS_INCLUDES_TOPIC'
source: pastoral_nodes.YearGroupSyllabusNode
target: curriculum_nodes.TopicNode
class KeyStageSyllabusIncludesTopic(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'KEY_STAGE_SYLLABUS_INCLUDES_TOPIC'
source: curriculum_nodes.KeyStageSyllabusNode
target: curriculum_nodes.TopicNode
class YearGroupHasYearGroupSyllabus(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'YEAR_GROUP_HAS_YEAR_GROUP_SYLLABUS'
source: pastoral_nodes.YearGroupNode
target: pastoral_nodes.YearGroupSyllabusNode
class KeyStageSyllabusIncludesYearGroupSyllabus(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'KEY_STAGE_SYLLABUS_INCLUDES_YEAR_GROUP_SYLLABUS'
source: curriculum_nodes.KeyStageSyllabusNode
target: pastoral_nodes.YearGroupSyllabusNode
class KeyStageIncludesKeyStageSyllabus(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'KEY_STAGE_INCLUDES_KEY_STAGE_SYLLABUS'
source: curriculum_nodes.KeyStageNode
target: curriculum_nodes.KeyStageSyllabusNode
class KeyStageIncludesTopic(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'KEY_STAGE_INCLUDES_TOPIC'
source: curriculum_nodes.KeyStageNode
target: curriculum_nodes.TopicNode
class SubjectIncludesTopic(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'SUBJECT_INCLUDES_TOPIC'
source: curriculum_nodes.SubjectNode
target: curriculum_nodes.TopicNode
class TopicIncludesTopicLesson(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'TOPIC_INCLUDES_LESSON'
source: curriculum_nodes.TopicNode
target: curriculum_nodes.TopicLessonNode
class TopicIncludesLearningStatement(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'TOPIC_INCLUDES_LEARNING_STATEMENT'
source: curriculum_nodes.TopicNode
target: curriculum_nodes.LearningStatementNode
class LessonIncludesLearningStatement(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'LESSON_INCLUDES_LEARNING_STATEMENT'
source: curriculum_nodes.TopicLessonNode
target: curriculum_nodes.LearningStatementNode
# Science-specific curriculum layer relationships
class TopicLessonIncludesScienceLab(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'LESSON_INCLUDES_SCIENCE_LAB'
source: curriculum_nodes.TopicLessonNode
target: curriculum_nodes.ScienceLabNode
class KeyStageFollowsKeyStage(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'KEY_STAGE_FOLLOWS_KEY_STAGE'
source: curriculum_nodes.KeyStageNode
target: curriculum_nodes.KeyStageNode
class YearGroupFollowsYearGroup(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'YEAR_GROUP_FOLLOWS_YEAR_GROUP'
source: pastoral_nodes.YearGroupNode
target: pastoral_nodes.YearGroupNode
class KeyStageSyllabusFollowsKeyStageSyllabus(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'KEY_STAGE_SYLLABUS_FOLLOWS_KEY_STAGE_SYLLABUS'
source: curriculum_nodes.KeyStageSyllabusNode
target: curriculum_nodes.KeyStageSyllabusNode
class YearGroupSyllabusFollowsYearGroupSyllabus(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'YEAR_GROUP_SYLLABUS_FOLLOWS_YEAR_GROUP_SYLLABUS'
source: pastoral_nodes.YearGroupSyllabusNode
target: pastoral_nodes.YearGroupSyllabusNode
class TopicLessonFollowsTopicLesson(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'LESSON_FOLLOWS_LESSON'
source: curriculum_nodes.TopicLessonNode
target: curriculum_nodes.TopicLessonNode
class YearGroupSyllabusIncludesTopic(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'YEAR_GROUP_SYLLABUS_INCLUDES_TOPIC'
source: pastoral_nodes.YearGroupSyllabusNode
target: curriculum_nodes.TopicNode
@@ -0,0 +1,15 @@
from typing import ClassVar
from modules.database.tools.neontology.baserelationship import BaseRelationship
import modules.database.schemas.nodes.schools.schools as school_nodes
import modules.database.schemas.nodes.structures.schools as school_structures
class SchoolHasCurriculumStructure(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'HAS_CURRICULUM_STRUCTURE'
source: school_nodes.SchoolNode
target: school_structures.CurriculumStructureNode
class SchoolHasPastoralStructure(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'HAS_PASTORAL_STRUCTURE'
source: school_nodes.SchoolNode
target: school_structures.PastoralStructureNode
@@ -0,0 +1,49 @@
from typing import ClassVar, Union
import modules.database.schemas.entities as entities
import modules.database.schemas.nodes.users as user_nodes
import modules.database.schemas.nodes.workers.workers as worker_nodes
import modules.database.schemas.nodes.schools.schools as school_nodes
import modules.database.schemas.nodes.schools.curriculum as curriculum_nodes
import modules.database.schemas.nodes.structures.schools as school_structures
from modules.database.tools.neontology.baserelationship import BaseRelationship
class UserIsSchoolWorker(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'IS_SCHOOL_WORKER'
source: user_nodes.UserNode
target: Union[worker_nodes.SchoolAdminNode, worker_nodes.TeacherNode, worker_nodes.StudentNode]
class UserIsSystemWorker(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'IS_SYSTEM_WORKER'
source: user_nodes.UserNode
target: Union[worker_nodes.DeveloperNode, worker_nodes.SuperAdminNode]
class EntityBelongsToSchool(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'BELONGS_TO'
source: Union[entities.worker_entities, entities.school_entities]
target: entities.school_entities
class EntityBelongsToDepartment(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'BELONGS_TO'
source: entities.worker_entities
target: school_nodes.DepartmentNode
class SchoolHasDepartmentStructure(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'HAS_DEPARTMENT_STRUCTURE'
source: school_nodes.SchoolNode
target: school_structures.DepartmentStructureNode
class DepartmentStructureHasDepartment(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'HAS_DEPARTMENT'
source: school_structures.DepartmentStructureNode
target: school_nodes.DepartmentNode
class DepartmentManagesKeyStageSyllabus(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'MANAGES_KEY_STAGE_SYLLABUS'
source: school_nodes.DepartmentNode
target: curriculum_nodes.KeyStageSyllabusNode
class DepartmentManagesSubject(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'MANAGES_SUBJECT'
source: school_nodes.DepartmentNode
target: curriculum_nodes.SubjectNode
@@ -0,0 +1,18 @@
from typing import ClassVar, Union
from modules.database.tools.neontology.baserelationship import BaseRelationship
import modules.database.schemas.nodes.users as user_nodes
import modules.database.schemas.nodes.workers.workers as worker_nodes
import modules.database.schemas.nodes.schools.schools as school_nodes
import modules.database.schemas.nodes.workers.timetable as worker_timetable
import modules.database.schemas.nodes.schools.timetable as school_timetable
class EntityHasTimetable(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'HAS_TIMETABLE'
source: Union[user_nodes.UserNode, worker_nodes.TeacherNode, worker_nodes.StudentNode, school_nodes.SubjectClassNode]
target: worker_timetable.WorkerTimetableNode
class SchoolHasTimetable(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'HAS_TIMETABLE'
source: school_nodes.SchoolNode
target: school_timetable.SchoolTimetableNode
@@ -0,0 +1,9 @@
from typing import ClassVar, Union
import modules.database.schemas.nodes.calendars as calendar_schemas
import modules.database.schemas.owners as owner_schemas
from modules.database.tools.neontology.baserelationship import BaseRelationship
class OwnerHasCalendar(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'HAS_CALENDAR'
source: owner_schemas.owners
target: calendar_schemas.CalendarNode
@@ -0,0 +1,48 @@
from typing import ClassVar, Union
from modules.database.tools.neontology.baserelationship import BaseRelationship
from modules.database.schemas.nodes.schools.timetable import AcademicPeriodNode, RegistrationPeriodNode
from modules.database.schemas.nodes.workers.timetable import TeacherTimetableNode, TimetableLessonNode, PlannedLessonNode
from modules.database.schemas.nodes.workers.workers import TeacherNode
from modules.database.schemas.nodes.schools.schools import SubjectClassNode
from modules.database.schemas.nodes.schools.pastoral import YearGroupSyllabusNode
class TimetableLessonBelongsToPeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'LESSON_BELONGS_TO_PERIOD'
source: TimetableLessonNode
target: Union[AcademicPeriodNode, RegistrationPeriodNode]
class TimetableLessonHasPlannedLesson(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'TIMETABLE_LESSON_HAS_PLANNED_LESSON'
source: TimetableLessonNode
target: PlannedLessonNode
class TeacherHasTimetable(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'TEACHER_HAS_TIMETABLE'
source: TeacherNode
target: TeacherTimetableNode
class TimetableHasClass(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'TIMETABLE_HAS_CLASS'
source: TeacherTimetableNode
target: SubjectClassNode
class ClassHasLesson(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'CLASS_HAS_LESSON'
source: SubjectClassNode
target: TimetableLessonNode
class TimetableLessonFollowsTimetableLesson(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'TIMETABLE_LESSON_FOLLOWS_TIMETABLE_LESSON'
source: Union[TimetableLessonNode, PlannedLessonNode]
target: Union[TimetableLessonNode, PlannedLessonNode]
class PlannedLessonFollowsPlannedLesson(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'PLANNED_LESSON_FOLLOWS_PLANNED_LESSON'
source: PlannedLessonNode
target: PlannedLessonNode
class SubjectClassBelongsToYearGroupSyllabus(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'SUBJECT_CLASS_BELONGS_TO_YEAR_GROUP_SYLLABUS'
source: SubjectClassNode
target: YearGroupSyllabusNode
@@ -0,0 +1,11 @@
from neontology import BaseRelationship
class CalendarYearHasNextCalendarYear(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'CALENDAR_YEAR_HAS_NEXT_CALENDAR_YEAR'
source: CalendarYearNode
target: CalendarYearNode
class CalendarYearHasPreviousCalendarYear(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'CALENDAR_YEAR_HAS_PREVIOUS_CALENDAR_YEAR'
source: CalendarYearNode
target: CalendarYearNode
@@ -0,0 +1,2 @@
from neontology import BaseRelationship
@@ -0,0 +1,11 @@
from neontology import BaseRelationship
class PlannedLessonHasNextPlannedLesson(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'PLANNED_LESSON_HAS_NEXT_PLANNED_LESSON'
source: PlannedLessonNode
target: PlannedLessonNode
class PlannedLessonHasPreviousPlannedLesson(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'PLANNED_LESSON_HAS_PREVIOUS_PLANNED_LESSON'
source: PlannedLessonNode
target: PlannedLessonNode
@@ -0,0 +1,41 @@
from neontology import BaseRelationship
class AcademicTermHasNextTerm(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'TERM_HAS_NEXT_TERM'
source: TermNode
target: TermNode
class AcademicTermHasPreviousTerm(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'TERM_HAS_PREVIOUS_TERM'
source: TermNode
target: TermNode
class AcademicWeekHasNextWeek(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'WEEK_HAS_NEXT_WEEK'
source: WeekNode
target: WeekNode
class AcademicWeekHasPreviousWeek(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'WEEK_HAS_PREVIOUS_WEEK'
source: WeekNode
target: WeekNode
class AcademicDayHasNextDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'DAY_HAS_NEXT_DAY'
source: DayNode
target: DayNode
class AcademicDayHasPreviousDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'DAY_HAS_PREVIOUS_DAY'
source: DayNode
target: DayNode
class AcademicPeriodHasNextPeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'PERIOD_HAS_NEXT_PERIOD'
source: PeriodNode
target: PeriodNode
class AcademicPeriodHasPreviousPeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'PERIOD_HAS_PREVIOUS_PERIOD'
source: PeriodNode
target: PeriodNode
@@ -0,0 +1,65 @@
#!/usr/bin/env python3
"""
ClassroomCopilot Structure Relationships
This module defines the relationships between schools and structure nodes,
as well as between entities and structure nodes.
"""
from typing import ClassVar
from modules.database.tools.neontology.baserelationship import BaseRelationship
import modules.database.schemas.nodes.schools.schools as school_nodes
import modules.database.schemas.nodes.structures.schools as school_structures
import modules.database.schemas.nodes.workers.workers as worker_nodes
class SchoolHasStaffStructure(BaseRelationship):
"""Relationship between a school and its staff structure node."""
__relationshiptype__: ClassVar[str] = 'HAS_STAFF_STRUCTURE'
source: school_nodes.SchoolNode
target: school_structures.StaffStructureNode
class SchoolHasStudentStructure(BaseRelationship):
"""Relationship between a school and its student structure node."""
__relationshiptype__: ClassVar[str] = 'HAS_STUDENT_STRUCTURE'
source: school_nodes.SchoolNode
target: school_structures.StudentStructureNode
class SchoolHasITAdminStructure(BaseRelationship):
"""Relationship between a school and its IT admin structure node."""
__relationshiptype__: ClassVar[str] = 'HAS_IT_ADMIN_STRUCTURE'
source: school_nodes.SchoolNode
target: school_structures.ITAdminStructureNode
class EntityBelongsToStructure(BaseRelationship):
"""
Relationship between an entity (worker, student, etc.) and a structure node.
This is a generic relationship that can be used for any entity type.
"""
__relationshiptype__: ClassVar[str] = 'BELONGS_TO_STRUCTURE'
source: object # Generic source type to allow any entity
target: object # Generic target type to allow any structure
# Specific entity-to-structure relationships
class SuperAdminBelongsToITAdminStructure(BaseRelationship):
"""Relationship between a super admin and the IT admin structure."""
__relationshiptype__: ClassVar[str] = 'BELONGS_TO_STRUCTURE'
source: worker_nodes.SuperAdminNode
target: school_structures.ITAdminStructureNode
class TeacherBelongsToStaffStructure(BaseRelationship):
"""Relationship between a teacher and the staff structure."""
__relationshiptype__: ClassVar[str] = 'BELONGS_TO_STRUCTURE'
source: worker_nodes.TeacherNode
target: school_structures.StaffStructureNode
class StudentBelongsToStudentStructure(BaseRelationship):
"""Relationship between a student and the student structure."""
__relationshiptype__: ClassVar[str] = 'BELONGS_TO_STRUCTURE'
source: worker_nodes.StudentNode
target: school_structures.StudentStructureNode
@@ -0,0 +1,305 @@
import modules.database.schemas.nodes.schools.timetable as neo_timetable
from modules.database.tools.neontology.baserelationship import BaseRelationship
from typing import ClassVar
# Timetable hierarchy structure relationships
class AcademicTimetableHasAcademicYear(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_TIMETABLE_HAS_ACADEMIC_YEAR'
source: neo_timetable.SchoolTimetableNode
target: neo_timetable.AcademicYearNode
class AcademicYearHasAcademicTerm(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_YEAR_HAS_ACADEMIC_TERM'
source: neo_timetable.AcademicYearNode
target: neo_timetable.AcademicTermNode
class AcademicYearHasAcademicTermBreak(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_YEAR_HAS_ACADEMIC_TERM_BREAK'
source: neo_timetable.AcademicYearNode
target: neo_timetable.AcademicTermBreakNode
class AcademicYearHasAcademicWeek(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_YEAR_HAS_ACADEMIC_WEEK'
source: neo_timetable.AcademicYearNode
target: neo_timetable.AcademicWeekNode
class AcademicYearHasHolidayWeek(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_YEAR_HAS_HOLIDAY_WEEK'
source: neo_timetable.AcademicYearNode
target: neo_timetable.HolidayWeekNode
class AcademicTermHasAcademicWeek(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_TERM_HAS_ACADEMIC_WEEK'
source: neo_timetable.AcademicTermNode
target: neo_timetable.AcademicWeekNode
class AcademicTermBreakHasHolidayWeek(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_TERM_BREAK_HAS_HOLIDAY_WEEK'
source: neo_timetable.AcademicTermBreakNode
target: neo_timetable.HolidayWeekNode
class AcademicTermBreakHasHolidayDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_TERM_BREAK_HAS_HOLIDAY_DAY'
source: neo_timetable.AcademicTermBreakNode
target: neo_timetable.HolidayDayNode
class AcademicTermHasAcademicDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_TERM_HAS_ACADEMIC_DAY'
source: neo_timetable.AcademicTermNode
target: neo_timetable.AcademicDayNode
class AcademicTermHasHolidayDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_TERM_HAS_HOLIDAY_DAY'
source: neo_timetable.AcademicTermNode
target: neo_timetable.HolidayDayNode
class AcademicTermHasOffTimetableDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_TERM_HAS_OFF_TIMETABLE_DAY'
source: neo_timetable.AcademicTermNode
target: neo_timetable.OffTimetableDayNode
class AcademicTermHasStaffDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_TERM_HAS_STAFF_DAY'
source: neo_timetable.AcademicTermNode
target: neo_timetable.StaffDayNode
class AcademicWeekHasAcademicDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_WEEK_HAS_ACADEMIC_DAY'
source: neo_timetable.AcademicWeekNode
target: neo_timetable.AcademicDayNode
class AcademicWeekHasHolidayDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_WEEK_HAS_HOLIDAY_DAY'
source: neo_timetable.AcademicWeekNode
target: neo_timetable.HolidayDayNode
class AcademicWeekHasOffTimetableDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_WEEK_HAS_OFF_TIMETABLE_DAY'
source: neo_timetable.AcademicWeekNode
target: neo_timetable.OffTimetableDayNode
class AcademicWeekHasStaffDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_WEEK_HAS_STAFF_DAY'
source: neo_timetable.AcademicWeekNode
target: neo_timetable.StaffDayNode
class HolidayWeekHasHolidayDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'HOLIDAY_WEEK_HAS_HOLIDAY_DAY'
source: neo_timetable.HolidayWeekNode
target: neo_timetable.HolidayDayNode
class AcademicDayHasAcademicPeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_DAY_HAS_ACADEMIC_PERIOD'
source: neo_timetable.AcademicDayNode
target: neo_timetable.AcademicPeriodNode
class AcademicDayHasRegistrationPeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_DAY_HAS_REGISTRATION_PERIOD'
source: neo_timetable.AcademicDayNode
target: neo_timetable.RegistrationPeriodNode
class AcademicDayHasBreakPeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_DAY_HAS_BREAK_PERIOD'
source: neo_timetable.AcademicDayNode
target: neo_timetable.BreakPeriodNode
class AcademicDayHasOffTimetablePeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_DAY_HAS_OFF_TIMETABLE_PERIOD'
source: neo_timetable.AcademicDayNode
target: neo_timetable.OffTimetablePeriodNode
# Timetable sequence relationships
class AcademicYearFollowsAcademicYear(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_YEAR_FOLLOWS_ACADEMIC_YEAR'
source: neo_timetable.AcademicYearNode
target: neo_timetable.AcademicYearNode
class AcademicTermFollowsAcademicTermBreak(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_TERM_FOLLOWS_ACADEMIC_TERM_BREAK'
source: neo_timetable.AcademicTermBreakNode # Term break ends
target: neo_timetable.AcademicTermNode # New term starts
class AcademicTermBreakFollowsAcademicTerm(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_TERM_BREAK_FOLLOWS_ACADEMIC_TERM'
source: neo_timetable.AcademicTermNode # Term ends
target: neo_timetable.AcademicTermBreakNode # Term break starts
class AcademicWeekFollowsAcademicWeek(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_WEEK_FOLLOWS_ACADEMIC_WEEK'
source: neo_timetable.AcademicWeekNode
target: neo_timetable.AcademicWeekNode
class HolidayWeekFollowsHolidayWeek(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'HOLIDAY_WEEK_FOLLOWS_HOLIDAY_WEEK'
source: neo_timetable.HolidayWeekNode
target: neo_timetable.HolidayWeekNode
class AcademicWeekFollowsHolidayWeek(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_WEEK_FOLLOWS_HOLIDAY_WEEK'
source: neo_timetable.HolidayWeekNode
target: neo_timetable.AcademicWeekNode
class HolidayWeekFollowsAcademicWeek(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'HOLIDAY_WEEK_FOLLOWS_ACADEMIC_WEEK'
source: neo_timetable.AcademicWeekNode
target: neo_timetable.HolidayWeekNode
class AcademicDayFollowsAcademicDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_DAY_FOLLOWS_ACADEMIC_DAY'
source: neo_timetable.AcademicDayNode
target: neo_timetable.AcademicDayNode
class AcademicDayFollowsHolidayDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_DAY_FOLLOWS_HOLIDAY_DAY'
source: neo_timetable.HolidayDayNode
target: neo_timetable.AcademicDayNode
class AcademicDayFollowsOffTimetableDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_DAY_FOLLOWS_OFF_TIMETABLE_DAY'
source: neo_timetable.OffTimetableDayNode
target: neo_timetable.AcademicDayNode
class AcademicDayFollowsStaffDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_DAY_FOLLOWS_STAFF_DAY'
source: neo_timetable.StaffDayNode
target: neo_timetable.AcademicDayNode
class HolidayDayFollowsHolidayDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'HOLIDAY_DAY_FOLLOWS_HOLIDAY_DAY'
source: neo_timetable.HolidayDayNode
target: neo_timetable.HolidayDayNode
class HolidayDayFollowsAcademicDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'HOLIDAY_DAY_FOLLOWS_ACADEMIC_DAY'
source: neo_timetable.AcademicDayNode
target: neo_timetable.HolidayDayNode
class HolidayDayFollowsOffTimetableDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'HOLIDAY_DAY_FOLLOWS_OFF_TIMETABLE_DAY'
source: neo_timetable.OffTimetableDayNode
target: neo_timetable.HolidayDayNode
class HolidayDayFollowsStaffDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'HOLIDAY_DAY_FOLLOWS_STAFF_DAY'
source: neo_timetable.StaffDayNode
target: neo_timetable.HolidayDayNode
class OffTimetableDayFollowsOffTimetableDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'OFF_TIMETABLE_DAY_FOLLOWS_OFF_TIMETABLE_DAY'
source: neo_timetable.OffTimetableDayNode
target: neo_timetable.OffTimetableDayNode
class OffTimetableDayFollowsAcademicDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'OFF_TIMETABLE_DAY_FOLLOWS_ACADEMIC_DAY'
source: neo_timetable.AcademicDayNode
target: neo_timetable.OffTimetableDayNode
class OffTimetableDayFollowsHolidayDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'OFF_TIMETABLE_DAY_FOLLOWS_HOLIDAY_DAY'
source: neo_timetable.HolidayDayNode
target: neo_timetable.OffTimetableDayNode
class OffTimetableDayFollowsStaffDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'OFF_TIMETABLE_DAY_FOLLOWS_STAFF_DAY'
source: neo_timetable.StaffDayNode
target: neo_timetable.OffTimetableDayNode
class StaffDayFollowsStaffDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'STAFF_DAY_FOLLOWS_STAFF_DAY'
source: neo_timetable.StaffDayNode
target: neo_timetable.StaffDayNode
class StaffDayFollowsAcademicDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'STAFF_DAY_FOLLOWS_ACADEMIC_DAY'
source: neo_timetable.AcademicDayNode
target: neo_timetable.StaffDayNode
class StaffDayFollowsHolidayDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'STAFF_DAY_FOLLOWS_HOLIDAY_DAY'
source: neo_timetable.HolidayDayNode
target: neo_timetable.StaffDayNode
class StaffDayFollowsOffTimetableDay(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'STAFF_DAY_FOLLOWS_OFF_TIMETABLE_DAY'
source: neo_timetable.OffTimetableDayNode
target: neo_timetable.StaffDayNode
class AcademicPeriodFollowsAcademicPeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_PERIOD_FOLLOWS_ACADEMIC_PERIOD'
source: neo_timetable.AcademicPeriodNode
target: neo_timetable.AcademicPeriodNode
class AcademicPeriodFollowsBreakPeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_PERIOD_FOLLOWS_BREAK_PERIOD'
source: neo_timetable.BreakPeriodNode
target: neo_timetable.AcademicPeriodNode
class AcademicPeriodFollowsRegistrationPeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_PERIOD_FOLLOWS_REGISTRATION_PERIOD'
source: neo_timetable.RegistrationPeriodNode
target: neo_timetable.AcademicPeriodNode
class AcademicPeriodFollowsOffTimetablePeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'ACADEMIC_PERIOD_FOLLOWS_OFF_TIMETABLE_PERIOD'
source: neo_timetable.OffTimetablePeriodNode
target: neo_timetable.AcademicPeriodNode
class BreakPeriodFollowsAcademicPeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'BREAK_PERIOD_FOLLOWS_ACADEMIC_PERIOD'
source: neo_timetable.AcademicPeriodNode
target: neo_timetable.BreakPeriodNode
class RegistrationPeriodFollowsAcademicPeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'REGISTRATION_PERIOD_FOLLOWS_ACADEMIC_PERIOD'
source: neo_timetable.AcademicPeriodNode
target: neo_timetable.RegistrationPeriodNode
class RegistrationPeriodFollowsOffTimetablePeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'REGISTRATION_PERIOD_FOLLOWS_OFF_TIMETABLE_PERIOD'
source: neo_timetable.OffTimetablePeriodNode
target: neo_timetable.RegistrationPeriodNode
class OffTimetablePeriodFollowsAcademicPeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'OFF_TIMETABLE_PERIOD_FOLLOWS_ACADEMIC_PERIOD'
source: neo_timetable.AcademicPeriodNode
target: neo_timetable.OffTimetablePeriodNode
class OffTimetablePeriodFollowsRegistrationPeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'OFF_TIMETABLE_PERIOD_FOLLOWS_REGISTRATION_PERIOD'
source: neo_timetable.RegistrationPeriodNode
target: neo_timetable.OffTimetablePeriodNode
class OffTimetablePeriodFollowsOffTimetablePeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'OFF_TIMETABLE_PERIOD_FOLLOWS_OFF_TIMETABLE_PERIOD'
source: neo_timetable.OffTimetablePeriodNode
target: neo_timetable.OffTimetablePeriodNode
class BreakPeriodFollowsBreakPeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'BREAK_PERIOD_FOLLOWS_BREAK_PERIOD'
source: neo_timetable.BreakPeriodNode
target: neo_timetable.BreakPeriodNode
class BreakPeriodFollowsRegistrationPeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'BREAK_PERIOD_FOLLOWS_REGISTRATION_PERIOD'
source: neo_timetable.RegistrationPeriodNode
target: neo_timetable.BreakPeriodNode
class BreakPeriodFollowsOffTimetablePeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'BREAK_PERIOD_FOLLOWS_OFF_TIMETABLE_PERIOD'
source: neo_timetable.OffTimetablePeriodNode
target: neo_timetable.BreakPeriodNode
class RegistrationPeriodFollowsBreakPeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'REGISTRATION_PERIOD_FOLLOWS_BREAK_PERIOD'
source: neo_timetable.BreakPeriodNode
target: neo_timetable.RegistrationPeriodNode
class OffTimetablePeriodFollowsBreakPeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'OFF_TIMETABLE_PERIOD_FOLLOWS_BREAK_PERIOD'
source: neo_timetable.BreakPeriodNode
target: neo_timetable.OffTimetablePeriodNode
class RegistrationPeriodFollowsRegistrationPeriod(BaseRelationship):
__relationshiptype__: ClassVar[str] = 'REGISTRATION_PERIOD_FOLLOWS_REGISTRATION_PERIOD'
source: neo_timetable.RegistrationPeriodNode
target: neo_timetable.RegistrationPeriodNode
+27
View File
@@ -0,0 +1,27 @@
from typing import Union
import modules.database.schemas.nodes.structures.users as user_structures
import modules.database.schemas.nodes.structures.workers as worker_structures
import modules.database.schemas.nodes.structures.schools as school_structures
user_structures = Union[
user_structures.UserCalendarStructureNode,
]
worker_structures = Union[
worker_structures.WorkerTimetableStructureNode,
]
school_structures = Union[
school_structures.PastoralStructureNode,
school_structures.CurriculumStructureNode,
school_structures.DepartmentStructureNode,
school_structures.SiteStructureNode,
school_structures.StaffStructureNode,
school_structures.StudentStructureNode,
]
structures = Union[
user_structures,
worker_structures,
school_structures,
]