diff --git a/datasette/cli.py b/datasette/cli.py index 66cce81d..2f61559a 100644 --- a/datasette/cli.py +++ b/datasette/cli.py @@ -7,7 +7,12 @@ import shutil from subprocess import call, check_output import sys from .app import Datasette, DEFAULT_CONFIG, CONFIG_OPTIONS -from .utils import temporary_docker_directory, temporary_heroku_directory +from .utils import ( + temporary_docker_directory, + temporary_heroku_directory, + value_as_boolean, + ValueAsBooleanError, +) class StaticMount(click.ParamType): @@ -36,17 +41,22 @@ class Config(click.ParamType): return name, value = config.split(":") if name not in DEFAULT_CONFIG: - self.fail("{} is not a valid option".format(name), param, ctx) + self.fail( + "{} is not a valid option (--help-config to see all)".format( + name + ), param, ctx + ) return # Type checking default = DEFAULT_CONFIG[name] if isinstance(default, bool): - if value.lower() not in ('on', 'off', 'true', 'false', '1', '0'): + try: + return name, value_as_boolean(value) + except ValueAsBooleanError: self.fail( - '"{}" should be on/off/true/false'.format(name), param, ctx + '"{}" should be on/off/true/false/1/0'.format(name), param, ctx ) return - return name, value.lower() in ('on', 'true', '1') elif isinstance(default, int): if not value.isdigit(): self.fail( diff --git a/datasette/utils.py b/datasette/utils.py index 0b1f9f65..299d7a4e 100644 --- a/datasette/utils.py +++ b/datasette/utils.py @@ -800,3 +800,13 @@ def path_with_format(request, format, extra_qs=None): elif request.query_string: path = "{}?{}".format(path, request.query_string) return path + + +def value_as_boolean(value): + if value.lower() not in ('on', 'off', 'true', 'false', '1', '0'): + raise ValueAsBooleanError + return value.lower() in ('on', 'true', '1') + + +class ValueAsBooleanError(ValueError): + pass