def main(): # pragma: no cover parser = create_parser() args = parser.parse_args() if args.mode != Mode.optimize and (args.type == QueryType.draco or args.type == QueryType.cql): print('Validation only works with full specs.', sys.stderr) else: logger.info(f'Processing query: {args.query.name} ...') if args.type == QueryType.asp: input_task = AspTask(args.query.read()) else: # load a task from a spec provided by the user query_spec = json.load(args.query) d = args.base or os.path.dirname(args.query.name) if args.type == QueryType.draco: input_task = Task.from_obj(query_spec, d) elif args.type == QueryType.cql: input_task = Task.from_cql(query_spec, d) elif args.type == QueryType.vl: input_task = Task.from_vegalite(query_spec, d) if args.mode == Mode.violations: task = run(input_task, debug=args.debug, files=['define.lp', 'hard.lp', 'soft.lp', 'output.lp'], silence_warnings=True) if task: print(task.violations, file=args.out) elif args.mode == Mode.valid: task = run(input_task, debug=args.debug, files=['define.lp', 'hard.lp', 'output.lp'], silence_warnings=True) print('valid' if task else 'invalid', file=args.out) elif args.mode == Mode.optimize: task = run(input_task, debug=args.debug) if task: print(task.to_vegalite_json(), file=args.out) logger.info(f'Cost: {task.cost}') outname = 'stringIO' if isinstance( args.out, io.StringIO) else args.out.name logger.info(f'Wrote Vega-Lite spec to {outname}') # close open files if args.query is not sys.stdin: args.query.close() if args.out is not sys.stdout: args.out.close()
def test_output_schema(self): json_files = [ os.path.join(EXAMPLES_DIR, fname) for fname in os.listdir(EXAMPLES_DIR) if fname.endswith('.json') and not fname.endswith('.vl.json') ] with open('node_modules/vega-lite/build/vega-lite-schema.json') as sf: schema = json.load(sf) for fname in json_files: with open(fname, 'r') as f: query_spec = json.load(f) input_task = Task.from_obj(query_spec, os.path.dirname(f.name)) task = run(input_task) validate(task.to_vegalite(), schema)