| Viewing file:  cli.py (2.26 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
"""The ``jsonschema`` command line.
 """
 from __future__ import absolute_import
 import argparse
 import json
 import sys
 
 from jsonschema import __version__
 from jsonschema._reflect import namedAny
 from jsonschema.validators import validator_for
 
 
 def _namedAnyWithDefault(name):
 if "." not in name:
 name = "jsonschema." + name
 return namedAny(name)
 
 
 def _json_file(path):
 with open(path) as file:
 return json.load(file)
 
 
 parser = argparse.ArgumentParser(
 description="JSON Schema Validation CLI",
 )
 parser.add_argument(
 "-i", "--instance",
 action="append",
 dest="instances",
 type=_json_file,
 help=(
 "a path to a JSON instance (i.e. filename.json) "
 "to validate (may be specified multiple times)"
 ),
 )
 parser.add_argument(
 "-F", "--error-format",
 default="{error.instance}: {error.message}\n",
 help=(
 "the format to use for each error output message, specified in "
 "a form suitable for passing to str.format, which will be called "
 "with 'error' for each error"
 ),
 )
 parser.add_argument(
 "-V", "--validator",
 type=_namedAnyWithDefault,
 help=(
 "the fully qualified object name of a validator to use, or, for "
 "validators that are registered with jsonschema, simply the name "
 "of the class."
 ),
 )
 parser.add_argument(
 "--version",
 action="version",
 version=__version__,
 )
 parser.add_argument(
 "schema",
 help="the JSON Schema to validate with (i.e. schema.json)",
 type=_json_file,
 )
 
 
 def parse_args(args):
 arguments = vars(parser.parse_args(args=args or ["--help"]))
 if arguments["validator"] is None:
 arguments["validator"] = validator_for(arguments["schema"])
 return arguments
 
 
 def main(args=sys.argv[1:]):
 sys.exit(run(arguments=parse_args(args=args)))
 
 
 def run(arguments, stdout=sys.stdout, stderr=sys.stderr):
 error_format = arguments["error_format"]
 validator = arguments["validator"](schema=arguments["schema"])
 
 validator.check_schema(arguments["schema"])
 
 errored = False
 for instance in arguments["instances"] or ():
 for error in validator.iter_errors(instance):
 stderr.write(error_format.format(error=error))
 errored = True
 return errored
 
 |