pyegeria 5.3.9.9.3__py3-none-any.whl → 5.5.3.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pyegeria might be problematic. Click here for more details.

Files changed (272) hide show
  1. commands/__init__.py +24 -0
  2. commands/cat/Dr-Egeria_md-orig.py +2 -2
  3. commands/cat/__init__.py +1 -17
  4. commands/cat/collection_actions.py +197 -0
  5. commands/cat/dr_egeria_command_help.py +372 -0
  6. commands/cat/dr_egeria_jupyter.py +7 -7
  7. commands/cat/dr_egeria_md.py +27 -182
  8. commands/cat/exp_list_glossaries.py +11 -14
  9. commands/cat/get_asset_graph.py +37 -267
  10. commands/cat/{get_collection.py → get_collection_tree.py} +10 -18
  11. commands/cat/get_project_dependencies.py +14 -14
  12. commands/cat/get_project_structure.py +15 -14
  13. commands/cat/get_tech_type_elements.py +16 -116
  14. commands/cat/glossary_actions.py +145 -298
  15. commands/cat/list_assets.py +3 -11
  16. commands/cat/list_cert_types.py +17 -63
  17. commands/cat/list_collections.py +46 -138
  18. commands/cat/list_deployed_catalogs.py +15 -27
  19. commands/cat/list_deployed_database_schemas.py +27 -43
  20. commands/cat/list_deployed_databases.py +16 -31
  21. commands/cat/list_deployed_servers.py +35 -54
  22. commands/cat/list_glossaries.py +18 -17
  23. commands/cat/list_projects.py +10 -12
  24. commands/cat/list_tech_type_elements.py +21 -37
  25. commands/cat/list_tech_types.py +13 -25
  26. commands/cat/list_terms.py +38 -79
  27. commands/cat/list_todos.py +4 -11
  28. commands/cat/list_user_ids.py +3 -10
  29. commands/cat/my_reports.py +559 -0
  30. commands/cat/run_report.py +394 -0
  31. commands/cat/run_report_orig.py +528 -0
  32. commands/cli/egeria.py +222 -247
  33. commands/cli/egeria_cat.py +68 -81
  34. commands/cli/egeria_my.py +13 -0
  35. commands/cli/egeria_ops.py +69 -74
  36. commands/cli/egeria_tech.py +17 -93
  37. commands/cli/ops_config.py +3 -6
  38. commands/{cat/list_categories.py → deprecated/list_data_designer.py} +53 -64
  39. commands/{cat/list_data_structures.py → deprecated/list_data_structures_full.py} +3 -6
  40. commands/deprecated/old_get_asset_graph.py +315 -0
  41. commands/my/__init__.py +0 -2
  42. commands/my/list_my_profile.py +27 -34
  43. commands/my/list_my_roles.py +1 -7
  44. commands/my/monitor_my_todos.py +1 -7
  45. commands/my/monitor_open_todos.py +6 -7
  46. commands/my/todo_actions.py +4 -5
  47. commands/ops/__init__.py +0 -2
  48. commands/ops/gov_server_actions.py +17 -21
  49. commands/ops/list_archives.py +17 -38
  50. commands/ops/list_catalog_targets.py +33 -40
  51. commands/ops/load_archive.py +35 -26
  52. commands/ops/{monitor_engine_activity_c.py → monitor_active_engine_activity.py} +51 -82
  53. commands/ops/{monitor_integ_daemon_status.py → monitor_daemon_status.py} +35 -55
  54. commands/ops/monitor_engine_activity.py +79 -77
  55. commands/ops/{monitor_gov_eng_status.py → monitor_engine_status.py} +10 -7
  56. commands/ops/monitor_platform_status.py +38 -50
  57. commands/ops/monitor_server_startup.py +6 -11
  58. commands/ops/monitor_server_status.py +7 -11
  59. commands/ops/orig_monitor_server_list.py +8 -8
  60. commands/ops/orig_monitor_server_status.py +1 -5
  61. commands/ops/refresh_integration_daemon.py +5 -5
  62. commands/ops/restart_integration_daemon.py +5 -5
  63. commands/ops/table_integ_daemon_status.py +6 -6
  64. commands/ops/x_engine_actions.py +7 -7
  65. commands/tech/__init__.py +0 -2
  66. commands/tech/{generic_actions.py → element_actions.py} +6 -11
  67. commands/tech/get_element_info.py +20 -29
  68. commands/tech/get_guid_info.py +23 -42
  69. commands/tech/get_tech_details.py +20 -35
  70. commands/tech/get_tech_type_template.py +28 -39
  71. commands/tech/list_all_om_type_elements.py +24 -30
  72. commands/tech/list_all_om_type_elements_x.py +22 -28
  73. commands/tech/list_all_related_elements.py +19 -28
  74. commands/tech/list_anchored_elements.py +22 -30
  75. commands/tech/list_asset_types.py +19 -24
  76. commands/tech/list_elements_by_classification_by_property_value.py +26 -32
  77. commands/tech/list_elements_by_property_value.py +19 -25
  78. commands/tech/list_elements_by_property_value_x.py +20 -28
  79. commands/tech/list_elements_for_classification.py +28 -41
  80. commands/tech/list_gov_action_processes.py +16 -27
  81. commands/tech/list_information_supply_chains.py +22 -30
  82. commands/tech/list_registered_services.py +14 -26
  83. commands/tech/list_related_elements_with_prop_value.py +15 -25
  84. commands/tech/list_related_specification.py +1 -4
  85. commands/tech/list_relationship_types.py +15 -25
  86. commands/tech/list_relationships.py +20 -36
  87. commands/tech/list_solution_blueprints.py +28 -33
  88. commands/tech/list_solution_components.py +23 -29
  89. commands/tech/list_solution_roles.py +21 -32
  90. commands/tech/list_tech_templates.py +51 -54
  91. commands/tech/list_valid_metadata_values.py +5 -9
  92. commands/tech/table_tech_templates.py +2 -6
  93. commands/tech/x_list_related_elements.py +1 -4
  94. examples/GeoSpatial Products Example.py +524 -0
  95. examples/Jupyter Notebooks/P-egeria-server-config.ipynb +2137 -0
  96. examples/Jupyter Notebooks/README.md +2 -0
  97. examples/Jupyter Notebooks/common/P-environment-check.ipynb +115 -0
  98. examples/Jupyter Notebooks/common/__init__.py +14 -0
  99. examples/Jupyter Notebooks/common/common-functions.ipynb +4694 -0
  100. examples/Jupyter Notebooks/common/environment-check.ipynb +52 -0
  101. examples/Jupyter Notebooks/common/globals.ipynb +184 -0
  102. examples/Jupyter Notebooks/common/globals.py +154 -0
  103. examples/Jupyter Notebooks/common/orig_globals.py +152 -0
  104. examples/format_sets/all_format_sets.json +910 -0
  105. examples/format_sets/custom_format_sets.json +268 -0
  106. examples/format_sets/subset_format_sets.json +187 -0
  107. examples/format_sets_save_load_example.py +291 -0
  108. examples/jacquard_data_sets.py +129 -0
  109. examples/output_formats_example.py +193 -0
  110. examples/test_jacquard_data_sets.py +54 -0
  111. examples/test_jacquard_data_sets_scenarios.py +94 -0
  112. md_processing/__init__.py +90 -0
  113. md_processing/command_dispatcher.py +33 -0
  114. md_processing/command_mapping.py +221 -0
  115. md_processing/data/commands/commands_data_designer.json +537 -0
  116. md_processing/data/commands/commands_external_reference.json +733 -0
  117. md_processing/data/commands/commands_feedback.json +155 -0
  118. md_processing/data/commands/commands_general.json +204 -0
  119. md_processing/data/commands/commands_glossary.json +218 -0
  120. md_processing/data/commands/commands_governance.json +3678 -0
  121. md_processing/data/commands/commands_product_manager.json +865 -0
  122. md_processing/data/commands/commands_project.json +642 -0
  123. md_processing/data/commands/commands_solution_architect.json +366 -0
  124. md_processing/data/commands.json +17568 -0
  125. md_processing/data/commands_working.json +30641 -0
  126. md_processing/data/gened_report_specs.py +6584 -0
  127. md_processing/data/generated_format_sets.json +6533 -0
  128. md_processing/data/generated_format_sets_old.json +4137 -0
  129. md_processing/data/generated_format_sets_old.py +45 -0
  130. md_processing/dr_egeria.py +182 -0
  131. md_processing/md_commands/__init__.py +3 -0
  132. md_processing/md_commands/data_designer_commands.py +1276 -0
  133. md_processing/md_commands/ext_ref_commands.py +530 -0
  134. md_processing/md_commands/feedback_commands.py +726 -0
  135. md_processing/md_commands/glossary_commands.py +684 -0
  136. md_processing/md_commands/governance_officer_commands.py +600 -0
  137. md_processing/md_commands/product_manager_commands.py +1266 -0
  138. md_processing/md_commands/project_commands.py +383 -0
  139. md_processing/md_commands/solution_architect_commands.py +1184 -0
  140. md_processing/md_commands/view_commands.py +295 -0
  141. md_processing/md_processing_utils/__init__.py +4 -0
  142. md_processing/md_processing_utils/common_md_proc_utils.py +1249 -0
  143. md_processing/md_processing_utils/common_md_utils.py +578 -0
  144. md_processing/md_processing_utils/determine_width.py +103 -0
  145. md_processing/md_processing_utils/extraction_utils.py +547 -0
  146. md_processing/md_processing_utils/gen_report_specs.py +643 -0
  147. md_processing/md_processing_utils/generate_dr_help.py +193 -0
  148. md_processing/md_processing_utils/generate_md_cmd_templates.py +144 -0
  149. md_processing/md_processing_utils/generate_md_templates.py +83 -0
  150. md_processing/md_processing_utils/md_processing_constants.py +1228 -0
  151. md_processing/md_processing_utils/message_constants.py +19 -0
  152. pyegeria/__init__.py +201 -443
  153. pyegeria/core/__init__.py +40 -0
  154. pyegeria/core/_base_platform_client.py +574 -0
  155. pyegeria/core/_base_server_client.py +573 -0
  156. pyegeria/core/_exceptions.py +457 -0
  157. pyegeria/core/_globals.py +60 -0
  158. pyegeria/core/_server_client.py +6073 -0
  159. pyegeria/core/_validators.py +257 -0
  160. pyegeria/core/config.py +654 -0
  161. pyegeria/{create_tech_guid_lists.py → core/create_tech_guid_lists.py} +0 -1
  162. pyegeria/core/load_config.py +37 -0
  163. pyegeria/core/logging_configuration.py +207 -0
  164. pyegeria/core/mcp_adapter.py +144 -0
  165. pyegeria/core/mcp_server.py +212 -0
  166. pyegeria/core/utils.py +405 -0
  167. pyegeria/deprecated/__init__.py +0 -0
  168. pyegeria/{_client.py → deprecated/_client.py} +62 -24
  169. pyegeria/{_deprecated_gov_engine.py → deprecated/_deprecated_gov_engine.py} +16 -16
  170. pyegeria/{classification_manager_omvs.py → deprecated/classification_manager_omvs.py} +1988 -1878
  171. pyegeria/deprecated/output_formatter_with_machine_keys.py +1127 -0
  172. pyegeria/{runtime_manager_omvs.py → deprecated/runtime_manager_omvs.py} +216 -229
  173. pyegeria/{valid_metadata_omvs.py → deprecated/valid_metadata_omvs.py} +93 -93
  174. pyegeria/{x_action_author_omvs.py → deprecated/x_action_author_omvs.py} +2 -3
  175. pyegeria/egeria_cat_client.py +25 -51
  176. pyegeria/egeria_client.py +140 -98
  177. pyegeria/egeria_config_client.py +48 -24
  178. pyegeria/egeria_tech_client.py +170 -83
  179. pyegeria/models/__init__.py +150 -0
  180. pyegeria/models/collection_models.py +168 -0
  181. pyegeria/models/models.py +654 -0
  182. pyegeria/omvs/__init__.py +84 -0
  183. pyegeria/omvs/action_author.py +342 -0
  184. pyegeria/omvs/actor_manager.py +5980 -0
  185. pyegeria/omvs/asset_catalog.py +842 -0
  186. pyegeria/omvs/asset_maker.py +2736 -0
  187. pyegeria/omvs/automated_curation.py +4403 -0
  188. pyegeria/omvs/classification_manager.py +11213 -0
  189. pyegeria/omvs/collection_manager.py +5780 -0
  190. pyegeria/omvs/community_matters_omvs.py +468 -0
  191. pyegeria/{core_omag_server_config.py → omvs/core_omag_server_config.py} +157 -157
  192. pyegeria/{data_designer_omvs.py → omvs/data_designer.py} +1991 -1691
  193. pyegeria/omvs/data_discovery.py +869 -0
  194. pyegeria/omvs/data_engineer.py +372 -0
  195. pyegeria/omvs/digital_business.py +1133 -0
  196. pyegeria/omvs/external_links.py +1752 -0
  197. pyegeria/omvs/feedback_manager.py +834 -0
  198. pyegeria/{full_omag_server_config.py → omvs/full_omag_server_config.py} +73 -69
  199. pyegeria/omvs/glossary_manager.py +3231 -0
  200. pyegeria/omvs/governance_officer.py +3009 -0
  201. pyegeria/omvs/lineage_linker.py +314 -0
  202. pyegeria/omvs/location_arena.py +1525 -0
  203. pyegeria/omvs/metadata_expert.py +668 -0
  204. pyegeria/omvs/metadata_explorer_omvs.py +2943 -0
  205. pyegeria/omvs/my_profile.py +1042 -0
  206. pyegeria/omvs/notification_manager.py +358 -0
  207. pyegeria/omvs/people_organizer.py +394 -0
  208. pyegeria/{platform_services.py → omvs/platform_services.py} +113 -193
  209. pyegeria/omvs/product_manager.py +1825 -0
  210. pyegeria/omvs/project_manager.py +1907 -0
  211. pyegeria/omvs/reference_data.py +1140 -0
  212. pyegeria/omvs/registered_info.py +334 -0
  213. pyegeria/omvs/runtime_manager.py +2817 -0
  214. pyegeria/omvs/schema_maker.py +446 -0
  215. pyegeria/{server_operations.py → omvs/server_operations.py} +27 -26
  216. pyegeria/omvs/solution_architect.py +6490 -0
  217. pyegeria/omvs/specification_properties.py +37 -0
  218. pyegeria/omvs/subject_area.py +1042 -0
  219. pyegeria/omvs/template_manager_omvs.py +236 -0
  220. pyegeria/omvs/time_keeper.py +1761 -0
  221. pyegeria/omvs/valid_metadata.py +3221 -0
  222. pyegeria/omvs/valid_metadata_lists.py +37 -0
  223. pyegeria/omvs/valid_type_lists.py +37 -0
  224. pyegeria/view/__init__.py +28 -0
  225. pyegeria/view/_output_format_models.py +514 -0
  226. pyegeria/view/_output_formats.py +14 -0
  227. pyegeria/view/base_report_formats.py +2719 -0
  228. pyegeria/view/dr_egeria_reports.py +56 -0
  229. pyegeria/view/format_set_executor.py +397 -0
  230. pyegeria/{md_processing_utils.py → view/md_processing_utils.py} +5 -5
  231. pyegeria/{mermaid_utilities.py → view/mermaid_utilities.py} +2 -154
  232. pyegeria/view/output_formatter.py +1297 -0
  233. pyegeria-5.5.3.3.dist-info/METADATA +218 -0
  234. pyegeria-5.5.3.3.dist-info/RECORD +241 -0
  235. {pyegeria-5.3.9.9.3.dist-info → pyegeria-5.5.3.3.dist-info}/WHEEL +2 -1
  236. pyegeria-5.5.3.3.dist-info/entry_points.txt +103 -0
  237. pyegeria-5.5.3.3.dist-info/top_level.txt +4 -0
  238. commands/cat/.DS_Store +0 -0
  239. commands/cat/README.md +0 -16
  240. commands/cli/txt_custom_v2.tcss +0 -19
  241. commands/my/README.md +0 -17
  242. commands/ops/README.md +0 -24
  243. commands/ops/monitor_asset_events.py +0 -108
  244. commands/tech/README.md +0 -24
  245. pyegeria/.DS_Store +0 -0
  246. pyegeria/README.md +0 -35
  247. pyegeria/_globals.py +0 -47
  248. pyegeria/_validators.py +0 -385
  249. pyegeria/asset_catalog_omvs.py +0 -864
  250. pyegeria/automated_curation_omvs.py +0 -3765
  251. pyegeria/collection_manager_omvs.py +0 -2744
  252. pyegeria/dr.egeria spec.md +0 -9
  253. pyegeria/egeria_my_client.py +0 -56
  254. pyegeria/feedback_manager_omvs.py +0 -4573
  255. pyegeria/glossary_browser_omvs.py +0 -3728
  256. pyegeria/glossary_manager_omvs.py +0 -2440
  257. pyegeria/m_test.py +0 -118
  258. pyegeria/md_processing_helpers.py +0 -58
  259. pyegeria/md_processing_utils_orig.py +0 -1103
  260. pyegeria/metadata_explorer_omvs.py +0 -2326
  261. pyegeria/my_profile_omvs.py +0 -1022
  262. pyegeria/output_formatter.py +0 -389
  263. pyegeria/project_manager_omvs.py +0 -1933
  264. pyegeria/registered_info.py +0 -167
  265. pyegeria/solution_architect_omvs.py +0 -2156
  266. pyegeria/template_manager_omvs.py +0 -1414
  267. pyegeria/utils.py +0 -197
  268. pyegeria-5.3.9.9.3.dist-info/METADATA +0 -72
  269. pyegeria-5.3.9.9.3.dist-info/RECORD +0 -143
  270. pyegeria-5.3.9.9.3.dist-info/entry_points.txt +0 -99
  271. /pyegeria/{_exceptions.py → deprecated/_exceptions.py} +0 -0
  272. {pyegeria-5.3.9.9.3.dist-info → pyegeria-5.5.3.3.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,334 @@
1
+ """
2
+ SPDX-License-Identifier: Apache-2.0
3
+ Copyright Contributors to the ODPi Egeria project.
4
+
5
+
6
+
7
+ This module allows users to query the available (registered) capabilities of Egeria. Detailed information is returned
8
+ to provide both insight and understanding in how to use these capabilities. For example, when configuring an Egeria
9
+ integration service, it is import registered_info.pyant to know what companion service it depends on so that you can
10
+ make sure the companion service is also configured and running.
11
+
12
+ """
13
+
14
+ from typing import Optional
15
+
16
+ from pyegeria.core._server_client import ServerClient
17
+ from pyegeria.view.base_report_formats import select_report_spec, get_report_spec_match
18
+ from pyegeria.view.output_formatter import (
19
+ generate_output,
20
+ populate_columns_from_properties,
21
+ )
22
+
23
+
24
+ class RegisteredInfo(ServerClient):
25
+ """Client to discover Egeria services and capabilities
26
+
27
+ Parameters:
28
+ ----------
29
+ view_server: str
30
+ Name of the server to use.
31
+ platform_url : str
32
+ URL of the server platform to connect to
33
+ user_id : str
34
+ The identity of the user calling the method - this sets a default optionally used by the methods
35
+ when the user doesn't pass the user_id on a method call.
36
+ user_pwd: str
37
+ The password associated with the user_id. Defaults to None
38
+ verify_flag: bool
39
+ Flag to indicate if SSL Certificates should be verified in the HTTP requests.
40
+ Defaults to False.
41
+
42
+ Methods:
43
+ -------
44
+ list_registered_svcs(self, kind: Optional[str] = None, fmt: str = 'json', skinny: bool = True, wrap_len: int = 30)
45
+ -> list | str
46
+ Returns information about the different kinds of services as either JSON or a printable table.
47
+
48
+ list_severity_definitions(self, fmt: str = 'json', skinny: bool = True, wrap_len: int = 30) -> list | str
49
+ Returns a list of severity definitions for an OMAG Server used by the audit services.
50
+
51
+ list_asset_types(self, server: str = None) -> list | str
52
+ Lists the defined asset types.
53
+ """
54
+
55
+ def __init__(
56
+ self,
57
+ view_server: str,
58
+ platform_url: str,
59
+ user_id: str,
60
+ user_pwd: Optional[str] = None,
61
+ token: Optional[str] = None,
62
+ ):
63
+ if view_server is None:
64
+ server_name = "NA"
65
+ ServerClient.__init__(self, view_server, platform_url, user_id, user_pwd)
66
+ self.view_server = view_server
67
+ self.platform_url = platform_url
68
+ self.user_id = user_id
69
+ self.user_pwd = user_pwd
70
+ self.reg_command_root = (
71
+ f"{self.platform_url}/open-metadata/platform-services/users/"
72
+ f"{self.user_id}/server-platform/registered-services"
73
+ )
74
+
75
+ def list_registered_svcs(
76
+ self,
77
+ kind: Optional[str] = None,
78
+ *,
79
+ output_format: str = "DICT",
80
+ report_spec: str | dict = None,
81
+ ) -> list | str:
82
+ """Get the registered services for the OMAG Server Platform
83
+
84
+ Parameters
85
+ ----------
86
+ kind: str, optional
87
+ The kind of service to return information for. If None, then provide back a list of service kinds.
88
+
89
+ Returns
90
+ -------
91
+ dict | str
92
+ Returns JSON dict of the requested information or a help string if input is 'help'.
93
+ Raises
94
+ ------
95
+ PyegeriaInvalidParameterException
96
+ If the response code is not 200.
97
+ PyegeriaAPIException:
98
+ Raised by the server when an issue arises in processing a valid request
99
+ NotAuthorizedException:
100
+ The principle specified by the user_id does not have authorization for the requested action
101
+
102
+ """
103
+ if kind is None or kind == "help":
104
+ return """
105
+ The kinds of services that you can get more information include:
106
+ all.....................lists all registered services
107
+ access-services.........lists all registered access services
108
+ common-services.........lists all registered common services
109
+ engine-services.........lists all registered engine services
110
+ governance-services.....lists all registered governance services
111
+ integration-services....lists all registered integration services
112
+ view-services...........lists all registered view services
113
+
114
+ Pass in a parameter from the left-hand column into the function to
115
+ get more details on the specified service category.
116
+ """
117
+ if kind == "all":
118
+ url = f"{self.reg_command_root}"
119
+ else:
120
+ url = f"{self.reg_command_root}/{kind}"
121
+ response = self.make_request("GET", url)
122
+ elements = response.json().get("services", [])
123
+ # Fallback to raw if no elements or output not requested
124
+ if output_format in (None, "JSON") and report_spec is None:
125
+ return elements or "No services found"
126
+
127
+ # Choose a report spec
128
+ columns_struct = None
129
+ if isinstance(report_spec, str):
130
+ columns_struct = select_report_spec(report_spec, output_format)
131
+ elif isinstance(report_spec, dict):
132
+ columns_struct = get_report_spec_match(report_spec, output_format)
133
+ else:
134
+ columns_struct = select_report_spec("Registered-Services", output_format)
135
+ if columns_struct is None:
136
+ columns_struct = select_report_spec("Default", output_format)
137
+
138
+ return self._generate_registered_info_output(
139
+ elements=elements,
140
+ filter=kind,
141
+ entity_type_name="Registered-Services",
142
+ output_format=output_format,
143
+ report_spec=columns_struct,
144
+ extract_func=self._extract_registered_service_properties,
145
+ )
146
+
147
+ def list_severity_definitions(
148
+ self,
149
+ *,
150
+ output_format: str = "DICT",
151
+ report_spec: str | dict = None,
152
+ ) -> list | str:
153
+ """Get the registered severities for the OMAG Server
154
+
155
+ Parameters
156
+ ----------
157
+
158
+ Returns
159
+ -------
160
+ dict | str
161
+ Return a dictionary containing the registered services for the specified platform.
162
+ Raises
163
+ ------
164
+ PyegeriaInvalidParameterException
165
+ If the response code is not 200.
166
+ PyegeriaAPIException:
167
+ Raised by the server when an issue arises in processing a valid request
168
+ NotAuthorizedException:
169
+ The principle specified by the user_id does not have authorization for the requested action
170
+
171
+ """
172
+ url = (
173
+ f"{self.platform_url}/servers/{self.view_server}/open-metadata/repository-services"
174
+ f"/users/{self.user_id}/audit-log/severity-definitions"
175
+ )
176
+ response = self.make_request("GET", url)
177
+ elements = response.json().get("severities", [])
178
+
179
+ if output_format in (None, "JSON") and report_spec is None:
180
+ return elements or "No severities found"
181
+
182
+ columns_struct = None
183
+ if isinstance(report_spec, str):
184
+ columns_struct = select_report_spec(report_spec, output_format)
185
+ elif isinstance(report_spec, dict):
186
+ columns_struct = get_report_spec_match(report_spec, output_format)
187
+ else:
188
+ columns_struct = select_report_spec("Severity-Definitions", output_format)
189
+ if columns_struct is None:
190
+ columns_struct = select_report_spec("Default", output_format)
191
+
192
+ return self._generate_registered_info_output(
193
+ elements=elements,
194
+ filter=None,
195
+ entity_type_name="Severity-Definitions",
196
+ output_format=output_format,
197
+ report_spec=columns_struct,
198
+ extract_func=self._extract_severity_properties,
199
+ )
200
+
201
+ def list_asset_types(
202
+ self,
203
+ *,
204
+ output_format: str = "DICT",
205
+ report_spec: str | dict = None,
206
+ ) -> list | str:
207
+ """Get the registered severities for the OMAG Server
208
+
209
+ Parameters
210
+ ----------
211
+
212
+ Returns
213
+ -------
214
+ dict | str
215
+ Returns a list of the asset types.
216
+
217
+ Raises
218
+ ------
219
+ PyegeriaInvalidParameterException
220
+ If the response code is not 200.
221
+ PyegeriaAPIException:
222
+ Raised by the server when an issue arises in processing a valid request
223
+ NotAuthorizedException:
224
+ The principle specified by the user_id does not have authorization for the requested action
225
+
226
+ """
227
+ url = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/asset-catalog/assets/types"
228
+
229
+ response = self.make_request("GET", url)
230
+ elements = response.json().get("types", [])
231
+
232
+ if output_format in (None, "JSON") and report_spec is None:
233
+ return elements or "no types found"
234
+
235
+ columns_struct = None
236
+ if isinstance(report_spec, str):
237
+ columns_struct = select_report_spec(report_spec, output_format)
238
+ elif isinstance(report_spec, dict):
239
+ columns_struct = get_report_spec_match(report_spec, output_format)
240
+ else:
241
+ columns_struct = select_report_spec("Asset-Types", output_format)
242
+ if columns_struct is None:
243
+ columns_struct = select_report_spec("Default", output_format)
244
+
245
+ return self._generate_registered_info_output(
246
+ elements=elements,
247
+ filter=None,
248
+ entity_type_name="Asset-Types",
249
+ output_format=output_format,
250
+ report_spec=columns_struct,
251
+ extract_func=self._extract_asset_type_properties,
252
+ )
253
+
254
+ # -------------------------------
255
+ # Helpers for report generation
256
+ # -------------------------------
257
+ def _extract_registered_service_properties(self, element: dict, columns_struct: dict) -> dict:
258
+ """Populate values for a registered service element using the column spec keys.
259
+
260
+ The registered services payload is typically a flat dict of camelCase keys, so we can
261
+ rely on populate_columns_from_properties which maps our snake_case keys to camelCase.
262
+ """
263
+ return populate_columns_from_properties(element, columns_struct)
264
+
265
+ def _extract_severity_properties(self, element: dict, columns_struct: dict) -> dict:
266
+ """Populate values for a severity definition element."""
267
+ return populate_columns_from_properties(element, columns_struct)
268
+
269
+ def _extract_asset_type_properties(self, element: dict, columns_struct: dict) -> dict:
270
+ """Populate values for an asset type listing element."""
271
+ # API may return simple strings (type names) or dicts; support both
272
+ if isinstance(element, str):
273
+ # Ensure the first attribute key named 'type_name' (snake) is populated
274
+ formats = columns_struct.get('formats') or {}
275
+ cols = formats.get('attributes') or []
276
+ for col in cols:
277
+ if isinstance(col, dict) and col.get('key') == 'type_name':
278
+ col['value'] = element
279
+ return columns_struct
280
+ return populate_columns_from_properties(element, columns_struct)
281
+
282
+ def _generate_registered_info_output(
283
+ self,
284
+ *,
285
+ elements: list[dict] | dict,
286
+ filter: Optional[str],
287
+ entity_type_name: Optional[str],
288
+ output_format: str = "DICT",
289
+ report_spec: dict | str | None = None,
290
+ extract_func=None,
291
+ ) -> str | list[dict]:
292
+ """Generate output for RegisteredInfo endpoints using the common formatter.
293
+
294
+ Args:
295
+ elements: list or dict of items returned from the endpoint
296
+ filter: optional filter string used in the request (for headings)
297
+ entity_type_name: logical report spec target name
298
+ output_format: desired output format (MD, FORM, REPORT, LIST, DICT, MERMAID, HTML)
299
+ report_spec: a FormatSet dict or name resolved beforehand
300
+ extract_func: callable used to map element -> columns_struct values
301
+ """
302
+ if entity_type_name is None:
303
+ entity_type = "Referenceable"
304
+ else:
305
+ entity_type = entity_type_name
306
+
307
+ columns_struct = None
308
+ if isinstance(report_spec, dict):
309
+ columns_struct = report_spec
310
+ elif isinstance(report_spec, str):
311
+ columns_struct = select_report_spec(report_spec, output_format)
312
+ else:
313
+ columns_struct = select_report_spec(entity_type, output_format)
314
+
315
+ if columns_struct is None:
316
+ columns_struct = select_report_spec("Default", output_format)
317
+
318
+ # Default extract function just maps columns by key
319
+ if extract_func is None:
320
+ extract_func = populate_columns_from_properties
321
+
322
+ return generate_output(
323
+ elements=elements,
324
+ search_string=filter or "All",
325
+ entity_type=entity_type,
326
+ output_format=output_format,
327
+ extract_properties_func=lambda e, cs=columns_struct: extract_func(e, cs),
328
+ get_additional_props_func=None,
329
+ columns_struct=columns_struct,
330
+ )
331
+
332
+
333
+ if __name__ == "__main__":
334
+ print("Main-Registered Info")