Checking metadata fields more carefully
authorGreg Wilson <gvwilson@third-bit.com>
Wed, 22 Jun 2016 19:09:02 +0000 (15:09 -0400)
committerGreg Wilson <gvwilson@third-bit.com>
Wed, 22 Jun 2016 19:09:02 +0000 (15:09 -0400)
bin/lesson_check.py

index b2f0308133396ddfbe5dedc2ba382d8f1ec4a9b4..f2d391f016ff8db0b387527fbde142c5da464c14 100755 (executable)
@@ -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):