diff options
| author | Ed Tanous <ed.tanous@intel.com> | 2018-09-13 13:45:51 -0700 |
|---|---|---|
| committer | Ed Tanous <ed.tanous@intel.com> | 2018-10-16 17:16:23 +0000 |
| commit | 118b1c7102e942ace53dac9f92a954864462eebe (patch) | |
| tree | b742a69c9acc217eeab936098948029a06a652bc /scripts | |
| parent | bdd1c8360a29d18178297e580bbde4af9e2e60a5 (diff) | |
| download | bmcweb-118b1c7102e942ace53dac9f92a954864462eebe.tar.gz bmcweb-118b1c7102e942ace53dac9f92a954864462eebe.zip | |
Fix JsonSchema indexes
JsonSchema was throwing errors in the validator, so implement changes to
the update script to add the appropiate indexes.
Tested by:
Schema validator passes on the JsonSchema Fields
Change-Id: I6cb2737901b55c1089aef744d3ce3c3dfe13f17f
Signed-off-by: Ed Tanous <ed.tanous@intel.com>
Diffstat (limited to 'scripts')
| -rwxr-xr-x | scripts/update_schemas.py | 93 |
1 files changed, 82 insertions, 11 deletions
diff --git a/scripts/update_schemas.py b/scripts/update_schemas.py index 1fc5ca8..11c0325 100755 --- a/scripts/update_schemas.py +++ b/scripts/update_schemas.py @@ -9,6 +9,8 @@ from distutils.version import StrictVersion import shutil import json +import xml.etree.ElementTree as ET + SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) proxies = { @@ -25,6 +27,7 @@ static_path = os.path.realpath(os.path.join(SCRIPT_DIR, "..", "static", schema_path = os.path.join(static_path, "schema") json_schema_path = os.path.join(static_path, "JsonSchemas") +metadata_index_path = os.path.join(static_path, "$metadata", "index.xml") zipBytesIO = BytesIO(r.content) zip_ref = zipfile.ZipFile(zipBytesIO) @@ -33,16 +36,59 @@ zip_ref = zipfile.ZipFile(zipBytesIO) if os.path.exists(schema_path): shutil.rmtree(schema_path) if os.path.exists(json_schema_path): - shutil.rmtree(json_schema_path) -os.makedirs(schema_path) -os.makedirs(json_schema_path) - -for zip_filepath in zip_ref.namelist(): - - if zip_filepath.startswith('metadata/'): - filename = os.path.basename(zip_filepath) - with open(os.path.join(schema_path, filename), 'wb') as schema_file: - schema_file.write(zip_ref.read(zip_filepath)) + files = glob.glob(os.path.join(json_schema_path, '[!Oem]*')) + for f in files: + if (os.path.isfile(f)): + os.remove(f) + else: + shutil.rmtree(f) +os.remove(metadata_index_path) + +if not os.path.exists(schema_path): + os.makedirs(schema_path) +if not os.path.exists(json_schema_path): + os.makedirs(json_schema_path) + +with open(metadata_index_path, 'w') as metadata_index: + + metadata_index.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n") + metadata_index.write( + "<edmx:Edmx xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\" Version=\"4.0\">\n") + + for zip_filepath in zip_ref.namelist(): + if zip_filepath.startswith('metadata/'): + filename = os.path.basename(zip_filepath) + with open(os.path.join(schema_path, filename), 'wb') as schema_file: + + metadata_index.write( + " <edmx:Reference Uri=\"/redfish/v1/schema/" + filename + "\">\n") + + content = zip_ref.read(zip_filepath) + xml_root = ET.fromstring(content) + + for edmx_child in xml_root: + + if edmx_child.tag == "{http://docs.oasis-open.org/odata/ns/edmx}DataServices": + for data_child in edmx_child: + if data_child.tag == "{http://docs.oasis-open.org/odata/ns/edm}Schema": + namespace = data_child.attrib["Namespace"] + if namespace.startswith("RedfishExtensions"): + metadata_index.write( + " <edmx:Include Namespace=\"" + namespace + "\" Alias=\"Redfish\"/>\n") + + else: + metadata_index.write( + " <edmx:Include Namespace=\"" + namespace + "\"/>\n") + schema_file.write(content) + metadata_index.write(" </edmx:Reference>\n") + + metadata_index.write(""" <edmx:DataServices> + <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Service"> + <EntityContainer Name="Service" Extends="ServiceRoot.v1_0_0.ServiceContainer"/> + </Schema> + </edmx:DataServices> +""") + metadata_index.write("</edmx:Edmx>\n") schema_files = {} for zip_filepath in zip_ref.namelist(): @@ -65,7 +111,32 @@ for schema, version in schema_files.items(): zip_filepath = os.path.join("json-schema", basename) schemadir = os.path.join(json_schema_path, schema) os.makedirs(schemadir) - with open(os.path.join(schemadir, "index.json"), 'wb') as schema_file: + + index_json = { + "@odata.context": "/redfish/v1/$metadata#JsonSchemaFile.JsonSchemaFile", + "@odata.id": "/redfish/v1/JSONSchemas/" + schema, + "@odata.type": "#JsonSchemaFile.v1_0_2.JsonSchemaFile", + "Name": schema + " Schema File", + "Schema": "#" + schema + "." + schema, + "Description": schema + " Schema File Location", + "Id": schema, + "Languages": [ + "en" + ], + "Languages@odata.count": 1, + "Location": [ + { + "Language": "en", + "PublicationUri": "http://redfish.dmtf.org/schemas/v1/" + schema + ".json", + "Uri": "/redfish/v1/JSONSchemas/" + schema + "/" + schema + ".json" + } + ], + "Location@odata.count": 1, + } + + with open(os.path.join(schemadir, "index.json"), 'w') as schema_file: + json.dump(index_json, schema_file, indent=4) + with open(os.path.join(schemadir, schema + ".json"), 'wb') as schema_file: schema_file.write(zip_ref.read(zip_filepath)) with open(os.path.join(json_schema_path, "index.json"), 'w') as index_file: |

