Sleds/scorewalker-utils/ValidationWalker/ValidationWalker.py

101 lines
3.5 KiB
Python

# We do all our imports at the top of our program.
import argparse
import os
import sys
import validictory
import json
import ConsoleUtils
# Give the program a name.
program_name = 'ValidationWalker'
# Describe what the program does beiefly.
program_description = 'Validates ScoreWalker output against JSON schemas.'
author = 'Chris Diesch'
# The argument parser for the program.
parser = argparse.ArgumentParser(prog=program_name, description=program_description, add_help=False)
# Error and Warning console values:
red_error = '\033[91mError:\033[0m'
yellow_warning = '\033[93mWARNING:\033[0m'
blue_okay = '\033[94mOK\033[0m'
build_date = '2017.07.31'
program_version = '1.0.0'
side_bound_char = '|'
line_break_char = '-'
corner_char = '+'
line_break_size = 80
line_break = line_break_char * line_break_size
printer = ConsoleUtils.SLPrinter(program_name)
sys.stdout = printer
schema = {}
schema_loc = r'C:\Users\chris\Documents\Code\Git\scorewalker-utils\ValidationWalker\ClassificationOutput.json'
with open(schema_loc) as reader:
schema = json.loads(reader.read())
# This is the main function of the program.
def main(walker_output):
print('Validating JSON in "%s"' % walker_output)
with open(walker_output) as walker_json:
validictory.validate(json.load(walker_json), schema)
print('JSON in "%s" is valid' % walker_output)
# This is where we do a check of the arguments If necessary (perhaps you only take certain inputs for an argument).
# NOTE: We MUST define each optional argument as global here, so that we may change the default value defined above.
def check_args(walker_output):
fatal_errors = False
if not os.path.exists(walker_output):
print('Error: File at "%s" does not exist' % walker_output)
fatal_errors = True
# We only exit if a required argument was bad, we can handle optional arguments.
if fatal_errors:
parser.print_help()
print('Exiting...')
exit(0)
# Prints the argument values passed in.
def show_args(walker_output):
print('Loading schema from "%s"' % schema_loc)
print('ScoreWalker output to validate: "%s"' % walker_output)
# This may or may not need to be changed depending on your use-case, it generates a header based on the values:
# side_bound_char, line_break, program_name, program_version, build_date, and author
def show_header():
printer.write_no_prefix(ConsoleUtils.get_header(program_name, program_version, build_date, author, 80))
# Set up arguments here; more groups can be made if required.
def make_args():
# A group for required arguments
required_args = parser.add_argument_group('Required')
optional_args = parser.add_argument_group('Optional')
required_args.add_argument('-i', '--input_file', required=True,
help='Use {arg} as the path to the file to validate against the schema.')
optional_args.add_argument('-h', '--help', action="help", help='Prints the help message.')
# This is where we call the main method from.
if __name__ == '__main__':
show_header()
make_args()
# Get the arguments, we don't need to do a check for required arguments, since the ArgumentParser class does that
# for us already in the 'parse_args' method. We can do custom argument checks in our 'check_args' method.
args = parser.parse_args()
# Get the argument.
walker_file = args.input_file
# Do an argument check.
show_args(walker_file)
check_args(walker_file)
# Now we can run...
main(walker_file)