pyegeria 0.3.9__py3-none-any.whl → 0.4.1__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.
- pyegeria/Xfeedback_manager_omvs.py +2 -15
- pyegeria/__init__.py +11 -4
- pyegeria/_globals.py +3 -1
- pyegeria/{Xasset_catalog_omvs.py → asset_catalog_omvs.py} +242 -109
- pyegeria/automated_curation_omvs.py +324 -61
- pyegeria/core_guids.py +128 -0
- pyegeria/core_omag_server_config.py +1 -1
- pyegeria/{Xglossary_manager_omvs.py → glossary_manager_omvs.py} +70 -69
- pyegeria/runtime_manager_omvs.py +967 -0
- pyegeria/valid_metadata_omvs.py +193 -20
- pyegeria-0.4.1.data/scripts/get_guid_info.py +86 -0
- {pyegeria-0.3.9.data → pyegeria-0.4.1.data}/scripts/get_tech_details.py +1 -37
- pyegeria-0.4.1.data/scripts/get_tech_type_elements.py +137 -0
- pyegeria-0.4.1.data/scripts/get_tech_type_template.py +137 -0
- pyegeria-0.4.1.data/scripts/list_assets.py +138 -0
- pyegeria-0.3.9.data/scripts/project_list_viewer.py → pyegeria-0.4.1.data/scripts/list_projects.py +1 -1
- pyegeria-0.3.9.data/scripts/get_relationship_types.py → pyegeria-0.4.1.data/scripts/list_relationship_types.py +9 -8
- pyegeria-0.4.1.data/scripts/list_tech_templates.py +134 -0
- pyegeria-0.3.9.data/scripts/find_todos.py → pyegeria-0.4.1.data/scripts/list_todos.py +2 -1
- pyegeria-0.4.1.data/scripts/list_valid_metadata_values.py +144 -0
- pyegeria-0.4.1.data/scripts/view_asset_graph.py +245 -0
- pyegeria-0.3.9.data/scripts/coco_status.py → pyegeria-0.4.1.data/scripts/view_coco_status.py +10 -9
- pyegeria-0.3.9.data/scripts/engine_action_status.py → pyegeria-0.4.1.data/scripts/view_eng_action_status.py +8 -3
- pyegeria-0.4.1.data/scripts/view_integ_daemon_status.py +140 -0
- pyegeria-0.4.1.data/scripts/view_platform_status.py +123 -0
- {pyegeria-0.3.9.dist-info → pyegeria-0.4.1.dist-info}/METADATA +5 -2
- pyegeria-0.4.1.dist-info/RECORD +58 -0
- {pyegeria-0.3.9.dist-info → pyegeria-0.4.1.dist-info}/WHEEL +1 -1
- pyegeria-0.3.9.data/scripts/integration_daemon_status.py +0 -130
- pyegeria-0.3.9.data/scripts/multi-server_status.py +0 -120
- pyegeria-0.3.9.dist-info/RECORD +0 -49
- /pyegeria/{Xaction_author_omvs.py → action_author_omvs.py} +0 -0
- {pyegeria-0.3.9.data → pyegeria-0.4.1.data}/scripts/Create_Collection_Sample.py +0 -0
- {pyegeria-0.3.9.data → pyegeria-0.4.1.data}/scripts/Create_Sustainability_Collection_Sample.py +0 -0
- /pyegeria-0.3.9.data/scripts/view_my_profile.py → /pyegeria-0.4.1.data/scripts/get_my_profile.py +0 -0
- {pyegeria-0.3.9.data → pyegeria-0.4.1.data}/scripts/list_asset_types.py +0 -0
- /pyegeria-0.3.9.data/scripts/get_registered_services.py → /pyegeria-0.4.1.data/scripts/list_registered_services.py +0 -0
- /pyegeria-0.3.9.data/scripts/get_tech_types.py → /pyegeria-0.4.1.data/scripts/list_tech_types.py +0 -0
- /pyegeria-0.3.9.data/scripts/collection_viewer.py → /pyegeria-0.4.1.data/scripts/view_collection.py +0 -0
- /pyegeria-0.3.9.data/scripts/glossary_view.py → /pyegeria-0.4.1.data/scripts/view_glossary.py +0 -0
- /pyegeria-0.3.9.data/scripts/gov_engine_status.py → /pyegeria-0.4.1.data/scripts/view_gov_eng_status.py +0 -0
- /pyegeria-0.3.9.data/scripts/my_todos.py → /pyegeria-0.4.1.data/scripts/view_my_todos.py +0 -0
- /pyegeria-0.3.9.data/scripts/open_todos.py → /pyegeria-0.4.1.data/scripts/view_open_todos.py +0 -0
- /pyegeria-0.3.9.data/scripts/server_status_widget.py → /pyegeria-0.4.1.data/scripts/view_server_list.py +0 -0
- /pyegeria-0.3.9.data/scripts/server_status.py → /pyegeria-0.4.1.data/scripts/view_server_status.py +0 -0
- {pyegeria-0.3.9.dist-info → pyegeria-0.4.1.dist-info}/LICENSE +0 -0
- {pyegeria-0.3.9.dist-info → pyegeria-0.4.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,137 @@
|
|
1
|
+
#!python
|
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 sys
|
9
|
+
import time
|
10
|
+
import argparse
|
11
|
+
|
12
|
+
from rich import json
|
13
|
+
from rich.panel import Panel
|
14
|
+
|
15
|
+
from pyegeria import (
|
16
|
+
InvalidParameterException,
|
17
|
+
PropertyServerException,
|
18
|
+
UserNotAuthorizedException,
|
19
|
+
print_exception_response,
|
20
|
+
AutomatedCuration
|
21
|
+
)
|
22
|
+
from rich.table import Table
|
23
|
+
from rich.live import Live
|
24
|
+
from rich.console import Console
|
25
|
+
from rich.markdown import Markdown
|
26
|
+
from rich.tree import Tree
|
27
|
+
from rich.prompt import Prompt
|
28
|
+
from rich.panel import Panel
|
29
|
+
from rich.text import Text
|
30
|
+
from rich import print
|
31
|
+
|
32
|
+
disable_ssl_warnings = True
|
33
|
+
console = Console(width=200)
|
34
|
+
|
35
|
+
platform = "https://127.0.0.1:9443"
|
36
|
+
user = "erinoverview"
|
37
|
+
view_server = "view-server"
|
38
|
+
|
39
|
+
guid_list = []
|
40
|
+
|
41
|
+
def tech_viewer(tech_name: str, server_name:str, platform_url:str, user:str):
|
42
|
+
|
43
|
+
def build_classifications(classification: dict) -> Markdown:
|
44
|
+
|
45
|
+
class_md = ("\n")
|
46
|
+
for c in classification:
|
47
|
+
c_type = c["classificationName"]
|
48
|
+
if c_type == "Anchors":
|
49
|
+
continue
|
50
|
+
class_md += f"* Classification: {c_type}\n"
|
51
|
+
class_props = c.get("classificationProperties", None)
|
52
|
+
if class_props is None:
|
53
|
+
continue
|
54
|
+
for prop in class_props.keys():
|
55
|
+
class_md += f"\t* {prop}: {class_props[prop]}\n"
|
56
|
+
if class_md == "-":
|
57
|
+
output = None
|
58
|
+
else:
|
59
|
+
output = class_md
|
60
|
+
return output
|
61
|
+
|
62
|
+
try:
|
63
|
+
|
64
|
+
console = Console()
|
65
|
+
|
66
|
+
a_client = AutomatedCuration(view_server, platform,
|
67
|
+
user_id=user)
|
68
|
+
|
69
|
+
token = a_client.create_egeria_bearer_token(user, "secret")
|
70
|
+
tech_elements = a_client.get_technology_type_elements(tech_name, get_templates=True)
|
71
|
+
if len(tech_elements) <= 1:
|
72
|
+
console.print(f"No elements found for {tech_name}")
|
73
|
+
sys.exit(1)
|
74
|
+
tree = Tree(f"Deployed Technology Type: {tech_name}", style="bold bright_white", guide_style="bold bright_blue")
|
75
|
+
note: str =" "
|
76
|
+
for element in tech_elements:
|
77
|
+
header = element['elementHeader']
|
78
|
+
tech_type = header["type"]["typeName"]
|
79
|
+
tech_collection = header["origin"]['homeMetadataCollectionName']
|
80
|
+
tech_created_by = header['versions']['createdBy']
|
81
|
+
tech_created_at = header['versions']['createTime']
|
82
|
+
tech_guid = header['guid']
|
83
|
+
tech_classifications = header['classifications']
|
84
|
+
class_md = build_classifications(tech_classifications)
|
85
|
+
|
86
|
+
referenceables = element['referenceableProperties']
|
87
|
+
tech_qualified_name = referenceables['qualifiedName']
|
88
|
+
extended = referenceables['extendedProperties']
|
89
|
+
ex_md:str = ""
|
90
|
+
for key, value in extended.items():
|
91
|
+
ex_md += f"* {key}: {value}\n"
|
92
|
+
|
93
|
+
note = (f"* Qualified Name: {tech_qualified_name}\n"
|
94
|
+
f"* GUID: {tech_guid}\n"
|
95
|
+
f"* Createdy by: {tech_created_by}\n"
|
96
|
+
f"* Created at: {tech_created_at}\n"
|
97
|
+
f"* Home Collection: {tech_collection}\n"
|
98
|
+
f"{class_md}\n"
|
99
|
+
f"{ex_md}\n"
|
100
|
+
)
|
101
|
+
|
102
|
+
interfaces = extended.get('connectorInterfaces', None)
|
103
|
+
if interfaces is not None:
|
104
|
+
interface_type_name = interfaces['typeName']
|
105
|
+
interface_array_cnt = interfaces['arrayCount']
|
106
|
+
note += f"* Interface Type: {interface_type_name}\n"
|
107
|
+
for i in range(0, int(interface_array_cnt)):
|
108
|
+
note += (f"\t* Type: {interfaces['arrayValues']['propertyValueMap'][str(i)]['typeName']}"
|
109
|
+
f"\tName: {interfaces['arrayValues']['propertiesAsStrings'][str(i)]}\n"
|
110
|
+
)
|
111
|
+
note_md = Panel.fit(Markdown(note), style = 'bold bright_white')
|
112
|
+
t = tree.add(note_md)
|
113
|
+
|
114
|
+
print(tree)
|
115
|
+
|
116
|
+
except (
|
117
|
+
InvalidParameterException,
|
118
|
+
PropertyServerException,
|
119
|
+
UserNotAuthorizedException
|
120
|
+
) as e:
|
121
|
+
print_exception_response(e)
|
122
|
+
|
123
|
+
|
124
|
+
if __name__ == "__main__":
|
125
|
+
parser = argparse.ArgumentParser()
|
126
|
+
|
127
|
+
parser.add_argument("--server", help="Name of the server to display status for")
|
128
|
+
parser.add_argument("--url", help="URL Platform to connect to")
|
129
|
+
parser.add_argument("--userid", help="User Id")
|
130
|
+
args = parser.parse_args()
|
131
|
+
|
132
|
+
server = args.server if args.server is not None else "view-server"
|
133
|
+
url = args.url if args.url is not None else "https://localhost:9443"
|
134
|
+
userid = args.userid if args.userid is not None else 'erinoverview'
|
135
|
+
|
136
|
+
tech_name = Prompt.ask("Enter the Asset Name to view:", default="Apache Kafka Server")
|
137
|
+
tech_viewer(tech_name,server, url, userid)
|
@@ -0,0 +1,138 @@
|
|
1
|
+
#!python
|
2
|
+
"""
|
3
|
+
SPDX-License-Identifier: Apache-2.0
|
4
|
+
Copyright Contributors to the ODPi Egeria project.
|
5
|
+
|
6
|
+
Unit tests for the Utils helper functions using the Pytest framework.
|
7
|
+
|
8
|
+
|
9
|
+
A simple display for glossary terms
|
10
|
+
"""
|
11
|
+
|
12
|
+
import time
|
13
|
+
import json
|
14
|
+
import argparse
|
15
|
+
from pyegeria import (
|
16
|
+
InvalidParameterException,
|
17
|
+
PropertyServerException,
|
18
|
+
UserNotAuthorizedException,
|
19
|
+
print_exception_response,
|
20
|
+
AssetCatalog
|
21
|
+
)
|
22
|
+
# import pyegeria.X_asset_catalog_omvs
|
23
|
+
from rich.table import Table
|
24
|
+
from rich.live import Live
|
25
|
+
from rich import box
|
26
|
+
from rich.prompt import Prompt
|
27
|
+
from rich.tree import Tree
|
28
|
+
from rich import print
|
29
|
+
from rich.console import Console
|
30
|
+
|
31
|
+
|
32
|
+
from pyegeria.server_operations import ServerOps
|
33
|
+
from pyegeria._deprecated_gov_engine import GovEng
|
34
|
+
from pyegeria.glossary_browser_omvs import GlossaryBrowser
|
35
|
+
disable_ssl_warnings = True
|
36
|
+
|
37
|
+
good_platform1_url = "https://127.0.0.1:9443"
|
38
|
+
good_platform2_url = "https://egeria.pdr-associates.com:7443"
|
39
|
+
bad_platform1_url = "https://localhost:9443"
|
40
|
+
|
41
|
+
# good_platform1_url = "https://127.0.0.1:30080"
|
42
|
+
# good_platform2_url = "https://127.0.0.1:30081"
|
43
|
+
# bad_platform1_url = "https://localhost:9443"
|
44
|
+
|
45
|
+
good_user_1 = "garygeeke"
|
46
|
+
good_user_2 = "erinoverview"
|
47
|
+
bad_user_1 = "eviledna"
|
48
|
+
bad_user_2 = ""
|
49
|
+
|
50
|
+
good_server_1 = "active-metadata-store"
|
51
|
+
good_server_2 = "simple-metadata-store"
|
52
|
+
good_server_3 = "view-server"
|
53
|
+
good_server_4 = "engine-host"
|
54
|
+
bad_server_1 = "coco"
|
55
|
+
bad_server_2 = ""
|
56
|
+
|
57
|
+
|
58
|
+
def display_assets(search_string: str, guid: str=None, server: str = good_server_3, url: str = good_platform1_url, username: str = good_user_2):
|
59
|
+
|
60
|
+
g_client = AssetCatalog(server, url, username)
|
61
|
+
token = g_client.create_egeria_bearer_token(username, "secret")
|
62
|
+
|
63
|
+
|
64
|
+
def generate_table(search_string:str = '*') -> Table:
|
65
|
+
"""Make a new table."""
|
66
|
+
table = Table(
|
67
|
+
title=f"Asset Definitions for assets like {search_string} @ {time.asctime()}",
|
68
|
+
# style = "black on grey66",
|
69
|
+
header_style="white on dark_blue",
|
70
|
+
show_lines=True,
|
71
|
+
box=box.ROUNDED,
|
72
|
+
caption=f"View Server '{server}' @ Platform - {url}",
|
73
|
+
expand=True
|
74
|
+
)
|
75
|
+
table.add_column("Display Name")
|
76
|
+
table.add_column("Type Name")
|
77
|
+
table.add_column("GUID", no_wrap=True)
|
78
|
+
table.add_column("Network Address/Path")
|
79
|
+
table.add_column("Qualified Name")
|
80
|
+
|
81
|
+
|
82
|
+
assets = g_client.find_assets_in_domain(search_string, starts_with=True,
|
83
|
+
ends_with=False, ignore_case=True, page_size=10)
|
84
|
+
if type(assets) is str:
|
85
|
+
return table
|
86
|
+
|
87
|
+
for element in assets:
|
88
|
+
display_name = element["displayName"]
|
89
|
+
qualified_name = element["qualifiedName"]
|
90
|
+
type_name = element["type"]["typeName"]
|
91
|
+
guid = element["guid"]
|
92
|
+
path_name = element.get("extendedProperties", None)
|
93
|
+
if path_name:
|
94
|
+
path = path_name.get("pathName"," ")
|
95
|
+
else:
|
96
|
+
path = " "
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
table.add_row(
|
101
|
+
display_name, type_name,guid, path, qualified_name
|
102
|
+
)
|
103
|
+
|
104
|
+
g_client.close_session()
|
105
|
+
return table
|
106
|
+
|
107
|
+
try:
|
108
|
+
# with Live(generate_table(), refresh_per_second=4, screen=True) as live:
|
109
|
+
# while True:
|
110
|
+
# time.sleep(2)
|
111
|
+
# live.update(generate_table())
|
112
|
+
console = Console()
|
113
|
+
with console.pager():
|
114
|
+
console.print(generate_table(search_string))
|
115
|
+
|
116
|
+
|
117
|
+
except (InvalidParameterException, PropertyServerException, UserNotAuthorizedException) as e:
|
118
|
+
print_exception_response(e)
|
119
|
+
assert e.related_http_code != "200", "Invalid parameters"
|
120
|
+
|
121
|
+
if __name__ == "__main__":
|
122
|
+
sus_guid = "f9b78b26-6025-43fa-9299-a905cc6d1575"
|
123
|
+
parser = argparse.ArgumentParser()
|
124
|
+
parser.add_argument("--server", help="Name of the server to display status for")
|
125
|
+
parser.add_argument("--url", help="URL Platform to connect to")
|
126
|
+
parser.add_argument("--userid", help="User Id")
|
127
|
+
parser.add_argument("--guid", help="GUID of glossary to search")
|
128
|
+
parser.add_argument("--sustainability", help="Set True for Sustainability Glossary")
|
129
|
+
args = parser.parse_args()
|
130
|
+
|
131
|
+
server = args.server if args.server is not None else "view-server"
|
132
|
+
url = args.url if args.url is not None else "https://localhost:9443"
|
133
|
+
userid = args.userid if args.userid is not None else 'garygeeke'
|
134
|
+
guid = args.guid if args.guid is not None else None
|
135
|
+
guid = sus_guid if args.sustainability else None
|
136
|
+
|
137
|
+
search_string = Prompt.ask("Enter the asset you are searching for:", default="*")
|
138
|
+
display_assets(search_string, guid,server, url, userid)
|
pyegeria-0.3.9.data/scripts/project_list_viewer.py → pyegeria-0.4.1.data/scripts/list_projects.py
RENAMED
@@ -134,6 +134,6 @@ if __name__ == "__main__":
|
|
134
134
|
url = args.url if args.url is not None else "https://localhost:9443"
|
135
135
|
userid = args.userid if args.userid is not None else 'erinoverview'
|
136
136
|
save_output = args.save_output if args.save_output is not None else False
|
137
|
-
project_name = Prompt.ask("Enter the
|
137
|
+
project_name = Prompt.ask("Enter the Project to retrieve:", default="*")
|
138
138
|
|
139
139
|
display_list(project_name, server, url, userid, save_output)
|
@@ -43,16 +43,16 @@ def display_list(type_name:str, server: str, url: str ,
|
|
43
43
|
expand=True
|
44
44
|
)
|
45
45
|
|
46
|
-
|
46
|
+
table.add_column("Status")
|
47
47
|
table.add_column("Name")
|
48
48
|
# table.add_column("GUID", no_wrap=True,)
|
49
|
-
|
49
|
+
|
50
50
|
table.add_column("Description")
|
51
|
+
table.add_column("Attrib Name")
|
52
|
+
table.add_column("Attrib Status")
|
53
|
+
table.add_column("Attrib Type")
|
54
|
+
table.add_column("Attrib Description")
|
51
55
|
table.add_column("Description Wiki", no_wrap=True)
|
52
|
-
table.add_column("Attribute Name")
|
53
|
-
table.add_column("Attribute Status")
|
54
|
-
table.add_column("Attribute Type")
|
55
|
-
table.add_column("Attribute Description")
|
56
56
|
|
57
57
|
types_list = p_client.get_valid_relationship_types(type_name)
|
58
58
|
|
@@ -81,10 +81,11 @@ def display_list(type_name:str, server: str, url: str ,
|
|
81
81
|
attr_status = attr['attributeStatus']
|
82
82
|
attr_type = attr['attributeType']["name"]
|
83
83
|
table.add_row(
|
84
|
-
|
84
|
+
status, name, description, attr_name, attr_status, attr_type, attr_desc,
|
85
|
+
description_wiki
|
85
86
|
)
|
86
87
|
else:
|
87
|
-
table.add_row(name,
|
88
|
+
table.add_row(status,name,description,description_wiki," ", " ", " "," " )
|
88
89
|
|
89
90
|
p_client.close_session()
|
90
91
|
return table
|
@@ -0,0 +1,134 @@
|
|
1
|
+
"""This creates a templates guid file from the core metadata archive"""
|
2
|
+
from rich.markdown import Markdown
|
3
|
+
from rich.prompt import Prompt
|
4
|
+
|
5
|
+
from pyegeria import AutomatedCuration
|
6
|
+
from datetime import datetime
|
7
|
+
import argparse
|
8
|
+
import time
|
9
|
+
import sys
|
10
|
+
from rich import box
|
11
|
+
from rich.console import Console
|
12
|
+
from rich.table import Table
|
13
|
+
|
14
|
+
from pyegeria import (
|
15
|
+
InvalidParameterException,
|
16
|
+
PropertyServerException,
|
17
|
+
UserNotAuthorizedException,
|
18
|
+
print_exception_response,
|
19
|
+
RegisteredInfo
|
20
|
+
)
|
21
|
+
|
22
|
+
|
23
|
+
console = Console()
|
24
|
+
server = "active-metadata-server"
|
25
|
+
platform = "https://localhost:9443"
|
26
|
+
user = "erinoverview"
|
27
|
+
password = "secret"
|
28
|
+
|
29
|
+
def display_tech_types(search_string:str = "*", server: str = server,
|
30
|
+
url: str = platform, username: str = user, password: str = password,):
|
31
|
+
|
32
|
+
a_client = AutomatedCuration(server, url, username)
|
33
|
+
token = a_client.create_egeria_bearer_token(user, password)
|
34
|
+
tech_list = a_client.find_technology_types(search_string, page_size=0)
|
35
|
+
|
36
|
+
def generate_table() -> Table:
|
37
|
+
"""Make a new table."""
|
38
|
+
table = Table(
|
39
|
+
title=f"Technology Templates for: {url} @ {time.asctime()}",
|
40
|
+
# style = "black on grey66",
|
41
|
+
header_style="white on dark_blue",
|
42
|
+
show_lines=True,
|
43
|
+
box=box.ROUNDED,
|
44
|
+
caption=f"Templates from Server '{server}' @ Platform - {url}",
|
45
|
+
expand=True,
|
46
|
+
# width=500
|
47
|
+
)
|
48
|
+
|
49
|
+
table.add_column("Name", width=20)
|
50
|
+
table.add_column("Template Name", width=20)
|
51
|
+
table.add_column("Template GUID", width = 38,no_wrap=True)
|
52
|
+
table.add_column("Placeholders")
|
53
|
+
|
54
|
+
|
55
|
+
if type(tech_list) is list:
|
56
|
+
for item in tech_list:
|
57
|
+
if 'deployedImplementationType' not in item['qualifiedName']:
|
58
|
+
continue
|
59
|
+
placeholder_table = Table(expand=False, show_lines=True)
|
60
|
+
placeholder_table.add_column("Name", width = 20,no_wrap=True)
|
61
|
+
placeholder_table.add_column("Type", width = 10)
|
62
|
+
placeholder_table.add_column("Required", width = 10)
|
63
|
+
placeholder_table.add_column("Example", width = 20)
|
64
|
+
placeholder_table.add_column("Description", width = 40)
|
65
|
+
|
66
|
+
|
67
|
+
name = item.get("name", "none")
|
68
|
+
|
69
|
+
details = a_client.get_technology_type_detail(name)
|
70
|
+
if type(details) is str:
|
71
|
+
console.log(f"Missing details for - {name}: {details}")
|
72
|
+
continue
|
73
|
+
|
74
|
+
templates = details.get("catalogTemplates", "Not Found")
|
75
|
+
if type(templates) is not str:
|
76
|
+
for template in templates:
|
77
|
+
template_name = template.get("name", None)
|
78
|
+
|
79
|
+
template_name = f"{name}_Template" if template_name is None else template_name
|
80
|
+
|
81
|
+
specification = template["specification"]["placeholderProperty"]
|
82
|
+
template_guid = template["relatedElement"]["guid"]
|
83
|
+
|
84
|
+
for placeholder in specification:
|
85
|
+
placeholder_data_type = placeholder["dataType"]
|
86
|
+
placeholder_description = placeholder["description"]
|
87
|
+
placeholder_name = placeholder["placeholderPropertyName"]
|
88
|
+
placeholder_required = placeholder["required"]
|
89
|
+
placeholder_example = placeholder.get("example", None)
|
90
|
+
placeholder_table.add_row(placeholder_name, placeholder_data_type, placeholder_required,
|
91
|
+
placeholder_example, placeholder_description,)
|
92
|
+
|
93
|
+
table.add_row(name, template_name, template_guid, placeholder_table)
|
94
|
+
|
95
|
+
return table
|
96
|
+
else:
|
97
|
+
print("Unknown technology type")
|
98
|
+
sys.exit(1)
|
99
|
+
|
100
|
+
try:
|
101
|
+
console = Console()
|
102
|
+
with console.pager():
|
103
|
+
console.print(generate_table())
|
104
|
+
|
105
|
+
except (InvalidParameterException, PropertyServerException, UserNotAuthorizedException) as e:
|
106
|
+
print_exception_response(e)
|
107
|
+
assert e.related_http_code != "200", "Invalid parameters"
|
108
|
+
finally:
|
109
|
+
a_client.close_session()
|
110
|
+
|
111
|
+
|
112
|
+
if __name__ == "__main__":
|
113
|
+
parser = argparse.ArgumentParser()
|
114
|
+
parser.add_argument("--server", help="Name of the server to display status for")
|
115
|
+
parser.add_argument("--url", help="URL Platform to connect to")
|
116
|
+
parser.add_argument("--userid", help="User Id")
|
117
|
+
parser.add_argument("--password", help="Password")
|
118
|
+
|
119
|
+
args = parser.parse_args()
|
120
|
+
|
121
|
+
server = args.server if args.server is not None else "view-server"
|
122
|
+
url = args.url if args.url is not None else "https://localhost:9443"
|
123
|
+
userid = args.userid if args.userid is not None else 'erinoverview'
|
124
|
+
password = args.password if args.password is not None else 'secret'
|
125
|
+
guid = None
|
126
|
+
|
127
|
+
search_string = Prompt.ask("Enter the technology you are searching for:", default="*")
|
128
|
+
|
129
|
+
display_tech_types(search_string, server, url, userid, password)
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
|
134
|
+
|
@@ -97,8 +97,9 @@ def display_to_dos(search_string: str, guid:str, server: str, url: str, username
|
|
97
97
|
# while True:
|
98
98
|
# time.sleep(2)
|
99
99
|
# live.update(generate_table())
|
100
|
-
console = Console()
|
100
|
+
console = Console(width = 200)
|
101
101
|
with console.pager():
|
102
|
+
|
102
103
|
console.print(generate_table(search_string))
|
103
104
|
|
104
105
|
|
@@ -0,0 +1,144 @@
|
|
1
|
+
#!python
|
2
|
+
"""
|
3
|
+
SPDX-Lic
|
4
|
+
ense-Identifier: Apache-2.0
|
5
|
+
Copyright Contributors to the ODPi Egeria project.
|
6
|
+
|
7
|
+
Unit tests for the Utils helper functions using the Pytest framework.
|
8
|
+
|
9
|
+
|
10
|
+
A simple display for glossary terms
|
11
|
+
"""
|
12
|
+
|
13
|
+
import time
|
14
|
+
import json
|
15
|
+
import argparse
|
16
|
+
from pyegeria import (
|
17
|
+
InvalidParameterException,
|
18
|
+
PropertyServerException,
|
19
|
+
UserNotAuthorizedException,
|
20
|
+
print_exception_response,
|
21
|
+
)
|
22
|
+
from rich.table import Table
|
23
|
+
from rich.live import Live
|
24
|
+
from rich import box
|
25
|
+
from rich.prompt import Prompt
|
26
|
+
from rich.tree import Tree
|
27
|
+
from rich import print
|
28
|
+
from rich.console import Console
|
29
|
+
from pyegeria import ValidMetadataManager
|
30
|
+
|
31
|
+
disable_ssl_warnings = True
|
32
|
+
|
33
|
+
good_platform1_url = "https://127.0.0.1:9443"
|
34
|
+
good_platform2_url = "https://egeria.pdr-associates.com:7443"
|
35
|
+
bad_platform1_url = "https://localhost:9443"
|
36
|
+
|
37
|
+
# good_platform1_url = "https://127.0.0.1:30080"
|
38
|
+
# good_platform2_url = "https://127.0.0.1:30081"
|
39
|
+
# bad_platform1_url = "https://localhost:9443"
|
40
|
+
|
41
|
+
good_user_1 = "garygeeke"
|
42
|
+
good_user_2 = "erinoverview"
|
43
|
+
bad_user_1 = "eviledna"
|
44
|
+
bad_user_2 = ""
|
45
|
+
|
46
|
+
good_server_1 = "active-metadata-store"
|
47
|
+
good_server_2 = "simple-metadata-store"
|
48
|
+
good_server_3 = "view-server"
|
49
|
+
good_server_4 = "engine-host"
|
50
|
+
bad_server_1 = "coco"
|
51
|
+
bad_server_2 = ""
|
52
|
+
|
53
|
+
|
54
|
+
def display_values(property_name: str, type_name: str=None, server: str = good_server_3, url: str = good_platform1_url,
|
55
|
+
username: str = good_user_2, save_output: bool = False):
|
56
|
+
|
57
|
+
m_client = ValidMetadataManager(server, url, user_id=username)
|
58
|
+
token = m_client.create_egeria_bearer_token(username, "secret")
|
59
|
+
|
60
|
+
def generate_table(property_name: str, type_name: str) -> Table:
|
61
|
+
"""Make a new table."""
|
62
|
+
table = Table(
|
63
|
+
title=f"Valid Metadata Values for Property: {property_name} of type {type_name} @ {time.asctime()}",
|
64
|
+
header_style="white on dark_blue",
|
65
|
+
show_lines=True,
|
66
|
+
box=box.ROUNDED,
|
67
|
+
caption=f"Valid Metadata Values for Server '{server}' @ Platform - {url}",
|
68
|
+
expand=True
|
69
|
+
)
|
70
|
+
|
71
|
+
table.add_column("Category")
|
72
|
+
table.add_column("Display Name")
|
73
|
+
|
74
|
+
table.add_column("Preferred Value")
|
75
|
+
table.add_column("Deprecated")
|
76
|
+
table.add_column("Case Sensitive")
|
77
|
+
table.add_column("Additional Properties")
|
78
|
+
table.add_column("Description")
|
79
|
+
|
80
|
+
valid_values = m_client.get_valid_metadata_values(property_name, type_name)
|
81
|
+
|
82
|
+
if valid_values is None:
|
83
|
+
name = " "
|
84
|
+
type_name = " "
|
85
|
+
created = " "
|
86
|
+
priority = " "
|
87
|
+
due = " "
|
88
|
+
completed = " "
|
89
|
+
status = " "
|
90
|
+
sponsor = " "
|
91
|
+
elif type(valid_values[0]) == str:
|
92
|
+
raise ValueError("-->This is not a known metadata property with a valid value")
|
93
|
+
else:
|
94
|
+
for value in valid_values:
|
95
|
+
category = value.get("category","None")
|
96
|
+
display_name = value.get("displayName","None")
|
97
|
+
preferred_value = value.get("preferredValue", "None ")
|
98
|
+
deprecated = str(value.get("isDeprecated", "None "))
|
99
|
+
case_sensitive = str(value.get("isCaseSensitive", "None"))
|
100
|
+
description = value.get("description", "None")
|
101
|
+
additional_properties = value.get('additionalProperties',"None")
|
102
|
+
if additional_properties is not None:
|
103
|
+
props = json.dumps(additional_properties)
|
104
|
+
table.add_row(
|
105
|
+
category, display_name, preferred_value, deprecated, case_sensitive, props,description
|
106
|
+
)
|
107
|
+
|
108
|
+
m_client.close_session()
|
109
|
+
return table
|
110
|
+
|
111
|
+
try:
|
112
|
+
# with Live(generate_table(), refresh_per_second=4, screen=True) as live:
|
113
|
+
# while True:
|
114
|
+
# time.sleep(2)
|
115
|
+
# live.update(generate_table())
|
116
|
+
console = Console(record=True)
|
117
|
+
with console.pager():
|
118
|
+
console.print(generate_table(property_name, type_name))
|
119
|
+
if save_output:
|
120
|
+
console.save_html("valid-metadata-values.html")
|
121
|
+
|
122
|
+
except (InvalidParameterException, PropertyServerException, UserNotAuthorizedException, ValueError) as e:
|
123
|
+
if type(e) is str:
|
124
|
+
print(e)
|
125
|
+
else:
|
126
|
+
print_exception_response(e)
|
127
|
+
|
128
|
+
if __name__ == "__main__":
|
129
|
+
|
130
|
+
parser = argparse.ArgumentParser()
|
131
|
+
parser.add_argument("--server", help="Name of the server to display status for")
|
132
|
+
parser.add_argument("--url", help="URL Platform to connect to")
|
133
|
+
parser.add_argument("--userid", help="User Id")
|
134
|
+
parser.add_argument("--save-output", help="Save output to file?")
|
135
|
+
# parser.add_argument("--sponsor", help="Name of sponsor to search")
|
136
|
+
args = parser.parse_args()
|
137
|
+
|
138
|
+
server = args.server if args.server is not None else "view-server"
|
139
|
+
url = args.url if args.url is not None else "https://localhost:9443"
|
140
|
+
userid = args.userid if args.userid is not None else 'erinoverview'
|
141
|
+
save_output = args.save_output if args.save_output is not None else False
|
142
|
+
property_name = Prompt.ask("Enter the Property to retrieve:", default="projectHealth")
|
143
|
+
type_name = Prompt.ask("Enter the Metadata Type to filter on:", default="Project")
|
144
|
+
display_values(property_name, type_name,server, url, userid, save_output)
|