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.
Files changed (47) hide show
  1. pyegeria/Xfeedback_manager_omvs.py +2 -15
  2. pyegeria/__init__.py +11 -4
  3. pyegeria/_globals.py +3 -1
  4. pyegeria/{Xasset_catalog_omvs.py → asset_catalog_omvs.py} +242 -109
  5. pyegeria/automated_curation_omvs.py +324 -61
  6. pyegeria/core_guids.py +128 -0
  7. pyegeria/core_omag_server_config.py +1 -1
  8. pyegeria/{Xglossary_manager_omvs.py → glossary_manager_omvs.py} +70 -69
  9. pyegeria/runtime_manager_omvs.py +967 -0
  10. pyegeria/valid_metadata_omvs.py +193 -20
  11. pyegeria-0.4.1.data/scripts/get_guid_info.py +86 -0
  12. {pyegeria-0.3.9.data → pyegeria-0.4.1.data}/scripts/get_tech_details.py +1 -37
  13. pyegeria-0.4.1.data/scripts/get_tech_type_elements.py +137 -0
  14. pyegeria-0.4.1.data/scripts/get_tech_type_template.py +137 -0
  15. pyegeria-0.4.1.data/scripts/list_assets.py +138 -0
  16. pyegeria-0.3.9.data/scripts/project_list_viewer.py → pyegeria-0.4.1.data/scripts/list_projects.py +1 -1
  17. pyegeria-0.3.9.data/scripts/get_relationship_types.py → pyegeria-0.4.1.data/scripts/list_relationship_types.py +9 -8
  18. pyegeria-0.4.1.data/scripts/list_tech_templates.py +134 -0
  19. pyegeria-0.3.9.data/scripts/find_todos.py → pyegeria-0.4.1.data/scripts/list_todos.py +2 -1
  20. pyegeria-0.4.1.data/scripts/list_valid_metadata_values.py +144 -0
  21. pyegeria-0.4.1.data/scripts/view_asset_graph.py +245 -0
  22. pyegeria-0.3.9.data/scripts/coco_status.py → pyegeria-0.4.1.data/scripts/view_coco_status.py +10 -9
  23. pyegeria-0.3.9.data/scripts/engine_action_status.py → pyegeria-0.4.1.data/scripts/view_eng_action_status.py +8 -3
  24. pyegeria-0.4.1.data/scripts/view_integ_daemon_status.py +140 -0
  25. pyegeria-0.4.1.data/scripts/view_platform_status.py +123 -0
  26. {pyegeria-0.3.9.dist-info → pyegeria-0.4.1.dist-info}/METADATA +5 -2
  27. pyegeria-0.4.1.dist-info/RECORD +58 -0
  28. {pyegeria-0.3.9.dist-info → pyegeria-0.4.1.dist-info}/WHEEL +1 -1
  29. pyegeria-0.3.9.data/scripts/integration_daemon_status.py +0 -130
  30. pyegeria-0.3.9.data/scripts/multi-server_status.py +0 -120
  31. pyegeria-0.3.9.dist-info/RECORD +0 -49
  32. /pyegeria/{Xaction_author_omvs.py → action_author_omvs.py} +0 -0
  33. {pyegeria-0.3.9.data → pyegeria-0.4.1.data}/scripts/Create_Collection_Sample.py +0 -0
  34. {pyegeria-0.3.9.data → pyegeria-0.4.1.data}/scripts/Create_Sustainability_Collection_Sample.py +0 -0
  35. /pyegeria-0.3.9.data/scripts/view_my_profile.py → /pyegeria-0.4.1.data/scripts/get_my_profile.py +0 -0
  36. {pyegeria-0.3.9.data → pyegeria-0.4.1.data}/scripts/list_asset_types.py +0 -0
  37. /pyegeria-0.3.9.data/scripts/get_registered_services.py → /pyegeria-0.4.1.data/scripts/list_registered_services.py +0 -0
  38. /pyegeria-0.3.9.data/scripts/get_tech_types.py → /pyegeria-0.4.1.data/scripts/list_tech_types.py +0 -0
  39. /pyegeria-0.3.9.data/scripts/collection_viewer.py → /pyegeria-0.4.1.data/scripts/view_collection.py +0 -0
  40. /pyegeria-0.3.9.data/scripts/glossary_view.py → /pyegeria-0.4.1.data/scripts/view_glossary.py +0 -0
  41. /pyegeria-0.3.9.data/scripts/gov_engine_status.py → /pyegeria-0.4.1.data/scripts/view_gov_eng_status.py +0 -0
  42. /pyegeria-0.3.9.data/scripts/my_todos.py → /pyegeria-0.4.1.data/scripts/view_my_todos.py +0 -0
  43. /pyegeria-0.3.9.data/scripts/open_todos.py → /pyegeria-0.4.1.data/scripts/view_open_todos.py +0 -0
  44. /pyegeria-0.3.9.data/scripts/server_status_widget.py → /pyegeria-0.4.1.data/scripts/view_server_list.py +0 -0
  45. /pyegeria-0.3.9.data/scripts/server_status.py → /pyegeria-0.4.1.data/scripts/view_server_status.py +0 -0
  46. {pyegeria-0.3.9.dist-info → pyegeria-0.4.1.dist-info}/LICENSE +0 -0
  47. {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)
@@ -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 Property to retrieve:", default="*")
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
- table.add_column("Status")
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
- name, status, description, description_wiki, attr_name, attr_status, attr_type, attr_desc
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,status,description,description_wiki," ", " ", " "," " )
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)