Adding error handling for YAML import.
authorGreg Wilson <gvwilson@third-bit.com>
Sun, 26 Jun 2016 02:23:19 +0000 (22:23 -0400)
committerGreg Wilson <gvwilson@third-bit.com>
Sun, 26 Jun 2016 02:23:19 +0000 (22:23 -0400)
1.  Moving all YAML library usage into 'util.py' via utility function.
2.  Wrapping 'import yaml' in error handling to report what library to install.

bin/lesson_check.py
bin/util.py
bin/workshop_check.py

index ef69f5e3f7d0329e0c3bb1800f1c417bfcf9387d..c123984aad2e325770098e9eb7721ed91129f5ae 100755 (executable)
@@ -8,7 +8,6 @@ import sys
 import os
 import glob
 import json
-import yaml
 import re
 from optparse import OptionParser
 
@@ -131,8 +130,7 @@ def check_config(reporter, source_dir):
     """Check configuration file."""
 
     config_file = os.path.join(source_dir, '_config.yml')
-    with open(config_file, 'r') as reader:
-        config = yaml.load(reader)
+    config = load_yaml(config_file)
     reporter.check_field(config_file, 'configuration', config, 'kind', 'lesson')
 
 
index 975560bfb71f2b459cd12f9ba6b8f56213585ce1..6af0a3317061d8663dafad9de41aec2156b7e597 100644 (file)
@@ -1,8 +1,12 @@
 import sys
 import json
-import yaml
 from subprocess import Popen, PIPE
 
+try:
+    import yaml
+except ImportError:
+    print('Unable to import YAML module: please install PyYAML', file=sys.stderr)
+    sys.exit(1)
 
 class Reporter(object):
     """Collect and report errors."""
@@ -106,3 +110,13 @@ def split_metadata(path, text):
             sys.exit(1)
 
     return metadata_raw, metadata_yaml, text
+
+
+def load_yaml(filename):
+    """
+    Wrapper around YAML loading so that 'import yaml' and error
+    handling is only needed in one place.
+    """
+
+    with open(filename, 'r') as reader:
+        return yaml.load(reader)
index 3b6f6f2e7fbf4d8fd01068c5a578fa5d3d9a2aa2..d018b78906171d3427350ad1dcba0d627435effd 100755 (executable)
@@ -7,7 +7,6 @@ docstrings on the checking functions for a summary of the checks.
 import sys
 import os
 import re
-import yaml
 from datetime import date
 from util import Reporter, split_metadata
 
@@ -373,13 +372,19 @@ def check_config(reporter, filename):
     Check YAML configuration file.
     """
 
-    with open(filename, 'r') as reader:
-        config = yaml.load(reader)
+    config = load_yaml(filename)
 
-    reporter.check(config['kind'] == 'workshop',
+    kind = config.get('kind', None)
+    reporter.check(kind == 'workshop',
                    filename,
-                   'Not configured as a workshop: found "{0}" instead',
-                   config['kind'])
+                   'Missing or unknown kind of event: {0}',
+                   kind)
+
+    carpentry = config.get('carpentry', None)
+    reporter.check(carpentry in ('swc', 'dc'),
+                   filename,
+                   'Missing or unknown carpentry: {0}',
+                   carpentry)
 
 
 def main():