"""Cyon record type definitions.
"""
from collections import namedtuple
from .uef_lines import UEFRecord
from .uef_types import *
__all__ = [
'UEFDeclareEntityRecord',
'UEFNameRecord',
'UEFDescriptionRecord',
'UEFNameGroupRecord',
'UEFDescriptionForGroupRecord',
'UEFMemberToGroupRecord',
'UEFDepartmentRecord',
'UEFSizeCapacityRecord',
'UEFSuitabilityRecord',
'UEFStudentRecord',
'UEFPreferenceTimeRecord',
'UEFDurationRecord',
'UEFStartAndEndDaysRecord',
'UEFWeekPatternRecord',
'UEFUnavailableOnSingleDayRecord',
'UEFUnavailablesAcrossWeekPatternRecord',
'UEFUnavailableDaysRecord',
'UEFExamAvailablesAcrossWeekPatternRecord',
'UEFRequiredSuitabilityForStaffMemberRecord',
'UEFRequiredSuitabilityForLocationRecord',
'UEFCandidateNumberRecord',
'UEFExaminationsRecord',
'UEFNotesRecord',
]
class UEFHostRecord (UEFRecord):
def __init__ (self, base, key, *values):
super ().__init__ (base)
self.__key = key
nt, field_defs = self.field_defs
self.__values = nt (*(f (v) for f, v in zip (field_defs, values)))
@property
def key (self):
return self.__key
@property
def values (self):
return self.__values
@property
def fields (self):
yield from super ().fields
yield self.key
for v in self.values:
yield v.format ()
def declareRecord (field, fields):
names = [n for n, t in fields]
nt = namedtuple ('__'.join (names) or '__', names)
field_defs = nt (*(t for n, t in fields))
class result (UEFHostRecord):
@property
def field (self):
return field
@property
def field_defs (self):
return nt, field_defs
return result
UEFDeclareEntityRecord = declareRecord (0, [])
UEFNameRecord = declareRecord (4, [('name', UEFTextNullable)])
UEFDescriptionRecord = declareRecord (5, [('description', UEFTextNullable)])
UEFNameGroupRecord = declareRecord (14, [('name', UEFTextNullable)])
UEFDescriptionForGroupRecord = declareRecord (15, [('description', UEFTextNullable)])
UEFMemberToGroupRecord = declareRecord (16, [
('operator', UEFSetOperator),
('member_key', UEFHostKeyNullable),
])
UEFDepartmentRecord = declareRecord (20, [('department_key', UEFTextNullable)])
UEFSizeCapacityRecord = declareRecord (21, [('capacity', UEFPositiveInteger)])
UEFSuitabilityRecord = declareRecord (23, [
('operator', UEFSetOperator),
('suitability_key', UEFHostKeyNullable),
('primary', UEFBoolean),
])
UEFStudentRecord = declareRecord (30, [
('operator', UEFSetOperator),
('student_key', UEFHostKeyNullable),
])
UEFPreferenceTimeRecord = declareRecord (50, [
('day_of_week', UEFWeekDay),
('start_time', UEFMinuteTime),
('end_time', UEFMinuteTime),
('preference', UEFPreference),
('start', UEFBoolean),
])
UEFDurationRecord = declareRecord (60, [('duration', UEFDuration)])
UEFStartAndEndDaysRecord = declareRecord (61, [
('start_day', UEFPositiveInteger),
('end_day', UEFPositiveInteger),
])
UEFWeekPatternRecord = declareRecord (63, [('week_pattern', UEFWeekPattern)])
UEFUnavailableOnSingleDayRecord = declareRecord (80, [
('operator', UEFSetOperator),
('day', UEFPositiveInteger),
('start_time', UEFMinuteTime),
('end_time', UEFMinuteTime),
])
UEFUnavailablesAcrossWeekPatternRecord = declareRecord (81, [
('operator', UEFSetOperator),
('week_pattern', UEFWeekPattern),
('day_of_week', UEFWeekDay),
('start_time', UEFMinuteTime),
('end_time', UEFMinuteTime),
])
UEFUnavailableDaysRecord = declareRecord (82, [
('operator', UEFSetOperator),
('start_day', UEFPositiveInteger),
('end_day', UEFPositiveInteger),
])
UEFExamAvailablesAcrossWeekPatternRecord = declareRecord (91, [
('operator', UEFSetOperator),
('week_pattern', UEFWeekPattern),
('day_of_week', UEFWeekDay),
('start_time', UEFMinuteTime),
('end_time', UEFMinuteTime),
])
UEFRequiredSuitabilityForStaffMemberRecord = declareRecord (152, [
('operator', UEFSetOperator),
('suitability_key', UEFHostKeyNullable),
])
UEFRequiredSuitabilityForLocationRecord = declareRecord (162, [
('operator', UEFSetOperator),
('suitability_key', UEFHostKeyNullable),
])
UEFCandidateNumberRecord = declareRecord (186, [
('examination_key', UEFHostKeyNullable),
('candidate_number', UEFText),
])
UEFExaminationsRecord = declareRecord (189, [
('operator', UEFSetOperator),
('examination_key', UEFHostKeyNullable),
('quarantined', UEFBoolean),
])
UEFNotesRecord = declareRecord (190, [
('operator', UEFSetOperator),
('text_line', UEFTextNullable),
])