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
|
@@ -0,0 +1,530 @@
|
|
|
1
|
+
"""
|
|
2
|
+
This file contains Dr. Egeria commands for working with External References.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
from typing import Optional
|
|
7
|
+
|
|
8
|
+
from loguru import logger
|
|
9
|
+
from pydantic import ValidationError
|
|
10
|
+
from rich import print
|
|
11
|
+
from rich.markdown import Markdown
|
|
12
|
+
|
|
13
|
+
from md_processing.md_processing_utils.common_md_proc_utils import (parse_upsert_command, parse_view_command,
|
|
14
|
+
)
|
|
15
|
+
from md_processing.md_processing_utils.common_md_utils import (set_update_body, set_element_prop_body,
|
|
16
|
+
set_delete_request_body, set_create_body,
|
|
17
|
+
set_rel_request_body_for_type,
|
|
18
|
+
set_rel_prop_body, )
|
|
19
|
+
from md_processing.md_processing_utils.common_md_utils import (update_element_dictionary,
|
|
20
|
+
)
|
|
21
|
+
from md_processing.md_processing_utils.extraction_utils import (extract_command_plus, update_a_command)
|
|
22
|
+
|
|
23
|
+
from pyegeria import PyegeriaException, print_basic_exception, print_validation_error
|
|
24
|
+
from pyegeria.egeria_tech_client import EgeriaTech
|
|
25
|
+
from pyegeria.core.utils import make_format_set_name_from_type, body_slimmer
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
# EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "170"))
|
|
29
|
+
# console = Console(width=EGERIA_WIDTH)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def process_external_reference_upsert_command(egeria_client: EgeriaTech, txt: str,
|
|
34
|
+
directive: str = "display") -> Optional[str]:
|
|
35
|
+
"""
|
|
36
|
+
Processes a project create or update object_action by extracting key attributes such as
|
|
37
|
+
glossary name, language, description, and usage from the given text.
|
|
38
|
+
|
|
39
|
+
:param txt: A string representing the input cell to be processed for
|
|
40
|
+
extracting glossary-related attributes.
|
|
41
|
+
:param directive: an optional string indicating the directive to be used - display, validate or execute
|
|
42
|
+
:return: A string summarizing the outcome of the processing.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
command, object_type, object_action = extract_command_plus(txt)
|
|
46
|
+
print(Markdown(f"# {command}\n"))
|
|
47
|
+
|
|
48
|
+
parsed_output = parse_upsert_command(egeria_client, object_type, object_action, txt, directive)
|
|
49
|
+
if not parsed_output:
|
|
50
|
+
logger.error(f"No output for `{object_action}`")
|
|
51
|
+
return None
|
|
52
|
+
|
|
53
|
+
valid = parsed_output['valid']
|
|
54
|
+
exists = parsed_output['exists']
|
|
55
|
+
|
|
56
|
+
qualified_name = parsed_output.get('qualified_name', None)
|
|
57
|
+
guid = parsed_output.get('guid', None)
|
|
58
|
+
|
|
59
|
+
print(Markdown(parsed_output['display']))
|
|
60
|
+
|
|
61
|
+
logger.debug(json.dumps(parsed_output, indent=4))
|
|
62
|
+
|
|
63
|
+
attributes = parsed_output['attributes']
|
|
64
|
+
|
|
65
|
+
display_name = attributes['Display Name'].get('value', None)
|
|
66
|
+
status = attributes.get('Status', {}).get('value', None)
|
|
67
|
+
output_set = make_format_set_name_from_type(object_type)
|
|
68
|
+
#
|
|
69
|
+
|
|
70
|
+
if directive == "display":
|
|
71
|
+
return None
|
|
72
|
+
elif directive == "validate":
|
|
73
|
+
if valid:
|
|
74
|
+
print(Markdown(f"==> Validation of {command} completed successfully!\n"))
|
|
75
|
+
else:
|
|
76
|
+
msg = f"Validation failed for object_action `{command}`\n"
|
|
77
|
+
return valid
|
|
78
|
+
|
|
79
|
+
elif directive == "process":
|
|
80
|
+
try:
|
|
81
|
+
obj = "External Reference"
|
|
82
|
+
EXTERNAL_REFERENCE_PROPS = ["ExternalReferenceProperties", "ExternalDataSourceProperties",
|
|
83
|
+
"ExternalModelSourceProperties",
|
|
84
|
+
"RelatedMediaProperties", "CitedDocumentProperties"]
|
|
85
|
+
|
|
86
|
+
EXTERNAL_REFERENCE_TYPES = ["ExternalReference", "ExternalDataSource", "ExternalModelSource",
|
|
87
|
+
"RelatedMedia", "CitedDocument"]
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
# Set the property body for a glossary collection
|
|
91
|
+
#
|
|
92
|
+
prop_body = set_element_prop_body(obj, qualified_name, attributes)
|
|
93
|
+
prop_body["referenceTitle"] = attributes.get('Reference Title', {}).get('value', None)
|
|
94
|
+
prop_body["referenceAbstract"] = attributes.get('Reference Abstract', {}).get('value', None)
|
|
95
|
+
prop_body["authors"] = attributes.get('Authors', {}).get('value', None)
|
|
96
|
+
prop_body["organization"] = attributes.get('Organization', {}).get('value', None)
|
|
97
|
+
prop_body["url"] = attributes.get('URL', {}).get('value', None)
|
|
98
|
+
prop_body["sources"] = attributes.get('Sources', {}).get('value', None)
|
|
99
|
+
prop_body["license"] = attributes.get('License', {}).get('value', None)
|
|
100
|
+
prop_body["copyright"] = attributes.get('Copyright', {}).get('value', None)
|
|
101
|
+
prop_body["attribution"] = attributes.get('Attribution', {}).get('value', None)
|
|
102
|
+
|
|
103
|
+
if object_type in ["RelatedMedia", "Related Media"]:
|
|
104
|
+
object_type = "RelatedMedia"
|
|
105
|
+
prop_body["class"] = "RelatedProperties"
|
|
106
|
+
prop_body["mediaType"] = attributes.get('Media Type', {}).get('value', None)
|
|
107
|
+
prop_body["mediaTypeOtherId"] = attributes.get('Media Type Other ID', {}).get('value', None)
|
|
108
|
+
prop_body["defaultMediaUsage"]= attributes.get('Default Media Usage', {}).get('value', None)
|
|
109
|
+
prop_body["defaultMediaUsageOtherId"] = attributes.get('Default Media Usage Other ID', {}).get('value', None)
|
|
110
|
+
elif object_type in ["CitedDocument", "Cited Document"]:
|
|
111
|
+
object_type = "CitedDocument"
|
|
112
|
+
prop_body["class"] = "CitedDocumentProperties"
|
|
113
|
+
prop_body["numberOfPages"] = attributes.get('Number of Pages', {}).get('value', None)
|
|
114
|
+
prop_body["pageRange"] = attributes.get('Page Range', {}).get('value', None)
|
|
115
|
+
prop_body["publicationSeries"] = attributes.get('Publication Series', {}).get('value', None)
|
|
116
|
+
prop_body["publicationSeriesVolume"] = attributes.get('Publication Series Volume', {}).get('value', None)
|
|
117
|
+
prop_body["publisher"] = attributes.get('Publisher', {}).get('value', None)
|
|
118
|
+
prop_body["edition"] = attributes.get('Edition', {}).get('value', None)
|
|
119
|
+
prop_body["firstPublicationDate"] = attributes.get('First Publication Date', {}).get('value', None)
|
|
120
|
+
prop_body["publicationDate"] = attributes.get('Publication Date', {}).get('value', None)
|
|
121
|
+
prop_body["publicationCity"] = attributes.get('Publication City', {}).get('value', None)
|
|
122
|
+
prop_body["publicationYear"] = attributes.get('Publication Year', {}).get('value', None)
|
|
123
|
+
prop_body["publicationNumbers"]= attributes.get('Publication Numbers', {}).get('value', None)
|
|
124
|
+
elif object_type in ["ExternalReference", "External Reference"]:
|
|
125
|
+
object_type = "ExternalReference"
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
if object_action == "Update":
|
|
129
|
+
if not exists:
|
|
130
|
+
msg = (f" Element `{display_name}` does not exist! Updating result document with Create "
|
|
131
|
+
f"{object_action}\n")
|
|
132
|
+
logger.error(msg)
|
|
133
|
+
return update_a_command(txt, object_action, object_type, qualified_name, guid)
|
|
134
|
+
elif not valid:
|
|
135
|
+
msg = (" The input data is invalid and cannot be processed. \nPlease review")
|
|
136
|
+
logger.error(msg)
|
|
137
|
+
print(Markdown(f"==> Validation of {command} failed!!\n"))
|
|
138
|
+
print(Markdown(msg))
|
|
139
|
+
return None
|
|
140
|
+
else:
|
|
141
|
+
print(Markdown(
|
|
142
|
+
f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
body = set_update_body(obj, attributes)
|
|
146
|
+
body['properties'] = prop_body
|
|
147
|
+
|
|
148
|
+
egeria_client.update_external_reference(guid, body)
|
|
149
|
+
# if status:
|
|
150
|
+
# egeria_client.update_external_reference_status(guid, status)
|
|
151
|
+
|
|
152
|
+
logger.success(f"Updated {object_type} `{display_name}` with GUID {guid}\n\n___")
|
|
153
|
+
print(Markdown(f"Updated {object_type} `{display_name}` with GUID {guid}\n\n___"))
|
|
154
|
+
update_element_dictionary(qualified_name, {
|
|
155
|
+
'guid': guid, 'display_name': display_name
|
|
156
|
+
})
|
|
157
|
+
return egeria_client.get_external_reference_by_guid(guid, element_type= object_type,
|
|
158
|
+
output_format='MD', report_spec = output_set)
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
elif object_action == "Create":
|
|
162
|
+
if valid is False and exists:
|
|
163
|
+
msg = (f"Project `{display_name}` already exists and result document updated changing "
|
|
164
|
+
f"`Create` to `Update` in processed output\n\n___")
|
|
165
|
+
logger.error(msg)
|
|
166
|
+
return update_a_command(txt, object_action, object_type, qualified_name, guid)
|
|
167
|
+
elif not valid:
|
|
168
|
+
msg = ("The input data is invalid and cannot be processed. \nPlease review")
|
|
169
|
+
logger.error(msg)
|
|
170
|
+
print(Markdown(f"==> Validation of {command} failed!!\n"))
|
|
171
|
+
print(Markdown(msg))
|
|
172
|
+
return None
|
|
173
|
+
|
|
174
|
+
else:
|
|
175
|
+
body = set_create_body(object_type,attributes)
|
|
176
|
+
|
|
177
|
+
# if this is a root or folder (maybe more in the future), then make sure that the classification is set.
|
|
178
|
+
# body["initialClassifications"] = set_object_classifications(object_type, attributes, None)
|
|
179
|
+
|
|
180
|
+
body["properties"] = prop_body
|
|
181
|
+
slim_body = body_slimmer(body)
|
|
182
|
+
guid = egeria_client.create_external_reference(body = slim_body)
|
|
183
|
+
if guid:
|
|
184
|
+
update_element_dictionary(qualified_name, {
|
|
185
|
+
'guid': guid, 'display_name': display_name
|
|
186
|
+
})
|
|
187
|
+
msg = f"Created Element `{display_name}` with GUID {guid}\n\n___"
|
|
188
|
+
logger.success(msg)
|
|
189
|
+
print(Markdown(msg))
|
|
190
|
+
return egeria_client.get_external_reference_by_guid(guid, element_type=object_type,
|
|
191
|
+
output_format='MD',
|
|
192
|
+
report_spec=output_set)
|
|
193
|
+
else:
|
|
194
|
+
msg = f"Failed to create element `{display_name}` with GUID {guid}\n\n___"
|
|
195
|
+
print(Markdown(msg))
|
|
196
|
+
logger.error(msg)
|
|
197
|
+
return None
|
|
198
|
+
|
|
199
|
+
except PyegeriaException as e:
|
|
200
|
+
logger.error(f"Pyegeria error performing {command}: {e}")
|
|
201
|
+
print_basic_exception(e)
|
|
202
|
+
return None
|
|
203
|
+
except Exception as e:
|
|
204
|
+
logger.error(f"Error performing {command}: {e}")
|
|
205
|
+
else:
|
|
206
|
+
return None
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
def process_link_to_external_reference_command(egeria_client: EgeriaTech, txt: str, directive: str = "display") -> Optional[str]:
|
|
211
|
+
""" Link a referenceable to an external reference."""
|
|
212
|
+
|
|
213
|
+
command, object_type, object_action = extract_command_plus(txt)
|
|
214
|
+
print(Markdown(f"# {command}\n"))
|
|
215
|
+
|
|
216
|
+
parsed_output = parse_view_command(egeria_client, object_type, object_action,
|
|
217
|
+
txt, directive)
|
|
218
|
+
|
|
219
|
+
if not parsed_output:
|
|
220
|
+
logger.error(f"No output for `{object_action}`")
|
|
221
|
+
print(Markdown("## Parsing failed"))
|
|
222
|
+
return None
|
|
223
|
+
|
|
224
|
+
print(Markdown(parsed_output['display']))
|
|
225
|
+
|
|
226
|
+
logger.debug(json.dumps(parsed_output, indent=4))
|
|
227
|
+
|
|
228
|
+
attributes = parsed_output['attributes']
|
|
229
|
+
|
|
230
|
+
element_guid = attributes.get('Element Name', {}).get('guid', None)
|
|
231
|
+
external_reference_guid = attributes.get('External Reference', {}).get('guid', None)
|
|
232
|
+
|
|
233
|
+
valid = parsed_output['valid']
|
|
234
|
+
exists = element_guid is not None and external_reference_guid is not None
|
|
235
|
+
prop_body = set_rel_prop_body("ExternalReferenceLink", attributes)
|
|
236
|
+
|
|
237
|
+
if directive == "display":
|
|
238
|
+
|
|
239
|
+
return None
|
|
240
|
+
elif directive == "validate":
|
|
241
|
+
if valid:
|
|
242
|
+
print(Markdown(f"==> Validation of {command} completed successfully!\n"))
|
|
243
|
+
else:
|
|
244
|
+
msg = f"Validation failed for object_action `{command}`\n"
|
|
245
|
+
logger.error(msg)
|
|
246
|
+
print(Markdown(f"==> Validation of {command} failed!!\n"))
|
|
247
|
+
return valid
|
|
248
|
+
|
|
249
|
+
elif directive == "process":
|
|
250
|
+
|
|
251
|
+
try:
|
|
252
|
+
if object_action == "Detach":
|
|
253
|
+
if not exists:
|
|
254
|
+
msg = " Link does not exist! Updating result document with Link object_action\n"
|
|
255
|
+
logger.error(msg)
|
|
256
|
+
out = parsed_output['display'].replace('Link', 'Detach', 1)
|
|
257
|
+
return out
|
|
258
|
+
elif not valid:
|
|
259
|
+
return None
|
|
260
|
+
else:
|
|
261
|
+
print(Markdown(
|
|
262
|
+
f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
|
|
263
|
+
body = set_delete_request_body(object_type, attributes)
|
|
264
|
+
|
|
265
|
+
egeria_client.detach_external_reference(element_guid, external_reference_guid, body)
|
|
266
|
+
|
|
267
|
+
logger.success(f"===> Detached segment from `{element_guid}`to {external_reference_guid}\n")
|
|
268
|
+
out = parsed_output['display'].replace('Unlink', 'Link', 1)
|
|
269
|
+
|
|
270
|
+
return (out)
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
elif object_action == "Link":
|
|
274
|
+
if valid is False and exists:
|
|
275
|
+
msg = "--> Link already exists and result document updated changing `Link` to `Detach` in processed output\n"
|
|
276
|
+
logger.error(msg)
|
|
277
|
+
|
|
278
|
+
elif valid is False:
|
|
279
|
+
msg = f"==>{object_type} Link is not valid and can't be created"
|
|
280
|
+
logger.error(msg)
|
|
281
|
+
return
|
|
282
|
+
|
|
283
|
+
else:
|
|
284
|
+
body = set_rel_request_body_for_type("ExternalReferencesLink", attributes)
|
|
285
|
+
body['properties'] = prop_body
|
|
286
|
+
|
|
287
|
+
egeria_client.link_external_reference(element_guid,
|
|
288
|
+
external_reference_guid,
|
|
289
|
+
body=body_slimmer(body))
|
|
290
|
+
msg = f"==>Created {object_type} link \n"
|
|
291
|
+
logger.success(msg)
|
|
292
|
+
out = parsed_output['display'].replace('Link', 'Detach', 1)
|
|
293
|
+
return out
|
|
294
|
+
|
|
295
|
+
except ValidationError as e:
|
|
296
|
+
print_validation_error(e)
|
|
297
|
+
logger.error(f"Validation Error performing {command}: {e}")
|
|
298
|
+
return None
|
|
299
|
+
except PyegeriaException as e:
|
|
300
|
+
print_basic_exception(e)
|
|
301
|
+
logger.error(f"PyegeriaException occurred: {e}")
|
|
302
|
+
return None
|
|
303
|
+
|
|
304
|
+
except Exception as e:
|
|
305
|
+
logger.error(f"Error performing {command}: {e}")
|
|
306
|
+
return None
|
|
307
|
+
else:
|
|
308
|
+
return None
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
def process_link_to_media_reference_command(egeria_client: EgeriaTech, txt: str, directive: str = "display") \
|
|
313
|
+
-> Optional[str]:
|
|
314
|
+
# """ Link a referenceable to a related media reference."""
|
|
315
|
+
#
|
|
316
|
+
#
|
|
317
|
+
|
|
318
|
+
command, object_type, object_action = extract_command_plus(txt)
|
|
319
|
+
print(Markdown(f"# {command}\n"))
|
|
320
|
+
|
|
321
|
+
parsed_output = parse_view_command(egeria_client, object_type, object_action,
|
|
322
|
+
txt, directive)
|
|
323
|
+
|
|
324
|
+
if not parsed_output:
|
|
325
|
+
logger.error(f"No output for `{object_action}`")
|
|
326
|
+
print(Markdown("## Parsing failed"))
|
|
327
|
+
return None
|
|
328
|
+
|
|
329
|
+
print(Markdown(parsed_output['display']))
|
|
330
|
+
|
|
331
|
+
logger.debug(json.dumps(parsed_output, indent=4))
|
|
332
|
+
|
|
333
|
+
attributes = parsed_output['attributes']
|
|
334
|
+
|
|
335
|
+
element_guid = attributes.get('Element Name', {}).get('guid', None)
|
|
336
|
+
media_reference_guid = attributes.get('Media Reference', {}).get('guid', None)
|
|
337
|
+
media_id = attributes.get('Media Id', {}).get('value', None)
|
|
338
|
+
media_usage = attributes.get('Media Usage', {}).get('value', None)
|
|
339
|
+
media_usage_other_id = attributes.get('Media Usage Other Id', {}).get('value', None)
|
|
340
|
+
|
|
341
|
+
valid = parsed_output['valid']
|
|
342
|
+
exists = element_guid is not None and media_reference_guid is not None
|
|
343
|
+
prop_body = set_rel_prop_body("MediaReference", attributes)
|
|
344
|
+
prop_body["mediaId"] = media_id
|
|
345
|
+
prop_body["mediaUsageId"] = media_usage
|
|
346
|
+
prop_body["mediaUsageOtherId"] = media_usage_other_id
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
if directive == "display":
|
|
350
|
+
|
|
351
|
+
return None
|
|
352
|
+
elif directive == "validate":
|
|
353
|
+
if valid:
|
|
354
|
+
print(Markdown(f"==> Validation of {command} completed successfully!\n"))
|
|
355
|
+
else:
|
|
356
|
+
msg = f"Validation failed for object_action `{command}`\n"
|
|
357
|
+
logger.error(msg)
|
|
358
|
+
print(Markdown(f"==> Validation of {command} failed!!\n"))
|
|
359
|
+
return valid
|
|
360
|
+
|
|
361
|
+
elif directive == "process":
|
|
362
|
+
|
|
363
|
+
try:
|
|
364
|
+
if object_action == "Detach":
|
|
365
|
+
if not exists:
|
|
366
|
+
msg = " Link does not exist! Updating result document with Link object_action\n"
|
|
367
|
+
logger.error(msg)
|
|
368
|
+
out = parsed_output['display'].replace('Link', 'Detach', 1)
|
|
369
|
+
return out
|
|
370
|
+
elif not valid:
|
|
371
|
+
return None
|
|
372
|
+
else:
|
|
373
|
+
print(Markdown(
|
|
374
|
+
f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
|
|
375
|
+
body = set_delete_request_body(object_type, attributes)
|
|
376
|
+
|
|
377
|
+
egeria_client.detach_cited_document(element_guid, media_reference_guid, body)
|
|
378
|
+
|
|
379
|
+
logger.success(f"===> Detached segment from `{element_guid}`to {media_reference_guid}\n")
|
|
380
|
+
out = parsed_output['display'].replace('Unlink', 'Link', 1)
|
|
381
|
+
|
|
382
|
+
return (out)
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
elif object_action == "Link":
|
|
386
|
+
if valid is False and exists:
|
|
387
|
+
msg = "--> Link already exists and result document updated changing `Link` to `Detach` in processed output\n"
|
|
388
|
+
logger.error(msg)
|
|
389
|
+
|
|
390
|
+
elif valid is False:
|
|
391
|
+
msg = f"==>{object_type} Link is not valid and can't be created"
|
|
392
|
+
logger.error(msg)
|
|
393
|
+
return
|
|
394
|
+
|
|
395
|
+
else:
|
|
396
|
+
body = set_rel_request_body_for_type("CitedDocumentLink", attributes)
|
|
397
|
+
body['properties'] = prop_body
|
|
398
|
+
|
|
399
|
+
egeria_client.link_cited_document(element_guid,
|
|
400
|
+
media_reference_guid,
|
|
401
|
+
body=body_slimmer(body))
|
|
402
|
+
msg = f"==>Created {object_type} link \n"
|
|
403
|
+
logger.success(msg)
|
|
404
|
+
out = parsed_output['display'].replace('Link', 'Detach', 1)
|
|
405
|
+
return out
|
|
406
|
+
|
|
407
|
+
except ValidationError as e:
|
|
408
|
+
print_validation_error(e)
|
|
409
|
+
logger.error(f"Validation Error performing {command}: {e}")
|
|
410
|
+
return None
|
|
411
|
+
except PyegeriaException as e:
|
|
412
|
+
print_basic_exception(e)
|
|
413
|
+
logger.error(f"PyegeriaException occurred: {e}")
|
|
414
|
+
return None
|
|
415
|
+
|
|
416
|
+
except Exception as e:
|
|
417
|
+
logger.error(f"Error performing {command}: {e}")
|
|
418
|
+
return None
|
|
419
|
+
else:
|
|
420
|
+
return None
|
|
421
|
+
|
|
422
|
+
def process_link_to_cited_document_command(egeria_client: EgeriaTech, txt: str, directive: str = "display") \
|
|
423
|
+
-> Optional[str]:
|
|
424
|
+
|
|
425
|
+
# """ Link a referenceable to a cited document."""
|
|
426
|
+
#
|
|
427
|
+
|
|
428
|
+
command, object_type, object_action = extract_command_plus(txt)
|
|
429
|
+
print(Markdown(f"# {command}\n"))
|
|
430
|
+
|
|
431
|
+
parsed_output = parse_view_command(egeria_client, object_type, object_action,
|
|
432
|
+
txt, directive)
|
|
433
|
+
|
|
434
|
+
if not parsed_output:
|
|
435
|
+
logger.error(f"No output for `{object_action}`")
|
|
436
|
+
print(Markdown("## Parsing failed"))
|
|
437
|
+
return None
|
|
438
|
+
|
|
439
|
+
print(Markdown(parsed_output['display']))
|
|
440
|
+
|
|
441
|
+
logger.debug(json.dumps(parsed_output, indent=4))
|
|
442
|
+
|
|
443
|
+
attributes = parsed_output['attributes']
|
|
444
|
+
|
|
445
|
+
element_guid = attributes.get('Element Name', {}).get('guid', None)
|
|
446
|
+
cited_document_guid = attributes.get('Cited Document', {}).get('guid', None)
|
|
447
|
+
reference_id = attributes.get('Reference Id', {}).get('value', None)
|
|
448
|
+
pages = attributes.get('Pages', {}).get('value', None)
|
|
449
|
+
|
|
450
|
+
valid = parsed_output['valid']
|
|
451
|
+
exists = element_guid is not None and cited_document_guid is not None
|
|
452
|
+
prop_body = set_rel_prop_body("CitedDocumentLink", attributes)
|
|
453
|
+
prop_body["referenceId"] = reference_id
|
|
454
|
+
prop_body["pages"] = pages
|
|
455
|
+
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
if directive == "display":
|
|
459
|
+
|
|
460
|
+
return None
|
|
461
|
+
elif directive == "validate":
|
|
462
|
+
if valid:
|
|
463
|
+
print(Markdown(f"==> Validation of {command} completed successfully!\n"))
|
|
464
|
+
else:
|
|
465
|
+
msg = f"Validation failed for object_action `{command}`\n"
|
|
466
|
+
logger.error(msg)
|
|
467
|
+
print(Markdown(f"==> Validation of {command} failed!!\n"))
|
|
468
|
+
return valid
|
|
469
|
+
|
|
470
|
+
elif directive == "process":
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
try:
|
|
474
|
+
if object_action == "Detach":
|
|
475
|
+
if not exists:
|
|
476
|
+
msg = f" Link does not exist! Updating result document with Link object_action\n"
|
|
477
|
+
logger.error(msg)
|
|
478
|
+
out = parsed_output['display'].replace('Link', 'Detach', 1)
|
|
479
|
+
return out
|
|
480
|
+
elif not valid:
|
|
481
|
+
return None
|
|
482
|
+
else:
|
|
483
|
+
print(Markdown(
|
|
484
|
+
f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
|
|
485
|
+
body = set_delete_request_body(object_type, attributes)
|
|
486
|
+
|
|
487
|
+
egeria_client.detach_cited_document(element_guid, cited_document_guid,body)
|
|
488
|
+
|
|
489
|
+
logger.success(f"===> Detached segment from `{element_guid}`to {cited_document_guid}\n")
|
|
490
|
+
out = parsed_output['display'].replace('Unlink', 'Link', 1)
|
|
491
|
+
|
|
492
|
+
return (out)
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
elif object_action == "Link":
|
|
496
|
+
if valid is False and exists:
|
|
497
|
+
msg = "--> Link already exists and result document updated changing `Link` to `Detach` in processed output\n"
|
|
498
|
+
logger.error(msg)
|
|
499
|
+
|
|
500
|
+
elif valid is False:
|
|
501
|
+
msg = f"==>{object_type} Link is not valid and can't be created"
|
|
502
|
+
logger.error(msg)
|
|
503
|
+
return
|
|
504
|
+
|
|
505
|
+
else:
|
|
506
|
+
body = set_rel_request_body_for_type("CitedDocumentLink", attributes)
|
|
507
|
+
body['properties'] = prop_body
|
|
508
|
+
|
|
509
|
+
egeria_client.link_cited_document(element_guid,
|
|
510
|
+
cited_document_guid,
|
|
511
|
+
body=body_slimmer(body))
|
|
512
|
+
msg = f"==>Created {object_type} link \n"
|
|
513
|
+
logger.success(msg)
|
|
514
|
+
out = parsed_output['display'].replace('Link', 'Detach', 1)
|
|
515
|
+
return out
|
|
516
|
+
|
|
517
|
+
except ValidationError as e:
|
|
518
|
+
print_validation_error(e)
|
|
519
|
+
logger.error(f"Validation Error performing {command}: {e}")
|
|
520
|
+
return None
|
|
521
|
+
except PyegeriaException as e:
|
|
522
|
+
print_basic_exception(e)
|
|
523
|
+
logger.error(f"PyegeriaException occurred: {e}")
|
|
524
|
+
return None
|
|
525
|
+
|
|
526
|
+
except Exception as e:
|
|
527
|
+
logger.error(f"Error performing {command}: {e}")
|
|
528
|
+
return None
|
|
529
|
+
else:
|
|
530
|
+
return None
|