pyegeria 5.3.9.9.3__py3-none-any.whl → 5.5.3.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pyegeria might be problematic. Click here for more details.
- commands/__init__.py +24 -0
- commands/cat/Dr-Egeria_md-orig.py +2 -2
- commands/cat/__init__.py +1 -17
- commands/cat/collection_actions.py +197 -0
- commands/cat/dr_egeria_command_help.py +372 -0
- commands/cat/dr_egeria_jupyter.py +7 -7
- commands/cat/dr_egeria_md.py +27 -182
- 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 +46 -138
- 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/run_report_orig.py +528 -0
- commands/cli/egeria.py +222 -247
- commands/cli/egeria_cat.py +68 -81
- commands/cli/egeria_my.py +13 -0
- commands/cli/egeria_ops.py +69 -74
- commands/cli/egeria_tech.py +17 -93
- commands/cli/ops_config.py +3 -6
- commands/{cat/list_categories.py → deprecated/list_data_designer.py} +53 -64
- commands/{cat/list_data_structures.py → 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 +35 -26
- 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 +90 -0
- 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 +17568 -0
- md_processing/data/commands_working.json +30641 -0
- 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/__init__.py +3 -0
- md_processing/md_commands/data_designer_commands.py +1276 -0
- 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 +684 -0
- md_processing/md_commands/governance_officer_commands.py +600 -0
- md_processing/md_commands/product_manager_commands.py +1266 -0
- md_processing/md_commands/project_commands.py +383 -0
- md_processing/md_commands/solution_architect_commands.py +1184 -0
- md_processing/md_commands/view_commands.py +295 -0
- md_processing/md_processing_utils/__init__.py +4 -0
- md_processing/md_processing_utils/common_md_proc_utils.py +1249 -0
- md_processing/md_processing_utils/common_md_utils.py +578 -0
- md_processing/md_processing_utils/determine_width.py +103 -0
- md_processing/md_processing_utils/extraction_utils.py +547 -0
- md_processing/md_processing_utils/gen_report_specs.py +643 -0
- md_processing/md_processing_utils/generate_dr_help.py +193 -0
- md_processing/md_processing_utils/generate_md_cmd_templates.py +144 -0
- md_processing/md_processing_utils/generate_md_templates.py +83 -0
- md_processing/md_processing_utils/md_processing_constants.py +1228 -0
- md_processing/md_processing_utils/message_constants.py +19 -0
- pyegeria/__init__.py +201 -443
- pyegeria/core/__init__.py +40 -0
- pyegeria/core/_base_platform_client.py +574 -0
- pyegeria/core/_base_server_client.py +573 -0
- pyegeria/core/_exceptions.py +457 -0
- pyegeria/core/_globals.py +60 -0
- pyegeria/core/_server_client.py +6073 -0
- pyegeria/core/_validators.py +257 -0
- 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/core/logging_configuration.py +207 -0
- pyegeria/core/mcp_adapter.py +144 -0
- pyegeria/core/mcp_server.py +212 -0
- pyegeria/core/utils.py +405 -0
- pyegeria/deprecated/__init__.py +0 -0
- pyegeria/{_client.py → deprecated/_client.py} +62 -24
- pyegeria/{_deprecated_gov_engine.py → deprecated/_deprecated_gov_engine.py} +16 -16
- pyegeria/{classification_manager_omvs.py → deprecated/classification_manager_omvs.py} +1988 -1878
- pyegeria/deprecated/output_formatter_with_machine_keys.py +1127 -0
- pyegeria/{runtime_manager_omvs.py → deprecated/runtime_manager_omvs.py} +216 -229
- 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 +25 -51
- pyegeria/egeria_client.py +140 -98
- pyegeria/egeria_config_client.py +48 -24
- pyegeria/egeria_tech_client.py +170 -83
- pyegeria/models/__init__.py +150 -0
- pyegeria/models/collection_models.py +168 -0
- pyegeria/models/models.py +654 -0
- 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/omvs/collection_manager.py +5780 -0
- 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_omvs.py → omvs/data_designer.py} +1991 -1691
- 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/omvs/glossary_manager.py +3231 -0
- pyegeria/omvs/governance_officer.py +3009 -0
- 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/omvs/solution_architect.py +6490 -0
- 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/view/_output_format_models.py +514 -0
- 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.3.9.9.3.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/README.md +0 -16
- commands/cli/txt_custom_v2.tcss +0 -19
- commands/my/README.md +0 -17
- commands/ops/README.md +0 -24
- commands/ops/monitor_asset_events.py +0 -108
- commands/tech/README.md +0 -24
- pyegeria/.DS_Store +0 -0
- pyegeria/README.md +0 -35
- pyegeria/_globals.py +0 -47
- pyegeria/_validators.py +0 -385
- pyegeria/asset_catalog_omvs.py +0 -864
- pyegeria/automated_curation_omvs.py +0 -3765
- pyegeria/collection_manager_omvs.py +0 -2744
- pyegeria/dr.egeria spec.md +0 -9
- pyegeria/egeria_my_client.py +0 -56
- pyegeria/feedback_manager_omvs.py +0 -4573
- pyegeria/glossary_browser_omvs.py +0 -3728
- pyegeria/glossary_manager_omvs.py +0 -2440
- pyegeria/m_test.py +0 -118
- 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/output_formatter.py +0 -389
- pyegeria/project_manager_omvs.py +0 -1933
- pyegeria/registered_info.py +0 -167
- pyegeria/solution_architect_omvs.py +0 -2156
- pyegeria/template_manager_omvs.py +0 -1414
- pyegeria/utils.py +0 -197
- pyegeria-5.3.9.9.3.dist-info/METADATA +0 -72
- pyegeria-5.3.9.9.3.dist-info/RECORD +0 -143
- pyegeria-5.3.9.9.3.dist-info/entry_points.txt +0 -99
- /pyegeria/{_exceptions.py → deprecated/_exceptions.py} +0 -0
- {pyegeria-5.3.9.9.3.dist-info → pyegeria-5.5.3.3.dist-info/licenses}/LICENSE +0 -0
|
@@ -0,0 +1,600 @@
|
|
|
1
|
+
"""
|
|
2
|
+
This file contains term-related object_action functions for processing Egeria Markdown
|
|
3
|
+
"""
|
|
4
|
+
import json
|
|
5
|
+
import os
|
|
6
|
+
from typing import Optional
|
|
7
|
+
|
|
8
|
+
from inflect import engine
|
|
9
|
+
from jsonschema import ValidationError
|
|
10
|
+
from loguru import logger
|
|
11
|
+
from rich import print
|
|
12
|
+
from rich.console import Console
|
|
13
|
+
from rich.markdown import Markdown
|
|
14
|
+
|
|
15
|
+
from md_processing.md_processing_utils.common_md_proc_utils import (parse_upsert_command, parse_view_command)
|
|
16
|
+
from md_processing.md_processing_utils.common_md_utils import (set_gov_prop_body,
|
|
17
|
+
set_update_body, set_create_body,
|
|
18
|
+
set_peer_gov_def_request_body, set_rel_prop_body,
|
|
19
|
+
set_rel_request_body,
|
|
20
|
+
ALL_GOVERNANCE_DEFINITIONS, set_delete_request_body)
|
|
21
|
+
from md_processing.md_processing_utils.extraction_utils import (extract_command_plus, update_a_command)
|
|
22
|
+
from md_processing.md_processing_utils.md_processing_constants import (load_commands)
|
|
23
|
+
from pyegeria import DEBUG_LEVEL, body_slimmer, 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
|
|
26
|
+
|
|
27
|
+
GERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
|
|
28
|
+
EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
|
|
29
|
+
EGERIA_PLATFORM_URL = os.environ.get("EGERIA_PLATFORM_URL", "https://localhost:9443")
|
|
30
|
+
EGERIA_VIEW_SERVER = os.environ.get("EGERIA_VIEW_SERVER", "view-server")
|
|
31
|
+
EGERIA_VIEW_SERVER_URL = os.environ.get("EGERIA_VIEW_SERVER_URL", "https://localhost:9443")
|
|
32
|
+
EGERIA_INTEGRATION_DAEMON = os.environ.get("EGERIA_INTEGRATION_DAEMON", "integration-daemon")
|
|
33
|
+
EGERIA_INTEGRATION_DAEMON_URL = os.environ.get("EGERIA_INTEGRATION_DAEMON_URL", "https://localhost:9443")
|
|
34
|
+
EGERIA_ADMIN_USER = os.environ.get("ADMIN_USER", "garygeeke")
|
|
35
|
+
EGERIA_ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "secret")
|
|
36
|
+
EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
|
|
37
|
+
EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
|
|
38
|
+
EGERIA_WIDTH = os.environ.get("EGERIA_WIDTH", 220)
|
|
39
|
+
EGERIA_JUPYTER = os.environ.get("EGERIA_JUPYTER", False)
|
|
40
|
+
EGERIA_HOME_GLOSSARY_GUID = os.environ.get("EGERIA_HOME_GLOSSARY_GUID", None)
|
|
41
|
+
EGERIA_GLOSSARY_PATH = os.environ.get("EGERIA_GLOSSARY_PATH", None)
|
|
42
|
+
EGERIA_ROOT_PATH = os.environ.get("EGERIA_ROOT_PATH", "../../")
|
|
43
|
+
EGERIA_INBOX_PATH = os.environ.get("EGERIA_INBOX_PATH", "md_processing/dr_egeria_inbox")
|
|
44
|
+
EGERIA_OUTBOX_PATH = os.environ.get("EGERIA_OUTBOX_PATH", "md_processing/dr_egeria_outbox")
|
|
45
|
+
|
|
46
|
+
GENERAL_GOVERNANCE_DEFINITIONS = ["Business Imperative", "Regulation Article", "Threat", "Governance Principle",
|
|
47
|
+
"Governance Obligation", "Governance Approach", "Governance Processing Purpose"]
|
|
48
|
+
|
|
49
|
+
GOVERNANCE_CONTROLS = ["Governance Rule", "Service Level Objective", "Governance Process",
|
|
50
|
+
"Governance Responsibility", "Governance Procedure", "Security Access Control"]
|
|
51
|
+
|
|
52
|
+
load_commands('commands.json')
|
|
53
|
+
debug_level = DEBUG_LEVEL
|
|
54
|
+
|
|
55
|
+
console = Console(width=int(250))
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
#
|
|
59
|
+
# Helper functions for the governance officer commands
|
|
60
|
+
#
|
|
61
|
+
|
|
62
|
+
@logger.catch
|
|
63
|
+
def sync_gov_rel_elements(egeria_client: EgeriaTech, object_action: str, object_type: str, guid: str,
|
|
64
|
+
qualified_name: str, attributes: dict):
|
|
65
|
+
# TODO: when the next release is available, I should be able to more easily get the asis elements - so will
|
|
66
|
+
# TODO: hold off on implementing replace all
|
|
67
|
+
try:
|
|
68
|
+
merge_update = attributes.get("Merge Update", {}).get("value", True)
|
|
69
|
+
to_be_supports_policies = attributes.get("Supports Policies", {}).get("guid_list", None)
|
|
70
|
+
to_be_governance_drivers = attributes.get("Governance Drivers", {}).get("guid_list", None)
|
|
71
|
+
|
|
72
|
+
if merge_update or object_action == "Create":
|
|
73
|
+
if to_be_supports_policies:
|
|
74
|
+
for policy in to_be_supports_policies:
|
|
75
|
+
egeria_client.attach_supporting_definitions(policy, "GovernanceImplementation", guid)
|
|
76
|
+
print(f"Added `{policy}` to `{guid}`")
|
|
77
|
+
elif to_be_governance_drivers:
|
|
78
|
+
for policy in to_be_governance_drivers:
|
|
79
|
+
egeria_client.attach_supporting_definitions(policy, "GovernanceResponse", guid)
|
|
80
|
+
print(f"Added `{policy}` to `{guid}`")
|
|
81
|
+
except Exception as ex:
|
|
82
|
+
print(ex)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
@logger.catch
|
|
86
|
+
def process_gov_definition_upsert_command(egeria_client: EgeriaTech, txt: str,
|
|
87
|
+
directive: str = "display") -> Optional[str]:
|
|
88
|
+
"""
|
|
89
|
+
Processes a data specification create or update object_action by extracting key attributes.
|
|
90
|
+
|
|
91
|
+
:param txt: Command details in text format.
|
|
92
|
+
:param directive: An optional string indicating the directive - display, validate, or process.
|
|
93
|
+
:return: A string summarizing the outcome, or None if no processing is needed.
|
|
94
|
+
"""
|
|
95
|
+
try:
|
|
96
|
+
# Extract basic command information
|
|
97
|
+
command, object_type, object_action = extract_command_plus(txt)
|
|
98
|
+
if not (command and object_type and object_action):
|
|
99
|
+
logger.error("Failed to parse `command`, `object_type`, or `object_action` from input text.")
|
|
100
|
+
return None
|
|
101
|
+
if object_type not in ALL_GOVERNANCE_DEFINITIONS:
|
|
102
|
+
logger.error(f"Invalid object type: {object_type}")
|
|
103
|
+
return None
|
|
104
|
+
# Log command details
|
|
105
|
+
print(Markdown(f"# {command}\n"))
|
|
106
|
+
|
|
107
|
+
# Parse command attributes
|
|
108
|
+
parsed_output = parse_upsert_command(egeria_client, object_type, object_action, txt, directive)
|
|
109
|
+
if not parsed_output or 'valid' not in parsed_output:
|
|
110
|
+
logger.error(f"Unable to parse command properly: {txt}")
|
|
111
|
+
return None
|
|
112
|
+
|
|
113
|
+
valid = parsed_output['valid']
|
|
114
|
+
exists = parsed_output['exists']
|
|
115
|
+
qualified_name = parsed_output.get('qualified_name')
|
|
116
|
+
display_name = parsed_output.get('attributes', {}).get('Display Name', {}).get('value')
|
|
117
|
+
guid = parsed_output.get('guid')
|
|
118
|
+
|
|
119
|
+
print(Markdown(parsed_output.get('display', '')))
|
|
120
|
+
logger.debug(json.dumps(parsed_output, indent=4))
|
|
121
|
+
|
|
122
|
+
if directive == "display":
|
|
123
|
+
logger.info("Directive set to display. No processing required.")
|
|
124
|
+
return None
|
|
125
|
+
|
|
126
|
+
elif directive == "validate":
|
|
127
|
+
if valid:
|
|
128
|
+
print(Markdown(f"==> Validation of {command} completed successfully!\n"))
|
|
129
|
+
else:
|
|
130
|
+
logger.error(f"Validation failed for `{command}`.")
|
|
131
|
+
return valid
|
|
132
|
+
|
|
133
|
+
elif directive == "process":
|
|
134
|
+
output_set = make_format_set_name_from_type(object_type)
|
|
135
|
+
|
|
136
|
+
if object_action == "Update":
|
|
137
|
+
if not guid:
|
|
138
|
+
msg = (f"The `{object_type}` '{display_name}' does not yet exist.\n The result document has been "
|
|
139
|
+
f"updated to change `Update` to `Create` in processed output\n{'-' * 80}\n ")
|
|
140
|
+
logger.error(msg)
|
|
141
|
+
# print(msg)
|
|
142
|
+
return update_a_command(txt, object_action, object_type, qualified_name, guid)
|
|
143
|
+
|
|
144
|
+
if not valid:
|
|
145
|
+
logger.error("Invalid data for update action.")
|
|
146
|
+
return None
|
|
147
|
+
|
|
148
|
+
# Proceed with the update
|
|
149
|
+
update_body = set_update_body(object_type, parsed_output['attributes'])
|
|
150
|
+
update_body['properties'] = set_gov_prop_body(object_type, qualified_name, parsed_output['attributes'])
|
|
151
|
+
update_body = body_slimmer(update_body)
|
|
152
|
+
egeria_client.update_governance_definition(guid, update_body)
|
|
153
|
+
if status := parsed_output['attributes'].get('Status', {}).get('value', None):
|
|
154
|
+
egeria_client.update_element_status(guid, status)
|
|
155
|
+
logger.success(f"Updated {object_type} `{display_name}` with GUID {guid}")
|
|
156
|
+
return egeria_client.get_governance_definition_by_guid(guid, output_format='MD',
|
|
157
|
+
report_spec=output_set)
|
|
158
|
+
|
|
159
|
+
elif object_action == "Create":
|
|
160
|
+
if valid is False and exists:
|
|
161
|
+
msg = (f"Failed to create `{object_type}` named `{display_name}` because it already exists.\n "
|
|
162
|
+
f"Result document has been updated to change `Create` to `Update` in processed o"
|
|
163
|
+
f"utput\n{'-' * 80}\n")
|
|
164
|
+
logger.error(msg)
|
|
165
|
+
return update_a_command(txt, object_action, object_type, qualified_name, guid)
|
|
166
|
+
elif valid is False:
|
|
167
|
+
msg = f" invalid data? - Correct and try again\n\n___"
|
|
168
|
+
logger.error(msg)
|
|
169
|
+
return None
|
|
170
|
+
else:
|
|
171
|
+
create_body = set_create_body(object_type, parsed_output['attributes'])
|
|
172
|
+
create_body['properties'] = set_gov_prop_body(object_type, qualified_name,
|
|
173
|
+
parsed_output['attributes'])
|
|
174
|
+
guid = egeria_client.create_governance_definition(body_slimmer(create_body))
|
|
175
|
+
if guid:
|
|
176
|
+
logger.success(f"Created {object_type} `{display_name}` with GUID {guid}")
|
|
177
|
+
return egeria_client.get_governance_definition_by_guid(guid, output_format='MD',
|
|
178
|
+
report_spec=output_set)
|
|
179
|
+
else:
|
|
180
|
+
logger.error(f"Failed to create {object_type} `{display_name}`.")
|
|
181
|
+
return None
|
|
182
|
+
|
|
183
|
+
else:
|
|
184
|
+
logger.error(f"Unsupported directive: {directive}")
|
|
185
|
+
return None
|
|
186
|
+
|
|
187
|
+
except PyegeriaException as e:
|
|
188
|
+
logger.error(f"PyegeriaException occurred: {e}")
|
|
189
|
+
print_basic_exception(e)
|
|
190
|
+
return None
|
|
191
|
+
|
|
192
|
+
except Exception as e:
|
|
193
|
+
logger.exception(f"Unexpected error: {e}")
|
|
194
|
+
print("Unexepected error occurred:\n {e}")
|
|
195
|
+
return None
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
@logger.catch
|
|
199
|
+
def process_gov_def_link_detach_command(egeria_client: EgeriaTech, txt: str,
|
|
200
|
+
directive: str = "display") -> Optional[str]:
|
|
201
|
+
"""
|
|
202
|
+
Processes a link or unlink command to associate or break up peer governance definitions.
|
|
203
|
+
|
|
204
|
+
:param txt: A string representing the input cell to be processed for
|
|
205
|
+
extracting blueprint-related attributes.
|
|
206
|
+
:param directive: an optional string indicating the directive to be used - display, validate or execute
|
|
207
|
+
:return: A string summarizing the outcome of the processing.
|
|
208
|
+
"""
|
|
209
|
+
command, object_type, object_action = extract_command_plus(txt)
|
|
210
|
+
print(Markdown(f"# {command}\n"))
|
|
211
|
+
|
|
212
|
+
parsed_output = parse_view_command(egeria_client, object_type, object_action, txt, directive)
|
|
213
|
+
|
|
214
|
+
print(Markdown(parsed_output['display']))
|
|
215
|
+
|
|
216
|
+
logger.debug(json.dumps(parsed_output, indent=4))
|
|
217
|
+
|
|
218
|
+
attributes = parsed_output['attributes']
|
|
219
|
+
|
|
220
|
+
definition1 = attributes.get('Definition 1', {}).get('guid', None)
|
|
221
|
+
definition2 = attributes.get('Definition 2', {}).get('guid', None)
|
|
222
|
+
label = attributes.get('Link Label', {}).get('value', None)
|
|
223
|
+
description = attributes.get('Description', {}).get('value', None)
|
|
224
|
+
|
|
225
|
+
valid = parsed_output['valid']
|
|
226
|
+
exists = definition1 is not None and definition2 is not None
|
|
227
|
+
|
|
228
|
+
if directive == "display":
|
|
229
|
+
|
|
230
|
+
return None
|
|
231
|
+
elif directive == "validate":
|
|
232
|
+
if valid:
|
|
233
|
+
print(Markdown(f"==> Validation of {command} completed successfully!\n"))
|
|
234
|
+
else:
|
|
235
|
+
msg = f"Validation failed for object_action `{command}`\n"
|
|
236
|
+
return valid
|
|
237
|
+
|
|
238
|
+
elif directive == "process":
|
|
239
|
+
# Initialize the inflect engine
|
|
240
|
+
inflector = engine()
|
|
241
|
+
|
|
242
|
+
# Split the object_type into words
|
|
243
|
+
object_type_parts = object_type.split()
|
|
244
|
+
|
|
245
|
+
# Determine which word to singularize (third word if present, otherwise fallback to last word)
|
|
246
|
+
if len(object_type_parts) >= 3:
|
|
247
|
+
word_to_singularize = object_type_parts[2]
|
|
248
|
+
else:
|
|
249
|
+
word_to_singularize = object_type_parts[-1] # Fallback to last word
|
|
250
|
+
|
|
251
|
+
# Singularize the selected word
|
|
252
|
+
singular_word = inflector.singular_noun(word_to_singularize) or word_to_singularize
|
|
253
|
+
|
|
254
|
+
# Construct gov_peer_relationship_type
|
|
255
|
+
gov_peer_relationship_type = f"Governance{singular_word}Link"
|
|
256
|
+
|
|
257
|
+
try:
|
|
258
|
+
if object_action == "Detach":
|
|
259
|
+
if not exists:
|
|
260
|
+
msg = (f" Link `{label}` does not exist! Updating result document with Link "
|
|
261
|
+
f"object_action\n")
|
|
262
|
+
logger.error(msg)
|
|
263
|
+
out = parsed_output['display'].replace('Link', 'Detach', 1)
|
|
264
|
+
return out
|
|
265
|
+
elif not valid:
|
|
266
|
+
return None
|
|
267
|
+
else:
|
|
268
|
+
print(Markdown(
|
|
269
|
+
f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
|
|
270
|
+
body = set_delete_request_body(object_type, attributes)
|
|
271
|
+
|
|
272
|
+
egeria_client.detach_peer_definitions(definition1, gov_peer_relationship_type,
|
|
273
|
+
definition2, body)
|
|
274
|
+
|
|
275
|
+
logger.success(f"===> Detached segment with {label} from `{definition1}`to {definition2}\n")
|
|
276
|
+
out = parsed_output['display'].replace('Unlink', 'Link', 1)
|
|
277
|
+
|
|
278
|
+
return (out)
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
elif object_action == "Link":
|
|
282
|
+
if valid is False and exists:
|
|
283
|
+
msg = (f"--> Link called `{label}` already exists and result document updated changing "
|
|
284
|
+
f"`Link` to `Detach` in processed output\n")
|
|
285
|
+
logger.error(msg)
|
|
286
|
+
|
|
287
|
+
elif valid is False:
|
|
288
|
+
msg = f"==>{object_type} Link with label `{label}` is not valid and can't be created"
|
|
289
|
+
logger.error(msg)
|
|
290
|
+
return
|
|
291
|
+
|
|
292
|
+
else:
|
|
293
|
+
body = set_peer_gov_def_request_body(object_type, attributes)
|
|
294
|
+
egeria_client.link_peer_definitions(definition1, gov_peer_relationship_type,
|
|
295
|
+
definition2, body)
|
|
296
|
+
msg = f"==>Created {object_type} link named `{label}`\n"
|
|
297
|
+
logger.success(msg)
|
|
298
|
+
out = parsed_output['display'].replace('Link', 'Detach', 1)
|
|
299
|
+
return out
|
|
300
|
+
|
|
301
|
+
except ValidationError as e:
|
|
302
|
+
print_validation_error(e)
|
|
303
|
+
logger.error(f"Validation Error performing {command}: {e}")
|
|
304
|
+
return None
|
|
305
|
+
except PyegeriaException as e:
|
|
306
|
+
print_basic_exception(e)
|
|
307
|
+
logger.error(f"PyegeriaException occurred: {e}")
|
|
308
|
+
return None
|
|
309
|
+
|
|
310
|
+
except Exception as e:
|
|
311
|
+
logger.error(f"Error performing {command}: {e}")
|
|
312
|
+
return None
|
|
313
|
+
else:
|
|
314
|
+
return None
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
@logger.catch
|
|
318
|
+
def process_supporting_gov_def_link_detach_command(egeria_client: EgeriaTech, txt: str,
|
|
319
|
+
directive: str = "display") -> Optional[str]:
|
|
320
|
+
"""
|
|
321
|
+
Processes a link or unlink command to associate or break up peer governance definitions.
|
|
322
|
+
|
|
323
|
+
:param txt: A string representing the input cell to be processed for
|
|
324
|
+
extracting blueprint-related attributes.
|
|
325
|
+
:param directive: an optional string indicating the directive to be used - display, validate or execute
|
|
326
|
+
:return: A string summarizing the outcome of the processing.
|
|
327
|
+
"""
|
|
328
|
+
command, object_type, object_action = extract_command_plus(txt)
|
|
329
|
+
print(Markdown(f"# {command}\n"))
|
|
330
|
+
|
|
331
|
+
parsed_output = parse_view_command(egeria_client, object_type, object_action, txt, directive)
|
|
332
|
+
|
|
333
|
+
print(Markdown(parsed_output['display']))
|
|
334
|
+
|
|
335
|
+
logger.debug(json.dumps(parsed_output, indent=4))
|
|
336
|
+
|
|
337
|
+
attributes = parsed_output['attributes']
|
|
338
|
+
|
|
339
|
+
definition1 = attributes.get('Definition 1', {}).get('guid', None)
|
|
340
|
+
definition2 = attributes.get('Definition 2', {}).get('guid', None)
|
|
341
|
+
label = attributes.get('Link Label', {}).get('value', None)
|
|
342
|
+
description = attributes.get('Description', {}).get('value', None)
|
|
343
|
+
|
|
344
|
+
valid = parsed_output['valid']
|
|
345
|
+
exists = definition1 is not None and definition2 is not None
|
|
346
|
+
|
|
347
|
+
if directive == "display":
|
|
348
|
+
|
|
349
|
+
return None
|
|
350
|
+
elif directive == "validate":
|
|
351
|
+
if valid:
|
|
352
|
+
print(Markdown(f"==> Validation of {command} completed successfully!\n"))
|
|
353
|
+
else:
|
|
354
|
+
msg = f"Validation failed for object_action `{command}`\n"
|
|
355
|
+
return valid
|
|
356
|
+
|
|
357
|
+
elif directive == "process":
|
|
358
|
+
|
|
359
|
+
# Construct gov_peer_relationship_type
|
|
360
|
+
relationship_type_name = object_type.replace(' ', '')
|
|
361
|
+
print(f"relationship_type_name: {relationship_type_name}")
|
|
362
|
+
try:
|
|
363
|
+
if object_action == "Detach":
|
|
364
|
+
if not exists:
|
|
365
|
+
msg = (f" Link `{label}` does not exist! Updating result document with Link "
|
|
366
|
+
f"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_supporting_definitions(definition1, relationship_type_name,
|
|
378
|
+
definition2, body)
|
|
379
|
+
|
|
380
|
+
logger.success(f"===> Detached segment with {label} from `{definition1}`to {definition2}\n")
|
|
381
|
+
out = parsed_output['display'].replace('Unlink', 'Link', 1)
|
|
382
|
+
|
|
383
|
+
return (out)
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
elif object_action == "Link":
|
|
387
|
+
if valid is False and exists:
|
|
388
|
+
msg = (f"--> Link called `{label}` already exists and result document updated changing "
|
|
389
|
+
f"`Link` to `Detach` in processed output\n")
|
|
390
|
+
logger.error(msg)
|
|
391
|
+
|
|
392
|
+
elif valid is False:
|
|
393
|
+
msg = f"==>{object_type} Link with label `{label}` is not valid and can't be created"
|
|
394
|
+
logger.error(msg)
|
|
395
|
+
return
|
|
396
|
+
|
|
397
|
+
else:
|
|
398
|
+
body_prop = {
|
|
399
|
+
"class": "SupportingDefinitionProperties",
|
|
400
|
+
"rationale": attributes.get('Rationale', {}).get('value', None),
|
|
401
|
+
"effectiveFrom": attributes.get('Effective From', {}).get('value', None),
|
|
402
|
+
"effectiveTo": attributes.get('Effective To', {}).get('value', None),
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
body = set_peer_gov_def_request_body(object_type, attributes)
|
|
406
|
+
body['properties'] = body_prop
|
|
407
|
+
egeria_client.attach_supporting_definitions(definition1, relationship_type_name,
|
|
408
|
+
definition2, body)
|
|
409
|
+
msg = f"==>Created {object_type} link named `{label}`\n"
|
|
410
|
+
logger.success(msg)
|
|
411
|
+
out = parsed_output['display'].replace('Link', 'Detach', 1)
|
|
412
|
+
return out
|
|
413
|
+
|
|
414
|
+
except ValidationError as e:
|
|
415
|
+
print_validation_error(e)
|
|
416
|
+
logger.error(f"Validation Error performing {command}: {e}")
|
|
417
|
+
return None
|
|
418
|
+
except PyegeriaException as e:
|
|
419
|
+
print_basic_exception(e)
|
|
420
|
+
logger.error(f"PyegeriaException occurred: {e}")
|
|
421
|
+
return None
|
|
422
|
+
|
|
423
|
+
except Exception as e:
|
|
424
|
+
logger.error(f"Error performing {command}: {e}")
|
|
425
|
+
return None
|
|
426
|
+
else:
|
|
427
|
+
return None
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
|
|
431
|
+
@logger.catch
|
|
432
|
+
def process_governed_by_link_detach_command(egeria_client: EgeriaTech, txt: str,
|
|
433
|
+
directive: str = "display") -> Optional[str]:
|
|
434
|
+
"""
|
|
435
|
+
Processes a link or unlink command to associate or break up peer governance definitions.
|
|
436
|
+
|
|
437
|
+
:param txt: A string representing the input cell to be processed for
|
|
438
|
+
extracting blueprint-related attributes.
|
|
439
|
+
:param directive: an optional string indicating the directive to be used - display, validate or execute
|
|
440
|
+
:return: A string summarizing the outcome of the processing.
|
|
441
|
+
"""
|
|
442
|
+
command, object_type, object_action = extract_command_plus(txt)
|
|
443
|
+
print(Markdown(f"# {command}\n"))
|
|
444
|
+
|
|
445
|
+
parsed_output = parse_view_command(egeria_client, object_type, object_action, txt, directive)
|
|
446
|
+
|
|
447
|
+
print(Markdown(parsed_output['display']))
|
|
448
|
+
|
|
449
|
+
logger.debug(json.dumps(parsed_output, indent=4))
|
|
450
|
+
|
|
451
|
+
attributes = parsed_output['attributes']
|
|
452
|
+
|
|
453
|
+
element_guid = attributes.get('Referenceable', {}).get('guid', None)
|
|
454
|
+
definition_guid = attributes.get('Governance Definition', {}).get('guid', None)
|
|
455
|
+
label = attributes.get('Link Label', {}).get('value', None)
|
|
456
|
+
description = attributes.get('Description', {}).get('value', None)
|
|
457
|
+
|
|
458
|
+
valid = parsed_output['valid']
|
|
459
|
+
exists = element_guid is not None and definition_guid is not None
|
|
460
|
+
|
|
461
|
+
if directive == "display":
|
|
462
|
+
|
|
463
|
+
return None
|
|
464
|
+
elif directive == "validate":
|
|
465
|
+
if valid:
|
|
466
|
+
print(Markdown(f"==> Validation of {command} completed successfully!\n"))
|
|
467
|
+
else:
|
|
468
|
+
msg = f"Validation failed for object_action `{command}`\n"
|
|
469
|
+
return valid
|
|
470
|
+
|
|
471
|
+
elif directive == "process":
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
try:
|
|
475
|
+
if object_action == "Detach":
|
|
476
|
+
if not exists:
|
|
477
|
+
msg = (f" Link `{label}` does not exist! Updating result document with Link "
|
|
478
|
+
f"object_action\n")
|
|
479
|
+
logger.error(msg)
|
|
480
|
+
out = parsed_output['display'].replace('Link', 'Detach', 1)
|
|
481
|
+
return out
|
|
482
|
+
elif not valid:
|
|
483
|
+
return None
|
|
484
|
+
else:
|
|
485
|
+
print(Markdown(
|
|
486
|
+
f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
|
|
487
|
+
body = set_delete_request_body(object_type, attributes)
|
|
488
|
+
|
|
489
|
+
egeria_client.detach_governed_by_definitions(element_guid, definition_guid, body)
|
|
490
|
+
|
|
491
|
+
logger.success(f"===> Detached segment with {label} from `{definition1}`to {definition2}\n")
|
|
492
|
+
out = parsed_output['display'].replace('Unlink', 'Link', 1)
|
|
493
|
+
|
|
494
|
+
return (out)
|
|
495
|
+
|
|
496
|
+
|
|
497
|
+
elif object_action == "Link":
|
|
498
|
+
if valid is False and exists:
|
|
499
|
+
msg = (f"--> Link called `{label}` already exists and result document updated changing "
|
|
500
|
+
f"`Link` to `Detach` in processed output\n")
|
|
501
|
+
logger.error(msg)
|
|
502
|
+
|
|
503
|
+
elif valid is False:
|
|
504
|
+
msg = f"==>{object_type} Link with label `{label}` is not valid and can't be created"
|
|
505
|
+
logger.error(msg)
|
|
506
|
+
return
|
|
507
|
+
|
|
508
|
+
else:
|
|
509
|
+
body_prop = set_rel_prop_body(object_type, attributes)
|
|
510
|
+
|
|
511
|
+
body = set_rel_request_body(object_type, attributes)
|
|
512
|
+
body['properties'] = body_prop
|
|
513
|
+
body = body_slimmer(body)
|
|
514
|
+
egeria_client.attach_governed_by_definition(element_guid, definition_guid, body)
|
|
515
|
+
msg = f"==>Created {object_type} link named `{label}`\n"
|
|
516
|
+
logger.success(msg)
|
|
517
|
+
out = parsed_output['display'].replace('Link', 'Detach', 1)
|
|
518
|
+
return out
|
|
519
|
+
|
|
520
|
+
except ValidationError as e:
|
|
521
|
+
print_validation_error(e)
|
|
522
|
+
logger.error(f"Validation Error performing {command}: {e}")
|
|
523
|
+
return None
|
|
524
|
+
except PyegeriaException as e:
|
|
525
|
+
print_basic_exception(e)
|
|
526
|
+
logger.error(f"PyegeriaException occurred: {e}")
|
|
527
|
+
return None
|
|
528
|
+
|
|
529
|
+
except Exception as e:
|
|
530
|
+
logger.error(f"Error performing {command}: {e}")
|
|
531
|
+
return None
|
|
532
|
+
else:
|
|
533
|
+
return None
|
|
534
|
+
|
|
535
|
+
|
|
536
|
+
|
|
537
|
+
@logger.catch
|
|
538
|
+
def process_gov_def_context_command(egeria_client: EgeriaTech, txt: str,
|
|
539
|
+
directive: str = "display") -> Optional[str]:
|
|
540
|
+
"""
|
|
541
|
+
Retrieves the context graph for a governance definition.
|
|
542
|
+
|
|
543
|
+
:param txt: A string representing the input cell to be processed for
|
|
544
|
+
extracting term-related attributes.
|
|
545
|
+
:param directive: an optional string indicating the directive to be used - display, validate or execute
|
|
546
|
+
:return: A string summarizing the outcome of the processing.
|
|
547
|
+
"""
|
|
548
|
+
command, object_type, object_action = extract_command_plus(txt)
|
|
549
|
+
print(Markdown(f"# {command}\n"))
|
|
550
|
+
|
|
551
|
+
parsed_output = parse_view_command(egeria_client, object_type, object_action, txt, directive)
|
|
552
|
+
|
|
553
|
+
valid = parsed_output['valid']
|
|
554
|
+
exists = parsed_output['exists']
|
|
555
|
+
qualified_name = parsed_output.get('qualified_name', None)
|
|
556
|
+
display_name = parsed_output.get('display_name', None)
|
|
557
|
+
guid = parsed_output.get('guid', None)
|
|
558
|
+
|
|
559
|
+
print(Markdown(parsed_output['display']))
|
|
560
|
+
|
|
561
|
+
attr = parsed_output.get('attributes', {})
|
|
562
|
+
|
|
563
|
+
output_format = attr.get('Output Format', {}).get('value', 'LIST')
|
|
564
|
+
detailed = attr.get('Detailed', {}).get('value', False)
|
|
565
|
+
|
|
566
|
+
if directive == "display":
|
|
567
|
+
return None
|
|
568
|
+
elif directive == "validate":
|
|
569
|
+
if valid:
|
|
570
|
+
print(Markdown(f"==> Validation of {command} completed successfully!\n"))
|
|
571
|
+
else:
|
|
572
|
+
msg = f"Validation failed for object_action `{command}`\n"
|
|
573
|
+
logger.error(msg)
|
|
574
|
+
return valid
|
|
575
|
+
|
|
576
|
+
elif directive == "process":
|
|
577
|
+
try:
|
|
578
|
+
if not valid: # First validate the command before we process it
|
|
579
|
+
msg = f"Validation failed for {object_action} `{object_type}`\n"
|
|
580
|
+
logger.error(msg)
|
|
581
|
+
return None
|
|
582
|
+
|
|
583
|
+
list_md = f"\n# `{object_type}` with Qualified Name: `{qualified_name}`\n\n"
|
|
584
|
+
body = set_update_body(object_type, attr)
|
|
585
|
+
|
|
586
|
+
struct = egeria_client.get_gov_def_in_context(guid, body=body, output_format=output_format)
|
|
587
|
+
if output_format.upper() == "DICT":
|
|
588
|
+
list_md += f"```\n{json.dumps(struct, indent=4)}\n```\n"
|
|
589
|
+
else:
|
|
590
|
+
list_md += struct
|
|
591
|
+
logger.info(f"Wrote `{object_type}` graph for : `{qualified_name}`")
|
|
592
|
+
|
|
593
|
+
return list_md
|
|
594
|
+
|
|
595
|
+
except Exception as e:
|
|
596
|
+
logger.error(f"Error performing {command}: {e}")
|
|
597
|
+
console.print_exception(show_locals=True)
|
|
598
|
+
return None
|
|
599
|
+
else:
|
|
600
|
+
return None
|