From 046dfbd4426dae68799194a428cdacf417d5ea3d Mon Sep 17 00:00:00 2001 From: Greg Wilson Date: Sat, 25 Jun 2016 22:23:19 -0400 Subject: [PATCH] Adding error handling for YAML import. 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 | 4 +--- bin/util.py | 16 +++++++++++++++- bin/workshop_check.py | 17 +++++++++++------ 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/bin/lesson_check.py b/bin/lesson_check.py index ef69f5e..c123984 100755 --- a/bin/lesson_check.py +++ b/bin/lesson_check.py @@ -8,7 +8,6 @@ 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') diff --git a/bin/util.py b/bin/util.py index 975560b..6af0a33 100644 --- a/bin/util.py +++ b/bin/util.py @@ -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) diff --git a/bin/workshop_check.py b/bin/workshop_check.py index 3b6f6f2..d018b78 100755 --- a/bin/workshop_check.py +++ b/bin/workshop_check.py @@ -7,7 +7,6 @@ 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():