pyegeria 0.8.2__py3-none-any.whl → 0.8.4__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.
- examples/widgets/cat/get_project_dependencies.py +83 -50
- examples/widgets/cat/get_project_structure.py +83 -50
- examples/widgets/cat/list_todos.py +59 -33
- examples/widgets/my/list_my_profile.py +61 -36
- examples/widgets/my/list_my_roles.py +40 -23
- examples/widgets/my/monitor_my_todos.py +45 -23
- examples/widgets/my/monitor_open_todos.py +36 -22
- examples/widgets/my/todo_actions.py +132 -71
- pyegeria/__init__.py +1 -0
- pyegeria/_client.py +1 -9
- pyegeria/egeria_cat_client.py +2 -12
- pyegeria/egeria_client.py +108 -0
- pyegeria/egeria_my_client.py +1 -1
- pyegeria/egeria_ops_client.py +6 -2
- pyegeria/glossary_browser_omvs.py +2 -3
- pyegeria/glossary_manager_omvs.py +1 -3
- pyegeria/my_profile_omvs.py +1 -1
- pyegeria/project_manager_omvs.py +1 -2
- {pyegeria-0.8.2.dist-info → pyegeria-0.8.4.dist-info}/METADATA +1 -1
- {pyegeria-0.8.2.dist-info → pyegeria-0.8.4.dist-info}/RECORD +23 -22
- {pyegeria-0.8.2.dist-info → pyegeria-0.8.4.dist-info}/LICENSE +0 -0
- {pyegeria-0.8.2.dist-info → pyegeria-0.8.4.dist-info}/WHEEL +0 -0
- {pyegeria-0.8.2.dist-info → pyegeria-0.8.4.dist-info}/entry_points.txt +0 -0
@@ -17,55 +17,78 @@ from rich.panel import Panel
|
|
17
17
|
from rich.prompt import Prompt
|
18
18
|
from rich.tree import Tree
|
19
19
|
|
20
|
-
from pyegeria import (
|
21
|
-
|
20
|
+
from pyegeria import (
|
21
|
+
ProjectManager,
|
22
|
+
UserNotAuthorizedException,
|
23
|
+
PropertyServerException,
|
24
|
+
InvalidParameterException,
|
25
|
+
)
|
26
|
+
from pyegeria._exceptions import (
|
27
|
+
print_exception_response,
|
28
|
+
)
|
22
29
|
|
23
30
|
disable_ssl_warnings = True
|
24
31
|
EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
|
25
|
-
EGERIA_KAFKA_ENDPOINT = os.environ.get(
|
26
|
-
EGERIA_PLATFORM_URL = os.environ.get(
|
27
|
-
EGERIA_VIEW_SERVER = os.environ.get(
|
28
|
-
EGERIA_VIEW_SERVER_URL = os.environ.get(
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
32
|
+
EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
|
33
|
+
EGERIA_PLATFORM_URL = os.environ.get("EGERIA_PLATFORM_URL", "https://localhost:9443")
|
34
|
+
EGERIA_VIEW_SERVER = os.environ.get("VIEW_SERVER", "view-server")
|
35
|
+
EGERIA_VIEW_SERVER_URL = os.environ.get(
|
36
|
+
"EGERIA_VIEW_SERVER_URL", "https://localhost:9443"
|
37
|
+
)
|
38
|
+
EGERIA_INTEGRATION_DAEMON = os.environ.get("INTEGRATION_DAEMON", "integration-daemon")
|
39
|
+
EGERIA_ADMIN_USER = os.environ.get("ADMIN_USER", "garygeeke")
|
40
|
+
EGERIA_ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "secret")
|
41
|
+
EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
|
42
|
+
EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
|
43
|
+
EGERIA_JUPYTER = bool(os.environ.get("EGERIA_JUPYTER", "False"))
|
44
|
+
EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "200"))
|
45
|
+
|
46
|
+
|
47
|
+
def project_dependency_viewer(
|
48
|
+
root: str,
|
49
|
+
server_name: str,
|
50
|
+
platform_url: str,
|
51
|
+
user: str,
|
52
|
+
user_password: str,
|
53
|
+
jupyter: bool = EGERIA_JUPYTER,
|
54
|
+
width: int = EGERIA_WIDTH,
|
55
|
+
timeout: int = 30,
|
56
|
+
):
|
57
|
+
"""A simple collection viewer"""
|
58
|
+
|
59
|
+
def walk_project_hierarchy(
|
60
|
+
project_client: ProjectManager,
|
61
|
+
project_name: str,
|
62
|
+
tree: Tree,
|
63
|
+
root: bool = False,
|
64
|
+
) -> None:
|
44
65
|
"""Recursively build a Tree with collection contents."""
|
45
66
|
t = None
|
46
67
|
style = "bright_white on black"
|
47
68
|
|
48
69
|
project = project_client.get_projects_by_name(project_name)
|
49
70
|
if type(project) is list:
|
50
|
-
proj_guid = project[0][
|
51
|
-
proj_props = project[0][
|
52
|
-
|
53
|
-
proj_type = proj_props.get(
|
54
|
-
proj_unique = proj_props.get(
|
55
|
-
proj_identifier = proj_props.get(
|
56
|
-
proj_name = proj_props.get(
|
57
|
-
proj_desc = proj_props.get(
|
58
|
-
proj_status = proj_props.get(
|
59
|
-
proj_priority = proj_props.get(
|
60
|
-
proj_start = proj_props.get(
|
61
|
-
proj_props_md = (
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
71
|
+
proj_guid = project[0]["elementHeader"]["guid"]
|
72
|
+
proj_props = project[0]["properties"]
|
73
|
+
|
74
|
+
proj_type = proj_props.get("typeName", "---")
|
75
|
+
proj_unique = proj_props.get("qualifiedName", "---")
|
76
|
+
proj_identifier = proj_props.get("identifier", "---")
|
77
|
+
proj_name = proj_props.get("name", "---")
|
78
|
+
proj_desc = proj_props.get("description", "---")
|
79
|
+
proj_status = proj_props.get("projectStatus", "---")
|
80
|
+
proj_priority = proj_props.get("priority", "---")
|
81
|
+
proj_start = proj_props.get("startDate", "---")[:-10]
|
82
|
+
proj_props_md = (
|
83
|
+
f"* Name: {proj_name}\n"
|
84
|
+
f"* Identifier: {proj_identifier}\n"
|
85
|
+
f"* Type: {proj_type}\n"
|
86
|
+
f"* Status: {proj_status}\n"
|
87
|
+
f"* priority: {proj_priority}\n"
|
88
|
+
f"* Start: {proj_start}\n"
|
89
|
+
f"* Description: {proj_desc}\n"
|
90
|
+
f"* GUID: {proj_guid}"
|
91
|
+
)
|
69
92
|
else:
|
70
93
|
return
|
71
94
|
|
@@ -73,8 +96,8 @@ def project_dependency_viewer(root: str, server_name: str, platform_url: str, us
|
|
73
96
|
member_md = ""
|
74
97
|
if type(team) is list:
|
75
98
|
for member in team:
|
76
|
-
member_guid = member[
|
77
|
-
member_unique = member[
|
99
|
+
member_guid = member["member"]["guid"]
|
100
|
+
member_unique = member["member"]["uniqueName"]
|
78
101
|
member_md += f"* Member Unique Name: {member_unique}\n* Member GUID: {member_guid}"
|
79
102
|
proj_props_md += f"\n### Team Members\n {member_md}"
|
80
103
|
|
@@ -86,10 +109,12 @@ def project_dependency_viewer(root: str, server_name: str, platform_url: str, us
|
|
86
109
|
if type(linked_projects) is list:
|
87
110
|
for proj in linked_projects:
|
88
111
|
child_md = ""
|
89
|
-
child_guid = proj[
|
90
|
-
child_name = proj[
|
91
|
-
relationship = proj[
|
92
|
-
|
112
|
+
child_guid = proj["elementHeader"]["guid"]
|
113
|
+
child_name = proj["properties"]["name"]
|
114
|
+
relationship = proj["relatedElement"]["relationshipHeader"]["type"][
|
115
|
+
"typeName"
|
116
|
+
]
|
117
|
+
if relationship != "ProjectDependency":
|
93
118
|
continue
|
94
119
|
walk_project_hierarchy(project_client, child_name, t)
|
95
120
|
|
@@ -98,7 +123,9 @@ def project_dependency_viewer(root: str, server_name: str, platform_url: str, us
|
|
98
123
|
|
99
124
|
try:
|
100
125
|
console = Console(width=width, force_terminal=not jupyter)
|
101
|
-
tree = Tree(
|
126
|
+
tree = Tree(
|
127
|
+
f"[bold bright green on black]{root}", guide_style="bold bright_blue"
|
128
|
+
)
|
102
129
|
p_client = ProjectManager(server_name, platform_url, user_id=user)
|
103
130
|
|
104
131
|
token1 = p_client.create_egeria_bearer_token(user, user_password)
|
@@ -106,7 +133,11 @@ def project_dependency_viewer(root: str, server_name: str, platform_url: str, us
|
|
106
133
|
walk_project_hierarchy(p_client, root, tree, root=True)
|
107
134
|
print(tree)
|
108
135
|
|
109
|
-
except (
|
136
|
+
except (
|
137
|
+
InvalidParameterException,
|
138
|
+
PropertyServerException,
|
139
|
+
UserNotAuthorizedException,
|
140
|
+
) as e:
|
110
141
|
print_exception_response(e)
|
111
142
|
|
112
143
|
|
@@ -125,9 +156,11 @@ def main():
|
|
125
156
|
user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
|
126
157
|
|
127
158
|
try:
|
128
|
-
root_project = Prompt.ask(
|
159
|
+
root_project = Prompt.ask(
|
160
|
+
"Enter the Root Project to start from:", default="Sustainability Campaign"
|
161
|
+
)
|
129
162
|
project_dependency_viewer(root_project, server, url, userid, user_pass)
|
130
|
-
except
|
163
|
+
except KeyboardInterrupt:
|
131
164
|
pass
|
132
165
|
|
133
166
|
|
@@ -17,55 +17,78 @@ from rich.panel import Panel
|
|
17
17
|
from rich.prompt import Prompt
|
18
18
|
from rich.tree import Tree
|
19
19
|
|
20
|
-
from pyegeria import (
|
21
|
-
|
20
|
+
from pyegeria import (
|
21
|
+
ProjectManager,
|
22
|
+
UserNotAuthorizedException,
|
23
|
+
PropertyServerException,
|
24
|
+
InvalidParameterException,
|
25
|
+
)
|
26
|
+
from pyegeria._exceptions import (
|
27
|
+
print_exception_response,
|
28
|
+
)
|
22
29
|
|
23
30
|
disable_ssl_warnings = True
|
24
31
|
EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
|
25
|
-
EGERIA_KAFKA_ENDPOINT = os.environ.get(
|
26
|
-
EGERIA_PLATFORM_URL = os.environ.get(
|
27
|
-
EGERIA_VIEW_SERVER = os.environ.get(
|
28
|
-
EGERIA_VIEW_SERVER_URL = os.environ.get(
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
32
|
+
EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
|
33
|
+
EGERIA_PLATFORM_URL = os.environ.get("EGERIA_PLATFORM_URL", "https://localhost:9443")
|
34
|
+
EGERIA_VIEW_SERVER = os.environ.get("VIEW_SERVER", "view-server")
|
35
|
+
EGERIA_VIEW_SERVER_URL = os.environ.get(
|
36
|
+
"EGERIA_VIEW_SERVER_URL", "https://localhost:9443"
|
37
|
+
)
|
38
|
+
EGERIA_INTEGRATION_DAEMON = os.environ.get("INTEGRATION_DAEMON", "integration-daemon")
|
39
|
+
EGERIA_ADMIN_USER = os.environ.get("ADMIN_USER", "garygeeke")
|
40
|
+
EGERIA_ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "secret")
|
41
|
+
EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
|
42
|
+
EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
|
43
|
+
EGERIA_JUPYTER = bool(os.environ.get("EGERIA_JUPYTER", "False"))
|
44
|
+
EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "200"))
|
45
|
+
|
46
|
+
|
47
|
+
def project_structure_viewer(
|
48
|
+
root: str,
|
49
|
+
server_name: str,
|
50
|
+
platform_url: str,
|
51
|
+
user: str,
|
52
|
+
user_password: str,
|
53
|
+
jupyter: bool = EGERIA_JUPYTER,
|
54
|
+
width: int = EGERIA_WIDTH,
|
55
|
+
timeout: int = 30,
|
56
|
+
):
|
57
|
+
"""A simple collection viewer"""
|
58
|
+
|
59
|
+
def walk_project_hierarchy(
|
60
|
+
project_client: ProjectManager,
|
61
|
+
project_name: str,
|
62
|
+
tree: Tree,
|
63
|
+
root: bool = False,
|
64
|
+
) -> None:
|
44
65
|
"""Recursively build a Tree with collection contents."""
|
45
66
|
t = None
|
46
67
|
style = "bright_white on black"
|
47
68
|
|
48
69
|
project = project_client.get_projects_by_name(project_name)
|
49
70
|
if type(project) is list:
|
50
|
-
proj_guid = project[0][
|
51
|
-
proj_props = project[0][
|
52
|
-
|
53
|
-
proj_type = proj_props.get(
|
54
|
-
proj_unique = proj_props.get(
|
55
|
-
proj_identifier = proj_props.get(
|
56
|
-
proj_name = proj_props.get(
|
57
|
-
proj_desc = proj_props.get(
|
58
|
-
proj_status = proj_props.get(
|
59
|
-
proj_priority = proj_props.get(
|
60
|
-
proj_start = proj_props.get(
|
61
|
-
proj_props_md = (
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
71
|
+
proj_guid = project[0]["elementHeader"]["guid"]
|
72
|
+
proj_props = project[0]["properties"]
|
73
|
+
|
74
|
+
proj_type = proj_props.get("typeName", "---")
|
75
|
+
proj_unique = proj_props.get("qualifiedName", "---")
|
76
|
+
proj_identifier = proj_props.get("identifier", "---")
|
77
|
+
proj_name = proj_props.get("name", "---")
|
78
|
+
proj_desc = proj_props.get("description", "---")
|
79
|
+
proj_status = proj_props.get("projectStatus", "---")
|
80
|
+
proj_priority = proj_props.get("priority", "---")
|
81
|
+
proj_start = proj_props.get("startDate", "---")[:-10]
|
82
|
+
proj_props_md = (
|
83
|
+
f"* Name: {proj_name}\n"
|
84
|
+
f"* Identifier: {proj_identifier}\n"
|
85
|
+
f"* Type: {proj_type}\n"
|
86
|
+
f"* Status: {proj_status}\n"
|
87
|
+
f"* priority: {proj_priority}\n"
|
88
|
+
f"* Start: {proj_start}\n"
|
89
|
+
f"* Description: {proj_desc}\n"
|
90
|
+
f"* GUID: {proj_guid}"
|
91
|
+
)
|
69
92
|
else:
|
70
93
|
return
|
71
94
|
|
@@ -73,8 +96,8 @@ def project_structure_viewer(root: str, server_name: str, platform_url: str, use
|
|
73
96
|
member_md = ""
|
74
97
|
if type(team) is list:
|
75
98
|
for member in team:
|
76
|
-
member_guid = member[
|
77
|
-
member_unique = member[
|
99
|
+
member_guid = member["member"]["guid"]
|
100
|
+
member_unique = member["member"]["uniqueName"]
|
78
101
|
member_md += f"* Member Unique Name: {member_unique}\n* Member GUID: {member_guid}"
|
79
102
|
proj_props_md += f"\n### Team Members\n {member_md}"
|
80
103
|
|
@@ -86,10 +109,12 @@ def project_structure_viewer(root: str, server_name: str, platform_url: str, use
|
|
86
109
|
if type(linked_projects) is list:
|
87
110
|
for proj in linked_projects:
|
88
111
|
child_md = ""
|
89
|
-
child_guid = proj[
|
90
|
-
child_name = proj[
|
91
|
-
relationship = proj[
|
92
|
-
|
112
|
+
child_guid = proj["elementHeader"]["guid"]
|
113
|
+
child_name = proj["properties"]["name"]
|
114
|
+
relationship = proj["relatedElement"]["relationshipHeader"]["type"][
|
115
|
+
"typeName"
|
116
|
+
]
|
117
|
+
if relationship != "ProjectHierarchy":
|
93
118
|
continue
|
94
119
|
walk_project_hierarchy(project_client, child_name, t)
|
95
120
|
|
@@ -98,7 +123,9 @@ def project_structure_viewer(root: str, server_name: str, platform_url: str, use
|
|
98
123
|
|
99
124
|
try:
|
100
125
|
console = Console(width=width, force_terminal=not jupyter)
|
101
|
-
tree = Tree(
|
126
|
+
tree = Tree(
|
127
|
+
f"[bold bright green on black]{root}", guide_style="bold bright_blue"
|
128
|
+
)
|
102
129
|
p_client = ProjectManager(server_name, platform_url, user_id=user)
|
103
130
|
|
104
131
|
token1 = p_client.create_egeria_bearer_token(user, user_password)
|
@@ -106,7 +133,11 @@ def project_structure_viewer(root: str, server_name: str, platform_url: str, use
|
|
106
133
|
walk_project_hierarchy(p_client, root, tree, root=True)
|
107
134
|
print(tree)
|
108
135
|
|
109
|
-
except (
|
136
|
+
except (
|
137
|
+
InvalidParameterException,
|
138
|
+
PropertyServerException,
|
139
|
+
UserNotAuthorizedException,
|
140
|
+
) as e:
|
110
141
|
print_exception_response(e)
|
111
142
|
|
112
143
|
|
@@ -125,9 +156,11 @@ def main():
|
|
125
156
|
user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
|
126
157
|
|
127
158
|
try:
|
128
|
-
root_project = Prompt.ask(
|
159
|
+
root_project = Prompt.ask(
|
160
|
+
"Enter the Root Project to start from:", default="Sustainability Campaign"
|
161
|
+
)
|
129
162
|
project_structure_viewer(root_project, server, url, userid, user_pass)
|
130
|
-
except
|
163
|
+
except KeyboardInterrupt:
|
131
164
|
pass
|
132
165
|
|
133
166
|
|
@@ -28,26 +28,38 @@ from pyegeria import (
|
|
28
28
|
from pyegeria.my_profile_omvs import MyProfile
|
29
29
|
|
30
30
|
EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
|
31
|
-
EGERIA_KAFKA_ENDPOINT = os.environ.get(
|
32
|
-
EGERIA_PLATFORM_URL = os.environ.get(
|
33
|
-
EGERIA_VIEW_SERVER = os.environ.get(
|
34
|
-
EGERIA_VIEW_SERVER_URL = os.environ.get(
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
31
|
+
EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
|
32
|
+
EGERIA_PLATFORM_URL = os.environ.get("EGERIA_PLATFORM_URL", "https://localhost:9443")
|
33
|
+
EGERIA_VIEW_SERVER = os.environ.get("VIEW_SERVER", "view-server")
|
34
|
+
EGERIA_VIEW_SERVER_URL = os.environ.get(
|
35
|
+
"EGERIA_VIEW_SERVER_URL", "https://localhost:9443"
|
36
|
+
)
|
37
|
+
EGERIA_INTEGRATION_DAEMON = os.environ.get("INTEGRATION_DAEMON", "integration-daemon")
|
38
|
+
EGERIA_INTEGRATION_DAEMON_URL = os.environ.get(
|
39
|
+
"EGERIA_INTEGRATION_DAEMON_URL", "https://localhost:9443"
|
40
|
+
)
|
41
|
+
EGERIA_ADMIN_USER = os.environ.get("ADMIN_USER", "garygeeke")
|
42
|
+
EGERIA_ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "secret")
|
43
|
+
EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
|
44
|
+
EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
|
45
|
+
EGERIA_JUPYTER = bool(os.environ.get("EGERIA_JUPYTER", "False"))
|
46
|
+
EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "200"))
|
47
|
+
|
48
|
+
|
49
|
+
def display_to_dos(
|
50
|
+
search_string: str,
|
51
|
+
status_filter: str,
|
52
|
+
server: str,
|
53
|
+
url: str,
|
54
|
+
username: str,
|
55
|
+
user_pass: str,
|
56
|
+
jupyter: bool = EGERIA_JUPYTER,
|
57
|
+
width: int = EGERIA_WIDTH,
|
58
|
+
):
|
47
59
|
m_client = MyProfile(server, url, user_id=username)
|
48
60
|
token = m_client.create_egeria_bearer_token(username, user_pass)
|
49
61
|
|
50
|
-
def generate_table(search_string:str =
|
62
|
+
def generate_table(search_string: str = "*") -> Table:
|
51
63
|
"""Make a new table."""
|
52
64
|
table = Table(
|
53
65
|
title=f"Open ToDos for Platform {url} @ {time.asctime()}",
|
@@ -56,7 +68,7 @@ def display_to_dos(search_string: str, status_filter: str, server: str, url: str
|
|
56
68
|
show_lines=True,
|
57
69
|
box=box.ROUNDED,
|
58
70
|
caption=f"ToDos for Server '{server}' @ Platform - {url}",
|
59
|
-
expand=True
|
71
|
+
expand=True,
|
60
72
|
)
|
61
73
|
|
62
74
|
table.add_column("Name")
|
@@ -70,7 +82,7 @@ def display_to_dos(search_string: str, status_filter: str, server: str, url: str
|
|
70
82
|
table.add_column("Sponsor")
|
71
83
|
table.add_column("Assigned")
|
72
84
|
|
73
|
-
todo_items = m_client.find_to_do(search_string,status
|
85
|
+
todo_items = m_client.find_to_do(search_string, status=status_filter)
|
74
86
|
|
75
87
|
if type(todo_items) is str:
|
76
88
|
name = " "
|
@@ -82,10 +94,10 @@ def display_to_dos(search_string: str, status_filter: str, server: str, url: str
|
|
82
94
|
|
83
95
|
status = " "
|
84
96
|
sponsor = " "
|
85
|
-
assigned_out =
|
97
|
+
assigned_out = ""
|
86
98
|
else:
|
87
99
|
for item in todo_items:
|
88
|
-
guid = item[
|
100
|
+
guid = item["elementHeader"]["guid"]
|
89
101
|
props = item["properties"]
|
90
102
|
name = props["name"]
|
91
103
|
type_name = props.get("toDoType", " ")
|
@@ -93,12 +105,12 @@ def display_to_dos(search_string: str, status_filter: str, server: str, url: str
|
|
93
105
|
priority = str(props.get("priority", " "))
|
94
106
|
due = props.get("dueTime", " ")[:-19]
|
95
107
|
completed = props.get("completionTime", " ")[:-10]
|
96
|
-
status = props.get("toDoStatus",
|
108
|
+
status = props.get("toDoStatus", "---")
|
97
109
|
|
98
|
-
assigned_out =
|
99
|
-
assigned_actors = item.get("assignedActors",
|
110
|
+
assigned_out = ""
|
111
|
+
assigned_actors = item.get("assignedActors", "---")
|
100
112
|
if type(assigned_actors) is list:
|
101
|
-
assigned_md =
|
113
|
+
assigned_md = ""
|
102
114
|
for actor in assigned_actors:
|
103
115
|
assigned_md += f"* {actor['uniqueName'].split(',')[0]}\n"
|
104
116
|
assigned_out = Markdown(assigned_md)
|
@@ -112,7 +124,16 @@ def display_to_dos(search_string: str, status_filter: str, server: str, url: str
|
|
112
124
|
status = f"[red]{status}"
|
113
125
|
|
114
126
|
table.add_row(
|
115
|
-
name,
|
127
|
+
name,
|
128
|
+
type_name,
|
129
|
+
guid,
|
130
|
+
created,
|
131
|
+
priority,
|
132
|
+
due,
|
133
|
+
completed,
|
134
|
+
status,
|
135
|
+
sponsor,
|
136
|
+
assigned_out,
|
116
137
|
)
|
117
138
|
|
118
139
|
m_client.close_session()
|
@@ -125,11 +146,13 @@ def display_to_dos(search_string: str, status_filter: str, server: str, url: str
|
|
125
146
|
# live.update(generate_table())
|
126
147
|
console = Console(width=width, force_terminal=not jupyter)
|
127
148
|
with console.pager():
|
128
|
-
|
129
149
|
console.print(generate_table(search_string))
|
130
150
|
|
131
|
-
|
132
|
-
|
151
|
+
except (
|
152
|
+
InvalidParameterException,
|
153
|
+
PropertyServerException,
|
154
|
+
UserNotAuthorizedException,
|
155
|
+
) as e:
|
133
156
|
print_exception_response(e)
|
134
157
|
except KeyboardInterrupt:
|
135
158
|
pass
|
@@ -152,12 +175,15 @@ def main():
|
|
152
175
|
user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
|
153
176
|
try:
|
154
177
|
search_string = Prompt.ask("Enter the ToDo you are searching for", default="*")
|
155
|
-
status_filter = Prompt.ask(
|
156
|
-
|
157
|
-
|
178
|
+
status_filter = Prompt.ask(
|
179
|
+
"Enter an optional status filter ['OPEN','IN_PROGRESS','WAITING','COMPLETE',"
|
180
|
+
"'ABANDONED', 'None']",
|
181
|
+
default=None,
|
182
|
+
)
|
183
|
+
display_to_dos(search_string, status_filter, server, url, userid, user_pass)
|
158
184
|
except KeyboardInterrupt:
|
159
185
|
pass
|
160
186
|
|
161
187
|
|
162
188
|
if __name__ == "__main__":
|
163
|
-
main()
|
189
|
+
main()
|