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
|
@@ -3,7 +3,6 @@ This file contains product manager commands for processing Egeria Markdown
|
|
|
3
3
|
"""
|
|
4
4
|
import json
|
|
5
5
|
import os
|
|
6
|
-
import sys
|
|
7
6
|
from typing import Optional
|
|
8
7
|
|
|
9
8
|
from loguru import logger
|
|
@@ -12,14 +11,14 @@ from rich.console import Console
|
|
|
12
11
|
from rich.markdown import Markdown
|
|
13
12
|
|
|
14
13
|
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,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
from md_processing.md_processing_utils.common_md_utils import update_element_dictionary, set_update_body, \
|
|
15
|
+
set_element_prop_body, set_delete_request_body, set_rel_request_body, set_create_body, set_object_classifications, \
|
|
16
|
+
set_product_body
|
|
19
17
|
from md_processing.md_processing_utils.extraction_utils import (extract_command_plus, update_a_command)
|
|
20
|
-
from md_processing.md_processing_utils.md_processing_constants import (load_commands
|
|
21
|
-
from pyegeria import DEBUG_LEVEL, body_slimmer,
|
|
18
|
+
from md_processing.md_processing_utils.md_processing_constants import (load_commands)
|
|
19
|
+
from pyegeria import DEBUG_LEVEL, body_slimmer, PyegeriaException, print_basic_exception, print_exception_table
|
|
22
20
|
from pyegeria.egeria_tech_client import EgeriaTech
|
|
21
|
+
from pyegeria.core.utils import make_format_set_name_from_type
|
|
23
22
|
|
|
24
23
|
EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
|
|
25
24
|
EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
|
|
@@ -39,12 +38,12 @@ EGERIA_GLOSSARY_PATH = os.environ.get("EGERIA_GLOSSARY_PATH", None)
|
|
|
39
38
|
EGERIA_ROOT_PATH = os.environ.get("EGERIA_ROOT_PATH", "../../")
|
|
40
39
|
EGERIA_INBOX_PATH = os.environ.get("EGERIA_INBOX_PATH", "md_processing/dr_egeria_inbox")
|
|
41
40
|
EGERIA_OUTBOX_PATH = os.environ.get("EGERIA_OUTBOX_PATH", "md_processing/dr_egeria_outbox")
|
|
41
|
+
LOCAL_QUALIFIER = os.environ.get("EGERIA_LOCAL_QUALIFIER", None)
|
|
42
42
|
|
|
43
43
|
load_commands('commands.json')
|
|
44
44
|
debug_level = DEBUG_LEVEL
|
|
45
45
|
|
|
46
46
|
console = Console(width=int(200))
|
|
47
|
-
setup_log()
|
|
48
47
|
|
|
49
48
|
|
|
50
49
|
#
|
|
@@ -52,7 +51,7 @@ setup_log()
|
|
|
52
51
|
#
|
|
53
52
|
@logger.catch
|
|
54
53
|
def add_member_to_collections(egeria_client: EgeriaTech, collection_list: list, display_name: str,
|
|
55
|
-
|
|
54
|
+
guid: str) -> None:
|
|
56
55
|
"""
|
|
57
56
|
Add member to data dictionaries and data specifications.
|
|
58
57
|
"""
|
|
@@ -60,8 +59,8 @@ def add_member_to_collections(egeria_client: EgeriaTech, collection_list: list,
|
|
|
60
59
|
"class": "NewRelationshipRequestBody", "properties": {
|
|
61
60
|
"class": "CollectionMembershipProperties", "membershipRationale": "User Specified",
|
|
62
61
|
"notes": "Added by Dr.Egeria"
|
|
63
|
-
}
|
|
64
62
|
}
|
|
63
|
+
}
|
|
65
64
|
try:
|
|
66
65
|
if collection_list is not None:
|
|
67
66
|
for collection in collection_list:
|
|
@@ -78,7 +77,7 @@ def add_member_to_collections(egeria_client: EgeriaTech, collection_list: list,
|
|
|
78
77
|
|
|
79
78
|
@logger.catch
|
|
80
79
|
def remove_member_from_collections(egeria_client: EgeriaTech, collection_list: list, display_name: str,
|
|
81
|
-
|
|
80
|
+
guid: str) -> None:
|
|
82
81
|
try:
|
|
83
82
|
for collection in collection_list:
|
|
84
83
|
egeria_client.remove_from_collection(collection, guid)
|
|
@@ -96,8 +95,8 @@ def update_data_collection_memberships(egeria_client: EgeriaTech, entity_type: s
|
|
|
96
95
|
replace_all_props: bool = True) -> None:
|
|
97
96
|
""" update the collection membership of the element
|
|
98
97
|
|
|
99
|
-
If
|
|
100
|
-
If
|
|
98
|
+
If merge_update is set to True, all existing memberships are removed and new memberships are added.
|
|
99
|
+
If merge_update is set to False, only the new memberships are added.
|
|
101
100
|
"""
|
|
102
101
|
|
|
103
102
|
if replace_all_props:
|
|
@@ -170,16 +169,30 @@ def process_collection_upsert_command(egeria_client: EgeriaTech, txt: str, direc
|
|
|
170
169
|
exists = parsed_output['exists']
|
|
171
170
|
|
|
172
171
|
qualified_name = parsed_output.get('qualified_name', None)
|
|
173
|
-
guid = parsed_output.get('guid', None)
|
|
174
172
|
|
|
175
|
-
|
|
173
|
+
guid = parsed_output.get('guid', None)
|
|
176
174
|
|
|
177
175
|
logger.debug(json.dumps(parsed_output, indent=4))
|
|
178
176
|
|
|
179
177
|
attributes = parsed_output['attributes']
|
|
180
178
|
|
|
181
179
|
display_name = attributes['Display Name'].get('value', None)
|
|
180
|
+
version = attributes['Version Identifier'].get('value', None)
|
|
182
181
|
status = attributes.get('Status', {}).get('value', None)
|
|
182
|
+
output_set = make_format_set_name_from_type(object_type)
|
|
183
|
+
if object_type in ["Root Collection", "Folder"]:
|
|
184
|
+
obj = "Collection"
|
|
185
|
+
if object_type == "Folder":
|
|
186
|
+
qn_prefix = "Folder"
|
|
187
|
+
elif object_type == "Root Collection":
|
|
188
|
+
qn_prefix = "Root"
|
|
189
|
+
|
|
190
|
+
qualified_name = egeria_client.__create_qualified_name__(qn_prefix, display_name, LOCAL_QUALIFIER,
|
|
191
|
+
version_identifier=version)
|
|
192
|
+
|
|
193
|
+
else:
|
|
194
|
+
obj = object_type
|
|
195
|
+
print(Markdown(parsed_output['display']))
|
|
183
196
|
|
|
184
197
|
if directive == "display":
|
|
185
198
|
|
|
@@ -193,10 +206,6 @@ def process_collection_upsert_command(egeria_client: EgeriaTech, txt: str, direc
|
|
|
193
206
|
|
|
194
207
|
elif directive == "process":
|
|
195
208
|
try:
|
|
196
|
-
if object_type in ["Root Collection", "Folder"]:
|
|
197
|
-
obj = "Collection"
|
|
198
|
-
else:
|
|
199
|
-
obj = object_type
|
|
200
209
|
|
|
201
210
|
if object_action == "Update":
|
|
202
211
|
if not exists:
|
|
@@ -209,10 +218,10 @@ def process_collection_upsert_command(egeria_client: EgeriaTech, txt: str, direc
|
|
|
209
218
|
else:
|
|
210
219
|
print(Markdown(
|
|
211
220
|
f"==> Validation of `{command}` completed successfully! Proceeding to apply the changes.\n"))
|
|
212
|
-
prop_body =
|
|
221
|
+
prop_body = set_element_prop_body(obj, qualified_name, attributes)
|
|
213
222
|
|
|
214
223
|
body = set_update_body(obj, attributes)
|
|
215
|
-
body['properties'] =
|
|
224
|
+
body['properties'] = set_element_prop_body(obj, qualified_name, attributes)
|
|
216
225
|
|
|
217
226
|
egeria_client.update_collection(guid, body)
|
|
218
227
|
if status:
|
|
@@ -221,9 +230,9 @@ def process_collection_upsert_command(egeria_client: EgeriaTech, txt: str, direc
|
|
|
221
230
|
logger.success(f"Updated {object_type} `{display_name}` with GUID {guid}\n\n___")
|
|
222
231
|
update_element_dictionary(qualified_name, {
|
|
223
232
|
'guid': guid, 'display_name': display_name
|
|
224
|
-
|
|
225
|
-
return egeria_client.get_collection_by_guid(guid, element_type=
|
|
226
|
-
output_format='MD')
|
|
233
|
+
})
|
|
234
|
+
return egeria_client.get_collection_by_guid(guid, element_type=obj,
|
|
235
|
+
output_format='MD', report_spec=output_set)
|
|
227
236
|
|
|
228
237
|
|
|
229
238
|
elif object_action == "Create":
|
|
@@ -234,21 +243,29 @@ def process_collection_upsert_command(egeria_client: EgeriaTech, txt: str, direc
|
|
|
234
243
|
return update_a_command(txt, object_action, object_type, qualified_name, guid)
|
|
235
244
|
|
|
236
245
|
else:
|
|
237
|
-
body = set_create_body(object_type,attributes)
|
|
246
|
+
body = set_create_body(object_type, attributes)
|
|
238
247
|
|
|
239
248
|
# if this is a root or folder (maybe more in the future), then make sure that the classification is set.
|
|
240
|
-
body["initialClassifications"] =
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
249
|
+
body["initialClassifications"] = set_object_classifications(object_type, attributes,
|
|
250
|
+
["Folder", "Root Collection"])
|
|
251
|
+
body["properties"] = set_element_prop_body(obj, qualified_name, attributes)
|
|
252
|
+
parent_guid = body.get('parentGuid', None)
|
|
253
|
+
if parent_guid:
|
|
254
|
+
body['parentRelationshipTypeName'] = "CollectionMembership"
|
|
255
|
+
body['parentAtEnd1'] = True
|
|
256
|
+
|
|
257
|
+
guid = egeria_client.create_collection(body=body)
|
|
245
258
|
if guid:
|
|
246
259
|
update_element_dictionary(qualified_name, {
|
|
247
260
|
'guid': guid, 'display_name': display_name
|
|
248
|
-
|
|
249
|
-
msg = f"
|
|
261
|
+
})
|
|
262
|
+
msg = f"\nCreated Element `{display_name}` with GUID {guid}\n\n___"
|
|
263
|
+
# todo - add the source member asset to the product manager
|
|
264
|
+
# create_elem_from_template
|
|
265
|
+
# add this guid to the product collection
|
|
250
266
|
logger.success(msg)
|
|
251
|
-
return egeria_client.get_collection_by_guid(guid, obj, output_format='MD'
|
|
267
|
+
return egeria_client.get_collection_by_guid(guid, obj, output_format='MD',
|
|
268
|
+
report_spec=output_set)
|
|
252
269
|
else:
|
|
253
270
|
msg = f"Failed to create element `{display_name}` with GUID {guid}\n\n___"
|
|
254
271
|
logger.error(msg)
|
|
@@ -263,8 +280,10 @@ def process_collection_upsert_command(egeria_client: EgeriaTech, txt: str, direc
|
|
|
263
280
|
else:
|
|
264
281
|
return None
|
|
265
282
|
|
|
283
|
+
|
|
266
284
|
@logger.catch
|
|
267
|
-
def process_digital_product_upsert_command(egeria_client: EgeriaTech, txt: str,
|
|
285
|
+
def process_digital_product_upsert_command(egeria_client: EgeriaTech, txt: str,
|
|
286
|
+
directive: str = "display") -> Optional[str]:
|
|
268
287
|
"""
|
|
269
288
|
Processes a digital product create or update object_action by extracting key attributes such as
|
|
270
289
|
spec name, parent_guid, parent_relationship_type, parent_at_end_1, category
|
|
@@ -286,7 +305,6 @@ def process_digital_product_upsert_command(egeria_client: EgeriaTech, txt: str,
|
|
|
286
305
|
qualified_name = parsed_output.get('qualified_name', None)
|
|
287
306
|
guid = parsed_output.get('guid', None)
|
|
288
307
|
|
|
289
|
-
|
|
290
308
|
print(Markdown(parsed_output['display']))
|
|
291
309
|
|
|
292
310
|
logger.debug(json.dumps(parsed_output, indent=4))
|
|
@@ -294,8 +312,9 @@ def process_digital_product_upsert_command(egeria_client: EgeriaTech, txt: str,
|
|
|
294
312
|
attributes = parsed_output['attributes']
|
|
295
313
|
|
|
296
314
|
display_name = attributes['Display Name'].get('value', None)
|
|
297
|
-
product_manager = attributes.get('Product Manager',{}).get('value', None)
|
|
298
|
-
product_status = attributes.get('Product Status',{}).get('value', None)
|
|
315
|
+
product_manager = attributes.get('Product Manager', {}).get('value', None)
|
|
316
|
+
product_status = attributes.get('Product Status', {}).get('value', None)
|
|
317
|
+
output_set = make_format_set_name_from_type(object_type)
|
|
299
318
|
|
|
300
319
|
if directive == "display":
|
|
301
320
|
|
|
@@ -308,6 +327,7 @@ def process_digital_product_upsert_command(egeria_client: EgeriaTech, txt: str,
|
|
|
308
327
|
return valid
|
|
309
328
|
|
|
310
329
|
elif directive == "process":
|
|
330
|
+
|
|
311
331
|
try:
|
|
312
332
|
prop_body = set_product_body(object_type, qualified_name, attributes)
|
|
313
333
|
|
|
@@ -331,13 +351,12 @@ def process_digital_product_upsert_command(egeria_client: EgeriaTech, txt: str,
|
|
|
331
351
|
# if product_status:
|
|
332
352
|
# egeria_client.update_digital_product_status(guid, product_status)
|
|
333
353
|
|
|
334
|
-
|
|
335
354
|
logger.success(f"Updated {object_type} `{display_name}` with GUID {guid}\n\n___")
|
|
336
355
|
update_element_dictionary(qualified_name, {
|
|
337
356
|
'guid': guid, 'display_name': display_name
|
|
338
|
-
|
|
357
|
+
})
|
|
339
358
|
return egeria_client.get_collection_by_guid(guid, element_type='Digital Product',
|
|
340
|
-
output_format='MD')
|
|
359
|
+
output_format='MD', report_spec=output_set)
|
|
341
360
|
|
|
342
361
|
|
|
343
362
|
elif object_action == "Create":
|
|
@@ -349,7 +368,7 @@ def process_digital_product_upsert_command(egeria_client: EgeriaTech, txt: str,
|
|
|
349
368
|
|
|
350
369
|
else:
|
|
351
370
|
body = set_create_body(object_type, attributes)
|
|
352
|
-
body["initialClassifications"] =
|
|
371
|
+
body["initialClassifications"] = set_object_classifications(object_type, attributes, [])
|
|
353
372
|
|
|
354
373
|
body["properties"] = prop_body
|
|
355
374
|
|
|
@@ -357,13 +376,13 @@ def process_digital_product_upsert_command(egeria_client: EgeriaTech, txt: str,
|
|
|
357
376
|
if guid:
|
|
358
377
|
update_element_dictionary(qualified_name, {
|
|
359
378
|
'guid': guid, 'display_name': display_name
|
|
360
|
-
|
|
379
|
+
})
|
|
361
380
|
# Todo: Add product manager link later? Agreements?
|
|
362
381
|
|
|
363
382
|
msg = f"Created Element `{display_name}` with GUID {guid}\n\n___"
|
|
364
383
|
logger.success(msg)
|
|
365
384
|
return egeria_client.get_collection_by_guid(guid, element_type='Digital Product',
|
|
366
|
-
output_format='MD')
|
|
385
|
+
output_format='MD', report_spec=output_set)
|
|
367
386
|
else:
|
|
368
387
|
msg = f"Failed to create element `{display_name}` with GUID {guid}\n\n___"
|
|
369
388
|
logger.error(msg)
|
|
@@ -375,6 +394,120 @@ def process_digital_product_upsert_command(egeria_client: EgeriaTech, txt: str,
|
|
|
375
394
|
else:
|
|
376
395
|
return None
|
|
377
396
|
|
|
397
|
+
# @logger.catch
|
|
398
|
+
# def process_digital_product_catalog_upsert_command(egeria_client: EgeriaTech, txt: str,
|
|
399
|
+
# directive: str = "display") -> Optional[str]:
|
|
400
|
+
# """
|
|
401
|
+
# Processes a digital product catalog create or update object_action by extracting key attributes such as
|
|
402
|
+
# spec name, parent_guid, parent_relationship_type, parent_at_end_1, category
|
|
403
|
+
#
|
|
404
|
+
# :param txt: A string representing the input cell to be processed for
|
|
405
|
+
# extracting glossary-related attributes.
|
|
406
|
+
# :param directive: an optional string indicating the directive to be used - display, validate or execute
|
|
407
|
+
# :return: A string summarizing the outcome of the processing.
|
|
408
|
+
# """
|
|
409
|
+
#
|
|
410
|
+
# command, object_type, object_action = extract_command_plus(txt)
|
|
411
|
+
# print(Markdown(f"# {command}\n"))
|
|
412
|
+
#
|
|
413
|
+
# parsed_output = parse_upsert_command(egeria_client, object_type, object_action, txt, directive)
|
|
414
|
+
#
|
|
415
|
+
# valid = parsed_output['valid']
|
|
416
|
+
# exists = parsed_output['exists']
|
|
417
|
+
#
|
|
418
|
+
# qualified_name = parsed_output.get('qualified_name', None)
|
|
419
|
+
# guid = parsed_output.get('guid', None)
|
|
420
|
+
#
|
|
421
|
+
# print(Markdown(parsed_output['display']))
|
|
422
|
+
#
|
|
423
|
+
# logger.debug(json.dumps(parsed_output, indent=4))
|
|
424
|
+
#
|
|
425
|
+
# attributes = parsed_output['attributes']
|
|
426
|
+
#
|
|
427
|
+
# display_name = attributes['Display Name'].get('value', None)
|
|
428
|
+
#
|
|
429
|
+
# output_set = make_format_set_name_from_type(object_type)
|
|
430
|
+
#
|
|
431
|
+
# if directive == "display":
|
|
432
|
+
#
|
|
433
|
+
# return None
|
|
434
|
+
# elif directive == "validate":
|
|
435
|
+
# if valid:
|
|
436
|
+
# print(Markdown(f"==> Validation of {command} completed successfully!\n"))
|
|
437
|
+
# else:
|
|
438
|
+
# msg = f"Validation failed for object_action `{command}`\n"
|
|
439
|
+
# return valid
|
|
440
|
+
#
|
|
441
|
+
# elif directive == "process":
|
|
442
|
+
# try:
|
|
443
|
+
# prop_body = set_product_body(object_type, qualified_name, attributes)
|
|
444
|
+
#
|
|
445
|
+
# if object_action == "Update":
|
|
446
|
+
# if not exists:
|
|
447
|
+
# msg = (f" Element `{display_name}` does not exist! Updating result document with Create "
|
|
448
|
+
# f"object_action\n")
|
|
449
|
+
# logger.error(msg)
|
|
450
|
+
# return update_a_command(txt, object_action, object_type, qualified_name, guid)
|
|
451
|
+
# elif not valid:
|
|
452
|
+
# return None
|
|
453
|
+
# else:
|
|
454
|
+
# print(Markdown(
|
|
455
|
+
# f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
|
|
456
|
+
#
|
|
457
|
+
# body = set_update_body(object_type, attributes)
|
|
458
|
+
# body['properties'] = prop_body
|
|
459
|
+
# # Todo: Update product manager later?
|
|
460
|
+
#
|
|
461
|
+
# egeria_client.update_digital_product(guid, body)
|
|
462
|
+
# # if product_status:
|
|
463
|
+
# # egeria_client.update_digital_product_status(guid, product_status)
|
|
464
|
+
#
|
|
465
|
+
# logger.success(f"Updated {object_type} `{display_name}` with GUID {guid}\n\n___")
|
|
466
|
+
# update_element_dictionary(qualified_name, {
|
|
467
|
+
# 'guid': guid, 'display_name': display_name
|
|
468
|
+
# })
|
|
469
|
+
# return egeria_client.get_collection_by_guid(guid, element_type='Digital Product',
|
|
470
|
+
# output_format='MD', report_spec=output_set)
|
|
471
|
+
#
|
|
472
|
+
#
|
|
473
|
+
# elif object_action == "Create":
|
|
474
|
+
# if valid is False and exists:
|
|
475
|
+
# msg = (
|
|
476
|
+
# f" Digital Product `{display_name}` already exists and result document updated changing "
|
|
477
|
+
# f"`Create` to `Update` in processed output\n\n___")
|
|
478
|
+
# logger.error(msg)
|
|
479
|
+
# return update_a_command(txt, object_action, object_type, qualified_name, guid)
|
|
480
|
+
#
|
|
481
|
+
# else:
|
|
482
|
+
# body = set_create_body(object_type, attributes)
|
|
483
|
+
# body["initialClassifications"] = set_object_classifications(object_type, attributes, [])
|
|
484
|
+
#
|
|
485
|
+
# body["properties"] = prop_body
|
|
486
|
+
#
|
|
487
|
+
# guid = egeria_client.create_digital_product(body_slimmer(body))
|
|
488
|
+
# if guid:
|
|
489
|
+
# update_element_dictionary(qualified_name, {
|
|
490
|
+
# 'guid': guid, 'display_name': display_name
|
|
491
|
+
# })
|
|
492
|
+
# # Todo: Add product manager link later? Agreements?
|
|
493
|
+
#
|
|
494
|
+
# msg = f"Created Element `{display_name}` with GUID {guid}\n\n___"
|
|
495
|
+
# logger.success(msg)
|
|
496
|
+
# return egeria_client.get_collection_by_guid(guid, element_type='Digital Product',
|
|
497
|
+
# output_format='MD',
|
|
498
|
+
# report_spec=output_set)
|
|
499
|
+
# else:
|
|
500
|
+
# msg = f"Failed to create element `{display_name}` with GUID {guid}\n\n___"
|
|
501
|
+
# logger.error(msg)
|
|
502
|
+
# return None
|
|
503
|
+
#
|
|
504
|
+
# except Exception as e:
|
|
505
|
+
# logger.error(f"Error performing {command}: {e}")
|
|
506
|
+
# return None
|
|
507
|
+
# else:
|
|
508
|
+
# return None
|
|
509
|
+
|
|
510
|
+
|
|
378
511
|
@logger.catch
|
|
379
512
|
def process_agreement_upsert_command(egeria_client: EgeriaTech, txt: str, directive: str = "display") -> Optional[str]:
|
|
380
513
|
"""
|
|
@@ -408,6 +541,7 @@ def process_agreement_upsert_command(egeria_client: EgeriaTech, txt: str, direct
|
|
|
408
541
|
|
|
409
542
|
display_name = attributes['Display Name'].get('value', None)
|
|
410
543
|
status = attributes.get('Status', {}).get('value', None)
|
|
544
|
+
output_set = make_format_set_name_from_type(object_type)
|
|
411
545
|
|
|
412
546
|
if directive == "display":
|
|
413
547
|
|
|
@@ -437,10 +571,10 @@ def process_agreement_upsert_command(egeria_client: EgeriaTech, txt: str, direct
|
|
|
437
571
|
else:
|
|
438
572
|
print(Markdown(
|
|
439
573
|
f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
|
|
440
|
-
prop_body =
|
|
574
|
+
prop_body = set_element_prop_body(obj, qualified_name, attributes)
|
|
441
575
|
|
|
442
576
|
body = set_update_body(object_type, attributes)
|
|
443
|
-
body['properties'] =
|
|
577
|
+
body['properties'] = set_element_prop_body(object_type, qualified_name, attributes)
|
|
444
578
|
|
|
445
579
|
egeria_client.update_agreement(guid, body)
|
|
446
580
|
# if status is not None and status !={}:
|
|
@@ -449,9 +583,9 @@ def process_agreement_upsert_command(egeria_client: EgeriaTech, txt: str, direct
|
|
|
449
583
|
logger.success(f"Updated {object_type} `{display_name}` with GUID {guid}\n\n___")
|
|
450
584
|
update_element_dictionary(qualified_name, {
|
|
451
585
|
'guid': guid, 'display_name': display_name
|
|
452
|
-
|
|
586
|
+
})
|
|
453
587
|
return egeria_client.get_collection_by_guid(guid, element_type='Data Specification',
|
|
454
|
-
output_format='MD')
|
|
588
|
+
output_format='MD', report_spec=output_set)
|
|
455
589
|
|
|
456
590
|
|
|
457
591
|
elif object_action == "Create":
|
|
@@ -465,18 +599,19 @@ def process_agreement_upsert_command(egeria_client: EgeriaTech, txt: str, direct
|
|
|
465
599
|
body = set_create_body(object_type, attributes)
|
|
466
600
|
|
|
467
601
|
# if this is a root or folder (maybe more in the future), then make sure that the classification is set.
|
|
468
|
-
body["initialClassifications"] =
|
|
469
|
-
|
|
470
|
-
body["properties"] =
|
|
602
|
+
body["initialClassifications"] = set_object_classifications(object_type, attributes,
|
|
603
|
+
["Data Sharing Agreement"])
|
|
604
|
+
body["properties"] = set_element_prop_body(obj, qualified_name, attributes)
|
|
471
605
|
|
|
472
606
|
guid = egeria_client.create_agreement(body=body)
|
|
473
607
|
if guid:
|
|
474
608
|
update_element_dictionary(qualified_name, {
|
|
475
609
|
'guid': guid, 'display_name': display_name
|
|
476
|
-
|
|
610
|
+
})
|
|
477
611
|
msg = f"Created Element `{display_name}` with GUID {guid}\n\n___"
|
|
478
612
|
logger.success(msg)
|
|
479
|
-
return egeria_client.get_collection_by_guid(guid, obj, output_format='MD'
|
|
613
|
+
return egeria_client.get_collection_by_guid(guid, obj, output_format='MD',
|
|
614
|
+
report_spec=output_set)
|
|
480
615
|
else:
|
|
481
616
|
msg = f"Failed to create element `{display_name}` with GUID {guid}\n\n___"
|
|
482
617
|
logger.error(msg)
|
|
@@ -492,7 +627,107 @@ def process_agreement_upsert_command(egeria_client: EgeriaTech, txt: str, direct
|
|
|
492
627
|
return None
|
|
493
628
|
|
|
494
629
|
|
|
630
|
+
@logger.catch
|
|
631
|
+
def process_csv_element_upsert_command(egeria_client: EgeriaTech, txt: str, directive: str = "display") -> Optional[
|
|
632
|
+
str]:
|
|
633
|
+
"""
|
|
634
|
+
Processes a create CSV element command by extracting key attributes and calling the pyegeria
|
|
635
|
+
api that creates a csv element from template.
|
|
636
|
+
|
|
637
|
+
:param txt: A string representing the input cell to be processed for
|
|
638
|
+
extracting glossary-related attributes.
|
|
639
|
+
:param directive: an optional string indicating the directive to be used - display, validate or execute
|
|
640
|
+
:return: A string summarizing the outcome of the processing.
|
|
641
|
+
"""
|
|
642
|
+
command, object_type, object_action = extract_command_plus(txt)
|
|
643
|
+
print(Markdown(f"# {command}\n"))
|
|
644
|
+
|
|
645
|
+
parsed_output = parse_upsert_command(egeria_client, object_type, object_action, txt, directive)
|
|
646
|
+
if not parsed_output:
|
|
647
|
+
logger.error(f"No output for `{object_action}`")
|
|
648
|
+
return None
|
|
649
|
+
|
|
650
|
+
valid = parsed_output['valid']
|
|
651
|
+
exists = parsed_output['exists']
|
|
652
|
+
|
|
653
|
+
qualified_name = parsed_output.get('qualified_name', None)
|
|
654
|
+
guid = parsed_output.get('guid', None)
|
|
655
|
+
|
|
656
|
+
print(Markdown(parsed_output['display']))
|
|
657
|
+
|
|
658
|
+
logger.debug(json.dumps(parsed_output, indent=4))
|
|
659
|
+
|
|
660
|
+
attributes = parsed_output['attributes']
|
|
661
|
+
|
|
662
|
+
display_name = attributes['Display Name'].get('value', None)
|
|
663
|
+
status = attributes.get('Status', {}).get('value', None)
|
|
664
|
+
output_set = make_format_set_name_from_type(object_type)
|
|
665
|
+
|
|
666
|
+
file_name = attributes.get('File Name', {}).get('value', None)
|
|
667
|
+
file_type = attributes.get('File Type', {}).get('value', None)
|
|
668
|
+
file_path = attributes.get('File Path', {}).get('value', None)
|
|
669
|
+
file_encoding = attributes.get('File Encoding', {}).get('value', 'UTF-8')
|
|
670
|
+
file_extension = attributes.get('File Extension', {}).get('value', 'csv')
|
|
671
|
+
file_system_name = attributes.get('File System Name', {}).get('value', None)
|
|
672
|
+
version_identifier = attributes.get('Version Identifier', {}).get('value', None)
|
|
673
|
+
description = attributes.get('Description', {}).get('value', None)
|
|
674
|
+
|
|
675
|
+
if directive == "display":
|
|
676
|
+
|
|
677
|
+
return None
|
|
678
|
+
elif directive == "validate":
|
|
679
|
+
if valid:
|
|
680
|
+
print(Markdown(f"==> Validation of {command} completed successfully!\n"))
|
|
681
|
+
else:
|
|
682
|
+
msg = f"Validation failed for object_action `{command}`\n"
|
|
683
|
+
return valid
|
|
684
|
+
|
|
685
|
+
elif directive == "process":
|
|
686
|
+
try:
|
|
687
|
+
|
|
688
|
+
if object_action == "Create":
|
|
689
|
+
if valid is False and exists:
|
|
690
|
+
msg = (f" Element `{display_name}` already exists and result document updated changing "
|
|
691
|
+
f"`Create` to `Update` in processed output\n\n___")
|
|
692
|
+
logger.error(msg)
|
|
693
|
+
return update_a_command(txt, object_action, object_type, qualified_name, guid)
|
|
694
|
+
|
|
695
|
+
else:
|
|
696
|
+
guid = egeria_client.get_create_csv_data_file_element_from_template(
|
|
697
|
+
file_name, file_type, file_path, version_identifier, file_encoding, file_extension,
|
|
698
|
+
file_system_name, description)
|
|
699
|
+
|
|
700
|
+
if guid:
|
|
701
|
+
update_element_dictionary(qualified_name, {
|
|
702
|
+
'guid': guid, 'display_name': display_name
|
|
703
|
+
})
|
|
704
|
+
msg = f"Created Element `{display_name}` with GUID {guid}\n\n___"
|
|
705
|
+
logger.success(msg)
|
|
706
|
+
output_md = (f"# Create CSV File\n\n## Display Name:\n\n {display_name}\n\n"
|
|
707
|
+
f"## File Type:\n\n {file_type}\n\n## File Path:\n\n {file_path}\n\n"
|
|
708
|
+
f"## File Encoding:\n\n {file_encoding}\n\n## File Extension:\n\n {file_extension}\n\n"
|
|
709
|
+
f"## File System Name:\n\n {file_system_name}\n\n## Version Identifier:\n\n {version_identifier}\n\n"
|
|
710
|
+
f"## Description:\n\n {description}\n\n"
|
|
711
|
+
f"## Qualified Name\n\n {qualified_name}\n\n"
|
|
712
|
+
f"## GUID:\n\n {guid}\n\n"
|
|
713
|
+
)
|
|
714
|
+
return output_md
|
|
715
|
+
else:
|
|
716
|
+
msg = f"Failed to create element `{display_name}` with GUID {guid}\n\n___"
|
|
717
|
+
logger.error(msg)
|
|
718
|
+
return None
|
|
719
|
+
else:
|
|
720
|
+
logger.error(f"Currently only the Create action is supported for this command: {command}")
|
|
495
721
|
|
|
722
|
+
except PyegeriaException as e:
|
|
723
|
+
logger.error(f"Pyegeria error performing {command}: {e}")
|
|
724
|
+
print_exception_table(e)
|
|
725
|
+
return None
|
|
726
|
+
except Exception as e:
|
|
727
|
+
logger.error(f"Error performing {command}: {e}")
|
|
728
|
+
else:
|
|
729
|
+
logger.error(f"Invalid directive `{directive}`")
|
|
730
|
+
return None
|
|
496
731
|
|
|
497
732
|
|
|
498
733
|
def process_link_agreement_item_command(egeria_client: EgeriaTech, txt: str,
|
|
@@ -515,16 +750,15 @@ def process_link_agreement_item_command(egeria_client: EgeriaTech, txt: str,
|
|
|
515
750
|
logger.debug(json.dumps(parsed_output, indent=4))
|
|
516
751
|
|
|
517
752
|
attributes = parsed_output['attributes']
|
|
518
|
-
agreement = attributes.get('Agreement Name',{}).get('value', None)
|
|
753
|
+
agreement = attributes.get('Agreement Name', {}).get('value', None)
|
|
519
754
|
agreement_guid = attributes.get('Agreement Name', {}).get('guid', None)
|
|
520
|
-
item = attributes.get('Item Name',{}).get('value', None)
|
|
755
|
+
item = attributes.get('Item Name', {}).get('value', None)
|
|
521
756
|
item_guid = attributes.get('Item Name', {}).get('guid', None)
|
|
522
757
|
label = attributes.get('Link Label', {}).get('value', None)
|
|
523
758
|
description = attributes.get('Description', {}).get('value', None)
|
|
524
759
|
|
|
525
760
|
valid = parsed_output['valid']
|
|
526
|
-
exists = agreement_guid is not None and
|
|
527
|
-
|
|
761
|
+
exists = agreement_guid is not None and item_guid is not None
|
|
528
762
|
|
|
529
763
|
if directive == "display":
|
|
530
764
|
|
|
@@ -553,7 +787,7 @@ def process_link_agreement_item_command(egeria_client: EgeriaTech, txt: str,
|
|
|
553
787
|
f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
|
|
554
788
|
body = set_delete_request_body(object_type, attributes)
|
|
555
789
|
|
|
556
|
-
egeria_client.detach_agreement_item(agreement_guid, item_guid,body)
|
|
790
|
+
egeria_client.detach_agreement_item(agreement_guid, item_guid, body)
|
|
557
791
|
|
|
558
792
|
logger.success(f"===> Detached agreement item `{item}` from agreement `{agreement}`\n")
|
|
559
793
|
out = parsed_output['display'].replace('Unlink', 'Link', 1)
|
|
@@ -575,21 +809,21 @@ def process_link_agreement_item_command(egeria_client: EgeriaTech, txt: str,
|
|
|
575
809
|
body = set_rel_request_body(object_type, attributes)
|
|
576
810
|
item_props = {
|
|
577
811
|
"class": "AgreementItemProperties",
|
|
578
|
-
"agreementItemId": attributes.get("Agreement Item Id",{}).get("value", None),
|
|
579
|
-
"agreementItemTypeName": attributes.get("Agreement Item Type",{}).get("value", None),
|
|
580
|
-
"agreementStart": attributes.get("Agreement Start",{}).get("value", None),
|
|
581
|
-
"agreementEnd": attributes.get("Agreement End",{}).get("value", None),
|
|
582
|
-
"restrictions": attributes.get("Restrictions",{}).get("value", None),
|
|
583
|
-
"obligations": attributes.get("Obligations",{}).get("value", None),
|
|
584
|
-
"entitlements": attributes.get("Entitlements",{}).get("value", None),
|
|
585
|
-
"usageMeasurements": attributes.get("Usage Measurements",{}).get("value", None),
|
|
586
|
-
"effectiveFrom": attributes.get("Effective From",{}).get("value", None),
|
|
587
|
-
"effectiveTo": attributes.get("Effective To",{}).get("value", None)
|
|
812
|
+
"agreementItemId": attributes.get("Agreement Item Id", {}).get("value", None),
|
|
813
|
+
"agreementItemTypeName": attributes.get("Agreement Item Type", {}).get("value", None),
|
|
814
|
+
"agreementStart": attributes.get("Agreement Start", {}).get("value", None),
|
|
815
|
+
"agreementEnd": attributes.get("Agreement End", {}).get("value", None),
|
|
816
|
+
"restrictions": attributes.get("Restrictions", {}).get("value", None),
|
|
817
|
+
"obligations": attributes.get("Obligations", {}).get("value", None),
|
|
818
|
+
"entitlements": attributes.get("Entitlements", {}).get("value", None),
|
|
819
|
+
"usageMeasurements": attributes.get("Usage Measurements", {}).get("value", None),
|
|
820
|
+
"effectiveFrom": attributes.get("Effective From", {}).get("value", None),
|
|
821
|
+
"effectiveTo": attributes.get("Effective To", {}).get("value", None)
|
|
588
822
|
|
|
589
823
|
}
|
|
590
824
|
body['properties'] = item_props
|
|
591
825
|
egeria_client.link_agreement_item(agreement_guid,
|
|
592
|
-
|
|
826
|
+
item_guid, body)
|
|
593
827
|
msg = f"==>Linked {object_type} `{agreement} to item {item}\n"
|
|
594
828
|
logger.success(msg)
|
|
595
829
|
out = parsed_output['display'].replace('Link', 'Detach', 1)
|
|
@@ -602,8 +836,9 @@ def process_link_agreement_item_command(egeria_client: EgeriaTech, txt: str,
|
|
|
602
836
|
else:
|
|
603
837
|
return None
|
|
604
838
|
|
|
839
|
+
|
|
605
840
|
def process_add_to_collection_command(egeria_client: EgeriaTech, txt: str,
|
|
606
|
-
|
|
841
|
+
directive: str = "display") -> Optional[str]:
|
|
607
842
|
"""
|
|
608
843
|
Processes a link or unlink command to add or remove a member to/from a collection..
|
|
609
844
|
|
|
@@ -622,9 +857,9 @@ def process_add_to_collection_command(egeria_client: EgeriaTech, txt: str,
|
|
|
622
857
|
logger.debug(json.dumps(parsed_output, indent=4))
|
|
623
858
|
|
|
624
859
|
attributes = parsed_output['attributes']
|
|
625
|
-
element_guid = attributes.get('Element Id',{}).get('guid', None)
|
|
860
|
+
element_guid = attributes.get('Element Id', {}).get('guid', None)
|
|
626
861
|
collection_guid = attributes.get('Collection Id', {}).get('guid', None)
|
|
627
|
-
membership_rationale = attributes.get('Membership Rationale',{}).get('value', None)
|
|
862
|
+
membership_rationale = attributes.get('Membership Rationale', {}).get('value', None)
|
|
628
863
|
expression = attributes.get('Expression', {}).get('value', None)
|
|
629
864
|
confidence = attributes.get('Confidence', {}).get('value', None)
|
|
630
865
|
membership_status = attributes.get('Membership Status', {}).get('value', None)
|
|
@@ -637,10 +872,9 @@ def process_add_to_collection_command(egeria_client: EgeriaTech, txt: str,
|
|
|
637
872
|
glossary_term = attributes.get('Glossary Term', {}).get('value', None)
|
|
638
873
|
journal_entry = attributes.get('Journal Entry', {}).get('value', None)
|
|
639
874
|
|
|
640
|
-
|
|
641
875
|
valid = parsed_output['valid']
|
|
642
|
-
exists = agreement_guid is not None and item_guid is not None
|
|
643
|
-
|
|
876
|
+
# exists = agreement_guid is not None and item_guid is not None
|
|
877
|
+
exists = collection_guid is not None and element_guid is not None
|
|
644
878
|
|
|
645
879
|
if directive == "display":
|
|
646
880
|
|
|
@@ -654,7 +888,7 @@ def process_add_to_collection_command(egeria_client: EgeriaTech, txt: str,
|
|
|
654
888
|
|
|
655
889
|
elif directive == "process":
|
|
656
890
|
prop_body = {
|
|
657
|
-
"class"
|
|
891
|
+
"class": "CollectionMembershipProperties",
|
|
658
892
|
"membershipRationale": membership_rationale,
|
|
659
893
|
"expression": expression,
|
|
660
894
|
"membershipStatus": membership_status,
|
|
@@ -665,9 +899,10 @@ def process_add_to_collection_command(egeria_client: EgeriaTech, txt: str,
|
|
|
665
899
|
"stewardPropertyName": steward_property_name,
|
|
666
900
|
"source": source,
|
|
667
901
|
"notes": notes,
|
|
668
|
-
|
|
902
|
+
}
|
|
903
|
+
label = "Add Member"
|
|
669
904
|
try:
|
|
670
|
-
if object_action
|
|
905
|
+
if object_action in ["Detach", "Unlink", "Remove"]:
|
|
671
906
|
if not exists:
|
|
672
907
|
msg = (f" Link `{label}` does not exist! Updating result document with Link "
|
|
673
908
|
f"object_action\n")
|
|
@@ -681,14 +916,18 @@ def process_add_to_collection_command(egeria_client: EgeriaTech, txt: str,
|
|
|
681
916
|
f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
|
|
682
917
|
body = set_delete_request_body(object_type, attributes)
|
|
683
918
|
|
|
684
|
-
egeria_client.remove_from_collection(collection_guid, element_guid,body)
|
|
919
|
+
egeria_client.remove_from_collection(collection_guid, element_guid, body)
|
|
685
920
|
|
|
686
921
|
logger.success(f"===> Detached element `{element_guid}` from collection `{collection_guid}`\n")
|
|
687
922
|
out = parsed_output['display'].replace('Unlink', 'Link', 1)
|
|
688
923
|
|
|
689
924
|
return (out)
|
|
690
925
|
|
|
691
|
-
elif object_action
|
|
926
|
+
elif object_action in ["Link", "Add", "Attach"]:
|
|
927
|
+
if valid is False and exists:
|
|
928
|
+
msg = (f"--> Link called `{label}` already exists and result document updated changing "
|
|
929
|
+
f"`Link` to `Detach` in processed output\n")
|
|
930
|
+
logger.error(msg)
|
|
692
931
|
if valid is False and exists:
|
|
693
932
|
msg = (f"--> Link called `{label}` already exists and result document updated changing "
|
|
694
933
|
f"`Link` to `Detach` in processed output\n")
|
|
@@ -703,8 +942,9 @@ def process_add_to_collection_command(egeria_client: EgeriaTech, txt: str,
|
|
|
703
942
|
body = set_rel_request_body(object_type, attributes)
|
|
704
943
|
|
|
705
944
|
body['properties'] = prop_body
|
|
945
|
+
body = body_slimmer(body)
|
|
706
946
|
egeria_client.add_to_collection(collection_guid,
|
|
707
|
-
|
|
947
|
+
element_guid, body)
|
|
708
948
|
msg = f"==>Linked `{element_guid}` to collection `{collection_guid}` \n"
|
|
709
949
|
logger.success(msg)
|
|
710
950
|
out = parsed_output['display'].replace('Link', 'Detach', 1)
|
|
@@ -717,8 +957,9 @@ def process_add_to_collection_command(egeria_client: EgeriaTech, txt: str,
|
|
|
717
957
|
else:
|
|
718
958
|
return None
|
|
719
959
|
|
|
960
|
+
|
|
720
961
|
def process_product_dependency_command(egeria_client: EgeriaTech, txt: str,
|
|
721
|
-
|
|
962
|
+
directive: str = "display") -> Optional[str]:
|
|
722
963
|
"""
|
|
723
964
|
Processes a link or unlink command to associate or break up a dependency between digital products..
|
|
724
965
|
|
|
@@ -739,15 +980,13 @@ def process_product_dependency_command(egeria_client: EgeriaTech, txt: str,
|
|
|
739
980
|
attributes = parsed_output['attributes']
|
|
740
981
|
digital_product1_guid = attributes.get('Digital Product 1', None)
|
|
741
982
|
digital_product2_guid = attributes.get('Digital Product 2', None)
|
|
742
|
-
label = attributes.get('Label',{}).get('value', None)
|
|
983
|
+
label = attributes.get('Label', {}).get('value', None)
|
|
743
984
|
description = attributes.get('Description', {}).get('value', None)
|
|
744
985
|
effective_from = attributes.get('Effective From', {}).get('value', None)
|
|
745
986
|
effective_to = attributes.get('Effective To', {}).get('value', None)
|
|
746
987
|
|
|
747
|
-
|
|
748
988
|
valid = parsed_output['valid']
|
|
749
|
-
exists =
|
|
750
|
-
|
|
989
|
+
exists = digital_product1_guid is not None and digital_product2_guid is not None
|
|
751
990
|
|
|
752
991
|
if directive == "display":
|
|
753
992
|
|
|
@@ -761,12 +1000,12 @@ def process_product_dependency_command(egeria_client: EgeriaTech, txt: str,
|
|
|
761
1000
|
|
|
762
1001
|
elif directive == "process":
|
|
763
1002
|
prop_body = {
|
|
764
|
-
"class"
|
|
1003
|
+
"class": "DigitalProductDependencyProperties",
|
|
765
1004
|
"label": label,
|
|
766
1005
|
"description": description,
|
|
767
1006
|
"effectiveFrom": effective_from,
|
|
768
1007
|
"effectiveTo": effective_to
|
|
769
|
-
|
|
1008
|
+
}
|
|
770
1009
|
|
|
771
1010
|
try:
|
|
772
1011
|
if object_action == "Detach":
|
|
@@ -783,9 +1022,10 @@ def process_product_dependency_command(egeria_client: EgeriaTech, txt: str,
|
|
|
783
1022
|
f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
|
|
784
1023
|
body = set_delete_request_body(object_type, attributes)
|
|
785
1024
|
|
|
786
|
-
egeria_client.detach_digital_product_dependency(digital_product1_guid, digital_product2_guid,body)
|
|
1025
|
+
egeria_client.detach_digital_product_dependency(digital_product1_guid, digital_product2_guid, body)
|
|
787
1026
|
|
|
788
|
-
logger.success(
|
|
1027
|
+
logger.success(
|
|
1028
|
+
f"===> Detached dependency between products `{digital_product1_guid}` and `{digital_product2_guid}`\n")
|
|
789
1029
|
out = parsed_output['display'].replace('Unlink', 'Link', 1)
|
|
790
1030
|
|
|
791
1031
|
return (out)
|
|
@@ -806,7 +1046,7 @@ def process_product_dependency_command(egeria_client: EgeriaTech, txt: str,
|
|
|
806
1046
|
|
|
807
1047
|
body['properties'] = prop_body
|
|
808
1048
|
egeria_client.link_digital_product_dependency(digital_product1_guid,
|
|
809
|
-
|
|
1049
|
+
digital_product2_guid, body)
|
|
810
1050
|
msg = f"==>Linked dependency from digital product `{digital_product1_guid}` to product `{digital_product2_guid}` \n"
|
|
811
1051
|
logger.success(msg)
|
|
812
1052
|
out = parsed_output['display'].replace('Link', 'Detach', 1)
|
|
@@ -819,8 +1059,9 @@ def process_product_dependency_command(egeria_client: EgeriaTech, txt: str,
|
|
|
819
1059
|
else:
|
|
820
1060
|
return None
|
|
821
1061
|
|
|
1062
|
+
|
|
822
1063
|
def process_attach_collection_command(egeria_client: EgeriaTech, txt: str,
|
|
823
|
-
|
|
1064
|
+
directive: str = "display") -> Optional[str]:
|
|
824
1065
|
"""
|
|
825
1066
|
Processes a link or unlink command to attach a collection to a resources.
|
|
826
1067
|
|
|
@@ -847,10 +1088,8 @@ def process_attach_collection_command(egeria_client: EgeriaTech, txt: str,
|
|
|
847
1088
|
effective_from = attributes.get('Effective From', {}).get('value', None)
|
|
848
1089
|
effective_to = attributes.get('Effective To', {}).get('value', None)
|
|
849
1090
|
|
|
850
|
-
|
|
851
1091
|
valid = parsed_output['valid']
|
|
852
|
-
exists =
|
|
853
|
-
|
|
1092
|
+
exists = collection_guid is not None and resource_guid is not None
|
|
854
1093
|
|
|
855
1094
|
if directive == "display":
|
|
856
1095
|
|
|
@@ -864,18 +1103,18 @@ def process_attach_collection_command(egeria_client: EgeriaTech, txt: str,
|
|
|
864
1103
|
|
|
865
1104
|
elif directive == "process":
|
|
866
1105
|
prop_body = {
|
|
867
|
-
"class"
|
|
1106
|
+
"class": "ResourceListProperties",
|
|
868
1107
|
"resourceUse": resource_use,
|
|
869
1108
|
"resourceDescription": resource_description,
|
|
870
1109
|
"resourceProperties": resource_properties,
|
|
871
1110
|
"effectiveFrom": effective_from,
|
|
872
1111
|
"effectiveTo": effective_to
|
|
873
|
-
|
|
1112
|
+
}
|
|
874
1113
|
|
|
875
1114
|
try:
|
|
876
1115
|
if object_action == "Detach":
|
|
877
1116
|
if not exists:
|
|
878
|
-
msg = (f" Link `
|
|
1117
|
+
msg = (f" Link `Attach Resource to Collection` does not exist! Updating result document with Link "
|
|
879
1118
|
f"object_action\n")
|
|
880
1119
|
logger.error(msg)
|
|
881
1120
|
out = parsed_output['display'].replace('Link', 'Detach', 1)
|
|
@@ -887,21 +1126,23 @@ def process_attach_collection_command(egeria_client: EgeriaTech, txt: str,
|
|
|
887
1126
|
f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
|
|
888
1127
|
body = set_delete_request_body(object_type, attributes)
|
|
889
1128
|
|
|
890
|
-
egeria_client.detach_collection(resource_guid, collection_guid,body)
|
|
1129
|
+
egeria_client.detach_collection(resource_guid, collection_guid, body)
|
|
891
1130
|
|
|
892
|
-
logger.success(
|
|
1131
|
+
logger.success(
|
|
1132
|
+
f"===> Detached linkage between resource `{resource_guid}` and collection`{collection_guid}`\n")
|
|
893
1133
|
out = parsed_output['display'].replace('Unlink', 'Link', 1)
|
|
894
1134
|
|
|
895
1135
|
return (out)
|
|
896
1136
|
|
|
897
1137
|
elif object_action == "Link":
|
|
898
1138
|
if valid is False and exists:
|
|
899
|
-
msg = (
|
|
900
|
-
|
|
1139
|
+
msg = (
|
|
1140
|
+
f"--> Link called `Attach Resource to Collection` already exists and result document updated changing "
|
|
1141
|
+
f"`Link` to `Detach` in processed output\n")
|
|
901
1142
|
logger.error(msg)
|
|
902
1143
|
|
|
903
1144
|
elif valid is False:
|
|
904
|
-
msg = f"==>{object_type} Link with label `
|
|
1145
|
+
msg = f"==>{object_type} Link with label `Attach Resource to Collection` is not valid and can't be created"
|
|
905
1146
|
logger.error(msg)
|
|
906
1147
|
return
|
|
907
1148
|
|
|
@@ -910,7 +1151,7 @@ def process_attach_collection_command(egeria_client: EgeriaTech, txt: str,
|
|
|
910
1151
|
|
|
911
1152
|
body['properties'] = prop_body
|
|
912
1153
|
egeria_client.attach_collection(resource_guid,
|
|
913
|
-
|
|
1154
|
+
collection_guid, body)
|
|
914
1155
|
msg = f"==>Attached collection `{collection_guid}` to resource `{resource_guid}` \n"
|
|
915
1156
|
logger.success(msg)
|
|
916
1157
|
out = parsed_output['display'].replace('Link', 'Detach', 1)
|
|
@@ -923,8 +1164,9 @@ def process_attach_collection_command(egeria_client: EgeriaTech, txt: str,
|
|
|
923
1164
|
else:
|
|
924
1165
|
return None
|
|
925
1166
|
|
|
1167
|
+
|
|
926
1168
|
def process_attach_subscriber_command(egeria_client: EgeriaTech, txt: str,
|
|
927
|
-
|
|
1169
|
+
directive: str = "display") -> Optional[str]:
|
|
928
1170
|
"""
|
|
929
1171
|
Processes a link or unlink command to attach a subscriber to a subscription.
|
|
930
1172
|
|
|
@@ -937,17 +1179,20 @@ def process_attach_subscriber_command(egeria_client: EgeriaTech, txt: str,
|
|
|
937
1179
|
print(Markdown(f"# {command}\n"))
|
|
938
1180
|
|
|
939
1181
|
parsed_output = parse_view_command(egeria_client, object_type, object_action, txt, directive)
|
|
1182
|
+
if parsed_output is None:
|
|
1183
|
+
logger.error(f"Input error in command `{txt}`")
|
|
1184
|
+
return None
|
|
940
1185
|
|
|
941
1186
|
print(Markdown(parsed_output['display']))
|
|
942
1187
|
|
|
943
1188
|
logger.debug(json.dumps(parsed_output, indent=4))
|
|
944
1189
|
|
|
945
1190
|
attributes = parsed_output['attributes']
|
|
946
|
-
subscriber_guid = attributes.get('Subscriber', {}).get('guid', None)
|
|
1191
|
+
subscriber_guid = attributes.get('Subscriber Id', {}).get('guid', None)
|
|
947
1192
|
subscription_guid = attributes.get('Subscription', {}).get('guid', None)
|
|
948
1193
|
|
|
949
1194
|
valid = parsed_output['valid']
|
|
950
|
-
|
|
1195
|
+
exists = subscriber_guid is not None and subscription_guid is not None
|
|
951
1196
|
if directive == "display":
|
|
952
1197
|
|
|
953
1198
|
return None
|
|
@@ -961,7 +1206,7 @@ def process_attach_subscriber_command(egeria_client: EgeriaTech, txt: str,
|
|
|
961
1206
|
elif directive == "process":
|
|
962
1207
|
prop_body = {
|
|
963
1208
|
"class": "DigitalSubscriberProperties",
|
|
964
|
-
"subscriberId":
|
|
1209
|
+
"subscriberId": attributes.get('Subscriber Id', {}).get('value', None),
|
|
965
1210
|
"effectiveFrom": attributes.get('Effective From', {}).get('value', None),
|
|
966
1211
|
"effectiveTo": attributes.get('Effective To', {}).get('value', None),
|
|
967
1212
|
}
|
|
@@ -969,8 +1214,9 @@ def process_attach_subscriber_command(egeria_client: EgeriaTech, txt: str,
|
|
|
969
1214
|
try:
|
|
970
1215
|
if object_action == "Detach":
|
|
971
1216
|
if not exists:
|
|
972
|
-
msg = (
|
|
973
|
-
|
|
1217
|
+
msg = (
|
|
1218
|
+
f" Link `Attach Subscriber to Subscription` does not exist! Updating result document with Link "
|
|
1219
|
+
f"object_action\n")
|
|
974
1220
|
logger.error(msg)
|
|
975
1221
|
out = parsed_output['display'].replace('Link', 'Detach', 1)
|
|
976
1222
|
return out
|
|
@@ -981,17 +1227,19 @@ def process_attach_subscriber_command(egeria_client: EgeriaTech, txt: str,
|
|
|
981
1227
|
f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
|
|
982
1228
|
body = set_delete_request_body(object_type, attributes)
|
|
983
1229
|
|
|
984
|
-
egeria_client.detach_subscriber(subscriber_guid, subscription_guid,body)
|
|
1230
|
+
egeria_client.detach_subscriber(subscriber_guid, subscription_guid, body)
|
|
985
1231
|
|
|
986
|
-
logger.success(
|
|
1232
|
+
logger.success(
|
|
1233
|
+
f"===> Detached linkage between subscriber `{subscriber_guid}` and subscription`{subscription_guid}`\n")
|
|
987
1234
|
out = parsed_output['display'].replace('Unlink', 'Link', 1)
|
|
988
1235
|
|
|
989
1236
|
return (out)
|
|
990
1237
|
|
|
991
1238
|
elif object_action == "Link":
|
|
992
1239
|
if valid is False and exists:
|
|
993
|
-
msg = (
|
|
994
|
-
|
|
1240
|
+
msg = (
|
|
1241
|
+
f"--> Link called `Attach Subscriber to Subscription` already exists and result document updated changing "
|
|
1242
|
+
f"`Link` to `Detach` in processed output\n")
|
|
995
1243
|
logger.error(msg)
|
|
996
1244
|
|
|
997
1245
|
elif valid is False:
|
|
@@ -1004,7 +1252,7 @@ def process_attach_subscriber_command(egeria_client: EgeriaTech, txt: str,
|
|
|
1004
1252
|
|
|
1005
1253
|
body['properties'] = prop_body
|
|
1006
1254
|
egeria_client.link_subscriber(subscriber_guid,
|
|
1007
|
-
|
|
1255
|
+
subscription_guid, body)
|
|
1008
1256
|
msg = f"==>Attached subscriber `{subscriber_guid}` to subscription `{subscriber_guid}` \n"
|
|
1009
1257
|
logger.success(msg)
|
|
1010
1258
|
out = parsed_output['display'].replace('Link', 'Detach', 1)
|
|
@@ -1016,4 +1264,3 @@ def process_attach_subscriber_command(egeria_client: EgeriaTech, txt: str,
|
|
|
1016
1264
|
return None
|
|
1017
1265
|
else:
|
|
1018
1266
|
return None
|
|
1019
|
-
|