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
@@ -9,66 +9,43 @@ List certification types
9
9
  A simple display for certification types
10
10
  """
11
11
  import argparse
12
- import json
13
12
  import os
14
13
  import sys
15
14
  import time
16
15
 
17
16
  from rich import box
18
17
  from rich.console import Console
19
- from rich.markdown import Markdown
20
- from rich.prompt import Prompt
21
18
  from rich.table import Table
22
19
 
23
20
  from pyegeria import (
24
- AssetCatalog,
25
21
  ClassificationManager,
26
- InvalidParameterException,
27
- PropertyServerException,
28
- UserNotAuthorizedException,
29
- print_exception_response,
22
+ PyegeriaException, settings
30
23
  )
24
+ app_config = settings.Environment
31
25
 
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("EGERIA_INTEGRATION_DAEMON", "integration-daemon")
40
- EGERIA_ADMIN_USER = os.environ.get("ADMIN_USER", "garygeeke")
41
- EGERIA_ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "secret")
42
26
  EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
43
27
  EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
44
- EGERIA_JUPYTER = bool(os.environ.get("EGERIA_JUPYTER", "False"))
45
- EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "200"))
46
-
47
28
 
48
29
  disable_ssl_warnings = True
49
30
 
50
31
 
51
32
  def display_certifications(
52
- search_string: str,
53
33
  server: str,
54
34
  url: str,
55
35
  username: str,
56
36
  user_password: str,
57
37
  time_out: int = 60,
58
- jupyter: bool = EGERIA_JUPYTER,
59
- width: int = EGERIA_WIDTH,
38
+ jupyter: bool = app_config.egeria_jupyter,
39
+ width: int = app_config.console_width,
60
40
  ):
61
41
  console = Console(width=width, force_terminal=not jupyter, soft_wrap=True)
62
- if (search_string is None) or ((len(search_string) < 3)) and (search_string != "*"):
63
- raise ValueError(
64
- "Invalid Search String - must be greater than four characters long"
65
- )
42
+
66
43
  g_client = ClassificationManager(
67
44
  server, url, user_id=username, user_pwd=user_password
68
45
  )
69
46
  token = g_client.create_egeria_bearer_token(username, user_password)
70
47
 
71
- def generate_table(search_string: str = None) -> Table:
48
+ def generate_table(search_string: str = "CertificationType") -> Table:
72
49
  """Make a new table."""
73
50
  table = Table(
74
51
  title=f"Certifications Types @ {time.asctime()}",
@@ -82,7 +59,7 @@ def display_certifications(
82
59
  caption=f"View Server '{server}' @ Platform - {url}",
83
60
  expand=True,
84
61
  )
85
- table.add_column("Title", max_width=15)
62
+ table.add_column("Name", max_width=15)
86
63
  table.add_column("summary")
87
64
  table.add_column("domainID")
88
65
  table.add_column("Unique Name")
@@ -99,20 +76,20 @@ def display_certifications(
99
76
  for element in certs:
100
77
  properties = element["properties"]
101
78
  summary = properties.get("summary", "---")
102
- domain = properties.get("domainIdentifier", "---")
79
+ domain = str(properties.get("domainIdentifier", "---"))
103
80
  unique_name = properties.get("qualifiedName", "---")
104
81
  scope = properties.get("scope", "---")
105
82
  description = properties.get("description", "---")
106
83
  details = properties.get("details", "---")
107
- title = properties.get("title", "---")
84
+ name = properties.get("displayName", "---")
108
85
  cert_guid = element["elementHeader"]["guid"]
109
86
 
110
87
  related = g_client.get_related_elements(cert_guid)
111
88
  if (len(related) > 0) and (type(related) is list):
112
89
  rel_md = ""
113
90
  for rel in related:
114
- rel_type = rel["relationshipHeader"]["type"]["typeName"]
115
- rel_element_props = rel["relatedElement"]["properties"]
91
+ rel_type = rel["elementHeader"]["type"]["typeName"]
92
+ rel_element_props = rel["properties"]
116
93
  rel_el_md = f"* Rel Type: {rel_type}\n"
117
94
  for key in rel_element_props.keys():
118
95
  rel_el_md += f"* {key}: {rel_element_props[key]}\n"
@@ -120,23 +97,8 @@ def display_certifications(
120
97
  else:
121
98
  rel_md = "---"
122
99
 
123
- # match_tab = Table(expand=True)
124
- # match_tab.add_column("Type Name")
125
- # match_tab.add_column("GUID", no_wrap=True, width=36)
126
- # match_tab.add_column("Properties")
127
- #
128
- # for match in nested:
129
- # match_type_name = match['type']['typeName']
130
- # matching_guid = match['guid']
131
- # match_props = match['properties']
132
- # match_details_md = ""
133
- # for key in match_props.keys():
134
- # match_details_md += f"* {key}: {match_props[key]}\n"
135
- # match_details_out = Markdown(match_details_md)
136
- # match_tab.add_row(match_type_name, matching_guid, match_details_out)
137
-
138
100
  table.add_row(
139
- title, summary, domain, unique_name, scope, description, details, rel_md
101
+ name, summary, domain, unique_name, scope, description, details, rel_md
140
102
  )
141
103
 
142
104
  g_client.close_session()
@@ -144,18 +106,12 @@ def display_certifications(
144
106
  return table
145
107
 
146
108
  try:
147
- # with Live(generate_table(), refresh_per_second=4, screen=True) as live:
148
- # while True:
149
- # time.sleep(2)
150
- # live.update(generate_table())
151
109
 
152
110
  with console.pager(styles=True):
153
- console.print(generate_table(search_string), soft_wrap=True)
111
+ console.print(generate_table("CertificationType"), soft_wrap=True)
154
112
 
155
113
  except (
156
- InvalidParameterException,
157
- PropertyServerException,
158
- UserNotAuthorizedException,
114
+ PyegeriaException
159
115
  ) as e:
160
116
  console.print_exception()
161
117
  sys.exit(1)
@@ -177,15 +133,13 @@ def main():
177
133
 
178
134
  args = parser.parse_args()
179
135
 
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
136
+ server = args.server if args.server is not None else app_config.egeria_view_server
137
+ url = args.url if args.url is not None else app_config.egeria_view_server_url
182
138
  userid = args.userid if args.userid is not None else EGERIA_USER
183
139
  user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
184
140
  time_out = args.time_out if args.time_out is not None else 60
185
141
  try:
186
- # search_string = Prompt.ask("Enter an asset search string:", default="*")
187
- search_string = "CertificationType"
188
- display_certifications(search_string, server, url, userid, user_pass, time_out)
142
+ display_certifications(server, url, userid, user_pass, time_out)
189
143
  except KeyboardInterrupt:
190
144
  pass
191
145
 
@@ -6,55 +6,34 @@ Copyright Contributors to the ODPi Egeria project.
6
6
  A simple display for collections
7
7
  """
8
8
  import argparse
9
- import json
10
9
  import os
11
- import time
12
10
 
13
- from rich import box
11
+ from jsonschema import ValidationError
14
12
  from rich.console import Console
15
- from rich.markdown import Markdown
16
13
  from rich.prompt import Prompt
17
- from rich.table import Table
18
- from rich.text import Text
19
-
20
14
  from pyegeria import (
21
- EgeriaTech,
22
- InvalidParameterException,
23
- PropertyServerException,
24
- UserNotAuthorizedException,
25
- print_exception_response, NO_ELEMENTS_FOUND,
26
- )
27
-
28
- disable_ssl_warnings = True
29
-
30
- EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
31
- EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
32
- EGERIA_PLATFORM_URL = os.environ.get("EGERIA_PLATFORM_URL", "https://localhost:9443")
33
- EGERIA_VIEW_SERVER = os.environ.get("EGERIA_VIEW_SERVER", "view-server")
34
- EGERIA_VIEW_SERVER_URL = os.environ.get(
35
- "EGERIA_VIEW_SERVER_URL", "https://localhost:9443"
36
- )
37
- EGERIA_INTEGRATION_DAEMON = os.environ.get("EGERIA_INTEGRATION_DAEMON", "integration-daemon")
38
- EGERIA_ADMIN_USER = os.environ.get("ADMIN_USER", "garygeeke")
39
- EGERIA_ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "secret")
15
+ settings,
16
+ get_app_config, config_logging, print_basic_exception, PyegeriaAPIException, PyegeriaClientException, )
17
+ from commands.cat.run_report import list_generic
18
+ from pyegeria.core._exceptions import print_validation_error
19
+ app_config = settings.Environment
20
+
40
21
  EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
41
22
  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
- EGERIA_GLOSSARY_PATH = os.environ.get("EGERIA_GLOSSARY_PATH", None)
45
- EGERIA_ROOT_PATH = os.environ.get("EGERIA_ROOT_PATH", "../../")
46
- EGERIA_INBOX_PATH = os.environ.get("EGERIA_INBOX_PATH", "md_processing/dr_egeria_inbox")
47
- EGERIA_OUTBOX_PATH = os.environ.get("EGERIA_OUTBOX_PATH", "md_processing/dr_egeria_outbox")
23
+ app_settings = get_app_config(app_config.pyegeria_root+"/.env")
24
+
25
+ config_logging()
48
26
 
27
+ console = Console(width=app_config.console_width, force_terminal=(not app_config.egeria_jupyter))
49
28
 
50
29
  def display_collections(
51
30
  search_string: str = "*",
52
- view_server: str = EGERIA_VIEW_SERVER,
53
- view_url: str = EGERIA_VIEW_SERVER_URL,
54
- user: str = EGERIA_USER,
55
- user_pass: str = EGERIA_USER_PASSWORD,
56
- jupyter: bool = EGERIA_JUPYTER,
57
- width: int = EGERIA_WIDTH,
31
+ view_server: str = app_config.egeria_view_server,
32
+ view_url: str = app_config.egeria_view_server_url,
33
+ user: str = app_settings.User_Profile.user_name,
34
+ user_pass: str = app_settings.User_Profile.user_pwd,
35
+ jupyter: bool = app_config.egeria_jupyter,
36
+ width: int = app_config.console_width,
58
37
  output_format: str = "TABLE"
59
38
  ):
60
39
  """Display either a specified glossary or all collections if the search_string is '*'.
@@ -77,102 +56,21 @@ def display_collections(
77
56
  output_format : str, optional
78
57
  Format of the output. Default is TABLE.
79
58
  """
80
- m_client = EgeriaTech(view_server, view_url, user_id=user, user_pwd=user_pass)
81
- m_client.create_egeria_bearer_token()
59
+
82
60
  try:
61
+ table_caption = "Basic Collection List"
62
+ list_generic(report_spec="BasicCollections", output_format=output_format, view_server=view_server,
63
+ view_url=view_url, user=user, user_pass=user_pass, params={"search_string": search_string},
64
+ render_table=True, write_file=True, table_caption=table_caption, use_pager=True,
65
+ width=width, jupyter=jupyter, prompt_missing=True)
66
+
83
67
 
84
- if output_format == "FORM":
85
- action = "Update-Form"
86
- elif output_format == "REPORT":
87
- action = "Report"
88
- elif output_format == "DICT":
89
- action = "Dict"
90
-
91
- if output_format != "TABLE":
92
- file_path = os.path.join(EGERIA_ROOT_PATH, EGERIA_OUTBOX_PATH)
93
- file_name = f"Terms-{time.strftime('%Y-%m-%d-%H-%M-%S')}-{action}.md"
94
- full_file_path = os.path.join(file_path, file_name)
95
- os.makedirs(os.path.dirname(full_file_path), exist_ok=True)
96
- output = m_client.find_collections(
97
- search_string.strip(), None, False, ends_with=False, ignore_case=True,
98
- output_format=output_format
99
- )
100
- if output == NO_ELEMENTS_FOUND:
101
- print(f"\n==> No collections found for search string '{search_string}'")
102
- return
103
- elif isinstance(output, str | list) and output_format == "DICT":
104
- output = json.dumps(output, indent=4)
105
-
106
- with open(full_file_path, 'w') as f:
107
- f.write(output)
108
- print(f"\n==> Collections output written to {full_file_path}")
109
- return
110
-
111
- table = Table(
112
- title=f"Collection List @ {time.asctime()}",
113
- style="bright_white on black",
114
- header_style="bright_white on dark_blue",
115
- title_style="bold white on black",
116
- caption_style="white on black",
117
- show_lines=True,
118
- box=box.ROUNDED,
119
- caption=f"View Server '{view_server}' @ Platform - {view_url}",
120
- expand=True,
121
- )
122
- table.add_column("Collection Name")
123
- table.add_column(
124
- "Qualified Name & GUID", width=38, no_wrap=True, justify="center"
125
- )
126
- table.add_column("Description")
127
- table.add_column("Collection Type")
128
- table.add_column("Classifications")
129
- table.add_column("Members")
130
-
131
- collections = m_client.find_collections(
132
- search_string.strip(), None, False, ends_with=False, ignore_case=True,
133
- output_format = "DICT"
134
- )
135
- if type(collections) is list:
136
- sorted_collection_list = sorted(
137
- collections, key=lambda k: k["name"]
138
- )
139
- for collection in sorted_collection_list:
140
- display_name = collection["name"]
141
- qualified_name = collection["qualifiedName"]
142
- guid = collection["guid"]
143
- q_name = Text(f"{qualified_name}\n&\n{guid}", justify="center")
144
- description = collection.get("description",'---')
145
- collection_type = collection.get("collectionType", "---")
146
- classifications = collection.get("classifications", "---")
147
- classifications_md = Markdown(classifications)
148
- members = "\n* ".join(collection.get("members", []))
149
- members_md = Markdown(members)
150
-
151
- table.add_row(
152
- display_name,
153
- q_name,
154
- description,
155
- collection_type,
156
- classifications_md,
157
- members_md,
158
- )
159
- console = Console(
160
- style="bold bright_white on black",
161
- width=width,
162
- force_terminal=not jupyter,
163
- )
164
- console.print(table)
165
- else:
166
- print("==> No collections with that name found")
167
-
168
- except (
169
- InvalidParameterException,
170
- UserNotAuthorizedException,
171
- PropertyServerException,
172
- ) as e:
173
- print_exception_response(e)
174
- finally:
175
- m_client.close_session()
68
+ except (PyegeriaAPIException, PyegeriaClientException) as e:
69
+ print_basic_exception(e)
70
+ except ValidationError as e:
71
+ print_validation_error(e)
72
+ except Exception as e:
73
+ print(f"An unexpected error occurred: {e}")
176
74
 
177
75
 
178
76
  def main():
@@ -184,22 +82,32 @@ def main():
184
82
 
185
83
  args = parser.parse_args()
186
84
 
187
- server = args.server if args.server is not None else EGERIA_VIEW_SERVER
188
- url = args.url if args.url is not None else EGERIA_PLATFORM_URL
189
- userid = args.userid if args.userid is not None else EGERIA_USER
190
- user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
85
+ server = args.server if args.server is not None else app_config.egeria_view_server
86
+ url = args.url if args.url is not None else app_config.egeria_view_server_url
87
+ userid = args.userid if args.userid is not None else app_settings.User_Profile.user_name
88
+ user_pass = args.password if args.password is not None else app_settings.User_Profile.user_pwd
191
89
 
192
90
  try:
193
91
  search_string = Prompt.ask(
194
- "Enter the collection you are searching for or '*' for all:", default="*"
92
+ "Enter the collection you are looking for or '*' for all:", default="*"
195
93
  ).strip()
196
- output_format = Prompt.ask("What output format do you want?", choices=["DICT", "TABLE", "FORM", "REPORT"], default="TABLE")
94
+ output_format = Prompt.ask("Which output format do you want?", choices=["DICT", "TABLE", "FORM", "REPORT", "HTML", "LIST"], default="TABLE")
197
95
 
198
96
  display_collections(search_string, server, url, userid, user_pass, output_format = output_format)
199
97
 
200
98
  except KeyboardInterrupt:
201
99
  pass
202
100
 
101
+ except (PyegeriaAPIException, PyegeriaClientException) as e:
102
+ print_basic_exception(e)
103
+ except ValidationError as e:
104
+ print_validation_error(e)
105
+ except Exception as e:
106
+ print(f"An unexpected error occurred: {e}")
107
+
203
108
 
204
109
  if __name__ == "__main__":
110
+ # EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
111
+ # EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
112
+ # PYEGERIA_ROOT_PATH = os.environ.get("PYEGERIA_ROOT_PATH", "/Users/dwolfson/localGit/egeria-v5-3/egeria-python")
205
113
  main()
@@ -13,28 +13,18 @@ from rich.table import Table
13
13
 
14
14
  from pyegeria import (
15
15
  EgeriaTech,
16
- InvalidParameterException,
17
- PropertyServerException,
18
- UserNotAuthorizedException,
19
- print_exception_response,
16
+ PyegeriaAPIException, PyegeriaClientException,
17
+ print_basic_exception,
18
+ settings,
19
+ config_logging, PyegeriaException
20
20
  )
21
21
 
22
- console = Console()
23
- EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
24
- EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
25
- EGERIA_PLATFORM_URL = os.environ.get("EGERIA_PLATFORM_URL", "https://localhost:9443")
26
- EGERIA_VIEW_SERVER = os.environ.get("EGERIA_VIEW_SERVER", "view-server")
27
- EGERIA_VIEW_SERVER_URL = os.environ.get(
28
- "EGERIA_VIEW_SERVER_URL", "https://localhost:9443"
29
- )
30
- EGERIA_INTEGRATION_DAEMON = os.environ.get("EGERIA_INTEGRATION_DAEMON", "integration-daemon")
31
- EGERIA_ADMIN_USER = os.environ.get("ADMIN_USER", "garygeeke")
32
- EGERIA_ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "secret")
22
+
33
23
  EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
34
24
  EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
35
- EGERIA_JUPYTER = bool(os.environ.get("EGERIA_JUPYTER", "False"))
36
- EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "200"))
37
25
 
26
+ app_config = settings.Environment
27
+ console = Console(width = app_config.console_width)
38
28
 
39
29
  def check_if_template(header: dict) -> bool:
40
30
  """Check if the the template classification is set"""
@@ -49,12 +39,12 @@ def check_if_template(header: dict) -> bool:
49
39
 
50
40
  def list_deployed_catalogs(
51
41
  catalog_server: str = "*",
52
- view_server: str = EGERIA_VIEW_SERVER,
53
- view_url: str = EGERIA_VIEW_SERVER_URL,
42
+ view_server: str = app_config.egeria_view_server,
43
+ view_url: str = app_config.egeria_view_server_url,
54
44
  user: str = EGERIA_USER,
55
45
  user_pass: str = EGERIA_USER_PASSWORD,
56
- jupyter: bool = EGERIA_JUPYTER,
57
- width: int = EGERIA_WIDTH,
46
+ jupyter: bool = app_config.egeria_jupyter,
47
+ width: int = app_config.console_width,
58
48
  ):
59
49
  """
60
50
  Display the list of deployed catalogs. These could be metadata catalogs or other catalogs such as database catalogs..
@@ -181,11 +171,9 @@ def list_deployed_catalogs(
181
171
  console.print(generate_table())
182
172
 
183
173
  except (
184
- InvalidParameterException,
185
- PropertyServerException,
186
- UserNotAuthorizedException,
174
+ PyegeriaException
187
175
  ) as e:
188
- print_exception_response(e)
176
+ print_basic_exception(e)
189
177
  print("\n\nPerhaps the type name isn't known")
190
178
  finally:
191
179
  c_client.close_session()
@@ -200,8 +188,8 @@ def main():
200
188
 
201
189
  args = parser.parse_args()
202
190
 
203
- server = args.server if args.server is not None else EGERIA_VIEW_SERVER
204
- url = args.url if args.url is not None else EGERIA_PLATFORM_URL
191
+ server = args.server if args.server is not None else app_config.egeria_view_server
192
+ url = args.url if args.url is not None else app_config.egeria_view_server_url
205
193
  userid = args.userid if args.userid is not None else EGERIA_USER
206
194
  password = args.password if args.password is not None else EGERIA_USER_PASSWORD
207
195
 
@@ -13,37 +13,27 @@ from rich.table import Table
13
13
 
14
14
  from pyegeria import (
15
15
  EgeriaTech,
16
- InvalidParameterException,
17
- PropertyServerException,
18
- UserNotAuthorizedException,
19
- print_exception_response,
16
+ PyegeriaAPIException, PyegeriaClientException,
17
+ print_basic_exception,
18
+ settings,
19
+ config_logging, PyegeriaException
20
20
  )
21
21
 
22
- console = Console()
23
- EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
24
- EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
25
- EGERIA_PLATFORM_URL = os.environ.get("EGERIA_PLATFORM_URL", "https://localhost:9443")
26
- EGERIA_VIEW_SERVER = os.environ.get("EGERIA_VIEW_SERVER", "view-server")
27
- EGERIA_VIEW_SERVER_URL = os.environ.get(
28
- "EGERIA_VIEW_SERVER_URL", "https://localhost:9443"
29
- )
30
- EGERIA_INTEGRATION_DAEMON = os.environ.get("EGERIA_INTEGRATION_DAEMON", "integration-daemon")
31
- EGERIA_ADMIN_USER = os.environ.get("ADMIN_USER", "garygeeke")
32
- EGERIA_ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "secret")
22
+
33
23
  EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
34
24
  EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
35
- EGERIA_JUPYTER = bool(os.environ.get("EGERIA_JUPYTER", "False"))
36
- EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "200"))
37
25
 
26
+ app_config = settings.Environment
27
+ config_logging()
28
+ console = Console(width = app_config.console_width)
38
29
 
39
30
  def check_if_template(header: dict) -> bool:
40
31
  """Check if the the template classification is set"""
41
- classifications = header.get("classifications", None)
42
- if classifications is None:
32
+ template = header.get("template", None)
33
+ if template is None:
43
34
  return False
44
- for c in classifications:
45
- if c["type"]["typeName"] == "Template":
46
- return True
35
+ if template["type"]["typeName"] == "Template":
36
+ return True
47
37
  return False
48
38
 
49
39
 
@@ -57,12 +47,12 @@ def make_prop_md(props: dict) -> str:
57
47
 
58
48
  def list_deployed_database_schemas(
59
49
  db_name: str = "*",
60
- view_server: str = EGERIA_VIEW_SERVER,
61
- view_url: str = EGERIA_VIEW_SERVER_URL,
50
+ view_server: str = app_config.egeria_view_server,
51
+ view_url: str = app_config.egeria_view_server_url,
62
52
  user: str = EGERIA_USER,
63
53
  user_pass: str = EGERIA_USER_PASSWORD,
64
- jupyter: bool = EGERIA_JUPYTER,
65
- width: int = EGERIA_WIDTH,
54
+ jupyter: bool = app_config.egeria_jupyter,
55
+ width: int = app_config.console_width,
66
56
  ):
67
57
  """List schemas that have been deployed in database catalogs or databases.
68
58
  Parameters
@@ -133,17 +123,13 @@ def list_deployed_database_schemas(
133
123
  el_guid = header["guid"]
134
124
 
135
125
  # get the information about the catalog we are part of
136
- el_classification = header["classifications"]
137
- for c in el_classification:
138
- el_cat_guid = "---"
139
- if c["type"]["typeName"] == "Anchors":
140
- el_anchor_guid = c["classificationProperties"].get("anchorGUID",'---')
141
- el_anchor_type_name = c["classificationProperties"][
142
- "anchorTypeName"
143
- ]
144
- el_anchor_domain_name = c["classificationProperties"][
145
- "anchorDomainName"
146
- ]
126
+ el_anchor = header["anchor"]
127
+ el_cat_guid = "---"
128
+ if el_anchor:
129
+ if el_anchor["type"]["typeName"] == "Anchors":
130
+ el_anchor_guid = el_anchor["classificationProperties"].get("anchorGUID",'---')
131
+ el_anchor_type_name = el_anchor["classificationProperties"]["anchorTypeName"]
132
+ el_anchor_domain_name = el_anchor["classificationProperties"]["anchorDomainName"]
147
133
  el_cat_name = "---"
148
134
  if el_anchor_domain_name == "SoftwareCapability":
149
135
  el_cat = c_client.get_element_by_guid(el_anchor_guid)
@@ -215,11 +201,9 @@ def list_deployed_database_schemas(
215
201
  console.print(generate_table())
216
202
 
217
203
  except (
218
- InvalidParameterException,
219
- PropertyServerException,
220
- UserNotAuthorizedException,
204
+ PyegeriaException
221
205
  ) as e:
222
- print_exception_response(e)
206
+ print_basic_exception(e)
223
207
  print("\n\nPerhaps the type name isn't known")
224
208
  finally:
225
209
  c_client.close_session()
@@ -234,8 +218,8 @@ def main():
234
218
 
235
219
  args = parser.parse_args()
236
220
 
237
- server = args.server if args.server is not None else EGERIA_VIEW_SERVER
238
- url = args.url if args.url is not None else EGERIA_PLATFORM_URL
221
+ server = args.server if args.server is not None else app_config.egeria_view_server
222
+ url = args.url if args.url is not None else app_config.egeria_view_server_url
239
223
  userid = args.userid if args.userid is not None else EGERIA_USER
240
224
  password = args.password if args.password is not None else EGERIA_USER_PASSWORD
241
225