pyegeria 5.4.0.28__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 (433) hide show
  1. commands/__init__.py +24 -0
  2. commands/cat/Dr-Egeria_md-orig.py +2 -2
  3. commands/cat/collection_actions.py +197 -0
  4. commands/cat/dr_egeria_command_help.py +137 -38
  5. commands/cat/dr_egeria_jupyter.py +7 -7
  6. commands/cat/dr_egeria_md.py +10 -267
  7. commands/cat/exp_list_glossaries.py +11 -14
  8. commands/cat/get_asset_graph.py +37 -267
  9. commands/cat/{get_collection.py → get_collection_tree.py} +10 -18
  10. commands/cat/get_project_dependencies.py +14 -14
  11. commands/cat/get_project_structure.py +15 -14
  12. commands/cat/get_tech_type_elements.py +16 -116
  13. commands/cat/glossary_actions.py +145 -298
  14. commands/cat/list_assets.py +3 -11
  15. commands/cat/list_cert_types.py +17 -63
  16. commands/cat/list_collections.py +17 -139
  17. commands/cat/list_deployed_catalogs.py +15 -27
  18. commands/cat/list_deployed_database_schemas.py +27 -43
  19. commands/cat/list_deployed_databases.py +16 -31
  20. commands/cat/list_deployed_servers.py +35 -54
  21. commands/cat/list_glossaries.py +18 -17
  22. commands/cat/list_projects.py +10 -12
  23. commands/cat/list_tech_type_elements.py +21 -37
  24. commands/cat/list_tech_types.py +13 -25
  25. commands/cat/list_terms.py +38 -79
  26. commands/cat/list_todos.py +4 -11
  27. commands/cat/list_user_ids.py +3 -10
  28. commands/cat/my_reports.py +559 -0
  29. commands/cat/run_report.py +394 -0
  30. commands/cat/{list_format_set.py → run_report_orig.py} +136 -44
  31. commands/cli/egeria.py +182 -219
  32. commands/cli/egeria_cat.py +32 -59
  33. commands/cli/egeria_my.py +13 -0
  34. commands/cli/egeria_ops.py +69 -74
  35. commands/cli/egeria_tech.py +17 -93
  36. commands/{cat → deprecated}/list_data_designer.py +2 -4
  37. commands/{cat → deprecated}/list_data_structures_full.py +3 -6
  38. commands/deprecated/old_get_asset_graph.py +315 -0
  39. commands/my/__init__.py +0 -2
  40. commands/my/list_my_profile.py +27 -34
  41. commands/my/list_my_roles.py +1 -7
  42. commands/my/monitor_my_todos.py +1 -7
  43. commands/my/monitor_open_todos.py +6 -7
  44. commands/my/todo_actions.py +4 -5
  45. commands/ops/__init__.py +0 -2
  46. commands/ops/gov_server_actions.py +17 -21
  47. commands/ops/list_archives.py +17 -38
  48. commands/ops/list_catalog_targets.py +33 -40
  49. commands/ops/load_archive.py +14 -11
  50. commands/ops/{monitor_engine_activity_c.py → monitor_active_engine_activity.py} +51 -82
  51. commands/ops/{monitor_integ_daemon_status.py → monitor_daemon_status.py} +35 -55
  52. commands/ops/monitor_engine_activity.py +79 -77
  53. commands/ops/{monitor_gov_eng_status.py → monitor_engine_status.py} +10 -7
  54. commands/ops/monitor_platform_status.py +38 -50
  55. commands/ops/monitor_server_startup.py +6 -11
  56. commands/ops/monitor_server_status.py +7 -11
  57. commands/ops/orig_monitor_server_list.py +8 -8
  58. commands/ops/orig_monitor_server_status.py +1 -5
  59. commands/ops/refresh_integration_daemon.py +5 -5
  60. commands/ops/restart_integration_daemon.py +5 -5
  61. commands/ops/table_integ_daemon_status.py +6 -6
  62. commands/ops/x_engine_actions.py +7 -7
  63. commands/tech/__init__.py +0 -2
  64. commands/tech/{generic_actions.py → element_actions.py} +6 -11
  65. commands/tech/get_element_info.py +20 -29
  66. commands/tech/get_guid_info.py +23 -42
  67. commands/tech/get_tech_details.py +20 -35
  68. commands/tech/get_tech_type_template.py +28 -39
  69. commands/tech/list_all_om_type_elements.py +24 -30
  70. commands/tech/list_all_om_type_elements_x.py +22 -28
  71. commands/tech/list_all_related_elements.py +19 -28
  72. commands/tech/list_anchored_elements.py +22 -30
  73. commands/tech/list_asset_types.py +19 -24
  74. commands/tech/list_elements_by_classification_by_property_value.py +26 -32
  75. commands/tech/list_elements_by_property_value.py +19 -25
  76. commands/tech/list_elements_by_property_value_x.py +20 -28
  77. commands/tech/list_elements_for_classification.py +28 -41
  78. commands/tech/list_gov_action_processes.py +16 -27
  79. commands/tech/list_information_supply_chains.py +22 -30
  80. commands/tech/list_registered_services.py +14 -26
  81. commands/tech/list_related_elements_with_prop_value.py +15 -25
  82. commands/tech/list_related_specification.py +1 -4
  83. commands/tech/list_relationship_types.py +15 -25
  84. commands/tech/list_relationships.py +20 -36
  85. commands/tech/list_solution_blueprints.py +28 -33
  86. commands/tech/list_solution_components.py +23 -29
  87. commands/tech/list_solution_roles.py +21 -32
  88. commands/tech/list_tech_templates.py +51 -54
  89. commands/tech/list_valid_metadata_values.py +5 -9
  90. commands/tech/table_tech_templates.py +2 -6
  91. commands/tech/x_list_related_elements.py +1 -4
  92. examples/GeoSpatial Products Example.py +524 -0
  93. examples/Jupyter Notebooks/P-egeria-server-config.ipynb +2137 -0
  94. examples/Jupyter Notebooks/README.md +2 -0
  95. examples/Jupyter Notebooks/common/P-environment-check.ipynb +115 -0
  96. examples/Jupyter Notebooks/common/__init__.py +14 -0
  97. examples/Jupyter Notebooks/common/common-functions.ipynb +4694 -0
  98. examples/Jupyter Notebooks/common/environment-check.ipynb +52 -0
  99. examples/Jupyter Notebooks/common/globals.ipynb +184 -0
  100. examples/Jupyter Notebooks/common/globals.py +154 -0
  101. examples/Jupyter Notebooks/common/orig_globals.py +152 -0
  102. examples/format_sets/all_format_sets.json +910 -0
  103. examples/format_sets/custom_format_sets.json +268 -0
  104. examples/format_sets/subset_format_sets.json +187 -0
  105. examples/format_sets_save_load_example.py +291 -0
  106. examples/jacquard_data_sets.py +129 -0
  107. examples/output_formats_example.py +193 -0
  108. examples/test_jacquard_data_sets.py +54 -0
  109. examples/test_jacquard_data_sets_scenarios.py +94 -0
  110. md_processing/__init__.py +33 -24
  111. md_processing/command_dispatcher.py +33 -0
  112. md_processing/command_mapping.py +221 -0
  113. md_processing/data/commands/commands_data_designer.json +537 -0
  114. md_processing/data/commands/commands_external_reference.json +733 -0
  115. md_processing/data/commands/commands_feedback.json +155 -0
  116. md_processing/data/commands/commands_general.json +204 -0
  117. md_processing/data/commands/commands_glossary.json +218 -0
  118. md_processing/data/commands/commands_governance.json +3678 -0
  119. md_processing/data/commands/commands_product_manager.json +865 -0
  120. md_processing/data/commands/commands_project.json +642 -0
  121. md_processing/data/commands/commands_solution_architect.json +366 -0
  122. md_processing/data/commands.json +6489 -30060
  123. md_processing/data/{commands-working.json → commands_working.json} +9304 -13513
  124. md_processing/data/gened_report_specs.py +6584 -0
  125. md_processing/data/generated_format_sets.json +6533 -0
  126. md_processing/data/generated_format_sets_old.json +4137 -0
  127. md_processing/data/generated_format_sets_old.py +45 -0
  128. md_processing/dr_egeria.py +182 -0
  129. md_processing/md_commands/data_designer_commands.py +195 -583
  130. md_processing/md_commands/ext_ref_commands.py +530 -0
  131. md_processing/md_commands/feedback_commands.py +726 -0
  132. md_processing/md_commands/glossary_commands.py +106 -490
  133. md_processing/md_commands/governance_officer_commands.py +129 -18
  134. md_processing/md_commands/product_manager_commands.py +362 -115
  135. md_processing/md_commands/project_commands.py +351 -134
  136. md_processing/md_commands/solution_architect_commands.py +276 -232
  137. md_processing/md_commands/view_commands.py +295 -0
  138. md_processing/md_processing_utils/common_md_proc_utils.py +258 -166
  139. md_processing/md_processing_utils/common_md_utils.py +138 -43
  140. md_processing/md_processing_utils/determine_width.py +103 -0
  141. md_processing/md_processing_utils/extraction_utils.py +100 -39
  142. md_processing/md_processing_utils/gen_report_specs.py +643 -0
  143. md_processing/md_processing_utils/generate_dr_help.py +61 -33
  144. md_processing/md_processing_utils/generate_md_cmd_templates.py +20 -19
  145. md_processing/md_processing_utils/generate_md_templates.py +3 -12
  146. md_processing/md_processing_utils/md_processing_constants.py +1053 -72
  147. pyegeria/__init__.py +203 -158
  148. pyegeria/core/__init__.py +40 -0
  149. pyegeria/core/_base_platform_client.py +574 -0
  150. pyegeria/core/_base_server_client.py +573 -0
  151. pyegeria/{_exceptions_new.py → core/_exceptions.py} +62 -30
  152. pyegeria/{_globals.py → core/_globals.py} +14 -3
  153. pyegeria/core/_server_client.py +6073 -0
  154. pyegeria/{_validators.py → core/_validators.py} +7 -8
  155. pyegeria/core/config.py +654 -0
  156. pyegeria/{create_tech_guid_lists.py → core/create_tech_guid_lists.py} +0 -1
  157. pyegeria/core/load_config.py +37 -0
  158. pyegeria/{logging_configuration.py → core/logging_configuration.py} +1 -1
  159. pyegeria/core/mcp_adapter.py +144 -0
  160. pyegeria/core/mcp_server.py +212 -0
  161. pyegeria/core/utils.py +405 -0
  162. pyegeria/{_client.py → deprecated/_client.py} +24 -25
  163. pyegeria/{_deprecated_gov_engine.py → deprecated/_deprecated_gov_engine.py} +16 -16
  164. pyegeria/{classification_manager_omvs.py → deprecated/classification_manager_omvs.py} +1987 -1877
  165. pyegeria/{output_formatter.py → deprecated/output_formatter_with_machine_keys.py} +298 -45
  166. pyegeria/{runtime_manager_omvs.py → deprecated/runtime_manager_omvs.py} +155 -171
  167. pyegeria/{valid_metadata_omvs.py → deprecated/valid_metadata_omvs.py} +93 -93
  168. pyegeria/{x_action_author_omvs.py → deprecated/x_action_author_omvs.py} +2 -3
  169. pyegeria/egeria_cat_client.py +26 -70
  170. pyegeria/egeria_client.py +130 -93
  171. pyegeria/egeria_config_client.py +40 -46
  172. pyegeria/egeria_tech_client.py +141 -54
  173. pyegeria/models/__init__.py +150 -0
  174. pyegeria/{models.py → models/models.py} +156 -20
  175. pyegeria/omvs/__init__.py +84 -0
  176. pyegeria/omvs/action_author.py +342 -0
  177. pyegeria/omvs/actor_manager.py +5980 -0
  178. pyegeria/omvs/asset_catalog.py +842 -0
  179. pyegeria/omvs/asset_maker.py +2736 -0
  180. pyegeria/omvs/automated_curation.py +4403 -0
  181. pyegeria/omvs/classification_manager.py +11213 -0
  182. pyegeria/{collection_manager.py → omvs/collection_manager.py} +1334 -1160
  183. pyegeria/omvs/community_matters_omvs.py +468 -0
  184. pyegeria/{core_omag_server_config.py → omvs/core_omag_server_config.py} +157 -157
  185. pyegeria/{data_designer.py → omvs/data_designer.py} +1115 -660
  186. pyegeria/omvs/data_discovery.py +869 -0
  187. pyegeria/omvs/data_engineer.py +372 -0
  188. pyegeria/omvs/digital_business.py +1133 -0
  189. pyegeria/omvs/external_links.py +1752 -0
  190. pyegeria/omvs/feedback_manager.py +834 -0
  191. pyegeria/{full_omag_server_config.py → omvs/full_omag_server_config.py} +73 -69
  192. pyegeria/{glossary_manager.py → omvs/glossary_manager.py} +857 -519
  193. pyegeria/{governance_officer.py → omvs/governance_officer.py} +964 -468
  194. pyegeria/omvs/lineage_linker.py +314 -0
  195. pyegeria/omvs/location_arena.py +1525 -0
  196. pyegeria/omvs/metadata_expert.py +668 -0
  197. pyegeria/omvs/metadata_explorer_omvs.py +2943 -0
  198. pyegeria/omvs/my_profile.py +1042 -0
  199. pyegeria/omvs/notification_manager.py +358 -0
  200. pyegeria/omvs/people_organizer.py +394 -0
  201. pyegeria/{platform_services.py → omvs/platform_services.py} +113 -193
  202. pyegeria/omvs/product_manager.py +1825 -0
  203. pyegeria/omvs/project_manager.py +1907 -0
  204. pyegeria/omvs/reference_data.py +1140 -0
  205. pyegeria/omvs/registered_info.py +334 -0
  206. pyegeria/omvs/runtime_manager.py +2817 -0
  207. pyegeria/omvs/schema_maker.py +446 -0
  208. pyegeria/{server_operations.py → omvs/server_operations.py} +27 -26
  209. pyegeria/{solution_architect_omvs.py → omvs/solution_architect.py} +1886 -1505
  210. pyegeria/omvs/specification_properties.py +37 -0
  211. pyegeria/omvs/subject_area.py +1042 -0
  212. pyegeria/omvs/template_manager_omvs.py +236 -0
  213. pyegeria/omvs/time_keeper.py +1761 -0
  214. pyegeria/omvs/valid_metadata.py +3221 -0
  215. pyegeria/omvs/valid_metadata_lists.py +37 -0
  216. pyegeria/omvs/valid_type_lists.py +37 -0
  217. pyegeria/view/__init__.py +28 -0
  218. pyegeria/{_output_format_models.py → view/_output_format_models.py} +160 -24
  219. pyegeria/view/_output_formats.py +14 -0
  220. pyegeria/view/base_report_formats.py +2719 -0
  221. pyegeria/view/dr_egeria_reports.py +56 -0
  222. pyegeria/view/format_set_executor.py +397 -0
  223. pyegeria/{md_processing_utils.py → view/md_processing_utils.py} +5 -5
  224. pyegeria/{mermaid_utilities.py → view/mermaid_utilities.py} +2 -154
  225. pyegeria/view/output_formatter.py +1297 -0
  226. pyegeria-5.5.3.3.dist-info/METADATA +218 -0
  227. pyegeria-5.5.3.3.dist-info/RECORD +241 -0
  228. {pyegeria-5.4.0.28.dist-info → pyegeria-5.5.3.3.dist-info}/WHEEL +2 -1
  229. pyegeria-5.5.3.3.dist-info/entry_points.txt +103 -0
  230. pyegeria-5.5.3.3.dist-info/top_level.txt +4 -0
  231. commands/cat/.DS_Store +0 -0
  232. commands/cat/.env +0 -8
  233. commands/cat/README.md +0 -16
  234. commands/cat/debug_log +0 -1126
  235. commands/cat/debug_log.2025-08-18_11-34-38_088636.zip +0 -0
  236. commands/cat/list_categories.py +0 -192
  237. commands/cat/logs/pyegeria.log +0 -4
  238. commands/cli/debug_log +0 -0
  239. commands/cli/debug_log.log +0 -0
  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/logs/pyegeria.log +0 -0
  244. commands/ops/monitor_asset_events.py +0 -108
  245. commands/tech/README.md +0 -24
  246. md_processing/.DS_Store +0 -0
  247. md_processing/dr-egeria-outbox/Collections-2025-08-12-13-30-37.md +0 -163
  248. md_processing/dr-egeria-outbox/Collections-2025-08-12-13-35-58.md +0 -474
  249. md_processing/dr_egeria_inbox/Derive-Dr-Gov-Defs.md +0 -8
  250. md_processing/dr_egeria_inbox/Dr.Egeria Templates.md +0 -873
  251. md_processing/dr_egeria_inbox/arch_test.md +0 -57
  252. md_processing/dr_egeria_inbox/archive/dr_egeria_intro.md +0 -254
  253. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_more_terms.md +0 -696
  254. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part1.md +0 -254
  255. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part2.md +0 -298
  256. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part3.md +0 -608
  257. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part4.md +0 -94
  258. md_processing/dr_egeria_inbox/archive/freddie_intro.md +0 -284
  259. md_processing/dr_egeria_inbox/archive/freddie_intro_orig.md +0 -275
  260. md_processing/dr_egeria_inbox/archive/test-term.md +0 -110
  261. md_processing/dr_egeria_inbox/cat_test.md +0 -100
  262. md_processing/dr_egeria_inbox/collections.md +0 -39
  263. md_processing/dr_egeria_inbox/data_designer_debug.log +0 -6
  264. md_processing/dr_egeria_inbox/data_designer_out.md +0 -60
  265. md_processing/dr_egeria_inbox/data_designer_search_test.md +0 -11
  266. md_processing/dr_egeria_inbox/data_field.md +0 -54
  267. md_processing/dr_egeria_inbox/data_spec.md +0 -77
  268. md_processing/dr_egeria_inbox/data_spec_test.md +0 -2406
  269. md_processing/dr_egeria_inbox/data_test.md +0 -179
  270. md_processing/dr_egeria_inbox/data_test2.md +0 -429
  271. md_processing/dr_egeria_inbox/data_test3.md +0 -462
  272. md_processing/dr_egeria_inbox/dr_egeria_data_designer_1.md +0 -124
  273. md_processing/dr_egeria_inbox/dr_egeria_intro_categories.md +0 -168
  274. md_processing/dr_egeria_inbox/dr_egeria_intro_part1.md +0 -280
  275. md_processing/dr_egeria_inbox/dr_egeria_intro_part2.md +0 -318
  276. md_processing/dr_egeria_inbox/dr_egeria_intro_part3.md +0 -1073
  277. md_processing/dr_egeria_inbox/dr_egeria_isc1.md +0 -44
  278. md_processing/dr_egeria_inbox/generated_help_report.md +0 -9
  279. md_processing/dr_egeria_inbox/glossary_creation_experiment.ipynb +0 -341
  280. md_processing/dr_egeria_inbox/glossary_list.md +0 -5
  281. md_processing/dr_egeria_inbox/glossary_search_test.md +0 -40
  282. md_processing/dr_egeria_inbox/glossary_test1.md +0 -324
  283. md_processing/dr_egeria_inbox/gov_def.md +0 -482
  284. md_processing/dr_egeria_inbox/gov_def2.md +0 -447
  285. md_processing/dr_egeria_inbox/img.png +0 -0
  286. md_processing/dr_egeria_inbox/product.md +0 -211
  287. md_processing/dr_egeria_inbox/rel.md +0 -8
  288. md_processing/dr_egeria_inbox/sb.md +0 -119
  289. md_processing/dr_egeria_inbox/solution-components.md +0 -136
  290. md_processing/dr_egeria_inbox/solution_blueprints.md +0 -118
  291. md_processing/dr_egeria_inbox/synonym_test.md +0 -42
  292. md_processing/dr_egeria_inbox/t2.md +0 -268
  293. md_processing/dr_egeria_outbox/.obsidian/app.json +0 -1
  294. md_processing/dr_egeria_outbox/.obsidian/appearance.json +0 -1
  295. md_processing/dr_egeria_outbox/.obsidian/community-plugins.json +0 -6
  296. md_processing/dr_egeria_outbox/.obsidian/core-plugins.json +0 -31
  297. md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/data.json +0 -10
  298. md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/main.js +0 -4459
  299. md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/manifest.json +0 -10
  300. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/data.json +0 -3
  301. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/main.js +0 -153
  302. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/manifest.json +0 -11
  303. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/styles.css +0 -1
  304. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/main.js +0 -500
  305. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/manifest.json +0 -12
  306. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/styles.css +0 -1
  307. md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/main.js +0 -37
  308. md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/manifest.json +0 -11
  309. md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/styles.css +0 -220
  310. md_processing/dr_egeria_outbox/.obsidian/types.json +0 -28
  311. md_processing/dr_egeria_outbox/.obsidian/workspace.json +0 -220
  312. md_processing/dr_egeria_outbox/Untitled.canvas +0 -1
  313. md_processing/dr_egeria_outbox/friday/processed-2025-08-22 21:22-dr_egeria_intro_part1.md +0 -312
  314. md_processing/dr_egeria_outbox/friday/processed-2025-08-22 21:23-dr_egeria_intro_part1.md +0 -265
  315. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:06-dr_egeria_intro_part1.md +0 -230
  316. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:30-dr_egeria_intro_part1.md +0 -296
  317. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:31-dr_egeria_intro_part1.md +0 -253
  318. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 16:08-dr_egeria_intro_part2.md +0 -343
  319. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 16:12-dr_egeria_intro_part2.md +0 -343
  320. md_processing/dr_egeria_outbox/monday/processed-2025-08-19 07:05-product.md +0 -426
  321. md_processing/dr_egeria_outbox/monday/processed-2025-08-19 07:56-product.md +0 -212
  322. md_processing/dr_egeria_outbox/monday/processed-2025-08-19 09:43-product.md +0 -201
  323. md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 14:55-product.md +0 -77
  324. md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 15:05-product.md +0 -75
  325. md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 15:11-product.md +0 -74
  326. md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 20:40-collections.md +0 -49
  327. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 15:00-Derive-Dr-Gov-Defs.md +0 -719
  328. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:13-Derive-Dr-Gov-Defs.md +0 -41
  329. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:14-Derive-Dr-Gov-Defs.md +0 -33
  330. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:50-Derive-Dr-Gov-Defs.md +0 -192
  331. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 22:08-gov_def2.md +0 -486
  332. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 22:10-gov_def2.md +0 -486
  333. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 08:53-gov_def2.md +0 -486
  334. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 08:54-gov_def2.md +0 -486
  335. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:03-gov_def2.md +0 -486
  336. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:06-gov_def2.md +0 -486
  337. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:10-gov_def2.md +0 -486
  338. md_processing/dr_egeria_outbox/tuesday/processed-2025-07-16 19:15-gov_def2.md +0 -527
  339. md_processing/dr_egeria_outbox/tuesday/processed-2025-07-17 12:08-gov_def2.md +0 -527
  340. md_processing/dr_egeria_outbox/tuesday/processed-2025-07-17 14:27-gov_def2.md +0 -485
  341. md_processing/dr_egeria_outbox/tuesday/processed-2025-08-19 10:55-product.md +0 -209
  342. md_processing/family_docs/Data Designer/Create_Data_Class.md +0 -164
  343. md_processing/family_docs/Data Designer/Create_Data_Dictionary.md +0 -30
  344. md_processing/family_docs/Data Designer/Create_Data_Field.md +0 -162
  345. md_processing/family_docs/Data Designer/Create_Data_Specification.md +0 -36
  346. md_processing/family_docs/Data Designer/Create_Data_Structure.md +0 -38
  347. md_processing/family_docs/Data Designer/View_Data_Classes.md +0 -78
  348. md_processing/family_docs/Data Designer/View_Data_Dictionaries.md +0 -78
  349. md_processing/family_docs/Data Designer/View_Data_Fields.md +0 -78
  350. md_processing/family_docs/Data Designer/View_Data_Specifications.md +0 -78
  351. md_processing/family_docs/Data Designer/View_Data_Structures.md +0 -78
  352. md_processing/family_docs/Data Designer.md +0 -842
  353. md_processing/family_docs/Digital Product Manager/Add_Member->Collection.md +0 -42
  354. md_processing/family_docs/Digital Product Manager/Attach_Collection->Resource.md +0 -36
  355. md_processing/family_docs/Digital Product Manager/Create_Agreement.md +0 -96
  356. md_processing/family_docs/Digital Product Manager/Create_Data_Sharing_Agreement.md +0 -72
  357. md_processing/family_docs/Digital Product Manager/Create_DigitalSubscription.md +0 -102
  358. md_processing/family_docs/Digital Product Manager/Create_Digital_Product.md +0 -134
  359. md_processing/family_docs/Digital Product Manager/Link_Agreement_Items.md +0 -60
  360. md_processing/family_docs/Digital Product Manager/Link_Contracts.md +0 -26
  361. md_processing/family_docs/Digital Product Manager/Link_Digital_Product_-_Digital_Product.md +0 -30
  362. md_processing/family_docs/Digital Product Manager/Link_Subscribers.md +0 -48
  363. md_processing/family_docs/Digital Product Manager.md +0 -668
  364. md_processing/family_docs/Glossary/Attach_Category_Parent.md +0 -18
  365. md_processing/family_docs/Glossary/Attach_Term-Term_Relationship.md +0 -26
  366. md_processing/family_docs/Glossary/Create_Category.md +0 -38
  367. md_processing/family_docs/Glossary/Create_Glossary.md +0 -42
  368. md_processing/family_docs/Glossary/Create_Term.md +0 -70
  369. md_processing/family_docs/Glossary.md +0 -206
  370. md_processing/family_docs/Governance Officer/Create_Business_Imperative.md +0 -106
  371. md_processing/family_docs/Governance Officer/Create_Certification_Type.md +0 -112
  372. md_processing/family_docs/Governance Officer/Create_Governance_Approach.md +0 -114
  373. md_processing/family_docs/Governance Officer/Create_Governance_Obligation.md +0 -114
  374. md_processing/family_docs/Governance Officer/Create_Governance_Principle.md +0 -114
  375. md_processing/family_docs/Governance Officer/Create_Governance_Procedure.md +0 -128
  376. md_processing/family_docs/Governance Officer/Create_Governance_Process.md +0 -122
  377. md_processing/family_docs/Governance Officer/Create_Governance_Processing_Purpose.md +0 -106
  378. md_processing/family_docs/Governance Officer/Create_Governance_Responsibility.md +0 -122
  379. md_processing/family_docs/Governance Officer/Create_Governance_Rule.md +0 -122
  380. md_processing/family_docs/Governance Officer/Create_Governance_Strategy.md +0 -106
  381. md_processing/family_docs/Governance Officer/Create_License_Type.md +0 -112
  382. md_processing/family_docs/Governance Officer/Create_Naming_Standard_Rule.md +0 -122
  383. md_processing/family_docs/Governance Officer/Create_Regulation_Article.md +0 -106
  384. md_processing/family_docs/Governance Officer/Create_Regulation_Definition.md +0 -118
  385. md_processing/family_docs/Governance Officer/Create_Security_Access_Control.md +0 -114
  386. md_processing/family_docs/Governance Officer/Create_Security_Group.md +0 -120
  387. md_processing/family_docs/Governance Officer/Create_Service_Level_Objectives.md +0 -122
  388. md_processing/family_docs/Governance Officer/Create_Threat_Definition.md +0 -106
  389. md_processing/family_docs/Governance Officer/Link_Governance_Controls.md +0 -32
  390. md_processing/family_docs/Governance Officer/Link_Governance_Drivers.md +0 -32
  391. md_processing/family_docs/Governance Officer/Link_Governance_Policies.md +0 -32
  392. md_processing/family_docs/Governance Officer/View_Governance_Definitions.md +0 -82
  393. md_processing/family_docs/Governance Officer.md +0 -2412
  394. md_processing/family_docs/Solution Architect/Create_Information_Supply_Chain.md +0 -70
  395. md_processing/family_docs/Solution Architect/Create_Solution_Blueprint.md +0 -44
  396. md_processing/family_docs/Solution Architect/Create_Solution_Component.md +0 -96
  397. md_processing/family_docs/Solution Architect/Create_Solution_Role.md +0 -66
  398. md_processing/family_docs/Solution Architect/Link_Information_Supply_Chain_Peers.md +0 -32
  399. md_processing/family_docs/Solution Architect/Link_Solution_Component_Peers.md +0 -32
  400. md_processing/family_docs/Solution Architect/View_Information_Supply_Chains.md +0 -32
  401. md_processing/family_docs/Solution Architect/View_Solution_Blueprints.md +0 -32
  402. md_processing/family_docs/Solution Architect/View_Solution_Components.md +0 -32
  403. md_processing/family_docs/Solution Architect/View_Solution_Roles.md +0 -32
  404. md_processing/family_docs/Solution Architect.md +0 -490
  405. md_processing/md_processing_utils/debug_log +0 -574
  406. md_processing/md_processing_utils/debug_log.log +0 -0
  407. md_processing/md_processing_utils/dr-egeria-help-2025-07-17T17:22:09.md +0 -2065
  408. md_processing/md_processing_utils/generated_help_terms.md +0 -842
  409. pyegeria/.DS_Store +0 -0
  410. pyegeria/README.md +0 -35
  411. pyegeria/_client_new.py +0 -1102
  412. pyegeria/_output_formats.py +0 -730
  413. pyegeria/asset_catalog_omvs.py +0 -864
  414. pyegeria/automated_curation_omvs.py +0 -3765
  415. pyegeria/config.py +0 -523
  416. pyegeria/egeria_my_client.py +0 -91
  417. pyegeria/feedback_manager_omvs.py +0 -4573
  418. pyegeria/load_config_orig.py +0 -218
  419. pyegeria/md_processing_helpers.py +0 -58
  420. pyegeria/md_processing_utils_orig.py +0 -1103
  421. pyegeria/metadata_explorer_omvs.py +0 -2326
  422. pyegeria/my_profile_omvs.py +0 -1022
  423. pyegeria/project_manager.py +0 -1591
  424. pyegeria/registered_info.py +0 -167
  425. pyegeria/template_manager_omvs.py +0 -1414
  426. pyegeria/utils.py +0 -256
  427. pyegeria-5.4.0.28.dist-info/METADATA +0 -77
  428. pyegeria-5.4.0.28.dist-info/RECORD +0 -343
  429. pyegeria-5.4.0.28.dist-info/entry_points.txt +0 -105
  430. /commands/cat/debug_log.log → /pyegeria/deprecated/__init__.py +0 -0
  431. /pyegeria/{_exceptions.py → deprecated/_exceptions.py} +0 -0
  432. /pyegeria/{collection_models.py → models/collection_models.py} +0 -0
  433. {pyegeria-5.4.0.28.dist-info → pyegeria-5.5.3.3.dist-info/licenses}/LICENSE +0 -0
@@ -1,8 +1,10 @@
1
1
  """
2
2
  This file contains blueprint/solution-related object_action functions for processing Egeria Markdown
3
3
  """
4
+
4
5
  import json
5
6
  import sys
7
+ from datetime import datetime
6
8
  from typing import Optional
7
9
 
8
10
  from loguru import logger
@@ -12,21 +14,21 @@ from rich.console import Console
12
14
  from rich.markdown import Markdown
13
15
 
14
16
  from md_processing.md_processing_utils.common_md_proc_utils import (parse_upsert_command, parse_view_command)
15
- from md_processing.md_processing_utils.common_md_utils import update_element_dictionary, setup_log
17
+ from md_processing.md_processing_utils.common_md_utils import update_element_dictionary, set_element_prop_body, \
18
+ set_update_body, set_create_body, add_search_keywords, add_note_in_dr_e
16
19
  from md_processing.md_processing_utils.extraction_utils import (extract_command_plus, update_a_command)
17
20
  from md_processing.md_processing_utils.md_processing_constants import (load_commands)
18
- from pyegeria import body_slimmer, EgeriaTech
21
+ from pyegeria import body_slimmer, EgeriaTech, PyegeriaException, print_basic_exception
19
22
 
20
23
  load_commands('commands.json')
21
24
 
22
25
  console = Console(width=int(200))
23
- setup_log()
24
26
 
25
27
 
26
28
  @logger.catch
27
29
  def sync_chain_related_elements(egeria_client: EgeriaTech, guid:str, in_supply_chain_guids:list, display_name:str,
28
- replace_all_props:bool):
29
- if replace_all_props:
30
+ merge_update:bool):
31
+ if not merge_update:
30
32
  rel_el_list = egeria_client._get_supply_chain_rel_elements(guid)
31
33
  if rel_el_list is None:
32
34
  logger.warning("Unexpected -> the list was None - assigning empty list")
@@ -68,7 +70,7 @@ def sync_chain_related_elements(egeria_client: EgeriaTech, guid:str, in_supply_c
68
70
  @logger.catch
69
71
  def sync_component_related_elements(egeria_client: EgeriaTech, object_type: str,
70
72
  supply_chain_guids: list, parent_component_guids: list,
71
- actor_guids: list, in_blueprint_guids: list, guid: str, qualified_name: str,
73
+ actor_guids: list, in_blueprint_guids: list, keywords: list[str], guid: str, qualified_name: str,
72
74
  display_name: str, merge_update: bool = True) -> None:
73
75
  """Sync a components related elements.
74
76
 
@@ -81,12 +83,15 @@ def sync_component_related_elements(egeria_client: EgeriaTech, object_type: str,
81
83
  as_is_blueprints = set(rel_el_list.get("blueprint_guids", []))
82
84
  as_is_parent_components = set(rel_el_list.get("parent_component_guids", []))
83
85
  as_is_supply_chains = set(rel_el_list.get("supply_chain_guids", []))
86
+ as_is_keywords_list = set(rel_el_list.get("keywords_list", {}))
87
+ as_is_keywords = set(rel_el_list.get("keywords_list", {}).keys())
84
88
 
85
89
 
86
90
  to_be_actors = set(actor_guids) if actor_guids is not None else set()
87
91
  to_be_blueprints = set(in_blueprint_guids) if in_blueprint_guids is not None else set()
88
92
  to_be_parent_components = set(parent_component_guids) if parent_component_guids is not None else set()
89
93
  to_be_supply_chains = set(supply_chain_guids) if supply_chain_guids is not None else set()
94
+ to_be_keywords_list = set(keywords) if keywords is not None else set()
90
95
 
91
96
 
92
97
  logger.trace(
@@ -94,6 +99,22 @@ def sync_component_related_elements(egeria_client: EgeriaTech, object_type: str,
94
99
  logger.trace(f"as_is_actors: {list(as_is_actors)} to_be_actors: {list(to_be_actors)}")
95
100
  logger.trace(f"as_is_blueprints: {list(as_is_blueprints)} to_be_blueprints: {list(to_be_blueprints)}")
96
101
 
102
+ keywords_to_add = to_be_keywords_list - as_is_keywords
103
+ logger.trace(f"keywords_to_add: {list(keywords_to_add)}")
104
+ if len(keywords_to_add) > 0:
105
+ for ds in keywords_to_add:
106
+ egeria_client.add_search_keyword_to_element(guid, ds)
107
+ msg = f"Added `{ds}` to component `{guid}`"
108
+ logger.trace(msg)
109
+
110
+ keywords_to_remove = as_is_keywords_list - to_be_keywords_list
111
+ logger.trace(f"keyword_to_remove: {list(keywords_to_remove)}")
112
+ if len(keywords_to_remove) > 0:
113
+ for ds in keywords_to_remove: ## change structure of get related elements to return pairs of keywords and guids
114
+ egeria_client.remove_search_keyword(rel_el_list['keywords_list'][ds])
115
+ msg = f"Removed `{ds}` from component `{guid}`"
116
+ logger.trace(msg)
117
+
97
118
  parent_components_to_remove = as_is_parent_components - to_be_parent_components
98
119
  logger.trace(f"sub_components_to_remove: {list(parent_components_to_remove)}")
99
120
  if len(parent_components_to_remove) > 0:
@@ -102,6 +123,8 @@ def sync_component_related_elements(egeria_client: EgeriaTech, object_type: str,
102
123
  msg = f"Removed `{display_name}` from component `{ds}`"
103
124
  logger.trace(msg)
104
125
 
126
+
127
+
105
128
  parent_components_to_add = to_be_parent_components - as_is_parent_components
106
129
  logger.trace(f"parent_components_to_add: {list(parent_components_to_add)}")
107
130
  if len(parent_components_to_add) > 0:
@@ -155,7 +178,7 @@ def sync_component_related_elements(egeria_client: EgeriaTech, object_type: str,
155
178
  logger.trace(f"supply_chains_to_add: {list(supply_chains_to_add)}")
156
179
  if len(supply_chains_to_add) > 0:
157
180
  body = {
158
- "class": "RelationshipRequestBody",
181
+ "class": "NewRelationshipRequestBody",
159
182
  "properties": {
160
183
  "class": "ImplementedByProperties",
161
184
  "description": "a blank description to satisfy the Egeria gods"
@@ -186,9 +209,12 @@ def sync_component_related_elements(egeria_client: EgeriaTech, object_type: str,
186
209
  msg = f"Added `{in_blueprint_guids}` to `{display_name}`"
187
210
  logger.trace(msg)
188
211
 
212
+ if keywords:
213
+ add_search_keywords(egeria_client, guid, keywords)
214
+
189
215
  if supply_chain_guids:
190
216
  body = {
191
- "class": "RelationshipRequestBody",
217
+ "class": "NewRelationshipRequestBody",
192
218
  "properties": {
193
219
  "class": "ImplementedByProperties",
194
220
  "description": "a blank description to satisfy the Egeria gods"
@@ -268,7 +294,7 @@ def process_blueprint_upsert_command(egeria_client: EgeriaTech, txt: str, direct
268
294
 
269
295
  qualified_name = parsed_output.get('qualified_name', None)
270
296
  guid = parsed_output.get('guid', None)
271
-
297
+ journal_entry = parsed_output.get('Journey Entry', {}.get('value', None))
272
298
  print(Markdown(parsed_output['display']))
273
299
 
274
300
  logger.debug(json.dumps(parsed_output, indent=4))
@@ -276,30 +302,15 @@ def process_blueprint_upsert_command(egeria_client: EgeriaTech, txt: str, direct
276
302
  attributes = parsed_output['attributes']
277
303
  description = attributes.get('Description', {}).get('value', None)
278
304
  display_name = attributes['Display Name'].get('value', None)
279
- version_identifier = attributes.get('Version Identifier', {}).get('value', None)
280
- effective_time = attributes.get('Effective Time', {}).get('value', None)
281
- effective_from = attributes.get('Effective From', {}).get('value', None)
282
- effective_to = attributes.get('Effective To', {}).get('value', None)
283
- external_source_guid = attributes.get('External Source GUID', {}).get('value', None)
284
- external_source_name = attributes.get('External Source Name', {}).get('value', None)
305
+ search_keywords = attributes['Search Keywords'].get('value', None)
285
306
 
286
- anchor_guid = attributes.get('Anchor ID', {}).get('guid', None)
287
- parent_guid = attributes.get('Parent ID', {}).get('guid', None)
288
- parent_relationship_type_name = attributes.get('Parent Relationship Type Name', {}).get('value', None)
289
- parent_at_end1 = attributes.get('Parent at End1', {}).get('value', True)
290
307
 
291
- anchor_scope_guid = attributes.get('Anchor Scope GUID', {}).get('value', None)
292
- is_own_anchor = attributes.get('Is Own Anchor', {}).get('value', True)
293
- if parent_guid is None:
294
- is_own_anchor = True
295
308
 
296
- additional_prop = attributes.get('Additional Properties', {}).get('value', None)
297
- additional_properties = json.loads(additional_prop) if additional_prop is not None else None
298
- extended_prop = attributes.get('Extended Properties', {}).get('value', None)
299
- extended_properties = json.loads(extended_prop) if extended_prop is not None else None
300
309
  component_guids = attributes.get('Solution Components', {}).get('guid_list', None)
301
310
 
302
- initial_status = "ACTIVE"
311
+ status = attributes.get('Status', {}).get('value', None)
312
+ if status is None:
313
+ status = "ACTIVE"
303
314
 
304
315
  replace_all_props = not attributes.get('Merge Update', {}).get('value', True)
305
316
 
@@ -314,12 +325,15 @@ def process_blueprint_upsert_command(egeria_client: EgeriaTech, txt: str, direct
314
325
  return valid
315
326
 
316
327
  elif directive == "process":
328
+ prop_body = set_element_prop_body(object_type, qualified_name, attributes)
329
+
317
330
  try:
318
331
  if object_action == "Update":
319
332
  if not exists:
320
333
  msg = (f" Element `{display_name}` does not exist! Updating result document with Create "
321
334
  f"object_action\n")
322
335
  logger.error(msg)
336
+ print(Markdown(msg))
323
337
  return update_a_command(txt, object_action, object_type, qualified_name, guid)
324
338
  elif not valid:
325
339
  return None
@@ -327,26 +341,156 @@ def process_blueprint_upsert_command(egeria_client: EgeriaTech, txt: str, direct
327
341
  print(Markdown(
328
342
  f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
329
343
 
330
- body = body_slimmer({
331
- "class": "UpdateSolutionBlueprintRequestBody", "externalSourceGUID": external_source_guid,
332
- "externalSourceName": external_source_name, "effectiveTime": effective_time,
333
- "forLineage": False, "forDuplicateProcessing": False, "properties": {
334
- "class": "SolutionBlueprintProperties", "qualifiedName": qualified_name,
335
- "displayName": display_name, "description": description, "version": version_identifier,
336
- "additionalProperties": additional_properties, "extendedProperties": extended_properties,
337
- "effectiveFrom": effective_from, "effectiveTo": effective_to
338
- }
344
+ body = set_update_body(object_type, attributes)
345
+ body['properties'] = prop_body
346
+ egeria_client.update_solution_blueprint(guid, body)
347
+ if status:
348
+ egeria_client.update_solution_element_status(guid, status)
349
+
350
+ msg = f"Updated {object_type} `{display_name}` with GUID {guid}\n\n___"
351
+ update_element_dictionary(qualified_name, {
352
+ 'guid': guid, 'display_name': display_name
353
+ })
354
+ logger.success(msg)
355
+ sync_blueprint_related_elements(egeria_client, object_type, component_guids, guid, qualified_name,
356
+ display_name, replace_all_props)
357
+
358
+ journal_entry_guid = add_note_in_dr_e(egeria_client, qualified_name, display_name, journal_entry)
359
+ logger.success(f"===> Updated {object_type} `{display_name}` related elements\n\n")
360
+ return egeria_client.get_solution_blueprints_by_name(qualified_name, output_format='MD', report_spec = "Solution-Blueprint-DrE")
361
+
362
+
363
+ elif object_action == "Create":
364
+ print(f"valid: {valid}, type: {type(valid)}")
365
+ try:
366
+ if valid is False and exists:
367
+ msg = (f" Data Specification `{display_name}` already exists and result document updated changing "
368
+ f"`Create` to `Update` in processed output\n\n___")
369
+ logger.error(msg)
370
+ print(Markdown(msg))
371
+ return update_a_command(txt, object_action, object_type, qualified_name, guid)
372
+
373
+ elif not valid:
374
+ msg = (f"==>{object_type} `{display_name}` is not valid and can't be created")
375
+ print(Markdown(msg))
376
+ logger.error(msg)
377
+ return
378
+
379
+ else:
380
+ body = set_create_body(object_type,attributes)
381
+ body['properties'] = prop_body
382
+ guid = egeria_client.create_solution_blueprint(body)
383
+ except Exception as e:
384
+ print(f"Unexpected error: {e}, {type(valid)}, {valid}")
385
+
386
+
387
+ if guid:
388
+ update_element_dictionary(qualified_name, {
389
+ 'guid': guid, 'display_name': display_name
339
390
  })
391
+ journal_entry_guid = add_note_in_dr_e(egeria_client, qualified_name, display_name, journal_entry)
392
+ msg = f"\n\nCreated Element `{display_name}` with GUID {guid}\n\n___"
393
+ print(Markdown(msg))
394
+ logger.success(msg)
395
+ return egeria_client.get_solution_blueprint_by_guid(guid, output_format='MD', report_spec = "Solution-Blueprint-DrE")
396
+ else:
397
+ msg = f"Failed to create element `{display_name}` with GUID {guid}\n\n___"
398
+ print(Markdown(msg))
399
+ logger.error(msg)
400
+ return None
340
401
 
341
- egeria_client.update_solution_blueprint(guid, body, replace_all_props)
342
- logger.success(f"==> Updated {object_type} `{display_name}` with GUID {guid}\n\n")
343
- update_element_dictionary(qualified_name, {
344
- 'guid': guid, 'display_name': display_name
402
+ except PyegeriaException as e:
403
+ print_basic_exception(e)
404
+ logger.error(f"Error performing {command}: {e}")
405
+ return None
406
+ else:
407
+ return None
408
+
409
+
410
+ # TODO - I think this comes after (or part of) doing the Actors
411
+ @logger.catch
412
+ def process_solution_roles_upsert_command(egeria_client: EgeriaTech, txt: str, directive: str = "display") -> Optional[str]:
413
+ """
414
+ Processes a solution role create or update object_action by extracting key attributes such as from the given text.
415
+
416
+ :param txt: A string representing the input cell to be processed for
417
+ extracting blueprint-related attributes.
418
+ :param directive: an optional string indicating the directive to be used - display, validate or execute
419
+ :return: A string summarizing the outcome of the processing.
420
+ """
421
+ command, object_type, object_action = extract_command_plus(txt)
422
+ print(Markdown(f"# {command}\n"))
423
+ parsed_output = parse_upsert_command(egeria_client, object_type, object_action, txt, directive)
424
+
425
+ valid = parsed_output['valid']
426
+ exists = parsed_output['exists']
427
+
428
+ qualified_name = parsed_output.get('qualified_name', None)
429
+ guid = parsed_output.get('guid', None)
430
+ journal_entry = parsed_output.get('Journey Entry', {}.get('value', None))
431
+ print(Markdown(parsed_output['display']))
432
+
433
+ logger.debug(json.dumps(parsed_output, indent=4))
434
+
435
+ attributes = parsed_output['attributes']
436
+ description = attributes.get('Description', {}).get('value', None)
437
+ display_name = attributes['Display Name'].get('value', None)
438
+ search_keywords = attributes['Search Keywords'].get('value', None)
439
+
440
+
441
+
442
+ component_guids = attributes.get('Solution Components', {}).get('guid_list', None)
443
+
444
+ status = attributes.get('Status', {}).get('value', None)
445
+ if status is None:
446
+ status = "ACTIVE"
447
+
448
+ replace_all_props = not attributes.get('Merge Update', {}).get('value', True)
449
+
450
+ if directive == "display":
451
+
452
+ return None
453
+ elif directive == "validate":
454
+ if valid:
455
+ print(Markdown(f"==> Validation of {command} completed successfully!\n"))
456
+ else:
457
+ msg = f"Validation failed for object_action `{command}`\n"
458
+ return valid
459
+
460
+ elif directive == "process":
461
+ prop_body = set_element_prop_body(object_type, qualified_name, attributes)
462
+
463
+ try:
464
+ if object_action == "Update":
465
+ if not exists:
466
+ msg = (f" Element `{display_name}` does not exist! Updating result document with Create "
467
+ f"object_action\n")
468
+ logger.error(msg)
469
+ print(Markdown(msg))
470
+ return update_a_command(txt, object_action, object_type, qualified_name, guid)
471
+ elif not valid:
472
+ return None
473
+ else:
474
+ print(Markdown(
475
+ f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
476
+
477
+ body = set_update_body(object_type, attributes)
478
+ body['properties'] = prop_body
479
+ egeria_client.update_solution_blueprint(guid, body)
480
+ if status:
481
+ egeria_client.update_solution_element_status(guid, status)
482
+
483
+ msg = f"Updated {object_type} `{display_name}` with GUID {guid}\n\n___"
484
+ update_element_dictionary(qualified_name, {
485
+ 'guid': guid, 'display_name': display_name
345
486
  })
346
- sync_blueprint_related_elements(egeria_client, object_type, component_guids, guid, qualified_name,
347
- display_name, replace_all_props)
348
- logger.success(f"===> Updated {object_type} `{display_name}` related elements\n\n")
349
- return egeria_client.find_solution_blueprints(qualified_name, output_format='MD')
487
+ logger.success(msg)
488
+ sync_blueprint_related_elements(egeria_client, object_type, component_guids, guid, qualified_name,
489
+ display_name, replace_all_props)
490
+
491
+ journal_entry_guid = add_note_in_dr_e(egeria_client, qualified_name, display_name, journal_entry)
492
+ logger.success(f"===> Updated {object_type} `{display_name}` related elements\n\n")
493
+ return egeria_client.get_solution_blueprints_by_name(qualified_name, output_format='MD', report_spec = "Solution-Blueprint-DrE")
350
494
 
351
495
 
352
496
  elif object_action == "Create":
@@ -356,40 +500,18 @@ def process_blueprint_upsert_command(egeria_client: EgeriaTech, txt: str, direct
356
500
  msg = (f" Data Specification `{display_name}` already exists and result document updated changing "
357
501
  f"`Create` to `Update` in processed output\n\n___")
358
502
  logger.error(msg)
503
+ print(Markdown(msg))
359
504
  return update_a_command(txt, object_action, object_type, qualified_name, guid)
360
505
 
361
506
  elif not valid:
362
507
  msg = (f"==>{object_type} `{display_name}` is not valid and can't be created")
508
+ print(Markdown(msg))
363
509
  logger.error(msg)
364
510
  return
365
511
 
366
512
  else:
367
- body = {
368
- "class": "NewSolutionBlueprintRequestBody",
369
- "externalSourceGUID": external_source_guid,
370
- "externalSourceName": external_source_name,
371
- "forLineage": False,
372
- "forDuplicateProcessing": False,
373
- "effectiveTime": effective_time,
374
- "anchorGUID": anchor_guid,
375
- "isOwnAnchor": is_own_anchor,
376
- "anchorScopeGUID": anchor_scope_guid,
377
- "parentGUID": parent_guid,
378
- "parentRelationshipTypeName": parent_relationship_type_name,
379
- "parentAtEnd1": parent_at_end1,
380
- "properties": {
381
- "class": "SolutionBlueprintProperties",
382
- "effectiveFrom": effective_from,
383
- "effectiveTo": effective_to, # "typeName": type_name,
384
- "extendedProperties": extended_properties,
385
- "qualifiedName": qualified_name,
386
- "additionalProperties": additional_properties,
387
- "displayName": display_name,
388
- "description": description,
389
- "versionIdentifier": version_identifier
390
- },
391
- "initialStatus": initial_status,
392
- }
513
+ body = set_create_body(object_type,attributes)
514
+ body['properties'] = prop_body
393
515
  guid = egeria_client.create_solution_blueprint(body)
394
516
  except Exception as e:
395
517
  print(f"Unexpected error: {e}, {type(valid)}, {valid}")
@@ -399,22 +521,27 @@ def process_blueprint_upsert_command(egeria_client: EgeriaTech, txt: str, direct
399
521
  update_element_dictionary(qualified_name, {
400
522
  'guid': guid, 'display_name': display_name
401
523
  })
402
- msg = f"Created Element `{display_name}` with GUID {guid}\n\n___"
524
+ journal_entry_guid = add_note_in_dr_e(egeria_client, qualified_name, display_name, journal_entry)
525
+ msg = f"\n\nCreated Element `{display_name}` with GUID {guid}\n\n___"
526
+ print(Markdown(msg))
403
527
  logger.success(msg)
404
- return egeria_client.find_solution_blueprints(qualified_name, output_format='MD')
528
+ return egeria_client.get_solution_blueprint_by_guid(guid, output_format='MD', report_spec = "Solution-Blueprint-DrE")
405
529
  else:
406
530
  msg = f"Failed to create element `{display_name}` with GUID {guid}\n\n___"
531
+ print(Markdown(msg))
407
532
  logger.error(msg)
408
533
  return None
409
534
 
410
- except Exception as e:
411
- print("why did I get here")
535
+ except PyegeriaException as e:
536
+ print_basic_exception(e)
412
537
  logger.error(f"Error performing {command}: {e}")
413
538
  return None
414
539
  else:
415
540
  return None
416
541
 
417
542
 
543
+
544
+
418
545
  @logger.catch
419
546
  def process_solution_component_upsert_command(egeria_client: EgeriaTech, txt: str, directive: str = "display") -> \
420
547
  Optional[str]:
@@ -450,6 +577,9 @@ def process_solution_component_upsert_command(egeria_client: EgeriaTech, txt: st
450
577
  solution_component_type = attributes.get('Solution Component Type', {}).get('value', None)
451
578
  planned_deployed_impl_type = attributes.get('Planned Deployed Implementation Type', {}).get('value', None)
452
579
  initial_status = attributes.get('Status', {}).get('value', None)
580
+ url = attributes.get('URL', {}).get('value', None)
581
+ search_keywords = attributes.get('Search Keywords', {}).get('value', None)
582
+ journal_entry = attributes.get('Journal Entry', {}).get('value', None)
453
583
  user_defined_status = attributes.get('User Defined Status', {}).get('value', None)
454
584
  if initial_status != "OTHER":
455
585
  user_defined_status = None
@@ -522,9 +652,10 @@ def process_solution_component_upsert_command(egeria_client: EgeriaTech, txt: st
522
652
  "class": "UpdateElementRequestBody",
523
653
  "externalSourceGUID": external_source_guid,
524
654
  "externalSourceName": external_source_name,
525
- "effectiveTime": effective_time, "forLineage": False,
655
+ "effectiveTime": effective_time,
656
+ "mergeUpdate": merge_update,
657
+ "forLineage": False,
526
658
  "forDuplicateProcessing": False,
527
- "parentAtEnd1": parent_at_end1,
528
659
  "properties": {
529
660
  "class": "SolutionComponentProperties",
530
661
  "qualifiedName": qualified_name,
@@ -535,23 +666,28 @@ def process_solution_component_upsert_command(egeria_client: EgeriaTech, txt: st
535
666
  "additionalProperties": additional_properties,
536
667
  "extendedProperties": extended_properties,
537
668
  "effectiveFrom": effective_from,
538
- "effectiveTo": effective_to
669
+ "effectiveTo": effective_to,
670
+ "URL": url
539
671
  }
540
672
  })
541
673
 
542
- egeria_client.update_solution_component(guid, body, not merge_update)
543
- logger.success(f"==>Updated {object_type} `{display_name}` with GUID {guid}\n")
674
+ egeria_client.update_solution_component(guid, body)
675
+ msg = f"\n==>Updated {object_type} `{display_name}` with GUID {guid}\n"
676
+ logger.success(msg)
677
+ print(Markdown(msg))
544
678
  update_element_dictionary(qualified_name, {
545
679
  'guid': guid, 'display_name': display_name
546
680
  })
547
681
  # Sync Parent Components and Blueprints
548
682
  sync_component_related_elements(egeria_client, object_type ,
549
683
  in_supply_chain_guids,parent_component_guids,actor_guids,
550
- in_blueprint_guids, guid, qualified_name,
684
+ in_blueprint_guids, search_keywords, guid, qualified_name,
551
685
  display_name,
552
686
  merge_update)
553
- logger.success(f"==>Updated {object_type} `{display_name}` with related elements")
554
- return egeria_client.get_solution_component_by_guid(guid, output_format='MD')
687
+
688
+ if journal_entry:
689
+ journal_entry_guid = add_note_in_dr_e(egeria_client, qualified_name, display_name, journal_entry)
690
+ return egeria_client.get_solution_component_by_guid(guid, output_format='MD', report_spec = "Solution-Component-DrE")
555
691
 
556
692
 
557
693
  elif object_action == "Create":
@@ -568,7 +704,7 @@ def process_solution_component_upsert_command(egeria_client: EgeriaTech, txt: st
568
704
 
569
705
  else:
570
706
  body = body_slimmer({
571
- "class": "NewSolutionElementRequestBody",
707
+ "class": "NewElementRequestBody",
572
708
  "anchorGUID": anchor_guid,
573
709
  "isOwnAnchor": is_own_anchor,
574
710
  "parentGUID": parent_guid,
@@ -587,7 +723,8 @@ def process_solution_component_upsert_command(egeria_client: EgeriaTech, txt: st
587
723
  "additionalProperties": additional_properties,
588
724
  "extendedProperties": extended_properties,
589
725
  "effectiveFrom": effective_from,
590
- "effectiveTo": effective_to
726
+ "effectiveTo": effective_to,
727
+ "URL": url
591
728
  },
592
729
  "initialStatus": initial_status,
593
730
  "externalSourceGUID": external_source_guid,
@@ -602,8 +739,13 @@ def process_solution_component_upsert_command(egeria_client: EgeriaTech, txt: st
602
739
  update_element_dictionary(qualified_name, {
603
740
  'guid': guid, 'display_name': display_name
604
741
  })
605
- msg = f"Created Element `{display_name}` with GUID {guid}\n\n___"
742
+ msg = f"\n\n==> Created Element `{display_name}` with GUID {guid}\n\n___"
606
743
  logger.success(msg)
744
+ print(Markdown(msg))
745
+
746
+ if search_keywords:
747
+ add_search_keywords(egeria_client, guid, search_keywords)
748
+
607
749
  if in_component_guids:
608
750
  for comp in in_component_guids:
609
751
  egeria_client.link_subcomponent(comp, guid, None)
@@ -627,6 +769,8 @@ def process_solution_component_upsert_command(egeria_client: EgeriaTech, txt: st
627
769
  egeria_client.link_design_to_implementation(isc, guid, None)
628
770
  msg = f"Added `{display_name}`to supply chain `{in_supply_chain_names}`"
629
771
  logger.trace(msg)
772
+ journal_entry_guid = add_note_in_dr_e(egeria_client, qualified_name, display_name,
773
+ journal_entry)
630
774
 
631
775
  return egeria_client.get_solution_component_by_guid(guid, output_format='MD')
632
776
  else:
@@ -738,7 +882,7 @@ def process_component_link_unlink_command(egeria_client: EgeriaTech, txt: str,
738
882
  return
739
883
  else:
740
884
  body = {
741
- "class": "RelationshipRequestBody",
885
+ "class": "NewRelationshipRequestBody",
742
886
  "effectiveTime": effective_time,
743
887
  "forLineage": False,
744
888
  "forDuplicateProcessing": False,
@@ -751,13 +895,13 @@ def process_component_link_unlink_command(egeria_client: EgeriaTech, txt: str,
751
895
  }
752
896
  }
753
897
 
754
- egeria_client.link_solution_linking_wire(component1, component2, None)
898
+ egeria_client.link_solution_linking_wire(component1, component2, body)
755
899
  msg = f"==>Created {object_type} link named `{label}`\n"
756
900
  logger.success(msg)
901
+ print(Markdown(msg))
757
902
  out = parsed_output['display'].replace('Link', 'Detach', 1)
758
903
  return out
759
904
 
760
-
761
905
  except Exception as e:
762
906
  logger.error(f"Error performing {command}: {e}")
763
907
  return None
@@ -798,22 +942,12 @@ def process_information_supply_chain_upsert_command(egeria_client: EgeriaTech, t
798
942
  description = attributes.get('Description', {}).get('value', None)
799
943
  display_name = attributes['Display Name'].get('value', None)
800
944
  version_identifier = attributes.get('Version Identifier', {}).get('value', None)
945
+ journal_entry = attributes.get('Journal Entry', {}).get('value', None)
801
946
  effective_time = attributes.get('Effective Time', {}).get('value', None)
802
947
  effective_from = attributes.get('Effective From', {}).get('value', None)
803
948
  effective_to = attributes.get('Effective To', {}).get('value', None)
804
- external_source_guid = attributes.get('External Source GUID', {}).get('value', None)
805
- external_source_name = attributes.get('External Source Name', {}).get('value', None)
806
949
 
807
- anchor_guid = attributes.get('Anchor ID', {}).get('guid', None)
808
- parent_guid = attributes.get('Parent ID', {}).get('guid', None)
809
- parent_relationship_type_name = attributes.get('Parent Relationship Type Name', {}).get('value', None)
810
- parent_at_end1 = attributes.get('Parent at End1', {}).get('value', True)
811
-
812
- anchor_scope_guid = attributes.get('Anchor Scope GUID', {}).get('value', None)
813
- is_own_anchor = attributes.get('Is Own Anchor', {}).get('value', True)
814
- if parent_guid is None:
815
- is_own_anchor = True
816
- nested_supply_chain_guids = attributes.get('Nested Supply Chain', {}).get('guids', None)
950
+ nested_supply_chain_guids = attributes.get('Nested Information Supply Chains', {}).get('guid_list', None)
817
951
  additional_prop = attributes.get('Additional Properties', {}).get('value', None)
818
952
  additional_properties = json.loads(additional_prop) if additional_prop is not None else None
819
953
  extended_prop = attributes.get('Extended Properties', {}).get('value', None)
@@ -822,8 +956,8 @@ def process_information_supply_chain_upsert_command(egeria_client: EgeriaTech, t
822
956
  scope = attributes.get('Scope', {}).get('value', None)
823
957
  purposes = attributes.get('Purposes', {}).get('value', None)
824
958
  in_supply_chain_guids = attributes.get('In Information Supply Chain', {}).get('guid_list', None)
959
+ merge_update = attributes.get('Merge Update', {}).get('value', True),
825
960
 
826
- replace_all_props = not attributes.get('Merge Update', {}).get('value', True)
827
961
 
828
962
  if directive == "display":
829
963
 
@@ -837,6 +971,14 @@ def process_information_supply_chain_upsert_command(egeria_client: EgeriaTech, t
837
971
 
838
972
  elif directive == "process":
839
973
  try:
974
+ prop_body = {
975
+ "class": "InformationSupplyChainProperties", "effectiveFrom": effective_from,
976
+ "effectiveTo": effective_to, "extendedProperties": extended_properties,
977
+ "qualifiedName": qualified_name, "additionalProperties": additional_properties,
978
+ "displayName": display_name, "description": description, "scope": scope,
979
+ "purposes": purposes, "version": version_identifier
980
+ }
981
+
840
982
  if object_action == "Update":
841
983
  if not exists:
842
984
  msg = (f" Element `{display_name}` does not exist! Updating result document with Create "
@@ -849,32 +991,20 @@ def process_information_supply_chain_upsert_command(egeria_client: EgeriaTech, t
849
991
  print(Markdown(
850
992
  f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
851
993
 
852
- body = body_slimmer({
853
- "class": "UpdateElementRequestBody",
854
- "externalSourceGUID": external_source_guid,
855
- "externalSourceName": external_source_name,
856
- "effectiveTime": effective_time,
857
- "forLineage": False,
858
- "forDuplicateProcessing": False,
859
- "properties": {
860
- "class": "InformationSupplyChainProperties", "effectiveFrom": effective_from,
861
- "effectiveTo": effective_to, "extendedProperties": extended_properties,
862
- "qualifiedName": qualified_name, "additionalProperties": additional_properties,
863
- "displayName": display_name, "description": description, "scope": scope,
864
- "purposes": purposes, "version": version_identifier
865
- }
866
- })
867
994
 
868
- egeria_client.update_info_supply_chain(guid, body, replace_all_props)
995
+ body = set_update_body("InformationSupplyChain", attributes)
996
+ body['properties'] = prop_body
997
+ egeria_client.update_info_supply_chain(guid, body)
869
998
 
870
- sync_chain_related_elements(egeria_client, guid, in_supply_chain_guids, display_name, replace_all_props)
999
+ sync_chain_related_elements(egeria_client, guid, in_supply_chain_guids, display_name, merge_update)
871
1000
  logger.success(f"==> Updated {object_type} `{display_name}` with GUID {guid}\n\n")
872
1001
  update_element_dictionary(qualified_name, {
873
1002
  'guid': guid, 'display_name': display_name
874
1003
  })
1004
+ journal_entry_guid = add_note_in_dr_e(egeria_client, qualified_name, display_name, journal_entry)
875
1005
 
876
- # logger.success(f"===> Updated {object_type} `{display_name}` related elements\n\n")
877
- return egeria_client.get_info_supply_chain_by_guid(guid, output_format='MD')
1006
+ logger.success(f"===> Updated {object_type} `{display_name}` related elements\n\n")
1007
+ return egeria_client.get_info_supply_chain_by_guid(guid, output_format='MD', report_spec = "Information-Supply-Chain-DrE")
878
1008
 
879
1009
 
880
1010
  elif object_action == "Create":
@@ -890,46 +1020,32 @@ def process_information_supply_chain_upsert_command(egeria_client: EgeriaTech, t
890
1020
  logger.error(msg)
891
1021
  return
892
1022
  else:
893
- body = {
894
- "class": "NewElementRequestBody",
895
- "externalSourceGUID": external_source_guid,
896
- "externalSourceName": external_source_name,
897
- "forLineage": False,
898
- "forDuplicateProcessing": False,
899
- "effectiveTime": effective_time,
900
- "anchorGUID": anchor_guid,
901
- "isOwnAnchor": is_own_anchor,
902
- "anchorScopeGUID": anchor_scope_guid,
903
- "parentGUID": parent_guid,
904
- "parentRelationshipTypeName": parent_relationship_type_name,
905
- "parentAtEnd1": parent_at_end1,
906
- "properties": {
907
- "class": "InformationSupplyChainProperties",
908
- "effectiveFrom": effective_from,
909
- "effectiveTo": effective_to,
910
- "extendedProperties": extended_properties,
911
- "qualifiedName": qualified_name,
912
- "additionalProperties": additional_properties,
913
- "displayName": display_name,
914
- "description": description,
915
- "scope": scope,
916
- "purposes": purposes,
917
- "version": version_identifier
918
- }
919
- }
1023
+ body = set_create_body("InformationSupplyChain", attributes)
1024
+ body['properties'] = prop_body
920
1025
 
921
1026
  guid = egeria_client.create_info_supply_chain(body)
922
1027
  if guid:
1028
+ msg = f"==>Created Element `{display_name}` with GUID {guid}\n"
1029
+ logger.success(msg)
1030
+ print(Markdown(msg))
923
1031
  update_element_dictionary(qualified_name, {
924
1032
  'guid': guid, 'display_name': display_name
925
1033
  })
926
- if len(in_supply_chain_guids) > 0:
1034
+ if in_supply_chain_guids:
927
1035
  for nested_chain in in_supply_chain_guids:
928
- egeria_client.compose_info_supply_chains(guid, nested_chain)
1036
+ egeria_client.compose_info_supply_chains(nested_chain, guid)
929
1037
 
930
- msg = f"==>Created Element `{display_name}` with GUID {guid}\n"
1038
+ if journal_entry:
1039
+ journal_entry_guid = add_note_in_dr_e(egeria_client, qualified_name, display_name,
1040
+ journal_entry)
1041
+ if nested_supply_chain_guids:
1042
+ for nested_supply_chain in nested_supply_chain_guids:
1043
+ egeria_client.compose_info_supply_chains(guid, nested_supply_chain)
1044
+
1045
+ msg = f"==>Created Element `{display_name}` Relationships\n"
931
1046
  logger.success(msg)
932
- return egeria_client.get_info_supply_chain_by_guid(guid, output_format='MD')
1047
+ print(Markdown(msg))
1048
+ return egeria_client.get_info_supply_chain_by_guid(guid, output_format='MD', report_spec="Information-Supply-Chain-DrE")
933
1049
  else:
934
1050
  msg = f"==>Failed to create element `{display_name}` with GUID {guid}\n"
935
1051
  logger.error(msg)
@@ -965,13 +1081,13 @@ def process_information_supply_chain_link_unlink_command(egeria_client: EgeriaTe
965
1081
 
966
1082
  attributes = parsed_output['attributes']
967
1083
 
968
- component1 = attributes.get('component1', {}).get('guid', None)
969
- component2 = attributes.get('component2', {}).get('guid', None)
1084
+ segment1 = attributes.get('Segment1', {}).get('guid', None)
1085
+ segment2 = attributes.get('Segment2', {}).get('guid', None)
970
1086
  label = attributes.get('Link Label', {}).get('value', None)
971
1087
  description = attributes.get('Description', {}).get('value', None)
972
1088
 
973
1089
  valid = parsed_output['valid']
974
- exists = component1 is not None and component2 is not None
1090
+ exists = segment1 is not None and segment2 is not None
975
1091
 
976
1092
 
977
1093
  external_source_guid = attributes.get('External Source GUID', {}).get('value', None)
@@ -1012,7 +1128,7 @@ def process_information_supply_chain_link_unlink_command(egeria_client: EgeriaTe
1012
1128
  f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
1013
1129
 
1014
1130
  body = body_slimmer({
1015
- "class": "MetadataSourceRequestBody",
1131
+ "class": "DeleteRelationshipRequestBody",
1016
1132
  "externalSourceGUID": external_source_guid,
1017
1133
  "externalSourceName": external_source_name,
1018
1134
  "effectiveTime": effective_time,
@@ -1020,9 +1136,9 @@ def process_information_supply_chain_link_unlink_command(egeria_client: EgeriaTe
1020
1136
  "forDuplicateProcessing": False
1021
1137
  })
1022
1138
 
1023
- egeria_client.unlink_peer_info_supply_chains(component1, component2, body)
1139
+ egeria_client.unlink_peer_info_supply_chains(segment1, segment2, body)
1024
1140
 
1025
- logger.success(f"===> Detached segment with {label} from `{component1}`to {component2}\n")
1141
+ logger.success(f"===> Detached segment with {label} from `{segment1}`to {segment2}\n")
1026
1142
  out = parsed_output['display'].replace('Unlink', 'Link', 1)
1027
1143
 
1028
1144
  return (out)
@@ -1040,7 +1156,7 @@ def process_information_supply_chain_link_unlink_command(egeria_client: EgeriaTe
1040
1156
  return
1041
1157
  else:
1042
1158
  body = {
1043
- "class": "RelationshipRequestBody",
1159
+ "class": "NewRelationshipRequestBody",
1044
1160
  "effectiveTime": effective_time,
1045
1161
  "forLineage": False,
1046
1162
  "forDuplicateProcessing": False,
@@ -1053,7 +1169,7 @@ def process_information_supply_chain_link_unlink_command(egeria_client: EgeriaTe
1053
1169
  }
1054
1170
  }
1055
1171
 
1056
- egeria_client.link_peer_info_supply_chain(component1, component2, body)
1172
+ egeria_client.link_peer_info_supply_chains(segment1, segment2, body)
1057
1173
  msg = f"==>Created {object_type} link named `{label}`\n"
1058
1174
  logger.success(msg)
1059
1175
  out = parsed_output['display'].replace('Link', 'Detach', 1)
@@ -1066,75 +1182,3 @@ def process_information_supply_chain_link_unlink_command(egeria_client: EgeriaTe
1066
1182
  else:
1067
1183
  return None
1068
1184
 
1069
- @logger.catch
1070
- def process_sol_arch_list_command(egeria_client: EgeriaTech, txt: str, kind:str, directive: str = "display" ) -> Optional[str]:
1071
- """
1072
- Processes Solution Blueprint list object_action by extracting key attributes such as
1073
- search string from the given text.
1074
-
1075
- :param txt: A string representing the input cell to be processed for
1076
- extracting term-related attributes.
1077
- :param directive: an optional string indicating the directive to be used - display, validate or execute
1078
- :return: A string summarizing the outcome of the processing.
1079
- """
1080
- command, object_type, object_action = extract_command_plus(txt)
1081
- print(Markdown(f"# {command}\n"))
1082
-
1083
- parsed_output = parse_view_command(egeria_client, object_type, object_action, txt, directive)
1084
-
1085
- attributes = parsed_output['attributes']
1086
-
1087
- valid = parsed_output['valid']
1088
-
1089
- print(Markdown(parsed_output['display']))
1090
-
1091
- if directive == "display":
1092
- return None
1093
- elif directive == "validate":
1094
- if valid:
1095
- print(Markdown(f"==> Validation of {command} completed successfully!\n"))
1096
- else:
1097
- msg = f"Validation failed for object_action `{command}`\n"
1098
- logger.error(msg)
1099
- return valid
1100
-
1101
- elif directive == "process":
1102
- attributes = parsed_output['attributes']
1103
- search_string = attributes.get('Search String', {}).get('value', '*')
1104
- output_format = attributes.get('Output Format', {}).get('value', 'LIST')
1105
- detailed = attributes.get('Detailed', {}).get('value', False)
1106
-
1107
- match kind:
1108
- case "Solution Blueprints":
1109
- find_proc = egeria_client.find_solution_blueprints
1110
- case "Information Supply Chains":
1111
- find_proc = egeria_client.find_information_supply_chains
1112
- case "Solution Components":
1113
- find_proc = egeria_client.find_solution_components
1114
- case "Solution Roles":
1115
- find_proc = egeria_client.find_solution_roles
1116
-
1117
- try:
1118
- if not valid: # First validate the command before we process it
1119
- msg = f"Validation failed for {object_action} `{object_type}`\n"
1120
- logger.error(msg)
1121
- return None
1122
-
1123
- list_md = f"\n# {kind} with filter: `{search_string}`\n\n"
1124
- if output_format == "DICT":
1125
- struct = find_proc(search_string, output_format=output_format)
1126
- list_md += f"```{json.dumps(struct, indent=4)}```\n"
1127
- else:
1128
- list_md += find_proc(search_string, output_format=output_format)
1129
- logger.info(f"Wrote Output for search string: `{search_string}`")
1130
-
1131
- return list_md
1132
-
1133
- except Exception as e:
1134
- logger.error(f"Error performing {command}: {e}")
1135
- console.print_exception(show_locals=True)
1136
- return None
1137
- else:
1138
- return None
1139
-
1140
-