Use additionalProperties = False only during the validation. Fixes #538

This commit is contained in:
grossmj 2020-08-27 00:30:24 +09:30
parent 99878a86b7
commit ff58d86256

View File

@ -29,6 +29,18 @@ SCHEMA_VERSIONS = [3, 4, 5, 6]
warnings = 0 warnings = 0
def no_additional_properties(schema):
if 'items' in schema:
schema = schema['items']
if 'properties' in schema:
if 'additionalProperties' not in schema:
schema['additionalProperties'] = False
for key in schema['properties']:
if isinstance(schema['properties'][key], dict):
no_additional_properties(schema['properties'][key])
def validate_schema(appliance_json, name, schemas): def validate_schema(appliance_json, name, schemas):
global warnings global warnings
@ -51,13 +63,11 @@ def validate_schema(appliance_json, name, schemas):
pass pass
def signal_abort(sig, frame): def signal_abort(sig, frame):
print('\n\n=> Check aborted\n') print('\n\n=> Check aborted\n')
sys.exit(0) sys.exit(0)
def check_appliance(appliance): def check_appliance(appliance):
global warnings global warnings
images = {} images = {}
@ -68,6 +78,7 @@ def check_appliance(appliance):
schema_filename = "schemas/appliance_v{}.json".format(version) schema_filename = "schemas/appliance_v{}.json".format(version)
with open(schema_filename) as f: with open(schema_filename) as f:
schemas[version] = json.load(f) schemas[version] = json.load(f)
no_additional_properties(schemas[version])
with open(os.path.join('appliances', appliance)) as f: with open(os.path.join('appliances', appliance)) as f:
appliance_json = json.load(f) appliance_json = json.load(f)
@ -124,6 +135,7 @@ def image_get_height(filename):
use_imagemagick = shutil.which("identify") use_imagemagick = shutil.which("identify")
def check_symbol(symbol): def check_symbol(symbol):
licence_file = os.path.join('symbols', symbol.replace('.svg', '.txt')) licence_file = os.path.join('symbols', symbol.replace('.svg', '.txt'))
if not os.path.exists(licence_file): if not os.path.exists(licence_file):
@ -159,5 +171,6 @@ def main():
else: else:
print("Everything is ok!") print("Everything is ok!")
if __name__ == '__main__': if __name__ == '__main__':
main() main()