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
@@ -11,44 +11,23 @@ A simple status display for the Integration Daemon.
11
11
  import argparse
12
12
  import os
13
13
  import time
14
- from typing import Union
15
14
 
16
- import nest_asyncio
17
15
  from rich import box
18
16
  from rich.console import Console
19
17
  from rich.live import Live
20
18
  from rich.prompt import Prompt
21
19
  from rich.table import Table
22
- from textual.widgets import DataTable
23
-
24
- from pyegeria import AutomatedCuration, EgeriaTech
25
- from pyegeria._exceptions import (
26
- InvalidParameterException,
27
- PropertyServerException,
28
- UserNotAuthorizedException,
29
- print_exception_response,
30
- )
31
-
32
- EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
33
- EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
34
- EGERIA_PLATFORM_URL = os.environ.get("EGERIA_PLATFORM_URL", "https://localhost:9443")
35
- EGERIA_VIEW_SERVER = os.environ.get("EGERIA_VIEW_SERVER", "view-server")
36
- EGERIA_VIEW_SERVER_URL = os.environ.get(
37
- "EGERIA_VIEW_SERVER_URL", "https://localhost:9443"
38
- )
39
- EGERIA_INTEGRATION_DAEMON = os.environ.get(
40
- "EGERIA_INTEGRATION_DAEMON", "integration-daemon"
41
- )
42
- EGERIA_INTEGRATION_DAEMON_URL = os.environ.get(
43
- "EGERIA_INTEGRATION_DAEMON_URL", "https://localhost:9443"
44
- )
20
+
21
+ from pyegeria import EgeriaTech, PyegeriaException, settings, config_logging, \
22
+ PyegeriaClientException, print_basic_exception
23
+
45
24
  EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
46
25
  EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
47
- EGERIA_JUPYTER = bool(os.environ.get("EGERIA_JUPYTER", "False"))
48
- EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", 200))
49
26
 
50
27
  disable_ssl_warnings = True
51
-
28
+ app_config = settings.Environment
29
+ settings.Logging.console_logging_level = "ERROR"
30
+ config_logging()
52
31
 
53
32
  def display_integration_daemon_status(
54
33
  search_list: list[str] = ["*"],
@@ -58,13 +37,15 @@ def display_integration_daemon_status(
58
37
  integ_url: str = os.environ.get(
59
38
  "EGERIA_INTEGRATION_DAEMON_URL", "https://localhost:9443"
60
39
  ),
61
- view_server: str = os.environ.get("EGERIA_VIEW_SERVER", "view-server"),
62
- view_url: str = os.environ.get("EGERIA_VIEW_SERVER_URL", "https://localhost:9443"),
63
- user: str = os.environ.get("EGERIA_USER"),
64
- user_pass: str = os.environ.get("EGERIA_USER_PASSWORD"),
40
+ view_server: str = app_config.egeria_view_server,
41
+ view_url: str = app_config.egeria_view_server_url,
42
+ user: str = EGERIA_USER,
43
+ user_pass: str = EGERIA_USER_PASSWORD,
44
+
45
+ width: int = app_config.console_width,
65
46
  paging: bool = False,
66
- jupyter: bool = os.environ.get("EGERIA_JUPYTER", "False"),
67
- width: int = EGERIA_WIDTH,
47
+
48
+ jupyter: bool = app_config.egeria_jupyter,
68
49
  sort: bool = True,
69
50
  ) -> None:
70
51
  """Display the status of connectors running on the specified Integration Daemon OMAG Server.
@@ -134,7 +115,6 @@ def display_integration_daemon_status(
134
115
  table.add_column("Target Element", min_width=20)
135
116
  table.add_column("Exception Message", min_width=10)
136
117
 
137
- # server_guid = s_client.get_guid_for_name(integ_server)
138
118
 
139
119
  token = s_client.refresh_egeria_bearer_token()
140
120
  daemon_status = s_client.get_server_report(None, integ_server)
@@ -159,22 +139,24 @@ def display_integration_daemon_status(
159
139
  last_refresh_time = connector.get("lastRefreshTime", "---")[:-10]
160
140
  refresh_interval = str(connector.get("minMinutesBetweenRefresh", "---"))
161
141
  exception_msg = connector.get("failingExceptionMessage", " ")
142
+ tgt_tab="---"
162
143
  if connector_guid != "---":
163
144
  targets = s_client.get_catalog_targets(connector_guid)
164
145
  tgt_tab = Table()
165
146
  tgt_tab.add_column("Target")
166
- tgt_tab.add_column("UniqueName")
167
- tgt_tab.add_column("Relationship GUID", no_wrap=True)
147
+ tgt_tab.add_column("Display Name")
168
148
 
169
149
  if type(targets) == list:
170
150
  targets_md = True
171
151
  for target in targets:
172
- t_name = target["catalogTargetName"]
152
+ t_name = target['relatedBy']['relationshipProperties'].get("catalogTargetName",None)
173
153
  # t_sync = target["permittedSynchronization"]
174
- t_unique_name = target["catalogTargetElement"]["uniqueName"]
175
- t_rel_guid = target["relationshipGUID"]
176
- # targets_m += f"* Target Name: __{t_name}__\n* Sync: {t_sync}\n* Unique Name: {t_unique_name}\n\n"
177
- tgt_tab.add_row(t_name, t_unique_name, t_rel_guid)
154
+ if t_name:
155
+ t_unique_name = target["properties"].get("displayName","---")
156
+ else:
157
+ t_unique_name = "---"
158
+
159
+ tgt_tab.add_row(t_name, t_unique_name)
178
160
  # targets_md = Markdown(targets_m)
179
161
  else:
180
162
  targets_md = False
@@ -220,13 +202,11 @@ def display_integration_daemon_status(
220
202
  live.update(generate_table(search_list))
221
203
 
222
204
  except (
223
- InvalidParameterException,
224
- PropertyServerException,
225
- UserNotAuthorizedException,
205
+ PyegeriaException, PyegeriaClientException,
226
206
  ) as e:
227
- print_exception_response(e)
207
+ print_basic_exception(e)
228
208
 
229
- except KeyboardInterrupt:
209
+ except KeyboardInterrupt as e:
230
210
  pass
231
211
 
232
212
  finally:
@@ -249,15 +229,15 @@ def main_live(paging: bool = False) -> None:
249
229
  integ_server = (
250
230
  args.integ_server
251
231
  if args.integ_server is not None
252
- else EGERIA_INTEGRATION_DAEMON
232
+ else app_config.egeria_integration_daemon
253
233
  )
254
234
  integ_url = (
255
- args.integ_url if args.integ_url is not None else EGERIA_INTEGRATION_DAEMON_URL
235
+ args.integ_url if args.integ_url is not None else app_config.egeria_integration_daemon_url
256
236
  )
257
237
  view_server = (
258
- args.view_server if args.view_server is not None else EGERIA_VIEW_SERVER
238
+ args.view_server if args.view_server is not None else app_config.egeria_view_server
259
239
  )
260
- view_url = args.view_url if args.view_url is not None else EGERIA_VIEW_SERVER_URL
240
+ view_url = args.view_url if args.view_url is not None else app_config.egeria_view_server_url
261
241
  userid = args.userid if args.userid is not None else EGERIA_USER
262
242
  user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
263
243
 
@@ -293,15 +273,15 @@ def main_paging(paging: bool = True) -> None:
293
273
  integ_server = (
294
274
  args.integ_server
295
275
  if args.integ_server is not None
296
- else EGERIA_INTEGRATION_DAEMON
276
+ else app_config.egeria_integration_daemon
297
277
  )
298
278
  integ_url = (
299
- args.integ_url if args.integ_url is not None else EGERIA_INTEGRATION_DAEMON_URL
279
+ args.integ_url if args.integ_url is not None else app_config.egeria_integration_daemon_url
300
280
  )
301
281
  view_server = (
302
- args.view_server if args.view_server is not None else EGERIA_VIEW_SERVER
282
+ args.view_server if args.view_server is not None else app_config.egeria_view_server
303
283
  )
304
- view_url = args.view_url if args.view_url is not None else EGERIA_VIEW_SERVER_URL
284
+ view_url = args.view_url if args.view_url is not None else app_config.egeria_view_server_url
305
285
  userid = args.userid if args.userid is not None else EGERIA_USER
306
286
  user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
307
287
  search_list = Prompt.ask(
@@ -14,51 +14,39 @@ import json
14
14
  import os
15
15
  import sys
16
16
  import time
17
-
17
+ from datetime import datetime
18
18
  from rich import box
19
19
  from rich.console import Console
20
20
  from rich.live import Live
21
+ from rich.markdown import Markdown
21
22
  from rich.table import Table
22
23
 
23
24
  from pyegeria import (
24
- AutomatedCuration,
25
- InvalidParameterException,
26
- PropertyServerException,
27
- UserNotAuthorizedException,
28
- print_exception_response,
25
+ EgeriaTech,
26
+ PyegeriaException,
27
+ print_basic_exception,
28
+ settings,
29
+ config_logging
29
30
  )
30
31
 
31
- EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
32
- EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
33
- EGERIA_PLATFORM_URL = os.environ.get("EGERIA_PLATFORM_URL", "https://localhost:9443")
34
- EGERIA_VIEW_SERVER = os.environ.get("EGERIA_VIEW_SERVER", "view-server")
35
- EGERIA_VIEW_SERVER_URL = os.environ.get(
36
- "EGERIA_VIEW_SERVER_URL", "https://localhost:9443"
37
- )
38
- EGERIA_ENGINE_HOST = os.environ.get("INTEGRATION_ENGINE_HOST", "engine-host")
39
- EGERIA_ENGINE_HOST_URL = os.environ.get(
40
- "INTEGRATION_ENGINE_HOST_URL", "https://localhost:9443"
41
- )
42
- EGERIA_INTEGRATION_DAEMON = os.environ.get("EGERIA_INTEGRATION_DAEMON", "integration-daemon")
43
- EGERIA_ADMIN_USER = os.environ.get("ADMIN_USER", "garygeeke")
44
- EGERIA_ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "secret")
32
+
45
33
  EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
46
34
  EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
47
- EGERIA_JUPYTER = bool(os.environ.get("EGERIA_JUPYTER", "False"))
48
- EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "200"))
49
35
 
50
- disable_ssl_warnings = True
36
+ app_config = settings.Environment
37
+ config_logging()
38
+ console = Console(width = app_config.console_width)
51
39
 
52
40
 
53
- def display_engine_activity(
41
+ def display_engine_activity_c(
54
42
  row_limit: int = 0,
55
- view_server: str = EGERIA_VIEW_SERVER,
56
- view_url: str = EGERIA_VIEW_SERVER_URL,
43
+ view_server: str = app_config.egeria_view_server,
44
+ view_url: str = app_config.egeria_view_server_url,
57
45
  user: str = EGERIA_USER,
58
46
  user_pass: str = EGERIA_USER_PASSWORD,
59
47
  paging: bool = True,
60
- jupyter: bool = EGERIA_JUPYTER,
61
- width: int = EGERIA_WIDTH,
48
+ jupyter: bool = app_config.egeria_jupyter,
49
+ width: int = app_config.console_width,
62
50
  ):
63
51
  """Display governance engine activity as a table.
64
52
 
@@ -81,7 +69,7 @@ def display_engine_activity(
81
69
  width : int
82
70
  The width of the console for table printing.
83
71
  """
84
- g_client = AutomatedCuration(view_server, view_url, user, user_pwd=user_pass)
72
+ g_client = EgeriaTech(view_server, view_url, user, user_pwd=user_pass)
85
73
  token = g_client.create_egeria_bearer_token()
86
74
 
87
75
  def generate_table() -> Table:
@@ -99,17 +87,15 @@ def display_engine_activity(
99
87
  expand=True,
100
88
  )
101
89
  table.add_column("Requested Time")
102
- table.add_column("Start Time")
103
- table.add_column("Action GUID", no_wrap=True)
104
- table.add_column("Engine Name")
105
- table.add_column("Request Type")
90
+ table.add_column("Core Info")
91
+ table.add_column("Target Elements")
92
+
106
93
  table.add_column("Action Status")
107
- table.add_column("Target Element")
108
94
  table.add_column("Completion Time")
109
- table.add_column("Process Name")
110
- table.add_column("Completion Message")
95
+ table.add_column("Core Results")
96
+ # table.add_column("Completion Message")
111
97
 
112
- action_status = g_client.get_engine_actions()
98
+ action_status = g_client.find_engine_actions()
113
99
 
114
100
  if type(action_status) is str:
115
101
  requested_time = " "
@@ -124,7 +110,7 @@ def display_engine_activity(
124
110
  elif type(action_status) is list:
125
111
  sorted_action_status = sorted(
126
112
  action_status,
127
- key=lambda i: i.get("requestedTime", time.asctime()),
113
+ key=lambda i: i.get("requestedTime", datetime.now().isoformat()),
128
114
  reverse=True,
129
115
  )
130
116
  row_count = 0
@@ -132,56 +118,75 @@ def display_engine_activity(
132
118
  if row_limit > 0 and row_count >= row_limit:
133
119
  break
134
120
  row_count += 1
135
- requested_time = action.get("requestedTime", " ")
136
- start_time = action.get("startTime", " ")
137
- completion_time = action.get("completionTime", " ")
121
+ requested_time = action['properties'].get("requestedStartTime", " ")[:-10]
122
+ start_time = action['properties'].get("startTime", " ")[:-10]
123
+ completion_time = action['properties'].get("completionTime", " ")[:-10]
124
+ completion_guards = action['properties'].get("completionGuards", " ")
138
125
 
139
- engine_name = action["governanceEngineName"]
140
- request_type = action["requestType"]
126
+ engine_name = action['properties'].get("executorEngineName",'---')
127
+ request_type = action['properties'].get("requestType",'---')
141
128
  action_guid = action["elementHeader"]["guid"]
142
- if action["actionStatus"] in (
129
+ activity_status = action['properties'].get("activityStatus",'---')
130
+ if activity_status in (
143
131
  "REQUESTED",
144
132
  "APPROVED",
145
133
  "WAITING",
146
134
  "ACTIVATING",
147
135
  ):
148
- action_status = f"[yellow]{action['actionStatus']}"
149
- elif action["actionStatus"] in ("IN_PROGRESS", "ACTIONED"):
150
- action_status = f"[green]{action['actionStatus']}"
136
+ action_status = f"[yellow]{activity_status}"
137
+ elif activity_status in ("IN_PROGRESS", "COMPLETED"):
138
+ action_status = f"[green]{activity_status}"
151
139
  else:
152
- action_status = f"[red]{action['actionStatus']}"
153
-
154
- targets = action.get("actionTargetElements", "Empty")
140
+ action_status = f"[red]{activity_status}"
141
+
142
+ request_parameters_md = " "
143
+ request_parameters = action['properties'].get("requestParameters", "Empty")
144
+ if type(request_parameters) is dict:
145
+ for key, value in request_parameters.items():
146
+ request_parameters_md += f"\t* {key}: {value}\n"
147
+ #
148
+ # Discuss
149
+ #
150
+ targets = action['properties'].get("actionTargetElements", "Empty")
155
151
  if type(targets) is list:
156
- tgt_tab = Table()
157
- tgt_tab.add_column("name")
158
- tgt_tab.add_column("guid", no_wrap=True)
159
- tgt_tab.add_column("type_name")
160
152
  targets_md = ""
161
153
  for target in targets:
162
154
  t_name = target["actionTargetName"]
163
155
  t_guid = target["actionTargetGUID"]
164
156
  t_type = target["targetElement"]["type"]["typeName"]
165
- tgt_tab.add_row(t_name, t_guid, t_type)
157
+ targets_md += (
158
+ f"* Target Name: {t_name}\n"
159
+ f" * Target GUID: {t_guid}\n"
160
+ f" * Target Type: {t_type}\n"
161
+ )
162
+
166
163
  # target_element = json.dumps(target[0]["targetElement"]["elementProperties"]["propertiesAsStrings"])
167
- target_element = tgt_tab
164
+ target_element = Markdown(f"{targets_md} ---\n")
168
165
  else:
169
166
  target_element = " "
170
167
 
171
- process_name = action.get("processName", " ")
172
- completion_message = action.get("completionMessage", " ")
173
-
168
+ process_name = action['properties'].get("processName", "Null")
169
+ completion_message = action['properties'].get("completionMessage", " ")
170
+ core_results_md = (
171
+ f"* Completion Guards: {completion_guards}\n"
172
+ f"* Completion Message: {completion_message}"
173
+ )
174
+ core_results_out = Markdown(core_results_md)
175
+ core_info_md = (
176
+ f"* Start Time: {start_time}\n* Engine Name: {engine_name}\n* GUID: {action_guid}\n"
177
+ f"* Request Type: {request_type}\n"
178
+ f"* Process Name: {process_name}\n"
179
+ f"---\n"
180
+ f"* Request Parameters: \n{request_parameters_md}\n"
181
+ )
182
+ core_info_out = Markdown(core_info_md)
174
183
  table.add_row(
175
184
  requested_time,
176
- start_time,
177
- action_guid,
178
- engine_name,
179
- request_type,
180
- action_status,
185
+ core_info_out,
181
186
  target_element,
187
+ action_status,
182
188
  completion_time,
183
- process_name,
184
- completion_message,
189
+ core_results_out,
185
190
  )
186
191
  else:
187
192
  print("Egeria integration daemon not running")
@@ -206,11 +211,9 @@ def display_engine_activity(
206
211
  live.update(generate_table())
207
212
 
208
213
  except (
209
- InvalidParameterException,
210
- PropertyServerException,
211
- UserNotAuthorizedException,
214
+ PyegeriaException
212
215
  ) as e:
213
- print_exception_response(e)
216
+ print_basic_exception(e)
214
217
  except KeyboardInterrupt:
215
218
  pass
216
219
  finally:
@@ -229,13 +232,12 @@ def main_live():
229
232
 
230
233
  args = parser.parse_args()
231
234
 
232
- server = args.server if args.server is not None else EGERIA_VIEW_SERVER
233
- url = args.url if args.url is not None else EGERIA_VIEW_SERVER_URL
235
+ server = args.server if args.server is not None else app_config.egeria_view_server
236
+ url = args.url if args.url is not None else app_config.egeria_view_server_url
234
237
  userid = args.userid if args.userid is not None else EGERIA_USER
235
238
  user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
236
239
  rowlimit = int(args.rowlimit) if args.rowlimit is not None else 0
237
-
238
- display_engine_activity(
240
+ display_engine_activity_c(
239
241
  rowlimit, server, url, user=userid, user_pass=user_pass, paging=False
240
242
  )
241
243
 
@@ -252,13 +254,13 @@ def main_paging():
252
254
 
253
255
  args = parser.parse_args()
254
256
 
255
- server = args.server if args.server is not None else EGERIA_VIEW_SERVER
256
- url = args.url if args.url is not None else EGERIA_VIEW_SERVER_URL
257
+ server = args.server if args.server is not None else app_config.egeria_view_server
258
+ url = args.url if args.url is not None else app_config.egeria_view_server_url
257
259
  userid = args.userid if args.userid is not None else EGERIA_USER
258
260
  user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
259
261
  rowlimit = int(args.rowlimit) if args.rowlimit is not None else 0
260
262
 
261
- display_engine_activity(
263
+ display_engine_activity_c(
262
264
  rowlimit, server, url, user=userid, user_pass=user_pass, paging=True
263
265
  )
264
266
 
@@ -21,9 +21,12 @@ from rich.table import Table
21
21
 
22
22
  from pyegeria import (
23
23
  EgeriaTech,
24
- InvalidParameterException,
25
- PropertyServerException,
26
- UserNotAuthorizedException,
24
+ )
25
+ from pyegeria.core._exceptions import (
26
+ PyegeriaInvalidParameterException,
27
+ PyegeriaAPIException,
28
+ PyegeriaUnauthorizedException,
29
+ print_basic_exception,
27
30
  )
28
31
 
29
32
  EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
@@ -185,11 +188,11 @@ def display_gov_eng_status(
185
188
  live.update(generate_table(search_list))
186
189
 
187
190
  except (
188
- InvalidParameterException,
189
- PropertyServerException,
190
- UserNotAuthorizedException,
191
+ PyegeriaInvalidParameterException,
192
+ PyegeriaAPIException,
193
+ PyegeriaUnauthorizedException,
191
194
  ) as e:
192
- console.print_exception(show_locals=True)
195
+ print_basic_exception(e)
193
196
 
194
197
  except KeyboardInterrupt:
195
198
  pass
@@ -16,45 +16,34 @@ from rich.live import Live
16
16
  from rich.markdown import Markdown
17
17
  from rich.table import Table
18
18
 
19
- from pyegeria import RuntimeManager
20
- from pyegeria._exceptions import (
21
- InvalidParameterException,
22
- PropertyServerException,
23
- UserNotAuthorizedException,
24
- print_exception_response,
19
+ from pyegeria import (
20
+ RuntimeManager,
21
+ EgeriaTech,
22
+ PyegeriaException,
23
+ print_basic_exception,
24
+ settings,
25
+ config_logging
25
26
  )
26
27
 
27
- EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
28
- EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
29
- EGERIA_PLATFORM_URL = os.environ.get("EGERIA_PLATFORM_URL", "https://localhost:9443")
30
- EGERIA_VIEW_SERVER = os.environ.get("EGERIA_VIEW_SERVER", "view-server")
31
- EGERIA_VIEW_SERVER_URL = os.environ.get(
32
- "EGERIA_VIEW_SERVER_URL", "https://localhost:9443"
33
- )
34
- EGERIA_INTEGRATION_DAEMON = os.environ.get("EGERIA_INTEGRATION_DAEMON", "integration-daemon")
35
- EGERIA_INTEGRATION_DAEMON_URL = os.environ.get(
36
- "EGERIA_INTEGRATION_DAEMON_URL", "https://localhost:9443"
37
- )
38
- EGERIA_ADMIN_USER = os.environ.get("ADMIN_USER", "garygeeke")
39
- EGERIA_ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "secret")
28
+
29
+
40
30
  EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
41
31
  EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
42
- EGERIA_JUPYTER = bool(os.environ.get("EGERIA_JUPYTER", "False"))
43
- EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "200"))
44
32
 
45
- disable_ssl_warnings = True
46
- console = Console(width=EGERIA_WIDTH)
33
+ app_config = settings.Environment
34
+ console = Console(width = app_config.console_width)
35
+ config_logging()
47
36
 
48
37
 
49
38
  def display_status(
50
- view_server: str = EGERIA_VIEW_SERVER,
51
- view_url: str = EGERIA_VIEW_SERVER_URL,
52
- user: str = EGERIA_USER,
53
- user_pass: str = EGERIA_USER_PASSWORD,
54
- jupyter: bool = EGERIA_JUPYTER,
55
- width: int = EGERIA_WIDTH,
39
+ view_server: str = app_config.egeria_view_server,
40
+ view_url: str = app_config.egeria_view_server_url,
41
+ user: str = EGERIA_USER,
42
+ user_pass: str = EGERIA_USER_PASSWORD,
43
+ jupyter: bool = app_config.egeria_jupyter,
44
+ width: int = app_config.console_width,
56
45
  ):
57
- r_client = RuntimeManager(view_server, view_url, user)
46
+ r_client = RuntimeManager(view_server, view_url, user, user_pass)
58
47
  token = r_client.create_egeria_bearer_token(user, user_pass)
59
48
 
60
49
  def generate_table() -> Table:
@@ -70,10 +59,10 @@ def display_status(
70
59
  show_lines=True,
71
60
  # expand=True
72
61
  )
73
- table.add_column("Platform Name & GUID")
62
+ table.add_column("Platform Name & GUID", width = 36)
74
63
  # table.add_column("Platform GUID")
75
- table.add_column("Platform URL")
76
- table.add_column("Platform Origin")
64
+ # table.add_column("Platform URL")
65
+ # table.add_column("Platform Origin")
77
66
  table.add_column("Description")
78
67
  table.add_column("Platform Started")
79
68
  table.add_column("Servers")
@@ -91,15 +80,15 @@ def display_status(
91
80
  sys.exit(1)
92
81
 
93
82
  for platform in platform_list:
94
- platform_name = platform["properties"].get("displayName", "---")
95
- platform_guid = platform["elementHeader"]["guid"]
96
- platform_desc = platform["properties"].get("resourceDescription", "---")
83
+ platform_name = platform.get("display_name", platform.get("properties", {}).get("displayName", "---"))
84
+ platform_guid = platform.get("guid", platform.get("elementHeader", {}).get("guid"))
85
+ platform_desc = platform.get("description", platform.get("properties", {}).get("description", "---"))
97
86
  server_list = ""
98
87
 
99
88
  platform_report = r_client.get_platform_report(platform_guid)
100
- platform_url = platform_report.get("platformURLRoot", " ")
101
- platform_origin = platform_report.get("platformOrigin", " ")
102
- platform_build = platform_report.get("platformBuildProperties", " ")
89
+ platform_url = platform_report.get("platform_url_root", platform_report.get("platformURLRoot", " "))
90
+ platform_origin = platform_report.get("platform_origin", platform_report.get("platformOrigin", " "))
91
+ platform_build = platform_report.get("platform_build_properties", platform_report.get("platformBuildProperties", " "))
103
92
  platform_build_md = ""
104
93
  if type(platform_build) is dict:
105
94
  for prop in platform_build:
@@ -109,9 +98,9 @@ def display_status(
109
98
  platform_build_out = Markdown(platform_build_md)
110
99
  else:
111
100
  platform_build_out = platform_origin
112
- platform_desc = f"{platform_desc}\n\n\t\t&\n\n{platform_build}"
101
+ platform_desc = f"{platform_desc}\n\n\t\t---\n\n{platform_build_md}"
113
102
  platform_started = platform_report.get("platformStartTime", " ")
114
- platform_id = f"{platform_name}\n\n\t\t&\n\n{platform_guid}"
103
+ platform_id = f"{platform_name}\n\n\t\t---\n\n{platform_guid}\n\n\t\t---\n\n{platform_url}"
115
104
 
116
105
  servers = platform_report.get("omagservers", None)
117
106
 
@@ -134,8 +123,8 @@ def display_status(
134
123
 
135
124
  table.add_row(
136
125
  platform_id,
137
- platform_url,
138
- platform_build_out,
126
+ # platform_url,
127
+ # platform_build_out,
139
128
  platform_desc,
140
129
  platform_started,
141
130
  server_list,
@@ -147,7 +136,7 @@ def display_status(
147
136
  platform_url = " "
148
137
  platform_origin = " "
149
138
  platform_started = " "
150
- token = r_client.refresh_egeria_bearer_token()
139
+ r_client.refresh_egeria_bearer_token()
151
140
  return table
152
141
 
153
142
  try:
@@ -157,11 +146,10 @@ def display_status(
157
146
  live.update(generate_table())
158
147
 
159
148
  except (
160
- InvalidParameterException,
161
- PropertyServerException,
162
- UserNotAuthorizedException,
149
+ PyegeriaException
163
150
  ) as e:
164
- print_exception_response(e)
151
+ # print_basic_exception(e)
152
+ console.print_exception()
165
153
 
166
154
  except KeyboardInterrupt:
167
155
  pass
@@ -177,8 +165,8 @@ def main():
177
165
  parser.add_argument("--password", help="User Password")
178
166
  args = parser.parse_args()
179
167
 
180
- server = args.server if args.server is not None else EGERIA_VIEW_SERVER
181
- url = args.url if args.url is not None else EGERIA_PLATFORM_URL
168
+ server = args.server if args.server is not None else app_config.egeria_view_server
169
+ url = args.url if args.url is not None else app_config.egeria_view_server_url
182
170
  userid = args.userid if args.userid is not None else EGERIA_USER
183
171
  user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
184
172