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,315 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ SPDX-License-Identifier: Apache-2.0
4
+ Copyright Contributors to the ODPi Egeria project.
5
+
6
+ Display the status of cataloged platforms and servers.
7
+ """
8
+ import argparse
9
+ import os
10
+ import sys
11
+
12
+ from rich import print
13
+ from rich.console import Console
14
+ from rich.markdown import Markdown
15
+ from rich.panel import Panel
16
+ from rich.prompt import Prompt
17
+ from rich.tree import Tree
18
+
19
+ from pyegeria import (
20
+ AssetCatalog,
21
+ PyegeriaAPIException, PyegeriaClientException, print_basic_exception, print_exception_table UserNotAuthorizedException, PyegeriaException,
22
+ )
23
+
24
+ EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
25
+ EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
26
+ EGERIA_PLATFORM_URL = os.environ.get("EGERIA_PLATFORM_URL", "https://localhost:9443")
27
+ EGERIA_VIEW_SERVER = os.environ.get("EGERIA_VIEW_SERVER", "view-server")
28
+ EGERIA_VIEW_SERVER_URL = os.environ.get(
29
+ "EGERIA_VIEW_SERVER_URL", "https://localhost:9443"
30
+ )
31
+ EGERIA_INTEGRATION_DAEMON = os.environ.get("EGERIA_INTEGRATION_DAEMON", "integration-daemon")
32
+ EGERIA_INTEGRATION_DAEMON_URL = os.environ.get(
33
+ "EGERIA_INTEGRATION_DAEMON_URL", "https://localhost:9443"
34
+ )
35
+ EGERIA_ADMIN_USER = os.environ.get("ADMIN_USER", "garygeeke")
36
+ EGERIA_ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "secret")
37
+ EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
38
+ EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
39
+ EGERIA_JUPYTER = bool(os.environ.get("EGERIA_JUPYTER", "False"))
40
+ EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "200"))
41
+
42
+ disable_ssl_warnings = True
43
+
44
+ guid_list = []
45
+
46
+ console = Console(width=EGERIA_WIDTH, force_terminal=(not EGERIA_JUPYTER))
47
+
48
+
49
+ def asset_viewer(
50
+ asset_guid: str,
51
+ server_name: str,
52
+ platform_url: str,
53
+ user: str,
54
+ user_pass: str,
55
+ jupyter: bool = EGERIA_JUPYTER,
56
+ width: int = EGERIA_WIDTH,
57
+ ):
58
+ def build_classifications(classification: dict) -> Markdown:
59
+ class_md = ""
60
+ for c in classification:
61
+ c_type = c["classificationName"]
62
+ if c_type == "Anchors":
63
+ continue
64
+ class_md += f"\n* Classification: {c_type}\n"
65
+ class_props = c.get("classificationProperties", "---")
66
+ if type(class_props) is dict:
67
+ for prop in class_props.keys():
68
+ class_md += f"\t* {prop}: {class_props[prop]}\n"
69
+ if class_md == "":
70
+ output = None
71
+ else:
72
+ output = class_md
73
+ return output
74
+
75
+ def build_nested_elements(nested_element: dict) -> Markdown:
76
+ ne_md = " "
77
+ ne_header = nested_element["elementHeader"]
78
+ ne_created_by = ne_header["versions"]["createdBy"]
79
+ ne_created_at = ne_header["versions"]["createTime"]
80
+ ne_guid = ne_header["guid"]
81
+ guid_list.append(ne_guid)
82
+
83
+ ne_type = ne_header["type"]["typeName"]
84
+ ne_classifications = ne_header["classifications"]
85
+ ne_class_md = build_classifications(ne_classifications)
86
+ # ne_class_md = " " if ne_class_md is None else ne_class_md
87
+ ne_props = nested_element.get("properties", "---")
88
+ ne_prop_md = "\n"
89
+ if type(ne_props) is dict:
90
+ for prop in ne_props.keys():
91
+ ne_prop_md += f"\t* {prop}: {ne_props[prop]}\n"
92
+ ne_md = (
93
+ f"Nested Element of Type: {ne_type} with GUID: {ne_guid} \n "
94
+ f"* created by {ne_created_by} at time {ne_created_at}\n"
95
+ f"\n* Properties:\n{ne_prop_md}\n"
96
+ )
97
+
98
+ if ne_class_md is not None:
99
+ ne_md += f"* {ne_class_md}"
100
+
101
+ output = Markdown(ne_md)
102
+ return output
103
+
104
+ try:
105
+ a_client = AssetCatalog(server_name, platform_url, user_id=user)
106
+
107
+ token = a_client.create_egeria_bearer_token(user, user_pass)
108
+ # asset_info = a_client.find_assets_in_domain(asset_name)
109
+ # if type(asset_info) is str:
110
+ # print("\n No Assets Found - Exiting\n")
111
+ # sys.exit(1)
112
+ #
113
+ # asset_guid = asset_info[0]['guid']
114
+
115
+ guid_list.append(asset_guid)
116
+
117
+ asset_graph = a_client.get_asset_graph(asset_guid, output_format="JSON")
118
+ if type(asset_graph) is not dict:
119
+ print(f"\n No Asset found for {asset_guid}")
120
+ sys.exit(1)
121
+
122
+ # print(f"\n{json.dumps(asset_graph, indent =2)}\n")
123
+
124
+ asset_display_name = asset_graph["properties"].get("displayName", "---")
125
+ asset_display_description = asset_graph["properties"].get(
126
+ "displayDescription", "---"
127
+ )
128
+ asset_name = asset_graph["properties"].get("name", "---")
129
+ asset_resource_name = asset_graph["properties"].get("resourceName", "---")
130
+ asset_resource_description = asset_graph["properties"].get(
131
+ "resourceDescription", "---"
132
+ )
133
+ qualified_name = asset_graph["properties"].get("qualifiedName", "---")
134
+
135
+ tree = Tree(
136
+ f"{asset_name} ({asset_guid})",
137
+ style="bold bright_white on black",
138
+ guide_style="bold bright_blue",
139
+ )
140
+ style = ""
141
+ asset_elements = asset_graph["elementHeader"]
142
+ asset_type = asset_elements["type"]["typeName"]
143
+ asset_deployed_imp_type = asset_graph["properties"].get(
144
+ "deployedImplementationType", "---"
145
+ )
146
+
147
+ asset_origin = asset_elements["origin"]["homeMetadataCollectionName"]
148
+ asset_creation = asset_elements["versions"]["createTime"]
149
+ asset_created_by = asset_elements["versions"]["createdBy"]
150
+ asset_classifications = asset_elements["classifications"]
151
+ asset_nested_elements = asset_graph.get("anchoredElements", "----")
152
+ asset_relationships = asset_graph["relationships"]
153
+ asset_class_md = build_classifications(asset_classifications)
154
+
155
+ additional_properties = asset_graph["properties"].get(
156
+ "additionalProperties", None
157
+ )
158
+ if additional_properties is not None:
159
+ add_prop_md = "\n* Additional Properties:\n"
160
+ for prop in additional_properties:
161
+ add_prop_md = (
162
+ f"{add_prop_md}\n\t* {prop}: {additional_properties[prop]}\n"
163
+ )
164
+ else:
165
+ add_prop_md = ""
166
+
167
+ extended_properties = asset_graph["properties"].get("extendedProperties", None)
168
+ if extended_properties is not None:
169
+ prop_md = "\n* Extended Properties:\n"
170
+ for prop in extended_properties:
171
+ prop_md = f"{prop_md}\n\t* {prop}: {extended_properties[prop]}\n"
172
+ else:
173
+ prop_md = ""
174
+ core_md = (
175
+ f"**Type: {asset_type} Created by: {asset_created_by} on {asset_creation}**\n"
176
+ f"* Deployed Implementation Type: {asset_deployed_imp_type}\n"
177
+ f"* Name: {asset_name}\n "
178
+ f"* Asset Resource Name: {asset_resource_name}\n"
179
+ f"* Asset Resource Description: {asset_resource_description}\n "
180
+ f"* Asset Display Name: {asset_display_name}\n"
181
+ f"* Asset Display Description: {asset_display_description}\n "
182
+ f"* Qualified Name: {qualified_name}\n "
183
+ f"* Asset Origin: {asset_origin}\n"
184
+ f" {prop_md}\n"
185
+ f" {add_prop_md}\n"
186
+ )
187
+ core_md = Markdown(core_md)
188
+
189
+ p1 = Panel.fit(core_md, style="bold bright_white")
190
+ l2 = tree.add(p1)
191
+ if asset_class_md is not None:
192
+ p2 = Panel.fit(
193
+ Markdown(asset_class_md),
194
+ style="bold bright_white",
195
+ title="Classifications",
196
+ )
197
+ l2 = tree.add(p2)
198
+
199
+ #
200
+ # Nested Assets
201
+ #
202
+ if type(asset_nested_elements) is list:
203
+ l2 = tree.add("Nested Elements", style="bold white")
204
+ for el in asset_nested_elements:
205
+ asset_ne_md = build_nested_elements(el)
206
+ p3 = Panel.fit(
207
+ asset_ne_md, style="bold bright_white", title="Nested Elements"
208
+ )
209
+ l2.add(p3)
210
+
211
+ #
212
+ # Now work on the Relationships
213
+ #
214
+ for relationship in asset_relationships:
215
+ # Find the end guids - if one isn't in our list then display
216
+ rel_end1 = relationship["end1"]
217
+ rel_end1_type = rel_end1["type"]["typeName"]
218
+ rel_end1_guid = rel_end1["guid"]
219
+ rel_end1_unique_name = rel_end1.get("uniqueName", "---")
220
+
221
+ rel_end2 = relationship["end2"]
222
+ rel_end2_type = rel_end2["type"]["typeName"]
223
+ rel_end2_guid = rel_end2["guid"]
224
+ rel_end2_unique_name = rel_end2.get("uniqueName", "---")
225
+
226
+ if (rel_end1_guid not in guid_list) or (rel_end2_guid not in guid_list):
227
+ # rel_end1_class_md = build_classifications(rel_end1["classifications"])
228
+ # rel_end2_class_md = build_classifications(rel_end2["classifications"])
229
+
230
+ relationship_guid = relationship["guid"]
231
+ relationship_type = relationship["type"]["typeName"]
232
+ relationship_created_by = relationship["versions"]["createdBy"]
233
+ relationship_creation_time = relationship["versions"]["createTime"]
234
+ relationship_properties = relationship.get("properties", "--- ")
235
+ relationship_md = (
236
+ f"Relationship Type {relationship_type}\n"
237
+ f"* GUID: {relationship_guid}\n* Created by: {relationship_created_by} \n"
238
+ f"* Creation Time: {relationship_creation_time}\n"
239
+ f"* Properties: {relationship_properties}\n"
240
+ )
241
+
242
+ rel_md = (
243
+ f"* Relationship Type: {relationship_type}\n"
244
+ f"* Relationship GUID: {relationship_guid}\n"
245
+ f"* Created by: {relationship_created_by} at time {relationship_creation_time}\n"
246
+ )
247
+ rel_end1_md = (
248
+ f"* End1:\n"
249
+ f"\t* Type: {rel_end1_type}\n"
250
+ f"\t* GUID: {rel_end1_guid}\n"
251
+ f"\t* Unique Name: {rel_end1_unique_name}\n"
252
+ )
253
+
254
+ # if rel_end1_class_md is not None:
255
+ # rel_end1_md = rel_end1_class_md + rel_end1_md
256
+
257
+ rel_end2_md = (
258
+ f"* End2:\n"
259
+ f"\t* Type: {rel_end2_type}\n"
260
+ f"\t* GUID: {rel_end2_guid}\n"
261
+ f"\t* Unique Name: {rel_end2_unique_name}\n"
262
+ )
263
+
264
+ # if rel_end2_class_md is not None:
265
+ # rel_end1_md = rel_end2_class_md + rel_end1_md
266
+ #
267
+ # for prop in relationship_properties.keys():
268
+ # relationship_md += f"* {prop}: {relationship_properties[prop]}\n"
269
+
270
+ relationship_md += rel_end1_md + rel_end2_md
271
+
272
+ relationship_panel = Panel.fit(
273
+ Markdown(relationship_md),
274
+ style="bold bright_white",
275
+ title="Asset Relationships",
276
+ )
277
+ tree.add(relationship_panel)
278
+ with console.screen():
279
+ print("\n\n")
280
+ print(tree)
281
+
282
+ except (
283
+ PyegeriaException
284
+ ) as e:
285
+ console.print_exception()
286
+ console.print(
287
+ "\n\n ======> Most likely the GUID you provided is either incorrect or not an asset\n[red bold]"
288
+ )
289
+
290
+
291
+ def main():
292
+ parser = argparse.ArgumentParser()
293
+
294
+ parser.add_argument("--server", help="Name of the server to display status for")
295
+ parser.add_argument("--url", help="URL Platform to connect to")
296
+ parser.add_argument("--userid", help="User Id")
297
+ parser.add_argument("--password", help="User Password")
298
+ args = parser.parse_args()
299
+
300
+ server = args.server if args.server is not None else EGERIA_VIEW_SERVER
301
+ url = args.url if args.url is not None else EGERIA_PLATFORM_URL
302
+ userid = args.userid if args.userid is not None else EGERIA_USER
303
+ user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
304
+ try:
305
+ asset_guid = Prompt.ask("Enter the Asset GUID to view:", default="")
306
+ asset_viewer(asset_guid, server, url, userid, user_pass)
307
+ except KeyboardInterrupt as e:
308
+ # console.print_exception()
309
+ pass
310
+ except Exception as e:
311
+ console.print_exception()
312
+
313
+
314
+ if __name__ == "__main__":
315
+ main()
commands/my/__init__.py CHANGED
@@ -4,8 +4,6 @@ Copyright Contributors to the ODPi Egeria project.
4
4
 
5
5
  """
6
6
  from pyegeria import (
7
- INTEGRATION_GUIDS,
8
- TEMPLATE_GUIDS,
9
7
  default_time_out,
10
8
  disable_ssl_warnings,
11
9
  enable_ssl_check,
@@ -9,7 +9,6 @@ A simple display for my profile
9
9
  import argparse
10
10
  import os
11
11
  import sys
12
- import time
13
12
 
14
13
  from rich import box, print
15
14
  from rich.console import Console
@@ -18,13 +17,8 @@ from rich.panel import Panel
18
17
  from rich.table import Table
19
18
  from rich.tree import Tree
20
19
 
21
- from pyegeria import (
22
- InvalidParameterException,
23
- PropertyServerException,
24
- UserNotAuthorizedException,
25
- print_exception_response,
26
- )
27
- from pyegeria.my_profile_omvs import MyProfile
20
+ from pyegeria import print_basic_exception, PyegeriaException
21
+ from pyegeria.omvs.my_profile import MyProfile
28
22
 
29
23
  disable_ssl_warnings = True
30
24
  EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
@@ -64,7 +58,7 @@ def display_my_profile(
64
58
 
65
59
  console = Console(width=width, force_terminal=not jupyter, soft_wrap=True)
66
60
 
67
- profile_props = my_profiles.get("profileProperties", "---")
61
+ profile_props = my_profiles.get("properties", "---")
68
62
  name = profile_props["fullName"]
69
63
 
70
64
  tree = Tree(
@@ -93,14 +87,14 @@ def display_my_profile(
93
87
  id_list_md = ""
94
88
  for identities in my_profiles["userIdentities"]:
95
89
  id_list_md += (
96
- f"* {identities['userIdentity']['properties']['userId']}\n"
97
- f"* {identities['userIdentity']['elementHeader']['guid']}\n"
90
+ f"* {identities['relatedElement']['properties']['userId']}\n"
91
+ f"* {identities['relatedElement']['elementHeader']['guid']}\n"
98
92
  )
99
93
  t2 = tree.add(Panel(Markdown(id_list_md), title="Identities", expand=False))
100
94
 
101
- contact_methods = my_profiles["contactMethods"]
95
+ contact_methods = my_profiles["contactDetails"]
102
96
  for method in contact_methods:
103
- contact = method["properties"]
97
+ contact = method['relatedElement']["properties"]
104
98
  contact_methods_md = ""
105
99
  for key in contact.keys():
106
100
  contact_methods_md += f"* {key}: {contact[key]}\n"
@@ -110,32 +104,31 @@ def display_my_profile(
110
104
  )
111
105
  )
112
106
 
113
- my_roles = my_profiles["roles"]
114
- table = Table(
115
- title=f" Roles of {name}",
116
- show_lines=True,
117
- box=box.ROUNDED,
118
- expand=True,
119
- )
120
- table.add_column("Role Type")
121
- table.add_column("Role")
122
- table.add_column("Role GUID")
123
- for a_role in my_roles:
124
- my_role_props = a_role["properties"]
125
- role_type = my_role_props["typeName"]
126
- role = my_role_props.get("title", " ")
127
- role_guid = a_role["elementHeader"]["guid"]
128
- table.add_row(role_type, role, role_guid)
129
- t4 = tree.add(Panel(table, title="Roles", expand=False), expanded=True)
107
+ my_roles = my_profiles.get("performsRoles","No roles found")
108
+ if isinstance(my_roles, dict|list):
109
+ table = Table(
110
+ title=f" Roles of {name}",
111
+ show_lines=True,
112
+ box=box.ROUNDED,
113
+ expand=True,
114
+ )
115
+ table.add_column("Role Type")
116
+ table.add_column("Role")
117
+ table.add_column("Role GUID")
118
+ for a_role in my_roles:
119
+ my_role_props = a_role['relatedElement']["properties"]
120
+ role_type = my_role_props["typeName"]
121
+ role = my_role_props.get("displayName", " ")
122
+ role_guid = a_role['relatedElement']["elementHeader"]["guid"]
123
+ table.add_row(role_type, role, role_guid)
124
+ t4 = tree.add(Panel(table, title="Roles", expand=False), expanded=True)
130
125
 
131
126
  print(tree)
132
127
 
133
128
  except (
134
- InvalidParameterException,
135
- PropertyServerException,
136
- UserNotAuthorizedException,
129
+ PyegeriaException,
137
130
  ) as e:
138
- print_exception_response(e)
131
+ print_basic_exception(e)
139
132
  finally:
140
133
  m_client.close_session()
141
134
 
@@ -17,13 +17,7 @@ from rich import box
17
17
  from rich.console import Console
18
18
  from rich.table import Table
19
19
 
20
- from pyegeria import (
21
- InvalidParameterException,
22
- PropertyServerException,
23
- UserNotAuthorizedException,
24
- print_exception_response,
25
- )
26
- from pyegeria.my_profile_omvs import MyProfile
20
+ from pyegeria.omvs.my_profile import MyProfile
27
21
 
28
22
  disable_ssl_warnings = True
29
23
  EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
@@ -18,13 +18,7 @@ from rich.live import Live
18
18
  from rich.markdown import Markdown
19
19
  from rich.table import Table
20
20
 
21
- from pyegeria import (
22
- InvalidParameterException,
23
- PropertyServerException,
24
- UserNotAuthorizedException,
25
- print_exception_response,
26
- )
27
- from pyegeria.my_profile_omvs import MyProfile
21
+ from pyegeria.omvs.my_profile import MyProfile
28
22
 
29
23
  EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
30
24
  EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
@@ -20,13 +20,12 @@ from rich.markdown import Markdown
20
20
  from rich.table import Table
21
21
 
22
22
  from pyegeria import EgeriaTech
23
- from pyegeria._exceptions import (
24
- InvalidParameterException,
25
- PropertyServerException,
26
- UserNotAuthorizedException,
27
- print_exception_response,
23
+ from pyegeria.core._exceptions import (
24
+ PyegeriaInvalidParameterException,
25
+ PyegeriaAPIException as PropertyServerException,
26
+ PyegeriaUnauthorizedException as UserNotAuthorizedException,
27
+ print_basic_exception as print_exception_response,
28
28
  )
29
- from pyegeria.my_profile_omvs import MyProfile
30
29
 
31
30
  disable_ssl_warnings = True
32
31
 
@@ -145,7 +144,7 @@ def display_todos(
145
144
  live.console.pager()
146
145
 
147
146
  except (
148
- InvalidParameterException,
147
+ PyegeriaInvalidParameterException,
149
148
  PropertyServerException,
150
149
  UserNotAuthorizedException,
151
150
  ) as e:
@@ -15,10 +15,9 @@ from datetime import datetime
15
15
  import click
16
16
 
17
17
  from pyegeria import MyProfile
18
- from pyegeria._exceptions import (
19
- InvalidParameterException,
20
- PropertyServerException,
21
- print_exception_response,
18
+ from pyegeria.core._exceptions import (
19
+ PyegeriaAPIException as PropertyServerException,
20
+ print_basic_exception as print_exception_response,
22
21
  )
23
22
 
24
23
  erins_guid = "dcfd7e32-8074-4cdf-bdc5-9a6f28818a9d"
@@ -160,7 +159,7 @@ def delete_todo(server, url, userid, password, timeout, todo_guid):
160
159
  @click.option("--timeout", default=60, help="Number of seconds to wait")
161
160
  @click.option(
162
161
  "--new-status",
163
- type=click.Choice(
162
+ type_name = click.Choice(
164
163
  ["OPEN", "IN_PROGRESS", "WAITING", "COMPLETE", "ABANDONED"],
165
164
  case_sensitive="False",
166
165
  ),
commands/ops/__init__.py CHANGED
@@ -5,8 +5,6 @@ Copyright Contributors to the ODPi Egeria project.
5
5
 
6
6
  """
7
7
  from pyegeria import (
8
- INTEGRATION_GUIDS,
9
- TEMPLATE_GUIDS,
10
8
  default_time_out,
11
9
  disable_ssl_warnings,
12
10
  enable_ssl_check,
@@ -8,18 +8,13 @@ This script restarts an integration daemon.
8
8
 
9
9
  """
10
10
 
11
- import os
12
-
13
11
  import click
14
- from rich import print, print_json
15
- from rich.console import Console
16
-
17
- from pyegeria import INTEGRATION_GUIDS, AutomatedCuration, EgeriaTech
18
- from pyegeria._exceptions import (
19
- InvalidParameterException,
20
- PropertyServerException,
21
- UserNotAuthorizedException,
22
- print_exception_response,
12
+
13
+ from pyegeria import AutomatedCuration, EgeriaTech
14
+ from pyegeria.core._exceptions import (
15
+ PyegeriaInvalidParameterException as PyegeriaInvalidParameterException,
16
+ PyegeriaAPIException as PyegeriaAPIException,
17
+ print_basic_exception as print_exception_response,
23
18
  )
24
19
 
25
20
 
@@ -36,17 +31,18 @@ def add_catalog_target(
36
31
  ) -> str:
37
32
  """Add catalog targets to the specified integration connector"""
38
33
  try:
39
- if integration_connector not in INTEGRATION_GUIDS.keys():
40
- click.echo("Integration connector is not known")
41
-
42
34
  c = ctx.obj
43
35
  a_client = AutomatedCuration(
44
36
  c.view_server, c.view_server_url, c.userid, c.password
45
37
  )
46
38
  token = a_client.create_egeria_bearer_token()
47
39
 
40
+ integ_connector_guid = a_client.get_connector_guid(integration_connector)
41
+ if not integ_connector_guid or c.catalog_targets == 'No connector found':
42
+ raise PyegeriaInvalidParameterException('No Connector found')
43
+
48
44
  guid = a_client.add_catalog_target(
49
- INTEGRATION_GUIDS[integration_connector],
45
+ integ_connector_guid,
50
46
  metadata_element_guid,
51
47
  catalog_target_name,
52
48
  )
@@ -55,7 +51,7 @@ def add_catalog_target(
55
51
  f"Added catalog target to {integration_connector} with a return guid of {guid}"
56
52
  )
57
53
 
58
- except (InvalidParameterException, PropertyServerException) as e:
54
+ except (PyegeriaInvalidParameterException, PyegeriaAPIException) as e:
59
55
  print_exception_response(e)
60
56
 
61
57
 
@@ -77,7 +73,7 @@ def remove_catalog_target(ctx, relationship_guid: str):
77
73
  f"Removed catalog target with relationship guid of {relationship_guid}"
78
74
  )
79
75
 
80
- except (InvalidParameterException, PropertyServerException) as e:
76
+ except (PyegeriaInvalidParameterException, PyegeriaAPIException) as e:
81
77
  print_exception_response(e)
82
78
 
83
79
 
@@ -101,7 +97,7 @@ def update_catalog_target(ctx, relationship_guid: str, catalog_target_name: str)
101
97
  f"{catalog_target_name} with a return guid of {guid}"
102
98
  )
103
99
 
104
- except (InvalidParameterException, PropertyServerException) as e:
100
+ except (PyegeriaInvalidParameterException, PyegeriaAPIException) as e:
105
101
  print_exception_response(e)
106
102
 
107
103
 
@@ -121,7 +117,7 @@ def refresh_gov_eng_config(ctx, engine_host_guid: str):
121
117
 
122
118
  click.echo(f"Refreshed server {c.engine_host}")
123
119
 
124
- except (InvalidParameterException, PropertyServerException) as e:
120
+ except (PyegeriaInvalidParameterException, PyegeriaAPIException) as e:
125
121
  print_exception_response(e)
126
122
  finally:
127
123
  p_client.close_session()
@@ -142,7 +138,7 @@ def start_server(ctx, server):
142
138
 
143
139
  click.echo(f"Started server {server}")
144
140
 
145
- except (InvalidParameterException, PropertyServerException) as e:
141
+ except (PyegeriaInvalidParameterException, PyegeriaAPIException) as e:
146
142
  print_exception_response(e)
147
143
  finally:
148
144
  p_client.close_session()
@@ -172,7 +168,7 @@ def stop_server(ctx, server):
172
168
  try:
173
169
  p_client.shutdown_server(None, server)
174
170
  click.echo(f"Stopped server {server}")
175
- except (InvalidParameterException, PropertyServerException) as e:
171
+ except (PyegeriaInvalidParameterException, PyegeriaAPIException) as e:
176
172
  print_exception_response(e)
177
173
  finally:
178
174
  p_client.close_session()