diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/parse_registries.py | 185 |
1 files changed, 104 insertions, 81 deletions
diff --git a/scripts/parse_registries.py b/scripts/parse_registries.py index bc546575e3..bfe87ef773 100755 --- a/scripts/parse_registries.py +++ b/scripts/parse_registries.py @@ -3,6 +3,7 @@ import json import os import requests +import argparse PRAGMA_ONCE = '''#pragma once ''' @@ -53,90 +54,80 @@ def make_getter(dmtf_name, header_name, type_name): return (path, json_file, type_name, url) -files = [] -files.append(make_getter('Base.1.13.0.json', - 'base_message_registry.hpp', - 'base')) -files.append(make_getter('TaskEvent.1.0.3.json', - 'task_event_message_registry.hpp', - 'task_event')) -files.append(make_getter('ResourceEvent.1.0.3.json', - 'resource_event_message_registry.hpp', - 'resource_event')) - -# Remove the old files -for file, json_dict, namespace, url in files: - try: - os.remove(file) - except BaseException: - print("{} not found".format(file)) - - with open(file, 'w') as registry: - registry.write(REGISTRY_HEADER.format(namespace)) - # Parse the Registry header info - registry.write( - "const Header header = {{\n" - " \"{json_dict[@Redfish.Copyright]}\",\n" - " \"{json_dict[@odata.type]}\",\n" - " \"{json_dict[Id]}\",\n" - " \"{json_dict[Name]}\",\n" - " \"{json_dict[Language]}\",\n" - " \"{json_dict[Description]}\",\n" - " \"{json_dict[RegistryPrefix]}\",\n" - " \"{json_dict[RegistryVersion]}\",\n" - " \"{json_dict[OwningEntity]}\",\n" - "}};\n" - "constexpr const char* url =\n" - " \"{url}\";\n" - "\n" - "constexpr std::array registry =\n" - "{{\n".format( - json_dict=json_dict, - url=url, - )) - - messages_sorted = sorted(json_dict["Messages"].items()) - for messageId, message in messages_sorted: +def update_registries(files): + # Remove the old files + for file, json_dict, namespace, url in files: + try: + os.remove(file) + except BaseException: + print("{} not found".format(file)) + + with open(file, 'w') as registry: + registry.write(REGISTRY_HEADER.format(namespace)) + # Parse the Registry header info registry.write( - " MessageEntry{{\n" - " \"{messageId}\",\n" - " {{\n" - " \"{message[Description]}\",\n" - " \"{message[Message]}\",\n" - " \"{message[MessageSeverity]}\",\n" - " {message[NumberOfArgs]},\n" - " {{".format( - messageId=messageId, - message=message + "const Header header = {{\n" + " \"{json_dict[@Redfish.Copyright]}\",\n" + " \"{json_dict[@odata.type]}\",\n" + " \"{json_dict[Id]}\",\n" + " \"{json_dict[Name]}\",\n" + " \"{json_dict[Language]}\",\n" + " \"{json_dict[Description]}\",\n" + " \"{json_dict[RegistryPrefix]}\",\n" + " \"{json_dict[RegistryVersion]}\",\n" + " \"{json_dict[OwningEntity]}\",\n" + "}};\n" + "constexpr const char* url =\n" + " \"{url}\";\n" + "\n" + "constexpr std::array registry =\n" + "{{\n".format( + json_dict=json_dict, + url=url, )) - paramTypes = message.get("ParamTypes") - if paramTypes: - for paramType in paramTypes: - registry.write( - "\n" - " \"{}\",".format(paramType) - ) - registry.write("\n },\n") - else: - registry.write("},\n") - registry.write( - " \"{message[Resolution]}\",\n" - " }}}},\n".format(message=message)) - registry.write( - "\n};\n" - "\n" - "enum class Index\n" - "{\n" - ) - for index, (messageId, message) in enumerate(messages_sorted): - messageId = messageId[0].lower() + messageId[1:] + messages_sorted = sorted(json_dict["Messages"].items()) + for messageId, message in messages_sorted: + registry.write( + " MessageEntry{{\n" + " \"{messageId}\",\n" + " {{\n" + " \"{message[Description]}\",\n" + " \"{message[Message]}\",\n" + " \"{message[MessageSeverity]}\",\n" + " {message[NumberOfArgs]},\n" + " {{".format( + messageId=messageId, + message=message + )) + paramTypes = message.get("ParamTypes") + if paramTypes: + for paramType in paramTypes: + registry.write( + "\n" + " \"{}\",".format(paramType) + ) + registry.write("\n },\n") + else: + registry.write("},\n") + registry.write( + " \"{message[Resolution]}\",\n" + " }}}},\n".format(message=message)) + registry.write( - " {} = {},\n".format(messageId, index)) - registry.write( - "}};\n" - "}} // namespace redfish::registries::{}\n" - .format(namespace)) + "\n};\n" + "\n" + "enum class Index\n" + "{\n" + ) + for index, (messageId, message) in enumerate(messages_sorted): + messageId = messageId[0].lower() + messageId[1:] + registry.write( + " {} = {},\n".format(messageId, index)) + registry.write( + "}};\n" + "}} // namespace redfish::registries::{}\n" + .format(namespace)) def get_privilege_string_from_list(privilege_list): @@ -221,4 +212,36 @@ def make_privilege_registry(): "// clang-format on\n") -make_privilege_registry() +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + '--registries', type=str, + default="base,task_event,resource_event,privilege", + help="Comma delimited list of registries to update") + + args = parser.parse_args() + + registries = set(args.registries.split(",")) + files = [] + + if "base" in registries: + files.append(make_getter('Base.1.13.0.json', + 'base_message_registry.hpp', + 'base')) + if "task_event" in registries: + files.append(make_getter('TaskEvent.1.0.3.json', + 'task_event_message_registry.hpp', + 'task_event')) + if "resource_event" in registries: + files.append(make_getter('ResourceEvent.1.0.3.json', + 'resource_event_message_registry.hpp', + 'resource_event')) + + update_registries(files) + + if "privilege" in registries: + make_privilege_registry() + + +if __name__ == "__main__": + main() |