Merge pull request #176 from ngzhian/error-handling-output

Improve error handling
This commit is contained in:
Dougal Matthews
2014-10-30 08:19:30 +00:00
5 changed files with 22 additions and 11 deletions

View File

@@ -2,9 +2,9 @@
from mkdocs import utils
from mkdocs.compat import urlparse
import errno
from mkdocs.exceptions import ConfigurationError
import os
import sys
import yaml
DEFAULT_CONFIG = {
@@ -76,8 +76,7 @@ def load_config(filename='mkdocs.yml', options=None):
if 'config' in options:
filename = options['config']
if not os.path.exists(filename):
sys.stderr.write("Config file '%s' does not exist." % filename)
sys.exit(errno.ENOENT)
raise ConfigurationError("Config file '%s' does not exist." % filename)
with open(filename, 'r') as fp:
user_config = yaml.load(fp)
user_config.update(options)
@@ -89,8 +88,7 @@ def validate_config(user_config):
config.update(user_config)
if not config['site_name']:
sys.stderr.write("Config must contain 'site_name' setting.")
sys.exit(errno.EINVAL)
raise ConfigurationError("Config must contain 'site_name' setting.")
# If not specified, then the 'pages' config simply includes all
# markdown files in the docs dir, without generating any header items

2
mkdocs/exceptions.py Normal file
View File

@@ -0,0 +1,2 @@
class ConfigurationError(Exception):
"""Error in configuration"""

View File

@@ -2,12 +2,14 @@
# coding: utf-8
from __future__ import print_function
import sys
from mkdocs.build import build
from mkdocs.config import load_config
from mkdocs.exceptions import ConfigurationError
from mkdocs.gh_deploy import gh_deploy
from mkdocs.new import new
from mkdocs.serve import serve
import sys
def arg_to_option(arg):
@@ -53,7 +55,11 @@ def run_main():
"""
cmd = sys.argv[1] if len(sys.argv) >= 2 else None
opts = [arg_to_option(arg) for arg in sys.argv[2:] if arg.startswith('--')]
main(cmd, args=sys.argv[2:], options=dict(opts))
try:
main(cmd, args=sys.argv[2:], options=dict(opts))
except ConfigurationError as e:
print(e.args[0], file=sys.stderr)
if __name__ == '__main__':
run_main()

View File

@@ -103,9 +103,13 @@ def serve(config, options=None):
print('Running at: http://%s:%s/' % (host, port))
print('Live reload enabled.')
print('Hold ctrl+c to quit.')
server.serve_forever()
try:
server.serve_forever()
except KeyboardInterrupt:
print('Stopping server...')
# Clean up
observer.stop()
observer.join()
shutil.rmtree(tempdir)
print('Quit complete')

View File

@@ -4,6 +4,7 @@
from mkdocs import build, nav, toc, utils, config
from mkdocs.compat import PY2, zip
from mkdocs.exceptions import ConfigurationError
import markdown
import os
import shutil
@@ -26,12 +27,12 @@ class ConfigTests(unittest.TestCase):
def load_missing_config():
options = {'config': 'bad_filename.yaml'}
config.load_config(options=options)
self.assertRaises(SystemExit, load_missing_config)
self.assertRaises(ConfigurationError, load_missing_config)
def test_missing_site_name(self):
def load_missing_site_name():
config.validate_config({})
self.assertRaises(SystemExit, load_missing_site_name)
self.assertRaises(ConfigurationError, load_missing_site_name)
def test_config_option(self):
"""