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.
- commands/__init__.py +24 -0
- commands/cat/Dr-Egeria_md-orig.py +2 -2
- commands/cat/collection_actions.py +197 -0
- commands/cat/dr_egeria_command_help.py +137 -38
- commands/cat/dr_egeria_jupyter.py +7 -7
- commands/cat/dr_egeria_md.py +10 -267
- commands/cat/exp_list_glossaries.py +11 -14
- commands/cat/get_asset_graph.py +37 -267
- commands/cat/{get_collection.py → get_collection_tree.py} +10 -18
- commands/cat/get_project_dependencies.py +14 -14
- commands/cat/get_project_structure.py +15 -14
- commands/cat/get_tech_type_elements.py +16 -116
- commands/cat/glossary_actions.py +145 -298
- commands/cat/list_assets.py +3 -11
- commands/cat/list_cert_types.py +17 -63
- commands/cat/list_collections.py +17 -139
- commands/cat/list_deployed_catalogs.py +15 -27
- commands/cat/list_deployed_database_schemas.py +27 -43
- commands/cat/list_deployed_databases.py +16 -31
- commands/cat/list_deployed_servers.py +35 -54
- commands/cat/list_glossaries.py +18 -17
- commands/cat/list_projects.py +10 -12
- commands/cat/list_tech_type_elements.py +21 -37
- commands/cat/list_tech_types.py +13 -25
- commands/cat/list_terms.py +38 -79
- commands/cat/list_todos.py +4 -11
- commands/cat/list_user_ids.py +3 -10
- commands/cat/my_reports.py +559 -0
- commands/cat/run_report.py +394 -0
- commands/cat/{list_format_set.py → run_report_orig.py} +136 -44
- commands/cli/egeria.py +182 -219
- commands/cli/egeria_cat.py +32 -59
- commands/cli/egeria_my.py +13 -0
- commands/cli/egeria_ops.py +69 -74
- commands/cli/egeria_tech.py +17 -93
- commands/{cat → deprecated}/list_data_designer.py +2 -4
- commands/{cat → deprecated}/list_data_structures_full.py +3 -6
- commands/deprecated/old_get_asset_graph.py +315 -0
- commands/my/__init__.py +0 -2
- commands/my/list_my_profile.py +27 -34
- commands/my/list_my_roles.py +1 -7
- commands/my/monitor_my_todos.py +1 -7
- commands/my/monitor_open_todos.py +6 -7
- commands/my/todo_actions.py +4 -5
- commands/ops/__init__.py +0 -2
- commands/ops/gov_server_actions.py +17 -21
- commands/ops/list_archives.py +17 -38
- commands/ops/list_catalog_targets.py +33 -40
- commands/ops/load_archive.py +14 -11
- commands/ops/{monitor_engine_activity_c.py → monitor_active_engine_activity.py} +51 -82
- commands/ops/{monitor_integ_daemon_status.py → monitor_daemon_status.py} +35 -55
- commands/ops/monitor_engine_activity.py +79 -77
- commands/ops/{monitor_gov_eng_status.py → monitor_engine_status.py} +10 -7
- commands/ops/monitor_platform_status.py +38 -50
- commands/ops/monitor_server_startup.py +6 -11
- commands/ops/monitor_server_status.py +7 -11
- commands/ops/orig_monitor_server_list.py +8 -8
- commands/ops/orig_monitor_server_status.py +1 -5
- commands/ops/refresh_integration_daemon.py +5 -5
- commands/ops/restart_integration_daemon.py +5 -5
- commands/ops/table_integ_daemon_status.py +6 -6
- commands/ops/x_engine_actions.py +7 -7
- commands/tech/__init__.py +0 -2
- commands/tech/{generic_actions.py → element_actions.py} +6 -11
- commands/tech/get_element_info.py +20 -29
- commands/tech/get_guid_info.py +23 -42
- commands/tech/get_tech_details.py +20 -35
- commands/tech/get_tech_type_template.py +28 -39
- commands/tech/list_all_om_type_elements.py +24 -30
- commands/tech/list_all_om_type_elements_x.py +22 -28
- commands/tech/list_all_related_elements.py +19 -28
- commands/tech/list_anchored_elements.py +22 -30
- commands/tech/list_asset_types.py +19 -24
- commands/tech/list_elements_by_classification_by_property_value.py +26 -32
- commands/tech/list_elements_by_property_value.py +19 -25
- commands/tech/list_elements_by_property_value_x.py +20 -28
- commands/tech/list_elements_for_classification.py +28 -41
- commands/tech/list_gov_action_processes.py +16 -27
- commands/tech/list_information_supply_chains.py +22 -30
- commands/tech/list_registered_services.py +14 -26
- commands/tech/list_related_elements_with_prop_value.py +15 -25
- commands/tech/list_related_specification.py +1 -4
- commands/tech/list_relationship_types.py +15 -25
- commands/tech/list_relationships.py +20 -36
- commands/tech/list_solution_blueprints.py +28 -33
- commands/tech/list_solution_components.py +23 -29
- commands/tech/list_solution_roles.py +21 -32
- commands/tech/list_tech_templates.py +51 -54
- commands/tech/list_valid_metadata_values.py +5 -9
- commands/tech/table_tech_templates.py +2 -6
- commands/tech/x_list_related_elements.py +1 -4
- examples/GeoSpatial Products Example.py +524 -0
- examples/Jupyter Notebooks/P-egeria-server-config.ipynb +2137 -0
- examples/Jupyter Notebooks/README.md +2 -0
- examples/Jupyter Notebooks/common/P-environment-check.ipynb +115 -0
- examples/Jupyter Notebooks/common/__init__.py +14 -0
- examples/Jupyter Notebooks/common/common-functions.ipynb +4694 -0
- examples/Jupyter Notebooks/common/environment-check.ipynb +52 -0
- examples/Jupyter Notebooks/common/globals.ipynb +184 -0
- examples/Jupyter Notebooks/common/globals.py +154 -0
- examples/Jupyter Notebooks/common/orig_globals.py +152 -0
- examples/format_sets/all_format_sets.json +910 -0
- examples/format_sets/custom_format_sets.json +268 -0
- examples/format_sets/subset_format_sets.json +187 -0
- examples/format_sets_save_load_example.py +291 -0
- examples/jacquard_data_sets.py +129 -0
- examples/output_formats_example.py +193 -0
- examples/test_jacquard_data_sets.py +54 -0
- examples/test_jacquard_data_sets_scenarios.py +94 -0
- md_processing/__init__.py +33 -24
- md_processing/command_dispatcher.py +33 -0
- md_processing/command_mapping.py +221 -0
- md_processing/data/commands/commands_data_designer.json +537 -0
- md_processing/data/commands/commands_external_reference.json +733 -0
- md_processing/data/commands/commands_feedback.json +155 -0
- md_processing/data/commands/commands_general.json +204 -0
- md_processing/data/commands/commands_glossary.json +218 -0
- md_processing/data/commands/commands_governance.json +3678 -0
- md_processing/data/commands/commands_product_manager.json +865 -0
- md_processing/data/commands/commands_project.json +642 -0
- md_processing/data/commands/commands_solution_architect.json +366 -0
- md_processing/data/commands.json +6489 -30060
- md_processing/data/{commands-working.json → commands_working.json} +9304 -13513
- md_processing/data/gened_report_specs.py +6584 -0
- md_processing/data/generated_format_sets.json +6533 -0
- md_processing/data/generated_format_sets_old.json +4137 -0
- md_processing/data/generated_format_sets_old.py +45 -0
- md_processing/dr_egeria.py +182 -0
- md_processing/md_commands/data_designer_commands.py +195 -583
- md_processing/md_commands/ext_ref_commands.py +530 -0
- md_processing/md_commands/feedback_commands.py +726 -0
- md_processing/md_commands/glossary_commands.py +106 -490
- md_processing/md_commands/governance_officer_commands.py +129 -18
- md_processing/md_commands/product_manager_commands.py +362 -115
- md_processing/md_commands/project_commands.py +351 -134
- md_processing/md_commands/solution_architect_commands.py +276 -232
- md_processing/md_commands/view_commands.py +295 -0
- md_processing/md_processing_utils/common_md_proc_utils.py +258 -166
- md_processing/md_processing_utils/common_md_utils.py +138 -43
- md_processing/md_processing_utils/determine_width.py +103 -0
- md_processing/md_processing_utils/extraction_utils.py +100 -39
- md_processing/md_processing_utils/gen_report_specs.py +643 -0
- md_processing/md_processing_utils/generate_dr_help.py +61 -33
- md_processing/md_processing_utils/generate_md_cmd_templates.py +20 -19
- md_processing/md_processing_utils/generate_md_templates.py +3 -12
- md_processing/md_processing_utils/md_processing_constants.py +1053 -72
- pyegeria/__init__.py +203 -158
- pyegeria/core/__init__.py +40 -0
- pyegeria/core/_base_platform_client.py +574 -0
- pyegeria/core/_base_server_client.py +573 -0
- pyegeria/{_exceptions_new.py → core/_exceptions.py} +62 -30
- pyegeria/{_globals.py → core/_globals.py} +14 -3
- pyegeria/core/_server_client.py +6073 -0
- pyegeria/{_validators.py → core/_validators.py} +7 -8
- pyegeria/core/config.py +654 -0
- pyegeria/{create_tech_guid_lists.py → core/create_tech_guid_lists.py} +0 -1
- pyegeria/core/load_config.py +37 -0
- pyegeria/{logging_configuration.py → core/logging_configuration.py} +1 -1
- pyegeria/core/mcp_adapter.py +144 -0
- pyegeria/core/mcp_server.py +212 -0
- pyegeria/core/utils.py +405 -0
- pyegeria/{_client.py → deprecated/_client.py} +24 -25
- pyegeria/{_deprecated_gov_engine.py → deprecated/_deprecated_gov_engine.py} +16 -16
- pyegeria/{classification_manager_omvs.py → deprecated/classification_manager_omvs.py} +1987 -1877
- pyegeria/{output_formatter.py → deprecated/output_formatter_with_machine_keys.py} +298 -45
- pyegeria/{runtime_manager_omvs.py → deprecated/runtime_manager_omvs.py} +155 -171
- pyegeria/{valid_metadata_omvs.py → deprecated/valid_metadata_omvs.py} +93 -93
- pyegeria/{x_action_author_omvs.py → deprecated/x_action_author_omvs.py} +2 -3
- pyegeria/egeria_cat_client.py +26 -70
- pyegeria/egeria_client.py +130 -93
- pyegeria/egeria_config_client.py +40 -46
- pyegeria/egeria_tech_client.py +141 -54
- pyegeria/models/__init__.py +150 -0
- pyegeria/{models.py → models/models.py} +156 -20
- pyegeria/omvs/__init__.py +84 -0
- pyegeria/omvs/action_author.py +342 -0
- pyegeria/omvs/actor_manager.py +5980 -0
- pyegeria/omvs/asset_catalog.py +842 -0
- pyegeria/omvs/asset_maker.py +2736 -0
- pyegeria/omvs/automated_curation.py +4403 -0
- pyegeria/omvs/classification_manager.py +11213 -0
- pyegeria/{collection_manager.py → omvs/collection_manager.py} +1334 -1160
- pyegeria/omvs/community_matters_omvs.py +468 -0
- pyegeria/{core_omag_server_config.py → omvs/core_omag_server_config.py} +157 -157
- pyegeria/{data_designer.py → omvs/data_designer.py} +1115 -660
- pyegeria/omvs/data_discovery.py +869 -0
- pyegeria/omvs/data_engineer.py +372 -0
- pyegeria/omvs/digital_business.py +1133 -0
- pyegeria/omvs/external_links.py +1752 -0
- pyegeria/omvs/feedback_manager.py +834 -0
- pyegeria/{full_omag_server_config.py → omvs/full_omag_server_config.py} +73 -69
- pyegeria/{glossary_manager.py → omvs/glossary_manager.py} +857 -519
- pyegeria/{governance_officer.py → omvs/governance_officer.py} +964 -468
- pyegeria/omvs/lineage_linker.py +314 -0
- pyegeria/omvs/location_arena.py +1525 -0
- pyegeria/omvs/metadata_expert.py +668 -0
- pyegeria/omvs/metadata_explorer_omvs.py +2943 -0
- pyegeria/omvs/my_profile.py +1042 -0
- pyegeria/omvs/notification_manager.py +358 -0
- pyegeria/omvs/people_organizer.py +394 -0
- pyegeria/{platform_services.py → omvs/platform_services.py} +113 -193
- pyegeria/omvs/product_manager.py +1825 -0
- pyegeria/omvs/project_manager.py +1907 -0
- pyegeria/omvs/reference_data.py +1140 -0
- pyegeria/omvs/registered_info.py +334 -0
- pyegeria/omvs/runtime_manager.py +2817 -0
- pyegeria/omvs/schema_maker.py +446 -0
- pyegeria/{server_operations.py → omvs/server_operations.py} +27 -26
- pyegeria/{solution_architect_omvs.py → omvs/solution_architect.py} +1886 -1505
- pyegeria/omvs/specification_properties.py +37 -0
- pyegeria/omvs/subject_area.py +1042 -0
- pyegeria/omvs/template_manager_omvs.py +236 -0
- pyegeria/omvs/time_keeper.py +1761 -0
- pyegeria/omvs/valid_metadata.py +3221 -0
- pyegeria/omvs/valid_metadata_lists.py +37 -0
- pyegeria/omvs/valid_type_lists.py +37 -0
- pyegeria/view/__init__.py +28 -0
- pyegeria/{_output_format_models.py → view/_output_format_models.py} +160 -24
- pyegeria/view/_output_formats.py +14 -0
- pyegeria/view/base_report_formats.py +2719 -0
- pyegeria/view/dr_egeria_reports.py +56 -0
- pyegeria/view/format_set_executor.py +397 -0
- pyegeria/{md_processing_utils.py → view/md_processing_utils.py} +5 -5
- pyegeria/{mermaid_utilities.py → view/mermaid_utilities.py} +2 -154
- pyegeria/view/output_formatter.py +1297 -0
- pyegeria-5.5.3.3.dist-info/METADATA +218 -0
- pyegeria-5.5.3.3.dist-info/RECORD +241 -0
- {pyegeria-5.4.0.28.dist-info → pyegeria-5.5.3.3.dist-info}/WHEEL +2 -1
- pyegeria-5.5.3.3.dist-info/entry_points.txt +103 -0
- pyegeria-5.5.3.3.dist-info/top_level.txt +4 -0
- commands/cat/.DS_Store +0 -0
- commands/cat/.env +0 -8
- commands/cat/README.md +0 -16
- commands/cat/debug_log +0 -1126
- commands/cat/debug_log.2025-08-18_11-34-38_088636.zip +0 -0
- commands/cat/list_categories.py +0 -192
- commands/cat/logs/pyegeria.log +0 -4
- commands/cli/debug_log +0 -0
- commands/cli/debug_log.log +0 -0
- commands/cli/txt_custom_v2.tcss +0 -19
- commands/my/README.md +0 -17
- commands/ops/README.md +0 -24
- commands/ops/logs/pyegeria.log +0 -0
- commands/ops/monitor_asset_events.py +0 -108
- commands/tech/README.md +0 -24
- md_processing/.DS_Store +0 -0
- md_processing/dr-egeria-outbox/Collections-2025-08-12-13-30-37.md +0 -163
- md_processing/dr-egeria-outbox/Collections-2025-08-12-13-35-58.md +0 -474
- md_processing/dr_egeria_inbox/Derive-Dr-Gov-Defs.md +0 -8
- md_processing/dr_egeria_inbox/Dr.Egeria Templates.md +0 -873
- md_processing/dr_egeria_inbox/arch_test.md +0 -57
- md_processing/dr_egeria_inbox/archive/dr_egeria_intro.md +0 -254
- md_processing/dr_egeria_inbox/archive/dr_egeria_intro_more_terms.md +0 -696
- md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part1.md +0 -254
- md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part2.md +0 -298
- md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part3.md +0 -608
- md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part4.md +0 -94
- md_processing/dr_egeria_inbox/archive/freddie_intro.md +0 -284
- md_processing/dr_egeria_inbox/archive/freddie_intro_orig.md +0 -275
- md_processing/dr_egeria_inbox/archive/test-term.md +0 -110
- md_processing/dr_egeria_inbox/cat_test.md +0 -100
- md_processing/dr_egeria_inbox/collections.md +0 -39
- md_processing/dr_egeria_inbox/data_designer_debug.log +0 -6
- md_processing/dr_egeria_inbox/data_designer_out.md +0 -60
- md_processing/dr_egeria_inbox/data_designer_search_test.md +0 -11
- md_processing/dr_egeria_inbox/data_field.md +0 -54
- md_processing/dr_egeria_inbox/data_spec.md +0 -77
- md_processing/dr_egeria_inbox/data_spec_test.md +0 -2406
- md_processing/dr_egeria_inbox/data_test.md +0 -179
- md_processing/dr_egeria_inbox/data_test2.md +0 -429
- md_processing/dr_egeria_inbox/data_test3.md +0 -462
- md_processing/dr_egeria_inbox/dr_egeria_data_designer_1.md +0 -124
- md_processing/dr_egeria_inbox/dr_egeria_intro_categories.md +0 -168
- md_processing/dr_egeria_inbox/dr_egeria_intro_part1.md +0 -280
- md_processing/dr_egeria_inbox/dr_egeria_intro_part2.md +0 -318
- md_processing/dr_egeria_inbox/dr_egeria_intro_part3.md +0 -1073
- md_processing/dr_egeria_inbox/dr_egeria_isc1.md +0 -44
- md_processing/dr_egeria_inbox/generated_help_report.md +0 -9
- md_processing/dr_egeria_inbox/glossary_creation_experiment.ipynb +0 -341
- md_processing/dr_egeria_inbox/glossary_list.md +0 -5
- md_processing/dr_egeria_inbox/glossary_search_test.md +0 -40
- md_processing/dr_egeria_inbox/glossary_test1.md +0 -324
- md_processing/dr_egeria_inbox/gov_def.md +0 -482
- md_processing/dr_egeria_inbox/gov_def2.md +0 -447
- md_processing/dr_egeria_inbox/img.png +0 -0
- md_processing/dr_egeria_inbox/product.md +0 -211
- md_processing/dr_egeria_inbox/rel.md +0 -8
- md_processing/dr_egeria_inbox/sb.md +0 -119
- md_processing/dr_egeria_inbox/solution-components.md +0 -136
- md_processing/dr_egeria_inbox/solution_blueprints.md +0 -118
- md_processing/dr_egeria_inbox/synonym_test.md +0 -42
- md_processing/dr_egeria_inbox/t2.md +0 -268
- md_processing/dr_egeria_outbox/.obsidian/app.json +0 -1
- md_processing/dr_egeria_outbox/.obsidian/appearance.json +0 -1
- md_processing/dr_egeria_outbox/.obsidian/community-plugins.json +0 -6
- md_processing/dr_egeria_outbox/.obsidian/core-plugins.json +0 -31
- md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/data.json +0 -10
- md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/main.js +0 -4459
- md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/manifest.json +0 -10
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/data.json +0 -3
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/main.js +0 -153
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/manifest.json +0 -11
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/styles.css +0 -1
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/main.js +0 -500
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/manifest.json +0 -12
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/styles.css +0 -1
- md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/main.js +0 -37
- md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/manifest.json +0 -11
- md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/styles.css +0 -220
- md_processing/dr_egeria_outbox/.obsidian/types.json +0 -28
- md_processing/dr_egeria_outbox/.obsidian/workspace.json +0 -220
- md_processing/dr_egeria_outbox/Untitled.canvas +0 -1
- md_processing/dr_egeria_outbox/friday/processed-2025-08-22 21:22-dr_egeria_intro_part1.md +0 -312
- md_processing/dr_egeria_outbox/friday/processed-2025-08-22 21:23-dr_egeria_intro_part1.md +0 -265
- md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:06-dr_egeria_intro_part1.md +0 -230
- md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:30-dr_egeria_intro_part1.md +0 -296
- md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:31-dr_egeria_intro_part1.md +0 -253
- md_processing/dr_egeria_outbox/friday/processed-2025-08-23 16:08-dr_egeria_intro_part2.md +0 -343
- md_processing/dr_egeria_outbox/friday/processed-2025-08-23 16:12-dr_egeria_intro_part2.md +0 -343
- md_processing/dr_egeria_outbox/monday/processed-2025-08-19 07:05-product.md +0 -426
- md_processing/dr_egeria_outbox/monday/processed-2025-08-19 07:56-product.md +0 -212
- md_processing/dr_egeria_outbox/monday/processed-2025-08-19 09:43-product.md +0 -201
- md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 14:55-product.md +0 -77
- md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 15:05-product.md +0 -75
- md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 15:11-product.md +0 -74
- md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 20:40-collections.md +0 -49
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 15:00-Derive-Dr-Gov-Defs.md +0 -719
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:13-Derive-Dr-Gov-Defs.md +0 -41
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:14-Derive-Dr-Gov-Defs.md +0 -33
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:50-Derive-Dr-Gov-Defs.md +0 -192
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 22:08-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 22:10-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 08:53-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 08:54-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:03-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:06-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:10-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/tuesday/processed-2025-07-16 19:15-gov_def2.md +0 -527
- md_processing/dr_egeria_outbox/tuesday/processed-2025-07-17 12:08-gov_def2.md +0 -527
- md_processing/dr_egeria_outbox/tuesday/processed-2025-07-17 14:27-gov_def2.md +0 -485
- md_processing/dr_egeria_outbox/tuesday/processed-2025-08-19 10:55-product.md +0 -209
- md_processing/family_docs/Data Designer/Create_Data_Class.md +0 -164
- md_processing/family_docs/Data Designer/Create_Data_Dictionary.md +0 -30
- md_processing/family_docs/Data Designer/Create_Data_Field.md +0 -162
- md_processing/family_docs/Data Designer/Create_Data_Specification.md +0 -36
- md_processing/family_docs/Data Designer/Create_Data_Structure.md +0 -38
- md_processing/family_docs/Data Designer/View_Data_Classes.md +0 -78
- md_processing/family_docs/Data Designer/View_Data_Dictionaries.md +0 -78
- md_processing/family_docs/Data Designer/View_Data_Fields.md +0 -78
- md_processing/family_docs/Data Designer/View_Data_Specifications.md +0 -78
- md_processing/family_docs/Data Designer/View_Data_Structures.md +0 -78
- md_processing/family_docs/Data Designer.md +0 -842
- md_processing/family_docs/Digital Product Manager/Add_Member->Collection.md +0 -42
- md_processing/family_docs/Digital Product Manager/Attach_Collection->Resource.md +0 -36
- md_processing/family_docs/Digital Product Manager/Create_Agreement.md +0 -96
- md_processing/family_docs/Digital Product Manager/Create_Data_Sharing_Agreement.md +0 -72
- md_processing/family_docs/Digital Product Manager/Create_DigitalSubscription.md +0 -102
- md_processing/family_docs/Digital Product Manager/Create_Digital_Product.md +0 -134
- md_processing/family_docs/Digital Product Manager/Link_Agreement_Items.md +0 -60
- md_processing/family_docs/Digital Product Manager/Link_Contracts.md +0 -26
- md_processing/family_docs/Digital Product Manager/Link_Digital_Product_-_Digital_Product.md +0 -30
- md_processing/family_docs/Digital Product Manager/Link_Subscribers.md +0 -48
- md_processing/family_docs/Digital Product Manager.md +0 -668
- md_processing/family_docs/Glossary/Attach_Category_Parent.md +0 -18
- md_processing/family_docs/Glossary/Attach_Term-Term_Relationship.md +0 -26
- md_processing/family_docs/Glossary/Create_Category.md +0 -38
- md_processing/family_docs/Glossary/Create_Glossary.md +0 -42
- md_processing/family_docs/Glossary/Create_Term.md +0 -70
- md_processing/family_docs/Glossary.md +0 -206
- md_processing/family_docs/Governance Officer/Create_Business_Imperative.md +0 -106
- md_processing/family_docs/Governance Officer/Create_Certification_Type.md +0 -112
- md_processing/family_docs/Governance Officer/Create_Governance_Approach.md +0 -114
- md_processing/family_docs/Governance Officer/Create_Governance_Obligation.md +0 -114
- md_processing/family_docs/Governance Officer/Create_Governance_Principle.md +0 -114
- md_processing/family_docs/Governance Officer/Create_Governance_Procedure.md +0 -128
- md_processing/family_docs/Governance Officer/Create_Governance_Process.md +0 -122
- md_processing/family_docs/Governance Officer/Create_Governance_Processing_Purpose.md +0 -106
- md_processing/family_docs/Governance Officer/Create_Governance_Responsibility.md +0 -122
- md_processing/family_docs/Governance Officer/Create_Governance_Rule.md +0 -122
- md_processing/family_docs/Governance Officer/Create_Governance_Strategy.md +0 -106
- md_processing/family_docs/Governance Officer/Create_License_Type.md +0 -112
- md_processing/family_docs/Governance Officer/Create_Naming_Standard_Rule.md +0 -122
- md_processing/family_docs/Governance Officer/Create_Regulation_Article.md +0 -106
- md_processing/family_docs/Governance Officer/Create_Regulation_Definition.md +0 -118
- md_processing/family_docs/Governance Officer/Create_Security_Access_Control.md +0 -114
- md_processing/family_docs/Governance Officer/Create_Security_Group.md +0 -120
- md_processing/family_docs/Governance Officer/Create_Service_Level_Objectives.md +0 -122
- md_processing/family_docs/Governance Officer/Create_Threat_Definition.md +0 -106
- md_processing/family_docs/Governance Officer/Link_Governance_Controls.md +0 -32
- md_processing/family_docs/Governance Officer/Link_Governance_Drivers.md +0 -32
- md_processing/family_docs/Governance Officer/Link_Governance_Policies.md +0 -32
- md_processing/family_docs/Governance Officer/View_Governance_Definitions.md +0 -82
- md_processing/family_docs/Governance Officer.md +0 -2412
- md_processing/family_docs/Solution Architect/Create_Information_Supply_Chain.md +0 -70
- md_processing/family_docs/Solution Architect/Create_Solution_Blueprint.md +0 -44
- md_processing/family_docs/Solution Architect/Create_Solution_Component.md +0 -96
- md_processing/family_docs/Solution Architect/Create_Solution_Role.md +0 -66
- md_processing/family_docs/Solution Architect/Link_Information_Supply_Chain_Peers.md +0 -32
- md_processing/family_docs/Solution Architect/Link_Solution_Component_Peers.md +0 -32
- md_processing/family_docs/Solution Architect/View_Information_Supply_Chains.md +0 -32
- md_processing/family_docs/Solution Architect/View_Solution_Blueprints.md +0 -32
- md_processing/family_docs/Solution Architect/View_Solution_Components.md +0 -32
- md_processing/family_docs/Solution Architect/View_Solution_Roles.md +0 -32
- md_processing/family_docs/Solution Architect.md +0 -490
- md_processing/md_processing_utils/debug_log +0 -574
- md_processing/md_processing_utils/debug_log.log +0 -0
- md_processing/md_processing_utils/dr-egeria-help-2025-07-17T17:22:09.md +0 -2065
- md_processing/md_processing_utils/generated_help_terms.md +0 -842
- pyegeria/.DS_Store +0 -0
- pyegeria/README.md +0 -35
- pyegeria/_client_new.py +0 -1102
- pyegeria/_output_formats.py +0 -730
- pyegeria/asset_catalog_omvs.py +0 -864
- pyegeria/automated_curation_omvs.py +0 -3765
- pyegeria/config.py +0 -523
- pyegeria/egeria_my_client.py +0 -91
- pyegeria/feedback_manager_omvs.py +0 -4573
- pyegeria/load_config_orig.py +0 -218
- pyegeria/md_processing_helpers.py +0 -58
- pyegeria/md_processing_utils_orig.py +0 -1103
- pyegeria/metadata_explorer_omvs.py +0 -2326
- pyegeria/my_profile_omvs.py +0 -1022
- pyegeria/project_manager.py +0 -1591
- pyegeria/registered_info.py +0 -167
- pyegeria/template_manager_omvs.py +0 -1414
- pyegeria/utils.py +0 -256
- pyegeria-5.4.0.28.dist-info/METADATA +0 -77
- pyegeria-5.4.0.28.dist-info/RECORD +0 -343
- pyegeria-5.4.0.28.dist-info/entry_points.txt +0 -105
- /commands/cat/debug_log.log → /pyegeria/deprecated/__init__.py +0 -0
- /pyegeria/{_exceptions.py → deprecated/_exceptions.py} +0 -0
- /pyegeria/{collection_models.py → models/collection_models.py} +0 -0
- {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,
|
|
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
|
-
|
|
29
|
-
if
|
|
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": "
|
|
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": "
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
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
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
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
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
411
|
-
|
|
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,
|
|
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
|
|
543
|
-
|
|
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
|
-
|
|
554
|
-
|
|
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": "
|
|
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": "
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
1034
|
+
if in_supply_chain_guids:
|
|
927
1035
|
for nested_chain in in_supply_chain_guids:
|
|
928
|
-
egeria_client.compose_info_supply_chains(
|
|
1036
|
+
egeria_client.compose_info_supply_chains(nested_chain, guid)
|
|
929
1037
|
|
|
930
|
-
|
|
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
|
-
|
|
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
|
-
|
|
969
|
-
|
|
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 =
|
|
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": "
|
|
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(
|
|
1139
|
+
egeria_client.unlink_peer_info_supply_chains(segment1, segment2, body)
|
|
1024
1140
|
|
|
1025
|
-
logger.success(f"===> Detached segment with {label} from `{
|
|
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": "
|
|
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.
|
|
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
|
-
|