pyegeria 0.7.18__tar.gz → 0.7.20__tar.gz
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-0.7.18 → pyegeria-0.7.20}/PKG-INFO +1 -1
- pyegeria-0.7.20/examples/widgets/cat/get_project_dependencies.py +135 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cat/get_project_structure.py +3 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cat/list_todos.py +25 -12
- pyegeria-0.7.20/examples/widgets/cat/list_user_ids.py +119 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cli/egeria.py +30 -6
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cli/egeria_cat.py +29 -5
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cli/egeria_my.py +8 -1
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cli/egeria_ops.py +2 -2
- pyegeria-0.7.20/examples/widgets/my/todo_actions.py +190 -0
- pyegeria-0.7.20/examples/widgets/ops/engine_actions.py +71 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/glossary_manager_omvs.py +33 -135
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/my_profile_omvs.py +12 -13
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyproject.toml +12 -2
- pyegeria-0.7.18/examples/widgets/ops/engine_actions.py +0 -52
- {pyegeria-0.7.18 → pyegeria-0.7.20}/LICENSE +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/README.md +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/doc_samples/Create_Collection_Sample.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/doc_samples/Create_Sustainability_Collection_Sample.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cat/README.md +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cat/__init__.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cat/get_asset_graph.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cat/get_collection.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cat/get_tech_type_elements.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cat/get_tech_type_template.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cat/list_assets.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cat/list_cert_types.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cat/list_glossary.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cat/list_projects.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cat/list_relationships.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cat/list_tech_types.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cli/__init__.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cli/egeria_tech.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/cli/ops_config.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/my/README.md +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/my/__init__.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/my/list_my_profile.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/my/list_my_roles.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/my/monitor_my_todos.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/my/monitor_open_todos.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/my/my_profile_actions.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/ops/README.md +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/ops/__init__.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/ops/integration_daemon_actions.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/ops/list_catalog_targets.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/ops/load_archive.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/ops/monitor_asset_events.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/ops/monitor_coco_status.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/ops/monitor_engine_activity.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/ops/monitor_gov_eng_status.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/ops/monitor_integ_daemon_status.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/ops/monitor_platform_status.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/ops/monitor_server_list.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/ops/monitor_server_status.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/ops/refresh_integration_daemon.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/ops/restart_integration_daemon.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/tech/README.md +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/tech/__init__.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/tech/get_element_info.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/tech/get_guid_info.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/tech/get_tech_details.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/tech/list_asset_types.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/tech/list_elements.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/tech/list_registered_services.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/tech/list_related_specification.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/tech/list_relationship_types.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/tech/list_tech_templates.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/tech/list_valid_metadata_values.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/examples/widgets/tech/x_list_related_elements.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/Xloaded_resources_omvs.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/__init__.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/_client.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/_deprecated_gov_engine.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/_exceptions.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/_globals.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/_validators.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/action_author_omvs.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/asset_catalog_omvs.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/automated_curation_omvs.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/classification_manager_omvs.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/collection_manager_omvs.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/core_omag_server_config.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/create_tech_guid_lists.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/feedback_manager_omvs.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/full_omag_server_config.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/glossary_browser_omvs.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/platform_services.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/project_manager_omvs.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/registered_info.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/runtime_manager_omvs.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/server_operations.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/utils.py +0 -0
- {pyegeria-0.7.18 → pyegeria-0.7.20}/pyegeria/valid_metadata_omvs.py +0 -0
@@ -0,0 +1,135 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
SPDX-License-Identifier: Apache-2.0
|
4
|
+
Copyright Contributors to the ODPi Egeria project.
|
5
|
+
|
6
|
+
A simple viewer for project dependencies - provide the root and we display the dependency tree
|
7
|
+
|
8
|
+
"""
|
9
|
+
|
10
|
+
import argparse
|
11
|
+
import os
|
12
|
+
|
13
|
+
from rich import print
|
14
|
+
from rich.console import Console
|
15
|
+
from rich.markdown import Markdown
|
16
|
+
from rich.panel import Panel
|
17
|
+
from rich.prompt import Prompt
|
18
|
+
from rich.tree import Tree
|
19
|
+
|
20
|
+
from pyegeria import (ProjectManager, UserNotAuthorizedException, PropertyServerException, InvalidParameterException)
|
21
|
+
from pyegeria._exceptions import (print_exception_response, )
|
22
|
+
|
23
|
+
disable_ssl_warnings = True
|
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('VIEW_SERVER', 'view-server')
|
28
|
+
EGERIA_VIEW_SERVER_URL = os.environ.get('EGERIA_VIEW_SERVER_URL', 'https://localhost:9443')
|
29
|
+
EGERIA_INTEGRATION_DAEMON = os.environ.get('INTEGRATION_DAEMON', 'integration-daemon')
|
30
|
+
EGERIA_ADMIN_USER = os.environ.get('ADMIN_USER', 'garygeeke')
|
31
|
+
EGERIA_ADMIN_PASSWORD = os.environ.get('ADMIN_PASSWORD', 'secret')
|
32
|
+
EGERIA_USER = os.environ.get('EGERIA_USER', 'erinoverview')
|
33
|
+
EGERIA_USER_PASSWORD = os.environ.get('EGERIA_USER_PASSWORD', 'secret')
|
34
|
+
EGERIA_JUPYTER = bool(os.environ.get('EGERIA_JUPYTER', 'False'))
|
35
|
+
EGERIA_WIDTH = int(os.environ.get('EGERIA_WIDTH', '200'))
|
36
|
+
|
37
|
+
|
38
|
+
def project_dependency_viewer(root: str, server_name: str, platform_url: str, user: str, user_password: str,
|
39
|
+
jupyter: bool = EGERIA_JUPYTER, width: int = EGERIA_WIDTH, timeout: int = 30):
|
40
|
+
""" A simple collection viewer"""
|
41
|
+
|
42
|
+
def walk_project_hierarchy(project_client: ProjectManager, project_name: str, tree: Tree,
|
43
|
+
root: bool = False) -> None:
|
44
|
+
"""Recursively build a Tree with collection contents."""
|
45
|
+
t = None
|
46
|
+
style = "bright_white on black"
|
47
|
+
|
48
|
+
project = project_client.get_projects_by_name(project_name)
|
49
|
+
if type(project) is list:
|
50
|
+
proj_guid = project[0]['elementHeader']['guid']
|
51
|
+
proj_props = project[0]['properties']
|
52
|
+
|
53
|
+
proj_type = proj_props.get('typeName', '---')
|
54
|
+
proj_unique = proj_props.get('qualifiedName', '---')
|
55
|
+
proj_identifier = proj_props.get('identifier', '---')
|
56
|
+
proj_name = proj_props.get('name', '---')
|
57
|
+
proj_desc = proj_props.get('description', '---')
|
58
|
+
proj_status = proj_props.get('projectStatus', '---')
|
59
|
+
proj_priority = proj_props.get('priority', '---')
|
60
|
+
proj_start = proj_props.get('startDate', '---')[:-10]
|
61
|
+
proj_props_md = (f"* Name: {proj_name}\n"
|
62
|
+
f"* Identifier: {proj_identifier}\n"
|
63
|
+
f"* Type: {proj_type}\n"
|
64
|
+
f"* Status: {proj_status}\n"
|
65
|
+
f"* priority: {proj_priority}\n"
|
66
|
+
f"* Start: {proj_start}\n"
|
67
|
+
f"* Description: {proj_desc}\n"
|
68
|
+
f"* GUID: {proj_guid}")
|
69
|
+
else:
|
70
|
+
return
|
71
|
+
|
72
|
+
team = project_client.get_project_team(proj_guid)
|
73
|
+
member_md = ""
|
74
|
+
if type(team) is list:
|
75
|
+
for member in team:
|
76
|
+
member_guid = member['member']['guid']
|
77
|
+
member_unique = member['member']['uniqueName']
|
78
|
+
member_md += f"* Member Unique Name: {member_unique}\n* Member GUID: {member_guid}"
|
79
|
+
proj_props_md += f"\n### Team Members\n {member_md}"
|
80
|
+
|
81
|
+
proj_props_out = Markdown(proj_props_md)
|
82
|
+
p = Panel.fit(proj_props_out, style=style, title=project_name)
|
83
|
+
t = tree.add(p)
|
84
|
+
|
85
|
+
linked_projects = project_client.get_linked_projects(proj_guid)
|
86
|
+
if type(linked_projects) is list:
|
87
|
+
for proj in linked_projects:
|
88
|
+
child_md = ""
|
89
|
+
child_guid = proj['elementHeader']['guid']
|
90
|
+
child_name = proj['properties']['name']
|
91
|
+
relationship = proj['relatedElement']['relationshipHeader']['type']['typeName']
|
92
|
+
if relationship != 'ProjectDependency':
|
93
|
+
continue
|
94
|
+
walk_project_hierarchy(project_client, child_name, t)
|
95
|
+
|
96
|
+
else:
|
97
|
+
return t
|
98
|
+
|
99
|
+
try:
|
100
|
+
console = Console(width=width, force_terminal=not jupyter)
|
101
|
+
tree = Tree(f"[bold bright green on black]{root}", guide_style="bold bright_blue")
|
102
|
+
p_client = ProjectManager(server_name, platform_url, user_id=user)
|
103
|
+
|
104
|
+
token1 = p_client.create_egeria_bearer_token(user, user_password)
|
105
|
+
|
106
|
+
walk_project_hierarchy(p_client, root, tree, root=True)
|
107
|
+
print(tree)
|
108
|
+
|
109
|
+
except (InvalidParameterException, PropertyServerException, UserNotAuthorizedException) as e:
|
110
|
+
print_exception_response(e)
|
111
|
+
|
112
|
+
|
113
|
+
def main():
|
114
|
+
parser = argparse.ArgumentParser()
|
115
|
+
|
116
|
+
parser.add_argument("--server", help="Name of the server to display status for")
|
117
|
+
parser.add_argument("--url", help="URL Platform to connect to")
|
118
|
+
parser.add_argument("--userid", help="User Id")
|
119
|
+
parser.add_argument("--password", help="User Password")
|
120
|
+
args = parser.parse_args()
|
121
|
+
|
122
|
+
server = args.server if args.server is not None else EGERIA_VIEW_SERVER
|
123
|
+
url = args.url if args.url is not None else EGERIA_PLATFORM_URL
|
124
|
+
userid = args.userid if args.userid is not None else EGERIA_USER
|
125
|
+
user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
|
126
|
+
|
127
|
+
try:
|
128
|
+
root_project = Prompt.ask("Enter the Root Project to start from:", default="Sustainability Campaign")
|
129
|
+
project_dependency_viewer(root_project, server, url, userid, user_pass)
|
130
|
+
except (KeyboardInterrupt):
|
131
|
+
pass
|
132
|
+
|
133
|
+
|
134
|
+
if __name__ == "__main__":
|
135
|
+
main()
|
@@ -88,6 +88,9 @@ def project_structure_viewer(root: str, server_name: str, platform_url: str, use
|
|
88
88
|
child_md = ""
|
89
89
|
child_guid = proj['elementHeader']['guid']
|
90
90
|
child_name = proj['properties']['name']
|
91
|
+
relationship = proj['relatedElement']['relationshipHeader']['type']['typeName']
|
92
|
+
if relationship != 'ProjectHierarchy':
|
93
|
+
continue
|
91
94
|
walk_project_hierarchy(project_client, child_name, t)
|
92
95
|
|
93
96
|
else:
|
@@ -15,6 +15,7 @@ import time
|
|
15
15
|
|
16
16
|
from rich import box
|
17
17
|
from rich.console import Console
|
18
|
+
from rich.markdown import Markdown
|
18
19
|
from rich.prompt import Prompt
|
19
20
|
from rich.table import Table
|
20
21
|
|
@@ -40,7 +41,7 @@ EGERIA_USER_PASSWORD = os.environ.get('EGERIA_USER_PASSWORD', 'secret')
|
|
40
41
|
EGERIA_JUPYTER = bool(os.environ.get('EGERIA_JUPYTER', 'False'))
|
41
42
|
EGERIA_WIDTH = int(os.environ.get('EGERIA_WIDTH', '200'))
|
42
43
|
|
43
|
-
def display_to_dos(search_string: str, server: str, url: str, username: str, user_pass:str,
|
44
|
+
def display_to_dos(search_string: str, status_filter: str, server: str, url: str, username: str, user_pass:str,
|
44
45
|
jupyter:bool=EGERIA_JUPYTER, width:int = EGERIA_WIDTH):
|
45
46
|
|
46
47
|
m_client = MyProfile(server, url, user_id=username)
|
@@ -60,15 +61,16 @@ def display_to_dos(search_string: str, server: str, url: str, username: str, use
|
|
60
61
|
|
61
62
|
table.add_column("Name")
|
62
63
|
table.add_column("Type Name")
|
63
|
-
|
64
|
+
table.add_column("GUID", no_wrap=True)
|
64
65
|
table.add_column("Created")
|
65
66
|
table.add_column("Priority")
|
66
67
|
table.add_column("Due")
|
67
68
|
table.add_column("Completion")
|
68
69
|
table.add_column("Status")
|
69
70
|
table.add_column("Sponsor")
|
71
|
+
table.add_column("Assigned")
|
70
72
|
|
71
|
-
todo_items = m_client.find_to_do(search_string)
|
73
|
+
todo_items = m_client.find_to_do(search_string,status = status_filter)
|
72
74
|
|
73
75
|
if type(todo_items) is str:
|
74
76
|
name = " "
|
@@ -80,18 +82,27 @@ def display_to_dos(search_string: str, server: str, url: str, username: str, use
|
|
80
82
|
|
81
83
|
status = " "
|
82
84
|
sponsor = " "
|
85
|
+
assigned_out = ''
|
83
86
|
else:
|
84
87
|
for item in todo_items:
|
88
|
+
guid = item['elementHeader']['guid']
|
85
89
|
props = item["properties"]
|
86
90
|
name = props["name"]
|
87
91
|
type_name = props.get("toDoType", " ")
|
88
|
-
created = props.get("creationTime", " ")
|
92
|
+
created = props.get("creationTime", " ")[:-19]
|
89
93
|
priority = str(props.get("priority", " "))
|
90
|
-
due = props.get("dueTime", "
|
91
|
-
completed = props.get("completionTime", "
|
92
|
-
status = props.get("
|
93
|
-
|
94
|
-
|
94
|
+
due = props.get("dueTime", " ")[:-19]
|
95
|
+
completed = props.get("completionTime", " ")[:-10]
|
96
|
+
status = props.get("toDoStatus")
|
97
|
+
|
98
|
+
assigned_out = ''
|
99
|
+
assigned_actors = item["assignedActors"]
|
100
|
+
if type(assigned_actors) is list:
|
101
|
+
assigned_md = ''
|
102
|
+
for actor in assigned_actors:
|
103
|
+
assigned_md += f"* {actor['uniqueName'].split(',')[0]}\n"
|
104
|
+
assigned_out = Markdown(assigned_md)
|
105
|
+
|
95
106
|
sponsor = "erinoverview"
|
96
107
|
if status in ("WAITING", "OPEN"):
|
97
108
|
status = f"[yellow]{status}"
|
@@ -101,7 +112,7 @@ def display_to_dos(search_string: str, server: str, url: str, username: str, use
|
|
101
112
|
status = f"[red]{status}"
|
102
113
|
|
103
114
|
table.add_row(
|
104
|
-
name, type_name, created, priority, due, completed, status, sponsor
|
115
|
+
name, type_name, guid, created, priority, due, completed, status, sponsor, assigned_out
|
105
116
|
)
|
106
117
|
|
107
118
|
m_client.close_session()
|
@@ -140,8 +151,10 @@ def main():
|
|
140
151
|
userid = args.userid if args.userid is not None else EGERIA_USER
|
141
152
|
user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
|
142
153
|
try:
|
143
|
-
search_string = Prompt.ask("Enter the ToDo you are searching for
|
144
|
-
|
154
|
+
search_string = Prompt.ask("Enter the ToDo you are searching for", default="*")
|
155
|
+
status_filter = Prompt.ask("Enter an optional status filter ['OPEN','IN_PROGRESS','WAITING','COMPLETE',"
|
156
|
+
"'ABANDONED', 'None']", default=None)
|
157
|
+
display_to_dos(search_string, status_filter,server, url, userid, user_pass)
|
145
158
|
except KeyboardInterrupt:
|
146
159
|
pass
|
147
160
|
|
@@ -0,0 +1,119 @@
|
|
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
|
+
import os
|
5
|
+
import argparse
|
6
|
+
import time
|
7
|
+
import sys
|
8
|
+
from rich import box
|
9
|
+
from rich.console import Console
|
10
|
+
from rich.table import Table
|
11
|
+
|
12
|
+
from pyegeria import (
|
13
|
+
InvalidParameterException,
|
14
|
+
PropertyServerException,
|
15
|
+
UserNotAuthorizedException,
|
16
|
+
print_exception_response,
|
17
|
+
ClassificationManager
|
18
|
+
)
|
19
|
+
|
20
|
+
|
21
|
+
console = Console()
|
22
|
+
EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
|
23
|
+
EGERIA_KAFKA_ENDPOINT = os.environ.get('KAFKA_ENDPOINT', 'localhost:9092')
|
24
|
+
EGERIA_PLATFORM_URL = os.environ.get('EGERIA_PLATFORM_URL', 'https://localhost:9443')
|
25
|
+
EGERIA_VIEW_SERVER = os.environ.get('VIEW_SERVER', 'view-server')
|
26
|
+
EGERIA_VIEW_SERVER_URL = os.environ.get('EGERIA_VIEW_SERVER_URL', 'https://localhost:9443')
|
27
|
+
EGERIA_INTEGRATION_DAEMON = os.environ.get('INTEGRATION_DAEMON', 'integration-daemon')
|
28
|
+
EGERIA_ADMIN_USER = os.environ.get('ADMIN_USER', 'garygeeke')
|
29
|
+
EGERIA_ADMIN_PASSWORD = os.environ.get('ADMIN_PASSWORD', 'secret')
|
30
|
+
EGERIA_USER = os.environ.get('EGERIA_USER', 'erinoverview')
|
31
|
+
EGERIA_USER_PASSWORD = os.environ.get('EGERIA_USER_PASSWORD', 'secret')
|
32
|
+
EGERIA_JUPYTER = bool(os.environ.get('EGERIA_JUPYTER', 'False'))
|
33
|
+
EGERIA_WIDTH = int(os.environ.get('EGERIA_WIDTH', '200'))
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
def list_user_ids(server: str,
|
38
|
+
url: str, username: str, password: str, jupyter:bool=EGERIA_JUPYTER, width:int = EGERIA_WIDTH
|
39
|
+
):
|
40
|
+
|
41
|
+
c_client = ClassificationManager(server, url, user_id=username, user_pwd=password)
|
42
|
+
token = c_client.create_egeria_bearer_token()
|
43
|
+
elements = c_client.get_elements('UserIdentity')
|
44
|
+
|
45
|
+
def generate_table() -> Table:
|
46
|
+
"""Make a new table."""
|
47
|
+
table = Table(
|
48
|
+
caption=f"Metadata Elements for: {url} - {server} @ {time.asctime()}",
|
49
|
+
style="bold bright_white on black",
|
50
|
+
row_styles=["bold bright_white on black"],
|
51
|
+
header_style="white on dark_blue",
|
52
|
+
title_style="bold bright_white on black",
|
53
|
+
caption_style="white on black",
|
54
|
+
show_lines=True,
|
55
|
+
box=box.ROUNDED,
|
56
|
+
title=f"Elements for Open Metadata Type: 'User Identities' ",
|
57
|
+
expand=True,
|
58
|
+
# width=500
|
59
|
+
)
|
60
|
+
|
61
|
+
table.add_column("Qualified Name")
|
62
|
+
table.add_column("Created")
|
63
|
+
table.add_column("GUID", width = 38,no_wrap=True)
|
64
|
+
table.add_column("UserId")
|
65
|
+
|
66
|
+
|
67
|
+
if type(elements) is list:
|
68
|
+
for element in elements:
|
69
|
+
header = element['elementHeader']
|
70
|
+
el_q_name = element['properties'].get('qualifiedName',"---")
|
71
|
+
el_create_time = header['versions']['createTime'][:-10]
|
72
|
+
el_guid = header['guid']
|
73
|
+
el_user_id = element['properties'].get('userId',"---")
|
74
|
+
|
75
|
+
table.add_row(el_q_name, el_create_time, el_guid, el_user_id)
|
76
|
+
|
77
|
+
return table
|
78
|
+
else:
|
79
|
+
print("No instances found")
|
80
|
+
sys.exit(1)
|
81
|
+
|
82
|
+
try:
|
83
|
+
console = Console(width=width, force_terminal=not jupyter)
|
84
|
+
|
85
|
+
with console.pager(styles=True):
|
86
|
+
console.print(generate_table())
|
87
|
+
|
88
|
+
except (InvalidParameterException, PropertyServerException, UserNotAuthorizedException) as e:
|
89
|
+
print_exception_response(e)
|
90
|
+
print("Perhaps the type name isn't known")
|
91
|
+
finally:
|
92
|
+
c_client.close_session()
|
93
|
+
|
94
|
+
|
95
|
+
def main():
|
96
|
+
parser = argparse.ArgumentParser()
|
97
|
+
parser.add_argument("--server", help="Name of the server to display status for")
|
98
|
+
parser.add_argument("--url", help="URL Platform to connect to")
|
99
|
+
parser.add_argument("--userid", help="User Id")
|
100
|
+
parser.add_argument("--password", help="Password")
|
101
|
+
|
102
|
+
args = parser.parse_args()
|
103
|
+
|
104
|
+
server = args.server if args.server is not None else EGERIA_VIEW_SERVER
|
105
|
+
url = args.url if args.url is not None else EGERIA_PLATFORM_URL
|
106
|
+
userid = args.userid if args.userid is not None else EGERIA_USER
|
107
|
+
password = args.password if args.password is not None else EGERIA_USER_PASSWORD
|
108
|
+
|
109
|
+
try:
|
110
|
+
list_user_ids(server, url, userid, password)
|
111
|
+
except(KeyboardInterrupt):
|
112
|
+
pass
|
113
|
+
|
114
|
+
|
115
|
+
if __name__ == "__main__":
|
116
|
+
main()
|
117
|
+
|
118
|
+
|
119
|
+
|
@@ -13,6 +13,7 @@ import click
|
|
13
13
|
from trogon import tui
|
14
14
|
|
15
15
|
from examples.widgets.cat.get_project_structure import project_structure_viewer
|
16
|
+
from examples.widgets.cat.get_project_dependencies import project_dependency_viewer
|
16
17
|
from examples.widgets.cat.list_cert_types import display_certifications
|
17
18
|
from examples.widgets.cat.get_asset_graph import asset_viewer
|
18
19
|
from examples.widgets.cat.get_collection import collection_viewer
|
@@ -22,12 +23,13 @@ from examples.widgets.cat.list_assets import display_assets
|
|
22
23
|
from examples.widgets.cat.list_glossary import display_glossary_terms
|
23
24
|
from examples.widgets.cat.list_projects import display_project_list
|
24
25
|
from examples.widgets.cat.list_tech_types import display_tech_types
|
25
|
-
from examples.widgets.cat.list_todos import display_to_dos
|
26
|
+
from examples.widgets.cat.list_todos import display_to_dos as list_todos
|
26
27
|
from examples.widgets.cli.ops_config import Config
|
27
28
|
from examples.widgets.cat.list_relationships import list_relationships
|
29
|
+
from examples.widgets.cat.list_user_ids import list_user_ids
|
28
30
|
|
29
|
-
from examples.widgets.ops.engine_actions import
|
30
|
-
|
31
|
+
from examples.widgets.ops.engine_actions import start_daemon as start_engine_host, \
|
32
|
+
stop_daemon as stop_engine_host
|
31
33
|
from examples.widgets.ops.integration_daemon_actions import (add_catalog_target, remove_catalog_target,
|
32
34
|
update_catalog_target, stop_server, start_server)
|
33
35
|
from examples.widgets.ops.list_catalog_targets import display_catalog_targets
|
@@ -415,11 +417,23 @@ def show_certification_types(ctx, search_string):
|
|
415
417
|
help="Enter the root project to start from")
|
416
418
|
@click.pass_context
|
417
419
|
def show_project_structure(ctx, project):
|
418
|
-
"""Show the structure of the project starting from a root project"""
|
420
|
+
"""Show the organization structure of the project starting from a root project"""
|
419
421
|
c = ctx.obj
|
420
422
|
project_structure_viewer(project, c.view_server, c.view_server_url, c.userid,
|
421
423
|
c.password, c.jupyter, c.width, c.timeout)
|
422
424
|
|
425
|
+
@show.command('project-dependencies')
|
426
|
+
@click.option('--project', default = 'Clinical Trials Management',
|
427
|
+
help="Enter the root project to start from")
|
428
|
+
@click.pass_context
|
429
|
+
def show_project_dependencies(ctx, project):
|
430
|
+
"""Show the dependencies of a project starting from a root project"""
|
431
|
+
c = ctx.obj
|
432
|
+
project_dependency_viewer(project, c.view_server, c.view_server_url, c.userid,
|
433
|
+
c.password, c.jupyter, c.width, c.timeout)
|
434
|
+
|
435
|
+
|
436
|
+
|
423
437
|
@show.command('relationships')
|
424
438
|
@click.option('--relationship', default = 'Certification',
|
425
439
|
help="Relationship type name to search for.")
|
@@ -500,11 +514,21 @@ def show_projects(ctx, search_string):
|
|
500
514
|
@show.command('to-dos')
|
501
515
|
@click.option('--search-string', default='*',
|
502
516
|
help='View the list of To-Do items')
|
517
|
+
@click.option('--status', type=click.Choice(['OPEN','IN_PROGRESS','WAITING','COMPLETE', 'ABANDONED', 'None'],
|
518
|
+
case_sensitive='False'), help = 'Enter an optional status filter', required=False, default=None)
|
519
|
+
@click.pass_context
|
520
|
+
def show_todos(ctx, search_string, status):
|
521
|
+
"""Display a tree graph of information about an asset """
|
522
|
+
c = ctx.obj
|
523
|
+
list_todos(search_string, status, c.view_server, c.view_server_url, c.userid,
|
524
|
+
c.password, c.jupyter, c.width)
|
525
|
+
|
526
|
+
@show.command('user-ids')
|
503
527
|
@click.pass_context
|
504
|
-
def show_todos(ctx
|
528
|
+
def show_todos(ctx):
|
505
529
|
"""Display a tree graph of information about an asset """
|
506
530
|
c = ctx.obj
|
507
|
-
|
531
|
+
list_user_ids( c.view_server, c.view_server_url, c.userid,
|
508
532
|
c.password, c.jupyter, c.width)
|
509
533
|
|
510
534
|
|
@@ -20,10 +20,12 @@ from examples.widgets.cat.list_assets import display_assets
|
|
20
20
|
from examples.widgets.cat.list_glossary import display_glossary_terms
|
21
21
|
from examples.widgets.cat.list_tech_types import display_tech_types
|
22
22
|
from examples.widgets.cat.list_projects import display_project_list
|
23
|
-
from examples.widgets.cat.list_todos import display_to_dos
|
23
|
+
from examples.widgets.cat.list_todos import display_to_dos as list_todos
|
24
24
|
from examples.widgets.cat.get_project_structure import project_structure_viewer
|
25
|
+
from examples.widgets.cat.get_project_dependencies import project_dependency_viewer
|
25
26
|
from examples.widgets.cat.list_cert_types import display_certifications
|
26
27
|
from examples.widgets.cat.list_relationships import list_relationships
|
28
|
+
from examples.widgets.cat.list_user_ids import list_user_ids
|
27
29
|
|
28
30
|
# from pyegeria import ServerOps
|
29
31
|
from examples.widgets.cli.ops_config import Config
|
@@ -207,11 +209,23 @@ def show_certification_types(ctx, search_string):
|
|
207
209
|
help="Enter the root project to start from")
|
208
210
|
@click.pass_context
|
209
211
|
def show_project_structure(ctx, project):
|
210
|
-
"""Show the structure of the project starting from a root project"""
|
212
|
+
"""Show the organization structure of the project starting from a root project"""
|
211
213
|
c = ctx.obj
|
212
214
|
project_structure_viewer(project, c.view_server, c.view_server_url, c.userid,
|
213
215
|
c.password, c.jupyter, c.width, c.timeout)
|
214
216
|
|
217
|
+
@show.command('project-dependencies')
|
218
|
+
@click.option('--project', default = 'Clinical Trials Management',
|
219
|
+
help="Enter the root project to start from")
|
220
|
+
@click.pass_context
|
221
|
+
def show_project_dependencies(ctx, project):
|
222
|
+
"""Show the dependencies of a project starting from a root project"""
|
223
|
+
c = ctx.obj
|
224
|
+
project_dependency_viewer(project, c.view_server, c.view_server_url, c.userid,
|
225
|
+
c.password, c.jupyter, c.width, c.timeout)
|
226
|
+
|
227
|
+
|
228
|
+
|
215
229
|
@show.command('relationships')
|
216
230
|
@click.option('--relationship', default = 'Certification',
|
217
231
|
help="Relationship type name to search for.")
|
@@ -227,12 +241,22 @@ def show_relationships(ctx, relationship):
|
|
227
241
|
@show.command('to-dos')
|
228
242
|
@click.option('--search-string', default='*',
|
229
243
|
help='View the list of To-Do items')
|
244
|
+
@click.option('--status', type=click.Choice(['OPEN','IN_PROGRESS','WAITING','COMPLETE', 'ABANDONED', 'None'],
|
245
|
+
case_sensitive='False'), help = 'Enter an optional status filter', required=False, default=None)
|
230
246
|
@click.pass_context
|
231
|
-
def show_todos(ctx, search_string):
|
247
|
+
def show_todos(ctx, search_string, status):
|
232
248
|
"""Display a tree graph of information about an asset """
|
233
249
|
c = ctx.obj
|
234
|
-
|
235
|
-
|
250
|
+
list_todos(search_string, status, c.view_server, c.view_server_url, c.userid,
|
251
|
+
c.password, c.jupyter, c.width)
|
252
|
+
|
253
|
+
@show.command('user-ids')
|
254
|
+
@click.pass_context
|
255
|
+
def show_todos(ctx):
|
256
|
+
"""Display a tree graph of information about an asset """
|
257
|
+
c = ctx.obj
|
258
|
+
list_user_ids( c.view_server, c.view_server_url, c.userid,
|
259
|
+
c.password, c.jupyter, c.width)
|
236
260
|
|
237
261
|
#
|
238
262
|
# Tell
|
@@ -12,13 +12,15 @@ This is an emerging capability based on the **click** package. Feedback welcome!
|
|
12
12
|
import click
|
13
13
|
from trogon import tui
|
14
14
|
|
15
|
+
from examples.widgets.cat import list_todos
|
15
16
|
from examples.widgets.cli.ops_config import Config
|
16
17
|
|
17
18
|
from examples.widgets.my.monitor_open_todos import display_todos
|
18
19
|
from examples.widgets.my.monitor_my_todos import display_my_todos
|
19
20
|
from examples.widgets.my.list_my_profile import display_my_profile
|
20
21
|
from examples.widgets.my.list_my_roles import display_my_roles
|
21
|
-
|
22
|
+
from examples.widgets.my.todo_actions import create_todo, delete_todo, change_todo_status, mark_todo_complete, \
|
23
|
+
reassign_todo
|
22
24
|
|
23
25
|
|
24
26
|
# class Config(object):
|
@@ -148,6 +150,11 @@ def show_open_todos(ctx):
|
|
148
150
|
def tell(ctx):
|
149
151
|
"""Perform actions an Egeria Objects"""
|
150
152
|
pass
|
153
|
+
tell.add_command(create_todo)
|
154
|
+
tell.add_command(delete_todo)
|
155
|
+
tell.add_command(change_todo_status)
|
156
|
+
tell.add_command(mark_todo_complete)
|
157
|
+
tell.add_command(reassign_todo)
|
151
158
|
|
152
159
|
|
153
160
|
if __name__ == '__main__':
|
@@ -14,8 +14,8 @@ from trogon import tui
|
|
14
14
|
|
15
15
|
# from pyegeria import ServerOps
|
16
16
|
from examples.widgets.cli.ops_config import Config
|
17
|
-
from examples.widgets.ops.engine_actions import
|
18
|
-
|
17
|
+
from examples.widgets.ops.engine_actions import start_daemon as start_engine_host, \
|
18
|
+
stop_daemon as stop_engine_host
|
19
19
|
from examples.widgets.ops.integration_daemon_actions import (add_catalog_target, remove_catalog_target,
|
20
20
|
update_catalog_target, stop_server, start_server)
|
21
21
|
from examples.widgets.ops.list_catalog_targets import display_catalog_targets
|