diff --git a/bin/lesson_check.py b/bin/lesson_check.py index b2f0308133396ddfbe5dedc2ba382d8f1ec4a9b4..f2d391f016ff8db0b387527fbde142c5da464c14 100755 --- a/bin/lesson_check.py +++ b/bin/lesson_check.py @@ -67,8 +67,8 @@ KNOWN_CODEBLOCKS = { 'sql' } -# What fields are required in episode metadata? -EPISODE_METADATA_FIELDS = { +# What fields are required in teaching episode metadata? +TEACHING_METADATA_FIELDS = { ('title', str), ('teaching', int), ('exercises', int), @@ -77,6 +77,13 @@ EPISODE_METADATA_FIELDS = { ('keypoints', list) } +# What fields are required in break episode metadata? +BREAK_METADATA_FIELDS = { + ('layout', str), + ('title', str), + ('break', int) +} + # How long are lines allowed to be? MAX_LINE_LEN = 100 @@ -351,11 +358,27 @@ class CheckEpisode(CheckBase): def check_metadata(self): super(CheckEpisode, self).check_metadata() if self.metadata: - for (name, type_) in EPISODE_METADATA_FIELDS: - self.reporter.check(type(self.metadata.get(name, None)) == type_, - self.filename, - '"{0}" missing, empty, or has wrong type in metadata', - name) + if 'layout' in self.metadata: + if self.metadata['layout'] == 'break': + self.check_metadata_fields(BREAK_METADATA_FIELDS) + else: + self.reporter.add(self.filename, + 'Unknown episode layout "{0}"', + self.metadata['layout']) + else: + self.check_metadata_fields(TEACHING_METADATA_FIELDS) + + + def check_metadata_fields(self, expected): + for (name, type_) in expected: + if name not in self.metadata: + self.reporter.add(self.filename, + 'Missing metadata field {0}', + name) + elif type(self.metadata[name]) != type_: + self.reporter.add(self.filename, + '"{0}" has wrong type in metadata ({1} instead of {2})', + name, type(self.metadata[name]), type_) class CheckReference(CheckBase):