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,315 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Copyright Contributors to the ODPi Egeria project.
|
|
5
|
+
|
|
6
|
+
Display the status of cataloged platforms and servers.
|
|
7
|
+
"""
|
|
8
|
+
import argparse
|
|
9
|
+
import os
|
|
10
|
+
import sys
|
|
11
|
+
|
|
12
|
+
from rich import print
|
|
13
|
+
from rich.console import Console
|
|
14
|
+
from rich.markdown import Markdown
|
|
15
|
+
from rich.panel import Panel
|
|
16
|
+
from rich.prompt import Prompt
|
|
17
|
+
from rich.tree import Tree
|
|
18
|
+
|
|
19
|
+
from pyegeria import (
|
|
20
|
+
AssetCatalog,
|
|
21
|
+
PyegeriaAPIException, PyegeriaClientException, print_basic_exception, print_exception_table UserNotAuthorizedException, PyegeriaException,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
|
|
25
|
+
EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
|
|
26
|
+
EGERIA_PLATFORM_URL = os.environ.get("EGERIA_PLATFORM_URL", "https://localhost:9443")
|
|
27
|
+
EGERIA_VIEW_SERVER = os.environ.get("EGERIA_VIEW_SERVER", "view-server")
|
|
28
|
+
EGERIA_VIEW_SERVER_URL = os.environ.get(
|
|
29
|
+
"EGERIA_VIEW_SERVER_URL", "https://localhost:9443"
|
|
30
|
+
)
|
|
31
|
+
EGERIA_INTEGRATION_DAEMON = os.environ.get("EGERIA_INTEGRATION_DAEMON", "integration-daemon")
|
|
32
|
+
EGERIA_INTEGRATION_DAEMON_URL = os.environ.get(
|
|
33
|
+
"EGERIA_INTEGRATION_DAEMON_URL", "https://localhost:9443"
|
|
34
|
+
)
|
|
35
|
+
EGERIA_ADMIN_USER = os.environ.get("ADMIN_USER", "garygeeke")
|
|
36
|
+
EGERIA_ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "secret")
|
|
37
|
+
EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
|
|
38
|
+
EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
|
|
39
|
+
EGERIA_JUPYTER = bool(os.environ.get("EGERIA_JUPYTER", "False"))
|
|
40
|
+
EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "200"))
|
|
41
|
+
|
|
42
|
+
disable_ssl_warnings = True
|
|
43
|
+
|
|
44
|
+
guid_list = []
|
|
45
|
+
|
|
46
|
+
console = Console(width=EGERIA_WIDTH, force_terminal=(not EGERIA_JUPYTER))
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def asset_viewer(
|
|
50
|
+
asset_guid: str,
|
|
51
|
+
server_name: str,
|
|
52
|
+
platform_url: str,
|
|
53
|
+
user: str,
|
|
54
|
+
user_pass: str,
|
|
55
|
+
jupyter: bool = EGERIA_JUPYTER,
|
|
56
|
+
width: int = EGERIA_WIDTH,
|
|
57
|
+
):
|
|
58
|
+
def build_classifications(classification: dict) -> Markdown:
|
|
59
|
+
class_md = ""
|
|
60
|
+
for c in classification:
|
|
61
|
+
c_type = c["classificationName"]
|
|
62
|
+
if c_type == "Anchors":
|
|
63
|
+
continue
|
|
64
|
+
class_md += f"\n* Classification: {c_type}\n"
|
|
65
|
+
class_props = c.get("classificationProperties", "---")
|
|
66
|
+
if type(class_props) is dict:
|
|
67
|
+
for prop in class_props.keys():
|
|
68
|
+
class_md += f"\t* {prop}: {class_props[prop]}\n"
|
|
69
|
+
if class_md == "":
|
|
70
|
+
output = None
|
|
71
|
+
else:
|
|
72
|
+
output = class_md
|
|
73
|
+
return output
|
|
74
|
+
|
|
75
|
+
def build_nested_elements(nested_element: dict) -> Markdown:
|
|
76
|
+
ne_md = " "
|
|
77
|
+
ne_header = nested_element["elementHeader"]
|
|
78
|
+
ne_created_by = ne_header["versions"]["createdBy"]
|
|
79
|
+
ne_created_at = ne_header["versions"]["createTime"]
|
|
80
|
+
ne_guid = ne_header["guid"]
|
|
81
|
+
guid_list.append(ne_guid)
|
|
82
|
+
|
|
83
|
+
ne_type = ne_header["type"]["typeName"]
|
|
84
|
+
ne_classifications = ne_header["classifications"]
|
|
85
|
+
ne_class_md = build_classifications(ne_classifications)
|
|
86
|
+
# ne_class_md = " " if ne_class_md is None else ne_class_md
|
|
87
|
+
ne_props = nested_element.get("properties", "---")
|
|
88
|
+
ne_prop_md = "\n"
|
|
89
|
+
if type(ne_props) is dict:
|
|
90
|
+
for prop in ne_props.keys():
|
|
91
|
+
ne_prop_md += f"\t* {prop}: {ne_props[prop]}\n"
|
|
92
|
+
ne_md = (
|
|
93
|
+
f"Nested Element of Type: {ne_type} with GUID: {ne_guid} \n "
|
|
94
|
+
f"* created by {ne_created_by} at time {ne_created_at}\n"
|
|
95
|
+
f"\n* Properties:\n{ne_prop_md}\n"
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
if ne_class_md is not None:
|
|
99
|
+
ne_md += f"* {ne_class_md}"
|
|
100
|
+
|
|
101
|
+
output = Markdown(ne_md)
|
|
102
|
+
return output
|
|
103
|
+
|
|
104
|
+
try:
|
|
105
|
+
a_client = AssetCatalog(server_name, platform_url, user_id=user)
|
|
106
|
+
|
|
107
|
+
token = a_client.create_egeria_bearer_token(user, user_pass)
|
|
108
|
+
# asset_info = a_client.find_assets_in_domain(asset_name)
|
|
109
|
+
# if type(asset_info) is str:
|
|
110
|
+
# print("\n No Assets Found - Exiting\n")
|
|
111
|
+
# sys.exit(1)
|
|
112
|
+
#
|
|
113
|
+
# asset_guid = asset_info[0]['guid']
|
|
114
|
+
|
|
115
|
+
guid_list.append(asset_guid)
|
|
116
|
+
|
|
117
|
+
asset_graph = a_client.get_asset_graph(asset_guid, output_format="JSON")
|
|
118
|
+
if type(asset_graph) is not dict:
|
|
119
|
+
print(f"\n No Asset found for {asset_guid}")
|
|
120
|
+
sys.exit(1)
|
|
121
|
+
|
|
122
|
+
# print(f"\n{json.dumps(asset_graph, indent =2)}\n")
|
|
123
|
+
|
|
124
|
+
asset_display_name = asset_graph["properties"].get("displayName", "---")
|
|
125
|
+
asset_display_description = asset_graph["properties"].get(
|
|
126
|
+
"displayDescription", "---"
|
|
127
|
+
)
|
|
128
|
+
asset_name = asset_graph["properties"].get("name", "---")
|
|
129
|
+
asset_resource_name = asset_graph["properties"].get("resourceName", "---")
|
|
130
|
+
asset_resource_description = asset_graph["properties"].get(
|
|
131
|
+
"resourceDescription", "---"
|
|
132
|
+
)
|
|
133
|
+
qualified_name = asset_graph["properties"].get("qualifiedName", "---")
|
|
134
|
+
|
|
135
|
+
tree = Tree(
|
|
136
|
+
f"{asset_name} ({asset_guid})",
|
|
137
|
+
style="bold bright_white on black",
|
|
138
|
+
guide_style="bold bright_blue",
|
|
139
|
+
)
|
|
140
|
+
style = ""
|
|
141
|
+
asset_elements = asset_graph["elementHeader"]
|
|
142
|
+
asset_type = asset_elements["type"]["typeName"]
|
|
143
|
+
asset_deployed_imp_type = asset_graph["properties"].get(
|
|
144
|
+
"deployedImplementationType", "---"
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
asset_origin = asset_elements["origin"]["homeMetadataCollectionName"]
|
|
148
|
+
asset_creation = asset_elements["versions"]["createTime"]
|
|
149
|
+
asset_created_by = asset_elements["versions"]["createdBy"]
|
|
150
|
+
asset_classifications = asset_elements["classifications"]
|
|
151
|
+
asset_nested_elements = asset_graph.get("anchoredElements", "----")
|
|
152
|
+
asset_relationships = asset_graph["relationships"]
|
|
153
|
+
asset_class_md = build_classifications(asset_classifications)
|
|
154
|
+
|
|
155
|
+
additional_properties = asset_graph["properties"].get(
|
|
156
|
+
"additionalProperties", None
|
|
157
|
+
)
|
|
158
|
+
if additional_properties is not None:
|
|
159
|
+
add_prop_md = "\n* Additional Properties:\n"
|
|
160
|
+
for prop in additional_properties:
|
|
161
|
+
add_prop_md = (
|
|
162
|
+
f"{add_prop_md}\n\t* {prop}: {additional_properties[prop]}\n"
|
|
163
|
+
)
|
|
164
|
+
else:
|
|
165
|
+
add_prop_md = ""
|
|
166
|
+
|
|
167
|
+
extended_properties = asset_graph["properties"].get("extendedProperties", None)
|
|
168
|
+
if extended_properties is not None:
|
|
169
|
+
prop_md = "\n* Extended Properties:\n"
|
|
170
|
+
for prop in extended_properties:
|
|
171
|
+
prop_md = f"{prop_md}\n\t* {prop}: {extended_properties[prop]}\n"
|
|
172
|
+
else:
|
|
173
|
+
prop_md = ""
|
|
174
|
+
core_md = (
|
|
175
|
+
f"**Type: {asset_type} Created by: {asset_created_by} on {asset_creation}**\n"
|
|
176
|
+
f"* Deployed Implementation Type: {asset_deployed_imp_type}\n"
|
|
177
|
+
f"* Name: {asset_name}\n "
|
|
178
|
+
f"* Asset Resource Name: {asset_resource_name}\n"
|
|
179
|
+
f"* Asset Resource Description: {asset_resource_description}\n "
|
|
180
|
+
f"* Asset Display Name: {asset_display_name}\n"
|
|
181
|
+
f"* Asset Display Description: {asset_display_description}\n "
|
|
182
|
+
f"* Qualified Name: {qualified_name}\n "
|
|
183
|
+
f"* Asset Origin: {asset_origin}\n"
|
|
184
|
+
f" {prop_md}\n"
|
|
185
|
+
f" {add_prop_md}\n"
|
|
186
|
+
)
|
|
187
|
+
core_md = Markdown(core_md)
|
|
188
|
+
|
|
189
|
+
p1 = Panel.fit(core_md, style="bold bright_white")
|
|
190
|
+
l2 = tree.add(p1)
|
|
191
|
+
if asset_class_md is not None:
|
|
192
|
+
p2 = Panel.fit(
|
|
193
|
+
Markdown(asset_class_md),
|
|
194
|
+
style="bold bright_white",
|
|
195
|
+
title="Classifications",
|
|
196
|
+
)
|
|
197
|
+
l2 = tree.add(p2)
|
|
198
|
+
|
|
199
|
+
#
|
|
200
|
+
# Nested Assets
|
|
201
|
+
#
|
|
202
|
+
if type(asset_nested_elements) is list:
|
|
203
|
+
l2 = tree.add("Nested Elements", style="bold white")
|
|
204
|
+
for el in asset_nested_elements:
|
|
205
|
+
asset_ne_md = build_nested_elements(el)
|
|
206
|
+
p3 = Panel.fit(
|
|
207
|
+
asset_ne_md, style="bold bright_white", title="Nested Elements"
|
|
208
|
+
)
|
|
209
|
+
l2.add(p3)
|
|
210
|
+
|
|
211
|
+
#
|
|
212
|
+
# Now work on the Relationships
|
|
213
|
+
#
|
|
214
|
+
for relationship in asset_relationships:
|
|
215
|
+
# Find the end guids - if one isn't in our list then display
|
|
216
|
+
rel_end1 = relationship["end1"]
|
|
217
|
+
rel_end1_type = rel_end1["type"]["typeName"]
|
|
218
|
+
rel_end1_guid = rel_end1["guid"]
|
|
219
|
+
rel_end1_unique_name = rel_end1.get("uniqueName", "---")
|
|
220
|
+
|
|
221
|
+
rel_end2 = relationship["end2"]
|
|
222
|
+
rel_end2_type = rel_end2["type"]["typeName"]
|
|
223
|
+
rel_end2_guid = rel_end2["guid"]
|
|
224
|
+
rel_end2_unique_name = rel_end2.get("uniqueName", "---")
|
|
225
|
+
|
|
226
|
+
if (rel_end1_guid not in guid_list) or (rel_end2_guid not in guid_list):
|
|
227
|
+
# rel_end1_class_md = build_classifications(rel_end1["classifications"])
|
|
228
|
+
# rel_end2_class_md = build_classifications(rel_end2["classifications"])
|
|
229
|
+
|
|
230
|
+
relationship_guid = relationship["guid"]
|
|
231
|
+
relationship_type = relationship["type"]["typeName"]
|
|
232
|
+
relationship_created_by = relationship["versions"]["createdBy"]
|
|
233
|
+
relationship_creation_time = relationship["versions"]["createTime"]
|
|
234
|
+
relationship_properties = relationship.get("properties", "--- ")
|
|
235
|
+
relationship_md = (
|
|
236
|
+
f"Relationship Type {relationship_type}\n"
|
|
237
|
+
f"* GUID: {relationship_guid}\n* Created by: {relationship_created_by} \n"
|
|
238
|
+
f"* Creation Time: {relationship_creation_time}\n"
|
|
239
|
+
f"* Properties: {relationship_properties}\n"
|
|
240
|
+
)
|
|
241
|
+
|
|
242
|
+
rel_md = (
|
|
243
|
+
f"* Relationship Type: {relationship_type}\n"
|
|
244
|
+
f"* Relationship GUID: {relationship_guid}\n"
|
|
245
|
+
f"* Created by: {relationship_created_by} at time {relationship_creation_time}\n"
|
|
246
|
+
)
|
|
247
|
+
rel_end1_md = (
|
|
248
|
+
f"* End1:\n"
|
|
249
|
+
f"\t* Type: {rel_end1_type}\n"
|
|
250
|
+
f"\t* GUID: {rel_end1_guid}\n"
|
|
251
|
+
f"\t* Unique Name: {rel_end1_unique_name}\n"
|
|
252
|
+
)
|
|
253
|
+
|
|
254
|
+
# if rel_end1_class_md is not None:
|
|
255
|
+
# rel_end1_md = rel_end1_class_md + rel_end1_md
|
|
256
|
+
|
|
257
|
+
rel_end2_md = (
|
|
258
|
+
f"* End2:\n"
|
|
259
|
+
f"\t* Type: {rel_end2_type}\n"
|
|
260
|
+
f"\t* GUID: {rel_end2_guid}\n"
|
|
261
|
+
f"\t* Unique Name: {rel_end2_unique_name}\n"
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
# if rel_end2_class_md is not None:
|
|
265
|
+
# rel_end1_md = rel_end2_class_md + rel_end1_md
|
|
266
|
+
#
|
|
267
|
+
# for prop in relationship_properties.keys():
|
|
268
|
+
# relationship_md += f"* {prop}: {relationship_properties[prop]}\n"
|
|
269
|
+
|
|
270
|
+
relationship_md += rel_end1_md + rel_end2_md
|
|
271
|
+
|
|
272
|
+
relationship_panel = Panel.fit(
|
|
273
|
+
Markdown(relationship_md),
|
|
274
|
+
style="bold bright_white",
|
|
275
|
+
title="Asset Relationships",
|
|
276
|
+
)
|
|
277
|
+
tree.add(relationship_panel)
|
|
278
|
+
with console.screen():
|
|
279
|
+
print("\n\n")
|
|
280
|
+
print(tree)
|
|
281
|
+
|
|
282
|
+
except (
|
|
283
|
+
PyegeriaException
|
|
284
|
+
) as e:
|
|
285
|
+
console.print_exception()
|
|
286
|
+
console.print(
|
|
287
|
+
"\n\n ======> Most likely the GUID you provided is either incorrect or not an asset\n[red bold]"
|
|
288
|
+
)
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
def main():
|
|
292
|
+
parser = argparse.ArgumentParser()
|
|
293
|
+
|
|
294
|
+
parser.add_argument("--server", help="Name of the server to display status for")
|
|
295
|
+
parser.add_argument("--url", help="URL Platform to connect to")
|
|
296
|
+
parser.add_argument("--userid", help="User Id")
|
|
297
|
+
parser.add_argument("--password", help="User Password")
|
|
298
|
+
args = parser.parse_args()
|
|
299
|
+
|
|
300
|
+
server = args.server if args.server is not None else EGERIA_VIEW_SERVER
|
|
301
|
+
url = args.url if args.url is not None else EGERIA_PLATFORM_URL
|
|
302
|
+
userid = args.userid if args.userid is not None else EGERIA_USER
|
|
303
|
+
user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
|
|
304
|
+
try:
|
|
305
|
+
asset_guid = Prompt.ask("Enter the Asset GUID to view:", default="")
|
|
306
|
+
asset_viewer(asset_guid, server, url, userid, user_pass)
|
|
307
|
+
except KeyboardInterrupt as e:
|
|
308
|
+
# console.print_exception()
|
|
309
|
+
pass
|
|
310
|
+
except Exception as e:
|
|
311
|
+
console.print_exception()
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
if __name__ == "__main__":
|
|
315
|
+
main()
|
commands/my/__init__.py
CHANGED
commands/my/list_my_profile.py
CHANGED
|
@@ -9,7 +9,6 @@ A simple display for my profile
|
|
|
9
9
|
import argparse
|
|
10
10
|
import os
|
|
11
11
|
import sys
|
|
12
|
-
import time
|
|
13
12
|
|
|
14
13
|
from rich import box, print
|
|
15
14
|
from rich.console import Console
|
|
@@ -18,13 +17,8 @@ from rich.panel import Panel
|
|
|
18
17
|
from rich.table import Table
|
|
19
18
|
from rich.tree import Tree
|
|
20
19
|
|
|
21
|
-
from pyegeria import
|
|
22
|
-
|
|
23
|
-
PropertyServerException,
|
|
24
|
-
UserNotAuthorizedException,
|
|
25
|
-
print_exception_response,
|
|
26
|
-
)
|
|
27
|
-
from pyegeria.my_profile_omvs import MyProfile
|
|
20
|
+
from pyegeria import print_basic_exception, PyegeriaException
|
|
21
|
+
from pyegeria.omvs.my_profile import MyProfile
|
|
28
22
|
|
|
29
23
|
disable_ssl_warnings = True
|
|
30
24
|
EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
|
|
@@ -64,7 +58,7 @@ def display_my_profile(
|
|
|
64
58
|
|
|
65
59
|
console = Console(width=width, force_terminal=not jupyter, soft_wrap=True)
|
|
66
60
|
|
|
67
|
-
profile_props = my_profiles.get("
|
|
61
|
+
profile_props = my_profiles.get("properties", "---")
|
|
68
62
|
name = profile_props["fullName"]
|
|
69
63
|
|
|
70
64
|
tree = Tree(
|
|
@@ -93,14 +87,14 @@ def display_my_profile(
|
|
|
93
87
|
id_list_md = ""
|
|
94
88
|
for identities in my_profiles["userIdentities"]:
|
|
95
89
|
id_list_md += (
|
|
96
|
-
f"* {identities['
|
|
97
|
-
f"* {identities['
|
|
90
|
+
f"* {identities['relatedElement']['properties']['userId']}\n"
|
|
91
|
+
f"* {identities['relatedElement']['elementHeader']['guid']}\n"
|
|
98
92
|
)
|
|
99
93
|
t2 = tree.add(Panel(Markdown(id_list_md), title="Identities", expand=False))
|
|
100
94
|
|
|
101
|
-
contact_methods = my_profiles["
|
|
95
|
+
contact_methods = my_profiles["contactDetails"]
|
|
102
96
|
for method in contact_methods:
|
|
103
|
-
contact = method["properties"]
|
|
97
|
+
contact = method['relatedElement']["properties"]
|
|
104
98
|
contact_methods_md = ""
|
|
105
99
|
for key in contact.keys():
|
|
106
100
|
contact_methods_md += f"* {key}: {contact[key]}\n"
|
|
@@ -110,32 +104,31 @@ def display_my_profile(
|
|
|
110
104
|
)
|
|
111
105
|
)
|
|
112
106
|
|
|
113
|
-
my_roles = my_profiles
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
107
|
+
my_roles = my_profiles.get("performsRoles","No roles found")
|
|
108
|
+
if isinstance(my_roles, dict|list):
|
|
109
|
+
table = Table(
|
|
110
|
+
title=f" Roles of {name}",
|
|
111
|
+
show_lines=True,
|
|
112
|
+
box=box.ROUNDED,
|
|
113
|
+
expand=True,
|
|
114
|
+
)
|
|
115
|
+
table.add_column("Role Type")
|
|
116
|
+
table.add_column("Role")
|
|
117
|
+
table.add_column("Role GUID")
|
|
118
|
+
for a_role in my_roles:
|
|
119
|
+
my_role_props = a_role['relatedElement']["properties"]
|
|
120
|
+
role_type = my_role_props["typeName"]
|
|
121
|
+
role = my_role_props.get("displayName", " ")
|
|
122
|
+
role_guid = a_role['relatedElement']["elementHeader"]["guid"]
|
|
123
|
+
table.add_row(role_type, role, role_guid)
|
|
124
|
+
t4 = tree.add(Panel(table, title="Roles", expand=False), expanded=True)
|
|
130
125
|
|
|
131
126
|
print(tree)
|
|
132
127
|
|
|
133
128
|
except (
|
|
134
|
-
|
|
135
|
-
PropertyServerException,
|
|
136
|
-
UserNotAuthorizedException,
|
|
129
|
+
PyegeriaException,
|
|
137
130
|
) as e:
|
|
138
|
-
|
|
131
|
+
print_basic_exception(e)
|
|
139
132
|
finally:
|
|
140
133
|
m_client.close_session()
|
|
141
134
|
|
commands/my/list_my_roles.py
CHANGED
|
@@ -17,13 +17,7 @@ from rich import box
|
|
|
17
17
|
from rich.console import Console
|
|
18
18
|
from rich.table import Table
|
|
19
19
|
|
|
20
|
-
from pyegeria import
|
|
21
|
-
InvalidParameterException,
|
|
22
|
-
PropertyServerException,
|
|
23
|
-
UserNotAuthorizedException,
|
|
24
|
-
print_exception_response,
|
|
25
|
-
)
|
|
26
|
-
from pyegeria.my_profile_omvs import MyProfile
|
|
20
|
+
from pyegeria.omvs.my_profile import MyProfile
|
|
27
21
|
|
|
28
22
|
disable_ssl_warnings = True
|
|
29
23
|
EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
|
commands/my/monitor_my_todos.py
CHANGED
|
@@ -18,13 +18,7 @@ from rich.live import Live
|
|
|
18
18
|
from rich.markdown import Markdown
|
|
19
19
|
from rich.table import Table
|
|
20
20
|
|
|
21
|
-
from pyegeria import
|
|
22
|
-
InvalidParameterException,
|
|
23
|
-
PropertyServerException,
|
|
24
|
-
UserNotAuthorizedException,
|
|
25
|
-
print_exception_response,
|
|
26
|
-
)
|
|
27
|
-
from pyegeria.my_profile_omvs import MyProfile
|
|
21
|
+
from pyegeria.omvs.my_profile import MyProfile
|
|
28
22
|
|
|
29
23
|
EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
|
|
30
24
|
EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
|
|
@@ -20,13 +20,12 @@ from rich.markdown import Markdown
|
|
|
20
20
|
from rich.table import Table
|
|
21
21
|
|
|
22
22
|
from pyegeria import EgeriaTech
|
|
23
|
-
from pyegeria._exceptions import (
|
|
24
|
-
|
|
25
|
-
PropertyServerException,
|
|
26
|
-
UserNotAuthorizedException,
|
|
27
|
-
print_exception_response,
|
|
23
|
+
from pyegeria.core._exceptions import (
|
|
24
|
+
PyegeriaInvalidParameterException,
|
|
25
|
+
PyegeriaAPIException as PropertyServerException,
|
|
26
|
+
PyegeriaUnauthorizedException as UserNotAuthorizedException,
|
|
27
|
+
print_basic_exception as print_exception_response,
|
|
28
28
|
)
|
|
29
|
-
from pyegeria.my_profile_omvs import MyProfile
|
|
30
29
|
|
|
31
30
|
disable_ssl_warnings = True
|
|
32
31
|
|
|
@@ -145,7 +144,7 @@ def display_todos(
|
|
|
145
144
|
live.console.pager()
|
|
146
145
|
|
|
147
146
|
except (
|
|
148
|
-
|
|
147
|
+
PyegeriaInvalidParameterException,
|
|
149
148
|
PropertyServerException,
|
|
150
149
|
UserNotAuthorizedException,
|
|
151
150
|
) as e:
|
commands/my/todo_actions.py
CHANGED
|
@@ -15,10 +15,9 @@ from datetime import datetime
|
|
|
15
15
|
import click
|
|
16
16
|
|
|
17
17
|
from pyegeria import MyProfile
|
|
18
|
-
from pyegeria._exceptions import (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
print_exception_response,
|
|
18
|
+
from pyegeria.core._exceptions import (
|
|
19
|
+
PyegeriaAPIException as PropertyServerException,
|
|
20
|
+
print_basic_exception as print_exception_response,
|
|
22
21
|
)
|
|
23
22
|
|
|
24
23
|
erins_guid = "dcfd7e32-8074-4cdf-bdc5-9a6f28818a9d"
|
|
@@ -160,7 +159,7 @@ def delete_todo(server, url, userid, password, timeout, todo_guid):
|
|
|
160
159
|
@click.option("--timeout", default=60, help="Number of seconds to wait")
|
|
161
160
|
@click.option(
|
|
162
161
|
"--new-status",
|
|
163
|
-
|
|
162
|
+
type_name = click.Choice(
|
|
164
163
|
["OPEN", "IN_PROGRESS", "WAITING", "COMPLETE", "ABANDONED"],
|
|
165
164
|
case_sensitive="False",
|
|
166
165
|
),
|
commands/ops/__init__.py
CHANGED
|
@@ -8,18 +8,13 @@ This script restarts an integration daemon.
|
|
|
8
8
|
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
|
-
import os
|
|
12
|
-
|
|
13
11
|
import click
|
|
14
|
-
|
|
15
|
-
from
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
PropertyServerException,
|
|
21
|
-
UserNotAuthorizedException,
|
|
22
|
-
print_exception_response,
|
|
12
|
+
|
|
13
|
+
from pyegeria import AutomatedCuration, EgeriaTech
|
|
14
|
+
from pyegeria.core._exceptions import (
|
|
15
|
+
PyegeriaInvalidParameterException as PyegeriaInvalidParameterException,
|
|
16
|
+
PyegeriaAPIException as PyegeriaAPIException,
|
|
17
|
+
print_basic_exception as print_exception_response,
|
|
23
18
|
)
|
|
24
19
|
|
|
25
20
|
|
|
@@ -36,17 +31,18 @@ def add_catalog_target(
|
|
|
36
31
|
) -> str:
|
|
37
32
|
"""Add catalog targets to the specified integration connector"""
|
|
38
33
|
try:
|
|
39
|
-
if integration_connector not in INTEGRATION_GUIDS.keys():
|
|
40
|
-
click.echo("Integration connector is not known")
|
|
41
|
-
|
|
42
34
|
c = ctx.obj
|
|
43
35
|
a_client = AutomatedCuration(
|
|
44
36
|
c.view_server, c.view_server_url, c.userid, c.password
|
|
45
37
|
)
|
|
46
38
|
token = a_client.create_egeria_bearer_token()
|
|
47
39
|
|
|
40
|
+
integ_connector_guid = a_client.get_connector_guid(integration_connector)
|
|
41
|
+
if not integ_connector_guid or c.catalog_targets == 'No connector found':
|
|
42
|
+
raise PyegeriaInvalidParameterException('No Connector found')
|
|
43
|
+
|
|
48
44
|
guid = a_client.add_catalog_target(
|
|
49
|
-
|
|
45
|
+
integ_connector_guid,
|
|
50
46
|
metadata_element_guid,
|
|
51
47
|
catalog_target_name,
|
|
52
48
|
)
|
|
@@ -55,7 +51,7 @@ def add_catalog_target(
|
|
|
55
51
|
f"Added catalog target to {integration_connector} with a return guid of {guid}"
|
|
56
52
|
)
|
|
57
53
|
|
|
58
|
-
except (
|
|
54
|
+
except (PyegeriaInvalidParameterException, PyegeriaAPIException) as e:
|
|
59
55
|
print_exception_response(e)
|
|
60
56
|
|
|
61
57
|
|
|
@@ -77,7 +73,7 @@ def remove_catalog_target(ctx, relationship_guid: str):
|
|
|
77
73
|
f"Removed catalog target with relationship guid of {relationship_guid}"
|
|
78
74
|
)
|
|
79
75
|
|
|
80
|
-
except (
|
|
76
|
+
except (PyegeriaInvalidParameterException, PyegeriaAPIException) as e:
|
|
81
77
|
print_exception_response(e)
|
|
82
78
|
|
|
83
79
|
|
|
@@ -101,7 +97,7 @@ def update_catalog_target(ctx, relationship_guid: str, catalog_target_name: str)
|
|
|
101
97
|
f"{catalog_target_name} with a return guid of {guid}"
|
|
102
98
|
)
|
|
103
99
|
|
|
104
|
-
except (
|
|
100
|
+
except (PyegeriaInvalidParameterException, PyegeriaAPIException) as e:
|
|
105
101
|
print_exception_response(e)
|
|
106
102
|
|
|
107
103
|
|
|
@@ -121,7 +117,7 @@ def refresh_gov_eng_config(ctx, engine_host_guid: str):
|
|
|
121
117
|
|
|
122
118
|
click.echo(f"Refreshed server {c.engine_host}")
|
|
123
119
|
|
|
124
|
-
except (
|
|
120
|
+
except (PyegeriaInvalidParameterException, PyegeriaAPIException) as e:
|
|
125
121
|
print_exception_response(e)
|
|
126
122
|
finally:
|
|
127
123
|
p_client.close_session()
|
|
@@ -142,7 +138,7 @@ def start_server(ctx, server):
|
|
|
142
138
|
|
|
143
139
|
click.echo(f"Started server {server}")
|
|
144
140
|
|
|
145
|
-
except (
|
|
141
|
+
except (PyegeriaInvalidParameterException, PyegeriaAPIException) as e:
|
|
146
142
|
print_exception_response(e)
|
|
147
143
|
finally:
|
|
148
144
|
p_client.close_session()
|
|
@@ -172,7 +168,7 @@ def stop_server(ctx, server):
|
|
|
172
168
|
try:
|
|
173
169
|
p_client.shutdown_server(None, server)
|
|
174
170
|
click.echo(f"Stopped server {server}")
|
|
175
|
-
except (
|
|
171
|
+
except (PyegeriaInvalidParameterException, PyegeriaAPIException) as e:
|
|
176
172
|
print_exception_response(e)
|
|
177
173
|
finally:
|
|
178
174
|
p_client.close_session()
|