mirror of
https://github.com/mkdocs/mkdocs.git
synced 2026-03-27 09:58:31 +07:00
Merge pull request #176 from ngzhian/error-handling-output
Improve error handling
This commit is contained in:
@@ -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
2
mkdocs/exceptions.py
Normal file
@@ -0,0 +1,2 @@
|
||||
class ConfigurationError(Exception):
|
||||
"""Error in configuration"""
|
||||
@@ -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()
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user