''' Validates that the json has meaningful keys ''' import itertools a = { 'required' : [ { 'component': 'TextField', 'data': { 'display_name': 'filename', 'help_text': 'path to file you want to process', 'command_args': ['-f', '--infile'] } }, { 'component': 'FileChooser', 'data': { 'display_name': 'Output Location', 'help_text': 'Where to save the file', 'command_args': ['-o', '--outfile'] } } ], 'optional' : [ { 'component': 'RadioGroup', 'data': [ { 'display_name': 'Output Location', 'help_text': 'Where to save the file', 'command_args': ['-o', '--outfile'] }, { 'display_name': 'Output Location', 'help_text': 'Where to save the file', 'command_args': ['-o', '--outfile'] } ] } ] } VALID_WIDGETS = ( 'FileChooser', 'DirChooser', 'DateChooser', 'TextField', 'Dropdown', 'Counter', 'RadioGroup' ) class MalformedBuildSpecException(Exception): pass def validate(json_string): required = json_string.get('required') optional = json_string.get('optional') if not required or not optional: raise MalformedBuildSpecException("All objects must be children of 'required,' or 'optional'") objects = [item for key in json_string for item in json_string[key]] for obj in objects: if obj['component'] not in VALID_WIDGETS: raise MalformedBuildSpecException("Invalid Component name: {0}".format(obj['component'])) if __name__ == '__main__': validate(a)