pyegeria 0.3.6__py3-none-any.whl → 0.3.8__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/__init__.py +2 -1
- pyegeria/loaded_resources_omvs.py +159 -0
- pyegeria/my_profile_omvs.py +6 -5
- pyegeria/registered_info.py +1 -1
- pyegeria-0.3.8.data/scripts/collection_viewer.py +98 -0
- {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/engine_action_status.py +7 -4
- {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/find_todos.py +3 -3
- pyegeria-0.3.8.data/scripts/get_relationship_types.py +141 -0
- pyegeria-0.3.8.data/scripts/get_tech_details.py +147 -0
- pyegeria-0.3.8.data/scripts/get_tech_types.py +124 -0
- pyegeria-0.3.8.data/scripts/project_list_viewer.py +153 -0
- {pyegeria-0.3.6.dist-info → pyegeria-0.3.8.dist-info}/METADATA +1 -1
- pyegeria-0.3.8.dist-info/RECORD +42 -0
- pyegeria-0.3.6.dist-info/RECORD +0 -36
- {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/glossary_view.py +0 -0
- {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/gov_engine_status.py +0 -0
- {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/integration_daemon_status.py +0 -0
- {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/list_asset_types.py +0 -0
- {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/multi-server_status.py +0 -0
- {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/my_todos.py +0 -0
- {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/open_todos.py +0 -0
- {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/server_status.py +0 -0
- {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/server_status_widget.py +0 -0
- {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/view_my_profile.py +0 -0
- {pyegeria-0.3.6.dist-info → pyegeria-0.3.8.dist-info}/LICENSE +0 -0
- {pyegeria-0.3.6.dist-info → pyegeria-0.3.8.dist-info}/WHEEL +0 -0
- {pyegeria-0.3.6.dist-info → pyegeria-0.3.8.dist-info}/top_level.txt +0 -0
pyegeria/__init__.py
CHANGED
@@ -43,4 +43,5 @@ from .server_operations import ServerOps
|
|
43
43
|
from .collection_manager_omvs import CollectionManager
|
44
44
|
from .project_manager_omvs import ProjectManager
|
45
45
|
from .valid_metadata_omvs import ValidMetadataManager
|
46
|
-
|
46
|
+
from .loaded_resources_omvs import LoadedResources
|
47
|
+
__version__ = "0.38"
|
@@ -0,0 +1,159 @@
|
|
1
|
+
"""
|
2
|
+
SPDX-License-Identifier: Apache-2.0
|
3
|
+
Copyright Contributors to the ODPi Egeria project.
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
This module allows users to query the available (registered) capabilities of Egeria. Detailed information is returned
|
8
|
+
to provide both insight and understanding in how to use these capabilities. For example, when configuring an Egeria
|
9
|
+
integration service, it is importregistered_info.pyant to know what companion service it depends on so that you can make sure the
|
10
|
+
companion service is also configured and running.
|
11
|
+
|
12
|
+
"""
|
13
|
+
|
14
|
+
import pandas as pd
|
15
|
+
from tabulate import tabulate
|
16
|
+
|
17
|
+
from pyegeria._client import Client
|
18
|
+
from pyegeria.utils import wrap_text
|
19
|
+
|
20
|
+
|
21
|
+
class LoadedResources(Client):
|
22
|
+
""" Client to search and retrieve currently loaded information about connectors, templates, governance actions,
|
23
|
+
etc.
|
24
|
+
|
25
|
+
Attributes:
|
26
|
+
----------
|
27
|
+
server_name: str
|
28
|
+
Name of the server to use.
|
29
|
+
platform_url : str
|
30
|
+
URL of the server platform to connect to
|
31
|
+
user_id : str
|
32
|
+
The identity of the user calling the method - this sets a default optionally used by the methods
|
33
|
+
when the user doesn't pass the user_id on a method call.
|
34
|
+
user_pwd: str
|
35
|
+
The password associated with the user_id. Defaults to None
|
36
|
+
verify_flag: bool
|
37
|
+
Flag to indicate if SSL Certificates should be verified in the HTTP requests.
|
38
|
+
Defaults to False.
|
39
|
+
|
40
|
+
Methods:
|
41
|
+
-------
|
42
|
+
|
43
|
+
"""
|
44
|
+
|
45
|
+
admin_command_root: str
|
46
|
+
|
47
|
+
def __init__(
|
48
|
+
self,
|
49
|
+
server_name: str,
|
50
|
+
platform_url: str,
|
51
|
+
user_id: str,
|
52
|
+
user_pwd: str = None,
|
53
|
+
verify_flag: bool = False,
|
54
|
+
):
|
55
|
+
if server_name is None:
|
56
|
+
server_name = "NA"
|
57
|
+
Client.__init__(self, server_name, platform_url,
|
58
|
+
user_id, user_pwd, verify_flag)
|
59
|
+
|
60
|
+
def get_all_templates(self, server: str = None, start_from: int = 0, page_size: int = 0) -> list | str:
|
61
|
+
""" Get Loaded templates for the Server.
|
62
|
+
|
63
|
+
Parameters
|
64
|
+
----------
|
65
|
+
|
66
|
+
Returns
|
67
|
+
-------
|
68
|
+
dict | str
|
69
|
+
A dictionary containing a simplified list of key template attributes.
|
70
|
+
|
71
|
+
Raises
|
72
|
+
------
|
73
|
+
InvalidParameterException
|
74
|
+
If the response code is not 200.
|
75
|
+
PropertyServerException:
|
76
|
+
Raised by the server when an issue arises in processing a valid request
|
77
|
+
NotAuthorizedException:
|
78
|
+
The principle specified by the user_id does not have authorization for the requested action
|
79
|
+
|
80
|
+
"""
|
81
|
+
server = self.server_name if server is None else server
|
82
|
+
url = (f"{self.platform_url}/servers/{server}/open-metadata/framework-services/asset-owner/open-metadata-store/"
|
83
|
+
f"users/{self.user_id}/metadata-elements/by-search-string?startFrom=start_from&pageSize=page_size")
|
84
|
+
body = {
|
85
|
+
"class" : "SearchStringRequestBody",
|
86
|
+
"searchString" : ".*Template.*"
|
87
|
+
}
|
88
|
+
response = self.make_request("POST", url, body)
|
89
|
+
return response.json().get("elementList", "No elements")
|
90
|
+
|
91
|
+
def list_severity_definitions(self, fmt: str = 'json', skinny: bool = True, wrap_len: int = 30) -> list | str:
|
92
|
+
""" Get the registered severities for the OMAG Server
|
93
|
+
|
94
|
+
Parameters
|
95
|
+
----------
|
96
|
+
fmt: str, optional, default = 'json'
|
97
|
+
If fmt is 'json', then return the result as a JSON string. If fmt is 'table', then
|
98
|
+
return the result as a nicely formatted table string.
|
99
|
+
skinny: bool, optional, default = True
|
100
|
+
If a table is being created and `skinny` is true, then return a subset of the information,
|
101
|
+
if false return all columns.
|
102
|
+
wrap_len: int, optional, default = 30
|
103
|
+
If a table is being created, the width of the column to wrap text to.
|
104
|
+
|
105
|
+
Returns
|
106
|
+
-------
|
107
|
+
dict | str
|
108
|
+
If fmt is 'JSON' then return a dictionary containing the registered services for the specified
|
109
|
+
platform. If fmt is 'table' then return the result as a nicely formatted printable table string.
|
110
|
+
|
111
|
+
Raises
|
112
|
+
------
|
113
|
+
InvalidParameterException
|
114
|
+
If the response code is not 200.
|
115
|
+
PropertyServerException:
|
116
|
+
Raised by the server when an issue arises in processing a valid request
|
117
|
+
NotAuthorizedException:
|
118
|
+
The principle specified by the user_id does not have authorization for the requested action
|
119
|
+
|
120
|
+
"""
|
121
|
+
url = (f"{self.platform_url}/servers/{self.server_name}/open-metadata/repository-services"
|
122
|
+
f"/users/{self.user_id}/audit-log/severity-definitions"
|
123
|
+
)
|
124
|
+
response = self.make_request("GET", url)
|
125
|
+
if fmt == 'json':
|
126
|
+
return response.json().get("severities", "No severities found")
|
127
|
+
elif fmt == 'table':
|
128
|
+
df = pd.DataFrame(response.json().get("severities", []))
|
129
|
+
if skinny:
|
130
|
+
df = df.drop(columns=['ordinal'])
|
131
|
+
return tabulate(wrap_text(df, wrap_len=wrap_len), headers='keys', tablefmt='psql')
|
132
|
+
|
133
|
+
def list_asset_types(self, server: str = None) -> list | str:
|
134
|
+
""" Get the registered severities for the OMAG Server
|
135
|
+
|
136
|
+
Parameters
|
137
|
+
----------
|
138
|
+
server: str, optional, default = None
|
139
|
+
|
140
|
+
Returns
|
141
|
+
-------
|
142
|
+
dict | str
|
143
|
+
Returns a list of the asset types.
|
144
|
+
|
145
|
+
Raises
|
146
|
+
------
|
147
|
+
InvalidParameterException
|
148
|
+
If the response code is not 200.
|
149
|
+
PropertyServerException:
|
150
|
+
Raised by the server when an issue arises in processing a valid request
|
151
|
+
NotAuthorizedException:
|
152
|
+
The principle specified by the user_id does not have authorization for the requested action
|
153
|
+
|
154
|
+
"""
|
155
|
+
server = self.server_name if server is None else server
|
156
|
+
url = f"{self.platform_url}/servers/{self.server_name}/api/open-metadata/asset-catalog/assets/types"
|
157
|
+
|
158
|
+
response = self.make_request("GET", url)
|
159
|
+
return response.json().get('types', 'no types found')
|
pyegeria/my_profile_omvs.py
CHANGED
@@ -721,7 +721,7 @@ class MyProfile(Client):
|
|
721
721
|
loop.run_until_complete(self._async_reassign_to_do(todo_guid, actor_guid, status, server_name))
|
722
722
|
return
|
723
723
|
|
724
|
-
async def _async_find_to_do(self, search_string: str = "*", server_name: str = "None", status: str =
|
724
|
+
async def _async_find_to_do(self, search_string: str = "*", server_name: str = "None", status: str = "OPEN",
|
725
725
|
starts_with: bool = False, ends_with: bool = False, ignore_case: bool = True,
|
726
726
|
start_from: int = 0, page_size: int = 100) -> list | str:
|
727
727
|
""" find To-Do items. Async version.
|
@@ -765,7 +765,8 @@ class MyProfile(Client):
|
|
765
765
|
search_string = " "
|
766
766
|
|
767
767
|
body = {
|
768
|
-
"
|
768
|
+
"class": "ToDoStatusSearchString",
|
769
|
+
"toDoStatus": status,
|
769
770
|
"searchString": search_string
|
770
771
|
}
|
771
772
|
|
@@ -777,10 +778,10 @@ class MyProfile(Client):
|
|
777
778
|
|
778
779
|
response = await self._async_make_request("POST", url, body)
|
779
780
|
# return response.text
|
780
|
-
return response.json().get("toDoElements", "No
|
781
|
+
return response.json().get("toDoElements", "No ToDos found")
|
781
782
|
|
782
783
|
def find_to_do(self, search_string: str, server_name: str = None, status: str = "OPEN",
|
783
|
-
starts_with: bool =
|
784
|
+
starts_with: bool = False, ends_with: bool = False, ignore_case: bool = True,
|
784
785
|
start_from: int = 0, page_size: int = 100) -> list | str:
|
785
786
|
""" find To-Do items.
|
786
787
|
Parameters
|
@@ -865,7 +866,7 @@ class MyProfile(Client):
|
|
865
866
|
f"{todo_type}?startFrom={start_from}&pageSize={page_size}")
|
866
867
|
|
867
868
|
response = await self._async_make_request("POST", url, body)
|
868
|
-
return response.
|
869
|
+
return response.json().get("toDoElements","No ToDos found")
|
869
870
|
|
870
871
|
def get_to_dos_by_type(self, todo_type: str, server_name: str = None, status: str = "OPEN",
|
871
872
|
start_from: int = 0, page_size: int = 100) -> list | str:
|
pyegeria/registered_info.py
CHANGED
@@ -6,7 +6,7 @@ Copyright Contributors to the ODPi Egeria project.
|
|
6
6
|
|
7
7
|
This module allows users to query the available (registered) capabilities of Egeria. Detailed information is returned
|
8
8
|
to provide both insight and understanding in how to use these capabilities. For example, when configuring an Egeria
|
9
|
-
integration service, it is
|
9
|
+
integration service, it is importregistered_info.pyant to know what companion service it depends on so that you can make sure the
|
10
10
|
companion service is also configured and running.
|
11
11
|
|
12
12
|
"""
|
@@ -0,0 +1,98 @@
|
|
1
|
+
#!python
|
2
|
+
"""
|
3
|
+
SPDX-License-Identifier: Apache-2.0
|
4
|
+
Copyright Contributors to the ODPi Egeria project.
|
5
|
+
|
6
|
+
A simple viewer for collections - provide the root and we display the hierarchy
|
7
|
+
|
8
|
+
"""
|
9
|
+
|
10
|
+
import time
|
11
|
+
import argparse
|
12
|
+
|
13
|
+
from rich.box import Box
|
14
|
+
from rich.markdown import Markdown
|
15
|
+
from rich.prompt import Prompt
|
16
|
+
|
17
|
+
from pyegeria._exceptions import (
|
18
|
+
InvalidParameterException,
|
19
|
+
PropertyServerException,
|
20
|
+
UserNotAuthorizedException,
|
21
|
+
print_exception_response,
|
22
|
+
)
|
23
|
+
from rich.table import Table
|
24
|
+
from rich.live import Live
|
25
|
+
from rich.text import Text
|
26
|
+
from rich.tree import Tree
|
27
|
+
from rich.markdown import Markdown
|
28
|
+
|
29
|
+
from rich import print
|
30
|
+
from rich.console import Group
|
31
|
+
from rich.panel import Panel
|
32
|
+
from rich import box, align
|
33
|
+
from rich.layout import Layout
|
34
|
+
import rich
|
35
|
+
from pyegeria import CollectionManager, UserNotAuthorizedException, PropertyServerException, InvalidParameterException
|
36
|
+
|
37
|
+
disable_ssl_warnings = True
|
38
|
+
|
39
|
+
platform = "https://127.0.0.1:9443"
|
40
|
+
user = "erinoverview"
|
41
|
+
view_server = "view-server"
|
42
|
+
|
43
|
+
|
44
|
+
def collection_viewer(root: str, server_name:str, platform_url:str, user:str):
|
45
|
+
|
46
|
+
def walk_collection_hierarchy(collection_client: CollectionManager, root_collection_name: str, tree: Tree) -> Tree:
|
47
|
+
"""Recursively build a Tree with collection contents."""
|
48
|
+
members = collection_client.get_member_list(root_collection_name)
|
49
|
+
if members:
|
50
|
+
for member in members:
|
51
|
+
|
52
|
+
style = ""
|
53
|
+
text_collection_name = Text(f"[bold white] Name: {member['name']}", "")
|
54
|
+
text_qualified_name = Text(f"* QualifiedName: {member['qualifiedName']}""yellow")
|
55
|
+
text_guid = Text(f"* GUID: {member['guid']}", "green")
|
56
|
+
text_collection_type = Text(f"* Collection Type: {member['collectionType']}", "cyan")
|
57
|
+
text_description = Text(f"* Description: {member['description']}", "cyan")
|
58
|
+
p = Panel.fit(f"[white]{text_collection_name}[green]\n{text_qualified_name}\n{text_guid}\n"
|
59
|
+
f"{text_collection_type}\n{text_description}")
|
60
|
+
tt = tree.add(p, style=style)
|
61
|
+
|
62
|
+
children = collection_client.get_collection_members(member['guid'])
|
63
|
+
if type(children) is list:
|
64
|
+
branch = tt.add(f"[bold magenta]Members", style=style, guide_style=style)
|
65
|
+
walk_collection_hierarchy(collection_client, member['qualifiedName'], branch),
|
66
|
+
|
67
|
+
|
68
|
+
try:
|
69
|
+
tree = Tree(f"[bold bright green]{root}", guide_style="bold bright_blue")
|
70
|
+
c_client = CollectionManager(view_server, platform,
|
71
|
+
user_id=user)
|
72
|
+
|
73
|
+
token = c_client.create_egeria_bearer_token(user, "secret")
|
74
|
+
walk_collection_hierarchy(c_client,root,tree)
|
75
|
+
print(tree)
|
76
|
+
|
77
|
+
except (
|
78
|
+
InvalidParameterException,
|
79
|
+
PropertyServerException,
|
80
|
+
UserNotAuthorizedException
|
81
|
+
) as e:
|
82
|
+
print_exception_response(e)
|
83
|
+
|
84
|
+
|
85
|
+
if __name__ == "__main__":
|
86
|
+
parser = argparse.ArgumentParser()
|
87
|
+
|
88
|
+
parser.add_argument("--server", help="Name of the server to display status for")
|
89
|
+
parser.add_argument("--url", help="URL Platform to connect to")
|
90
|
+
parser.add_argument("--userid", help="User Id")
|
91
|
+
args = parser.parse_args()
|
92
|
+
|
93
|
+
server = args.server if args.server is not None else "view-server"
|
94
|
+
url = args.url if args.url is not None else "https://localhost:9443"
|
95
|
+
userid = args.userid if args.userid is not None else 'erinoverview'
|
96
|
+
|
97
|
+
root_collection = Prompt.ask("Enter the Root Collection to start from:", default="Digital Products Root")
|
98
|
+
collection_viewer(root_collection,server, url, userid)
|
@@ -12,6 +12,7 @@ A simple status display for Engine Actions
|
|
12
12
|
import argparse
|
13
13
|
import json
|
14
14
|
import time
|
15
|
+
import sys
|
15
16
|
|
16
17
|
from rich import box
|
17
18
|
from rich.live import Live
|
@@ -76,7 +77,7 @@ def display_status_engine_actions(server: str = good_server_3, url: str = good_p
|
|
76
77
|
|
77
78
|
token = g_client.create_egeria_bearer_token()
|
78
79
|
action_status = g_client.get_engine_actions()
|
79
|
-
if
|
80
|
+
if type(action_status) is str:
|
80
81
|
requested_time = " "
|
81
82
|
start_time = " "
|
82
83
|
completion_time = " "
|
@@ -86,9 +87,9 @@ def display_status_engine_actions(server: str = good_server_3, url: str = good_p
|
|
86
87
|
target_element = " "
|
87
88
|
process_name = " "
|
88
89
|
completion_message = " "
|
89
|
-
|
90
|
+
elif type(action_status) is list:
|
90
91
|
for action in action_status:
|
91
|
-
requested_time = action
|
92
|
+
requested_time = action.get("requestedTime", " ")
|
92
93
|
start_time = action.get("startTime", " ")
|
93
94
|
completion_time = action.get("completionTime", " ")
|
94
95
|
|
@@ -115,7 +116,9 @@ def display_status_engine_actions(server: str = good_server_3, url: str = good_p
|
|
115
116
|
requested_time, start_time, action_guid,engine_name, request_type,
|
116
117
|
action_status, target_element, completion_time, process_name, completion_message
|
117
118
|
)
|
118
|
-
|
119
|
+
else:
|
120
|
+
print("Egeria integration daemon not running")
|
121
|
+
sys.exit()
|
119
122
|
# g_client.close_session()
|
120
123
|
return table
|
121
124
|
|
@@ -81,9 +81,9 @@ def display_to_dos(search_string: str, guid: str=None, server: str = good_server
|
|
81
81
|
table.add_column("Status")
|
82
82
|
table.add_column("Sponsor")
|
83
83
|
|
84
|
-
todo_items = m_client.find_to_do(
|
84
|
+
todo_items = m_client.find_to_do(search_string)
|
85
85
|
|
86
|
-
if todo_items is
|
86
|
+
if type(todo_items) is str:
|
87
87
|
name = " "
|
88
88
|
type_name = " "
|
89
89
|
created = " "
|
@@ -107,7 +107,7 @@ def display_to_dos(search_string: str, guid: str=None, server: str = good_server
|
|
107
107
|
sponsor = "erinoverview"
|
108
108
|
if status in ("WAITING", "OPEN"):
|
109
109
|
status = f"[yellow]{status}"
|
110
|
-
elif status in ("
|
110
|
+
elif status in ("IN_PROGRESS", "COMPLETE"):
|
111
111
|
status = f"[green]{status}"
|
112
112
|
else:
|
113
113
|
status = f"[red]{status}"
|
@@ -0,0 +1,141 @@
|
|
1
|
+
#!python
|
2
|
+
"""
|
3
|
+
SPDX-Lic
|
4
|
+
ense-Identifier: Apache-2.0
|
5
|
+
Copyright Contributors to the ODPi Egeria project.
|
6
|
+
|
7
|
+
|
8
|
+
Get valid relationship types.
|
9
|
+
"""
|
10
|
+
|
11
|
+
import time
|
12
|
+
import json
|
13
|
+
import argparse
|
14
|
+
from pyegeria import (
|
15
|
+
InvalidParameterException,
|
16
|
+
PropertyServerException,
|
17
|
+
UserNotAuthorizedException,
|
18
|
+
print_exception_response,
|
19
|
+
)
|
20
|
+
from rich.table import Table
|
21
|
+
from rich.live import Live
|
22
|
+
from rich import box
|
23
|
+
from rich.prompt import Prompt
|
24
|
+
from rich.tree import Tree
|
25
|
+
from rich import print
|
26
|
+
from rich.console import Console
|
27
|
+
from pyegeria import ValidMetadataManager, ProjectManager
|
28
|
+
|
29
|
+
disable_ssl_warnings = True
|
30
|
+
|
31
|
+
good_platform1_url = "https://127.0.0.1:9443"
|
32
|
+
|
33
|
+
|
34
|
+
# good_platform1_url = "https://127.0.0.1:30080"
|
35
|
+
# good_platform2_url = "https://127.0.0.1:30081"
|
36
|
+
# bad_platform1_url = "https://localhost:9443"
|
37
|
+
|
38
|
+
good_user_1 = "garygeeke"
|
39
|
+
good_user_2 = "erinoverview"
|
40
|
+
good_server_3 = "view-server"
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
def display_list(type_name:str, server: str = good_server_3, url: str = good_platform1_url,
|
45
|
+
username: str = good_user_2, save_output: bool = False):
|
46
|
+
|
47
|
+
p_client = ValidMetadataManager(server, url, user_id=username)
|
48
|
+
token = p_client.create_egeria_bearer_token(username, "secret")
|
49
|
+
|
50
|
+
def generate_table(type_name: str) -> Table:
|
51
|
+
"""Make a new table."""
|
52
|
+
table = Table(
|
53
|
+
title=f"Relationship types for: {type_name} @ {time.asctime()}",
|
54
|
+
header_style="white on dark_blue",
|
55
|
+
show_lines=True,
|
56
|
+
box=box.ROUNDED,
|
57
|
+
caption=f"list for Server '{server}' @ Platform - {url}",
|
58
|
+
expand=True
|
59
|
+
)
|
60
|
+
|
61
|
+
|
62
|
+
table.add_column("Name")
|
63
|
+
# table.add_column("GUID", no_wrap=True,)
|
64
|
+
table.add_column("Status")
|
65
|
+
table.add_column("Description")
|
66
|
+
table.add_column("Description Wiki")
|
67
|
+
table.add_column("Attribute Name")
|
68
|
+
table.add_column("Attribute Status")
|
69
|
+
table.add_column("Attribute Type")
|
70
|
+
# table.add_column("Attribute Type")
|
71
|
+
table.add_column("Attribute Description")
|
72
|
+
|
73
|
+
types_list = p_client.get_valid_relationship_types(type_name)
|
74
|
+
# print(json.dumps(types_list, indent=4))
|
75
|
+
print(type(types_list))
|
76
|
+
if types_list is None:
|
77
|
+
name = " "
|
78
|
+
guid = " "
|
79
|
+
status = " "
|
80
|
+
|
81
|
+
elif type(types_list) == str:
|
82
|
+
print(types_list)
|
83
|
+
raise ValueError("-->This is not a known Type")
|
84
|
+
else:
|
85
|
+
for types in types_list:
|
86
|
+
|
87
|
+
name = types['name']
|
88
|
+
# guid = types['guid']
|
89
|
+
status = types['initialStatus']
|
90
|
+
description = types['description']
|
91
|
+
description_wiki = types.get("descriptionWiki"," ")
|
92
|
+
attribute_defs = types.get("attributeDefinitions")
|
93
|
+
if attribute_defs:
|
94
|
+
for attr in attribute_defs:
|
95
|
+
attr_name = attr['attributeName']
|
96
|
+
attr_desc = attr['attributeDescription']
|
97
|
+
attr_status = attr['attributeStatus']
|
98
|
+
attr_type = attr['attributeType']["name"]
|
99
|
+
table.add_row(
|
100
|
+
name, status, description, description_wiki, attr_name, attr_status, attr_type, attr_desc
|
101
|
+
)
|
102
|
+
else:
|
103
|
+
table.add_row(name,status,description,description_wiki," ", " ", " "," " )
|
104
|
+
|
105
|
+
p_client.close_session()
|
106
|
+
return table
|
107
|
+
|
108
|
+
try:
|
109
|
+
# with Live(generate_table(), refresh_per_second=4, screen=True) as live:
|
110
|
+
# while True:
|
111
|
+
# time.sleep(2)
|
112
|
+
# live.update(generate_table())
|
113
|
+
console = Console(record=True)
|
114
|
+
with console.pager():
|
115
|
+
console.print(generate_table(type_name))
|
116
|
+
if save_output:
|
117
|
+
console.save_html("projects.html")
|
118
|
+
|
119
|
+
except (InvalidParameterException, PropertyServerException, UserNotAuthorizedException, ValueError) as e:
|
120
|
+
if type(e) is str:
|
121
|
+
print(e)
|
122
|
+
else:
|
123
|
+
print_exception_response(e)
|
124
|
+
|
125
|
+
if __name__ == "__main__":
|
126
|
+
|
127
|
+
parser = argparse.ArgumentParser()
|
128
|
+
parser.add_argument("--server", help="Name of the server to display status for")
|
129
|
+
parser.add_argument("--url", help="URL Platform to connect to")
|
130
|
+
parser.add_argument("--userid", help="User Id")
|
131
|
+
parser.add_argument("--save-output", help="Save output to file?")
|
132
|
+
# parser.add_argument("--sponsor", help="Name of sponsor to search")
|
133
|
+
args = parser.parse_args()
|
134
|
+
|
135
|
+
server = args.server if args.server is not None else "view-server"
|
136
|
+
url = args.url if args.url is not None else "https://localhost:9443"
|
137
|
+
userid = args.userid if args.userid is not None else 'erinoverview'
|
138
|
+
save_output = args.save_output if args.save_output is not None else False
|
139
|
+
type_name = Prompt.ask("Enter the Type Name to retrieve:", default="*")
|
140
|
+
|
141
|
+
display_list(type_name, server, url, userid, save_output)
|
@@ -0,0 +1,147 @@
|
|
1
|
+
#!python
|
2
|
+
"""
|
3
|
+
SPDX-License-Identifier: Apache-2.0
|
4
|
+
Copyright Contributors to the ODPi Egeria project.
|
5
|
+
|
6
|
+
A simple viewer for collections - provide the root and we display the hierarchy
|
7
|
+
|
8
|
+
"""
|
9
|
+
|
10
|
+
import time
|
11
|
+
import argparse
|
12
|
+
|
13
|
+
from rich.box import Box
|
14
|
+
from rich.markdown import Markdown
|
15
|
+
from rich.prompt import Prompt
|
16
|
+
|
17
|
+
from pyegeria._exceptions import (
|
18
|
+
InvalidParameterException,
|
19
|
+
PropertyServerException,
|
20
|
+
UserNotAuthorizedException,
|
21
|
+
print_exception_response,
|
22
|
+
)
|
23
|
+
from rich.table import Table
|
24
|
+
from rich.live import Live
|
25
|
+
from rich.text import Text
|
26
|
+
from rich.tree import Tree
|
27
|
+
from rich.markdown import Markdown
|
28
|
+
|
29
|
+
from rich import print
|
30
|
+
from rich.console import Group
|
31
|
+
from rich.panel import Panel
|
32
|
+
from rich import box, align
|
33
|
+
from rich.layout import Layout
|
34
|
+
import rich
|
35
|
+
from pyegeria import (CollectionManager, UserNotAuthorizedException, PropertyServerException,
|
36
|
+
InvalidParameterException, AutomatedCuration)
|
37
|
+
|
38
|
+
disable_ssl_warnings = True
|
39
|
+
|
40
|
+
platform = "https://127.0.0.1:9443"
|
41
|
+
user = "erinoverview"
|
42
|
+
view_server = "view-server"
|
43
|
+
|
44
|
+
|
45
|
+
def tech_viewer(tech: str, server_name:str, platform_url:str, user:str):
|
46
|
+
|
47
|
+
def view_tech_details(a_client: AutomatedCuration, root_collection_name: str, tree: Tree) -> Tree:
|
48
|
+
l2: Tree = None
|
49
|
+
tech_details = a_client.get_technology_type_detail(tech)
|
50
|
+
if type(tech_details) is dict:
|
51
|
+
style = ""
|
52
|
+
l2 = tree.add(Text(f"Name: {tech_details['name']}", "bold red"))
|
53
|
+
l2 = tree.add(Text(f"* QualifiedName: {tech_details['qualifiedName']}","bold white"))
|
54
|
+
l2 = tree.add(Text(f"* Category: {tech_details['category']}", "bold white"))
|
55
|
+
l2 = tree.add(Text(f"* Technology Description: {tech_details['description']}", "bold white"))
|
56
|
+
ext_ref = tech_details.get('externalReferences', None)
|
57
|
+
if ext_ref is not None:
|
58
|
+
l2 = tree.add(Text(f'* URI: {ext_ref[0]["properties"]["uri"]}', "bold white"))
|
59
|
+
|
60
|
+
# catalog_temp = tech_details.get("catalogTemplates", None)
|
61
|
+
# if catalog_temp is not None:
|
62
|
+
# l2 = tree.add("Catalog Templates")
|
63
|
+
# for catalog in catalog_temp:
|
64
|
+
# cat_name = catalog["relatedElement"].get("name", None)
|
65
|
+
# if cat_name is None:
|
66
|
+
# continue
|
67
|
+
# l3 = l2.add(f'[white] Template Name: {cat_name}, style=style)')
|
68
|
+
# l3 = l2.add(f'[white] Template GUID: {catalog["relatedElement"].get("guid", None)}, style=style)')
|
69
|
+
# classifications = catalog["relatedElement"].get("classifications", None)
|
70
|
+
# if classifications is not None:
|
71
|
+
# l4 = l3.add(f"[red]Classifications")
|
72
|
+
# for classification in classifications:
|
73
|
+
# props = classification['classificationProperties']
|
74
|
+
# c_name = Text(f'[white] Name: {props.get("name", None)}[white]')
|
75
|
+
# c_ver = Text(f'[white] Version: {props.get("versionIdentifier", None)}')
|
76
|
+
# c_desc = Text(f'[white] Description: {props.get("description", None)}')
|
77
|
+
# class_text = (f"[bold red]Classification \n"
|
78
|
+
# f"[white] Name: {c_name} \n"
|
79
|
+
# f"[white] Version: {c_ver} \n"
|
80
|
+
# f"[white] Description: {c_desc}")
|
81
|
+
# c = Panel.fit(class_text)
|
82
|
+
# l4 = l3.add(c, style = style)
|
83
|
+
#
|
84
|
+
# placeholders = catalog.get("specification", None)
|
85
|
+
# if placeholders is not None:
|
86
|
+
# specs = placeholders.get("placeholderProperty", None)
|
87
|
+
# if specs is not None:
|
88
|
+
# l4 = l3.add(f"[red]Placeholder Properties")
|
89
|
+
# for spec in specs:
|
90
|
+
# l5 = l4.add(f'[white] Placeholder Name: {spec.get("placeholderName", None)})')
|
91
|
+
# l5 = l4.add(f'[white] Data Type: {spec["dataType"]}')
|
92
|
+
# l5 = l4.add(f'[white] Placeholder Name: {str(spec["required"])})')
|
93
|
+
# l5 = l4.add(f'[white] Example: {spec.get("example", None)})')
|
94
|
+
# l5 = l4.add(f'[white] Description: {spec.get("description", None)}[white])')
|
95
|
+
|
96
|
+
|
97
|
+
resource_list = tech_details.get('resourceList',None)
|
98
|
+
if resource_list:
|
99
|
+
t_r = tree.add("Resource List[bold red]")
|
100
|
+
for resource in resource_list:
|
101
|
+
resource_use = Text(f"[bold white]{resource['resourceUse']}", "")
|
102
|
+
resource_use_description = Text(f"[bold white]{resource['resourceUseDescription']}", "")
|
103
|
+
type_name = Text(f"[bold white]{resource['relatedElement']['type']['typeName']}", "")
|
104
|
+
unique_name = Text(f"[bold white]{resource['relatedElement']['uniqueName']}", "")
|
105
|
+
related_guid = Text(f"[bold white]{resource['relatedElement']['guid']}", "")
|
106
|
+
resource_text = (f"[bold red]Resource\n"
|
107
|
+
f"[white]Resource use: {resource_use}[white]\nDescription: "
|
108
|
+
f"{resource_use_description}\nType Name: {type_name}\n"
|
109
|
+
f"[white]Unique Name: {unique_name}\n[white]Related GUID: {related_guid}\n")
|
110
|
+
p = Panel.fit(resource_text)
|
111
|
+
tt = t_r.add(p, style=style)
|
112
|
+
|
113
|
+
|
114
|
+
return tt
|
115
|
+
|
116
|
+
|
117
|
+
try:
|
118
|
+
tree = Tree(f"[bold bright green]{tech}", guide_style="bold bright_blue")
|
119
|
+
a_client = AutomatedCuration(view_server, platform,
|
120
|
+
user_id=user)
|
121
|
+
|
122
|
+
token = a_client.create_egeria_bearer_token(user, "secret")
|
123
|
+
view_tech_details(a_client,tech,tree)
|
124
|
+
print(tree)
|
125
|
+
|
126
|
+
except (
|
127
|
+
InvalidParameterException,
|
128
|
+
PropertyServerException,
|
129
|
+
UserNotAuthorizedException
|
130
|
+
) as e:
|
131
|
+
print_exception_response(e)
|
132
|
+
|
133
|
+
|
134
|
+
if __name__ == "__main__":
|
135
|
+
parser = argparse.ArgumentParser()
|
136
|
+
|
137
|
+
parser.add_argument("--server", help="Name of the server to display status for")
|
138
|
+
parser.add_argument("--url", help="URL Platform to connect to")
|
139
|
+
parser.add_argument("--userid", help="User Id")
|
140
|
+
args = parser.parse_args()
|
141
|
+
|
142
|
+
server = args.server if args.server is not None else "view-server"
|
143
|
+
url = args.url if args.url is not None else "https://localhost:9443"
|
144
|
+
userid = args.userid if args.userid is not None else 'erinoverview'
|
145
|
+
|
146
|
+
tech = Prompt.ask("Enter the Technology to start from:", default="PostgreSQL Server")
|
147
|
+
tech_viewer(tech,server, url, userid)
|
@@ -0,0 +1,124 @@
|
|
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 my profile
|
10
|
+
"""
|
11
|
+
|
12
|
+
import argparse
|
13
|
+
import sys
|
14
|
+
import time
|
15
|
+
|
16
|
+
from rich import box
|
17
|
+
from rich.console import Console
|
18
|
+
from rich.prompt import Prompt
|
19
|
+
from rich.table import Table
|
20
|
+
|
21
|
+
from pyegeria import (
|
22
|
+
InvalidParameterException,
|
23
|
+
PropertyServerException,
|
24
|
+
UserNotAuthorizedException,
|
25
|
+
print_exception_response,
|
26
|
+
RegisteredInfo,
|
27
|
+
AutomatedCuration
|
28
|
+
)
|
29
|
+
|
30
|
+
disable_ssl_warnings = True
|
31
|
+
|
32
|
+
good_platform1_url = "https://127.0.0.1:9443"
|
33
|
+
good_platform2_url = "https://egeria.pdr-associates.com:7443"
|
34
|
+
bad_platform1_url = "https://localhost:9443"
|
35
|
+
|
36
|
+
# good_platform1_url = "https://127.0.0.1:30080"
|
37
|
+
# good_platform2_url = "https://127.0.0.1:30081"
|
38
|
+
# bad_platform1_url = "https://localhost:9443"
|
39
|
+
|
40
|
+
good_user_1 = "garygeeke"
|
41
|
+
good_user_2 = "erinoverview"
|
42
|
+
bad_user_1 = "eviledna"
|
43
|
+
bad_user_2 = ""
|
44
|
+
|
45
|
+
good_server_1 = "active-metadata-store"
|
46
|
+
good_server_2 = "simple-metadata-store"
|
47
|
+
good_server_3 = "view-server"
|
48
|
+
good_server_4 = "engine-host"
|
49
|
+
bad_server_1 = "coco"
|
50
|
+
bad_server_2 = ""
|
51
|
+
|
52
|
+
|
53
|
+
def display_tech_types(search_string:str = "*", server: str = good_server_3, url: str = good_platform1_url, username: str = good_user_2):
|
54
|
+
a_client = AutomatedCuration(server, url, username)
|
55
|
+
token = a_client.create_egeria_bearer_token(good_user_2, "secret")
|
56
|
+
tech_list = a_client.find_technology_types(search_string, page_size=0)
|
57
|
+
|
58
|
+
def generate_table() -> Table:
|
59
|
+
"""Make a new table."""
|
60
|
+
table = Table(
|
61
|
+
title=f"Technology Types for: {good_platform1_url} @ {time.asctime()}",
|
62
|
+
# style = "black on grey66",
|
63
|
+
header_style="white on dark_blue",
|
64
|
+
show_lines=True,
|
65
|
+
box=box.ROUNDED,
|
66
|
+
caption=f"Technology Types from Server '{server}' @ Platform - {url}",
|
67
|
+
expand=True
|
68
|
+
)
|
69
|
+
|
70
|
+
table.add_column("Name")
|
71
|
+
table.add_column("Qualified Name")
|
72
|
+
table.add_column("Category")
|
73
|
+
table.add_column("Description")
|
74
|
+
|
75
|
+
|
76
|
+
name = " "
|
77
|
+
description = " "
|
78
|
+
version = " "
|
79
|
+
super_type = " "
|
80
|
+
if type(tech_list) is list:
|
81
|
+
for item in tech_list:
|
82
|
+
if 'deployedImplementationType' not in item['qualifiedName']:
|
83
|
+
continue
|
84
|
+
qualified_name = item.get("qualifiedName", " ")
|
85
|
+
name = item.get("name", "none")
|
86
|
+
category = item.get("category", "none")
|
87
|
+
description = item.get("description", "none")
|
88
|
+
|
89
|
+
table.add_row(
|
90
|
+
name, qualified_name, category, description
|
91
|
+
)
|
92
|
+
return table
|
93
|
+
else:
|
94
|
+
print("Unknown technology type")
|
95
|
+
sys.exit(1)
|
96
|
+
|
97
|
+
try:
|
98
|
+
console = Console()
|
99
|
+
with console.pager():
|
100
|
+
console.print(generate_table())
|
101
|
+
|
102
|
+
except (InvalidParameterException, PropertyServerException, UserNotAuthorizedException) as e:
|
103
|
+
print_exception_response(e)
|
104
|
+
assert e.related_http_code != "200", "Invalid parameters"
|
105
|
+
finally:
|
106
|
+
a_client.close_session()
|
107
|
+
|
108
|
+
|
109
|
+
if __name__ == "__main__":
|
110
|
+
parser = argparse.ArgumentParser()
|
111
|
+
parser.add_argument("--server", help="Name of the server to display status for")
|
112
|
+
parser.add_argument("--url", help="URL Platform to connect to")
|
113
|
+
parser.add_argument("--userid", help="User Id")
|
114
|
+
|
115
|
+
args = parser.parse_args()
|
116
|
+
|
117
|
+
server = args.server if args.server is not None else "view-server"
|
118
|
+
url = args.url if args.url is not None else "https://localhost:9443"
|
119
|
+
userid = args.userid if args.userid is not None else 'erinoverview'
|
120
|
+
# guid = args.guid if args.guid is not None else None
|
121
|
+
guid = None
|
122
|
+
search_string = Prompt.ask("Enter the technology you are searching for:", default="*")
|
123
|
+
|
124
|
+
display_tech_types(search_string, server, url, userid)
|
@@ -0,0 +1,153 @@
|
|
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, ProjectManager
|
30
|
+
|
31
|
+
disable_ssl_warnings = True
|
32
|
+
|
33
|
+
good_platform1_url = "https://127.0.0.1:9443"
|
34
|
+
|
35
|
+
|
36
|
+
# good_platform1_url = "https://127.0.0.1:30080"
|
37
|
+
# good_platform2_url = "https://127.0.0.1:30081"
|
38
|
+
# bad_platform1_url = "https://localhost:9443"
|
39
|
+
|
40
|
+
good_user_1 = "garygeeke"
|
41
|
+
good_user_2 = "erinoverview"
|
42
|
+
good_server_3 = "view-server"
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
def display_list(project_name: str, server: str = good_server_3, url: str = good_platform1_url,
|
47
|
+
username: str = good_user_2, save_output: bool = False):
|
48
|
+
|
49
|
+
p_client = ProjectManager(server, url, user_id=username)
|
50
|
+
token = p_client.create_egeria_bearer_token(username, "secret")
|
51
|
+
|
52
|
+
def generate_table(project_name: str) -> Table:
|
53
|
+
"""Make a new table."""
|
54
|
+
table = Table(
|
55
|
+
title=f"Project List: {project_name} @ {time.asctime()}",
|
56
|
+
header_style="white on dark_blue",
|
57
|
+
show_lines=True,
|
58
|
+
box=box.ROUNDED,
|
59
|
+
caption=f"Project list for Server '{server}' @ Platform - {url}",
|
60
|
+
expand=True
|
61
|
+
)
|
62
|
+
|
63
|
+
|
64
|
+
table.add_column("Display Name")
|
65
|
+
table.add_column("Project GUID", no_wrap=True,)
|
66
|
+
table.add_column("Classifications")
|
67
|
+
table.add_column("Qualified Name")
|
68
|
+
table.add_column("Identifier")
|
69
|
+
table.add_column("Phase")
|
70
|
+
table.add_column("Health")
|
71
|
+
table.add_column("Status")
|
72
|
+
table.add_column("Start Date")
|
73
|
+
table.add_column("End Date")
|
74
|
+
table.add_column("Description")
|
75
|
+
|
76
|
+
projects = p_client.find_projects(project_name)
|
77
|
+
|
78
|
+
if projects is None:
|
79
|
+
name = " "
|
80
|
+
guid = " "
|
81
|
+
classification = " "
|
82
|
+
qualified_name = " "
|
83
|
+
identifier = " "
|
84
|
+
phase= " "
|
85
|
+
health = " "
|
86
|
+
status = " "
|
87
|
+
start = " "
|
88
|
+
end = " "
|
89
|
+
description = " "
|
90
|
+
elif type(projects) == str:
|
91
|
+
raise ValueError("-->This is not a known project")
|
92
|
+
else:
|
93
|
+
for project in projects:
|
94
|
+
classification = ""
|
95
|
+
guid = project['elementHeader']['guid']
|
96
|
+
props = project["properties"]
|
97
|
+
name = props.get("name","None")
|
98
|
+
p_class = project['elementHeader'].get("classifications")
|
99
|
+
if p_class:
|
100
|
+
for classif in p_class:
|
101
|
+
classification = f"{classif.get('classificationName')}, {classification}"
|
102
|
+
qualified_name = props.get("qualifiedName"," ")
|
103
|
+
identifier = props.get("identifier", " ")
|
104
|
+
phase = props.get("projectPhase", " ")
|
105
|
+
health = props.get("projectHealth", " ")
|
106
|
+
status = props.get("projectStatus", " ")
|
107
|
+
description = props.get("description", " ")
|
108
|
+
start = props.get("startDate"," ")
|
109
|
+
end = props.get("plannedEndDate", " ")
|
110
|
+
additional_properties = project.get('additionalProperties')
|
111
|
+
if additional_properties is not None:
|
112
|
+
props = json.dumps(additional_properties)
|
113
|
+
table.add_row(
|
114
|
+
name, guid, classification, qualified_name, identifier, phase, health, status, start,
|
115
|
+
end,description)
|
116
|
+
|
117
|
+
p_client.close_session()
|
118
|
+
return table
|
119
|
+
|
120
|
+
try:
|
121
|
+
# with Live(generate_table(), refresh_per_second=4, screen=True) as live:
|
122
|
+
# while True:
|
123
|
+
# time.sleep(2)
|
124
|
+
# live.update(generate_table())
|
125
|
+
console = Console(record=True)
|
126
|
+
with console.pager():
|
127
|
+
console.print(generate_table(project_name))
|
128
|
+
if save_output:
|
129
|
+
console.save_html("projects.html")
|
130
|
+
|
131
|
+
except (InvalidParameterException, PropertyServerException, UserNotAuthorizedException, ValueError) as e:
|
132
|
+
if type(e) is str:
|
133
|
+
print(e)
|
134
|
+
else:
|
135
|
+
print_exception_response(e)
|
136
|
+
|
137
|
+
if __name__ == "__main__":
|
138
|
+
|
139
|
+
parser = argparse.ArgumentParser()
|
140
|
+
parser.add_argument("--server", help="Name of the server to display status for")
|
141
|
+
parser.add_argument("--url", help="URL Platform to connect to")
|
142
|
+
parser.add_argument("--userid", help="User Id")
|
143
|
+
parser.add_argument("--save-output", help="Save output to file?")
|
144
|
+
# parser.add_argument("--sponsor", help="Name of sponsor to search")
|
145
|
+
args = parser.parse_args()
|
146
|
+
|
147
|
+
server = args.server if args.server is not None else "view-server"
|
148
|
+
url = args.url if args.url is not None else "https://localhost:9443"
|
149
|
+
userid = args.userid if args.userid is not None else 'erinoverview'
|
150
|
+
save_output = args.save_output if args.save_output is not None else False
|
151
|
+
project_name = Prompt.ask("Enter the Property to retrieve:", default="*")
|
152
|
+
|
153
|
+
display_list(project_name, server, url, userid, save_output)
|
@@ -0,0 +1,42 @@
|
|
1
|
+
pyegeria/__init__.py,sha256=81gLQyRhtYqk5Sx5M7OD4nl0De4KeTAVCQonNpx8cTE,1821
|
2
|
+
pyegeria/_client.py,sha256=8-8r1-_fACDEGgmfJdkeODlPmftcdiKwb-bmrSA3ac4,23606
|
3
|
+
pyegeria/_exceptions.py,sha256=LImJPHy7MVgoH17LfqEL4ytLKcOhV7oCe66wZiDBzec,18399
|
4
|
+
pyegeria/_globals.py,sha256=WgJ6O7_ACiAG8CUUHT_AbGgahLhO0APU8Y4rCwv9DRw,558
|
5
|
+
pyegeria/_validators.py,sha256=DQuMsATRGxGSBtOrVtXlCgWXGhj6Nh-uqPtCsrUGLxk,12703
|
6
|
+
pyegeria/automated_curation_omvs.py,sha256=jaYA1H9r6vCldExPBXEkWYcbppfk9i2TrefnPopZUGQ,102487
|
7
|
+
pyegeria/collection_manager_omvs.py,sha256=iTKN_MJFj2s1M8LyXDkSy8KUBS2uaPAikCz3ncE_3sE,114200
|
8
|
+
pyegeria/core_omag_server_config.py,sha256=jhtSlGx43X0x7-UGuWHZA0i6HT4_6MAF-wviMRekrWQ,93244
|
9
|
+
pyegeria/full_omag_server_config.py,sha256=sVBeG40Hp6ZG7dsz2BZqzO3bluPeu-j0fGTuinQ-SsY,46146
|
10
|
+
pyegeria/glossary_omvs.py,sha256=KcKRMNgm53suqbFLqsnThln5-zzAEJ8OseexiJ8BSsk,36500
|
11
|
+
pyegeria/gov_engine.py,sha256=3SBSZlbUTVG4x8OhlEIqipe8mB8_KEYOacHmxk7loSM,19697
|
12
|
+
pyegeria/governance_author.py,sha256=m0wsfmyO-VxRDaPpACeIDw8eVAFu3RVbo45RPCUel9M,6340
|
13
|
+
pyegeria/loaded_resources_omvs.py,sha256=ACRftAkI4Uy9HL8rMnuPO4ZWT7vVhLymKQOqbon2tcA,6226
|
14
|
+
pyegeria/my_profile_omvs.py,sha256=0yOpGYstIDvGgFuoNFBg19ec-vRtR_84d9lFPAyN6ss,42489
|
15
|
+
pyegeria/platform_services.py,sha256=_povbV9ezjKv9TE-QE0iceuyI8aHqzJS_am1jjLlvHs,41955
|
16
|
+
pyegeria/project_manager_omvs.py,sha256=j-rlfoKZArghS1NPQT_sawn8Z-qvaV4MW7mwoRNeDoA,77305
|
17
|
+
pyegeria/registered_info.py,sha256=j4kNzgKVWVuDBNFr3j2bA7tGSg2GBYGMDcDQm3jvFDU,8793
|
18
|
+
pyegeria/server_operations.py,sha256=iMBfIgPGqFM1TkABqFFJDt8tVUSY2qwSrRURrmWuma0,16323
|
19
|
+
pyegeria/utils.py,sha256=H0mew9IRcbsEi-pZfaT9HGuPO9CMOwnhOgIltyNvqTY,5240
|
20
|
+
pyegeria/valid_metadata_omvs.py,sha256=Li_XLLIXJTN9gUqB_H1WbVpnDMSgc7ne6yuzKoBW7sU,29710
|
21
|
+
pyegeria-0.3.8.data/scripts/collection_viewer.py,sha256=KWyOt4XeJ5ZaPrzNeMIH-qA3BeV9G7P64kAPceMsRmk,3628
|
22
|
+
pyegeria-0.3.8.data/scripts/engine_action_status.py,sha256=mosVQ5vI_vcGpi0gZDVZP8cQqgKVVf4jrJSHdsS5A9s,5359
|
23
|
+
pyegeria-0.3.8.data/scripts/find_todos.py,sha256=VU6pJBJpn5O7ML2gclh1BqmppVLllVJ6lbQw-NpZsb4,5169
|
24
|
+
pyegeria-0.3.8.data/scripts/get_relationship_types.py,sha256=STySVwdbSo_nMcpYlBRqmF0DNxKwrb3621GU688jhXM,4933
|
25
|
+
pyegeria-0.3.8.data/scripts/get_tech_details.py,sha256=Tg4UCazeEh7He9-l7yQbCuJso7ZcpaLhdmMUT866RzU,6843
|
26
|
+
pyegeria-0.3.8.data/scripts/get_tech_types.py,sha256=xZoCrnmBXa-_WXDW3tBG6dt6IxH-aeQfg07pXM2IrsA,3924
|
27
|
+
pyegeria-0.3.8.data/scripts/glossary_view.py,sha256=tZvdX9Sc7Q2rL9oiEjRIFFt-saqwMs8PQ3BCgp-v710,4594
|
28
|
+
pyegeria-0.3.8.data/scripts/gov_engine_status.py,sha256=ZTVbhrvGsfzmN4j9Xz95rEMTjqTNvKi9Ojvy43Z5sI8,4000
|
29
|
+
pyegeria-0.3.8.data/scripts/integration_daemon_status.py,sha256=9XRQKdjmYqwfxwNoo4EUhX8vrplR0etS-5Yq89lXGMw,4575
|
30
|
+
pyegeria-0.3.8.data/scripts/list_asset_types.py,sha256=09xmGyEoScq4OeSflElhI-ThJL2RUPV6mb9zRA7UzEA,3485
|
31
|
+
pyegeria-0.3.8.data/scripts/multi-server_status.py,sha256=XlBaIERVqYXjHO2x18WY64Oo0fUZS1onpOLAJcIlJk0,3690
|
32
|
+
pyegeria-0.3.8.data/scripts/my_todos.py,sha256=wzGKekUAT-DfzE-R8O1_byvh0trB_FMd0YvdNkTw10Q,5660
|
33
|
+
pyegeria-0.3.8.data/scripts/open_todos.py,sha256=f02BXZ-LgqjUOe5QiK1SKA9RDSH9m6-u_x0HTCQAD8E,4649
|
34
|
+
pyegeria-0.3.8.data/scripts/project_list_viewer.py,sha256=yTZR0KS-PTCxDjbjkIRniWk7DR1qvUzuTGQ3eN37-7o,5434
|
35
|
+
pyegeria-0.3.8.data/scripts/server_status.py,sha256=BgBLjYeMDN41zk9ADyPWZFBaQX0TqiCZ9pjesnByUhM,3346
|
36
|
+
pyegeria-0.3.8.data/scripts/server_status_widget.py,sha256=tyx1I7olr6e5kJF22ou9rqsztrRDdrPCq5uVa3hhPBU,3088
|
37
|
+
pyegeria-0.3.8.data/scripts/view_my_profile.py,sha256=KFeGAkR-DHX01jcOPOP7HMCTrAyY3i4mQKhq1dG86vE,4605
|
38
|
+
pyegeria-0.3.8.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
39
|
+
pyegeria-0.3.8.dist-info/METADATA,sha256=IpiRLomvSvYR48yEKcqJN9Yi1lIsQvfIhwVLsjCrHWQ,2398
|
40
|
+
pyegeria-0.3.8.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
41
|
+
pyegeria-0.3.8.dist-info/top_level.txt,sha256=tHowU8jow7WJGmbr4QdIk7gJWdslRgbWBiF2lMeduLQ,9
|
42
|
+
pyegeria-0.3.8.dist-info/RECORD,,
|
pyegeria-0.3.6.dist-info/RECORD
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
pyegeria/__init__.py,sha256=bBRHgbVWPZAt7yL150rrJm9UhELyXf8VMyycg4j3bOk,1769
|
2
|
-
pyegeria/_client.py,sha256=8-8r1-_fACDEGgmfJdkeODlPmftcdiKwb-bmrSA3ac4,23606
|
3
|
-
pyegeria/_exceptions.py,sha256=LImJPHy7MVgoH17LfqEL4ytLKcOhV7oCe66wZiDBzec,18399
|
4
|
-
pyegeria/_globals.py,sha256=WgJ6O7_ACiAG8CUUHT_AbGgahLhO0APU8Y4rCwv9DRw,558
|
5
|
-
pyegeria/_validators.py,sha256=DQuMsATRGxGSBtOrVtXlCgWXGhj6Nh-uqPtCsrUGLxk,12703
|
6
|
-
pyegeria/automated_curation_omvs.py,sha256=jaYA1H9r6vCldExPBXEkWYcbppfk9i2TrefnPopZUGQ,102487
|
7
|
-
pyegeria/collection_manager_omvs.py,sha256=iTKN_MJFj2s1M8LyXDkSy8KUBS2uaPAikCz3ncE_3sE,114200
|
8
|
-
pyegeria/core_omag_server_config.py,sha256=jhtSlGx43X0x7-UGuWHZA0i6HT4_6MAF-wviMRekrWQ,93244
|
9
|
-
pyegeria/full_omag_server_config.py,sha256=sVBeG40Hp6ZG7dsz2BZqzO3bluPeu-j0fGTuinQ-SsY,46146
|
10
|
-
pyegeria/glossary_omvs.py,sha256=KcKRMNgm53suqbFLqsnThln5-zzAEJ8OseexiJ8BSsk,36500
|
11
|
-
pyegeria/gov_engine.py,sha256=3SBSZlbUTVG4x8OhlEIqipe8mB8_KEYOacHmxk7loSM,19697
|
12
|
-
pyegeria/governance_author.py,sha256=m0wsfmyO-VxRDaPpACeIDw8eVAFu3RVbo45RPCUel9M,6340
|
13
|
-
pyegeria/my_profile_omvs.py,sha256=gLIHiG0cO5fJKLK7EtVHtoC43WrABqDIJvdh91s_KDY,42441
|
14
|
-
pyegeria/platform_services.py,sha256=_povbV9ezjKv9TE-QE0iceuyI8aHqzJS_am1jjLlvHs,41955
|
15
|
-
pyegeria/project_manager_omvs.py,sha256=j-rlfoKZArghS1NPQT_sawn8Z-qvaV4MW7mwoRNeDoA,77305
|
16
|
-
pyegeria/registered_info.py,sha256=H7mgH83JKtMeDZ1vVOWoFM9iARD38Rnb6igvfEM46AA,8775
|
17
|
-
pyegeria/server_operations.py,sha256=iMBfIgPGqFM1TkABqFFJDt8tVUSY2qwSrRURrmWuma0,16323
|
18
|
-
pyegeria/utils.py,sha256=H0mew9IRcbsEi-pZfaT9HGuPO9CMOwnhOgIltyNvqTY,5240
|
19
|
-
pyegeria/valid_metadata_omvs.py,sha256=Li_XLLIXJTN9gUqB_H1WbVpnDMSgc7ne6yuzKoBW7sU,29710
|
20
|
-
pyegeria-0.3.6.data/scripts/engine_action_status.py,sha256=vtZhXTGsZS3_xui7QLSX7aj2IWHT5TJ5Fje7CSOA6Co,5220
|
21
|
-
pyegeria-0.3.6.data/scripts/find_todos.py,sha256=A75s7cwtXVukMCbVYFlbJoDYFg1A8fHU3dCTK2s6JtM,5171
|
22
|
-
pyegeria-0.3.6.data/scripts/glossary_view.py,sha256=tZvdX9Sc7Q2rL9oiEjRIFFt-saqwMs8PQ3BCgp-v710,4594
|
23
|
-
pyegeria-0.3.6.data/scripts/gov_engine_status.py,sha256=ZTVbhrvGsfzmN4j9Xz95rEMTjqTNvKi9Ojvy43Z5sI8,4000
|
24
|
-
pyegeria-0.3.6.data/scripts/integration_daemon_status.py,sha256=9XRQKdjmYqwfxwNoo4EUhX8vrplR0etS-5Yq89lXGMw,4575
|
25
|
-
pyegeria-0.3.6.data/scripts/list_asset_types.py,sha256=09xmGyEoScq4OeSflElhI-ThJL2RUPV6mb9zRA7UzEA,3485
|
26
|
-
pyegeria-0.3.6.data/scripts/multi-server_status.py,sha256=XlBaIERVqYXjHO2x18WY64Oo0fUZS1onpOLAJcIlJk0,3690
|
27
|
-
pyegeria-0.3.6.data/scripts/my_todos.py,sha256=wzGKekUAT-DfzE-R8O1_byvh0trB_FMd0YvdNkTw10Q,5660
|
28
|
-
pyegeria-0.3.6.data/scripts/open_todos.py,sha256=f02BXZ-LgqjUOe5QiK1SKA9RDSH9m6-u_x0HTCQAD8E,4649
|
29
|
-
pyegeria-0.3.6.data/scripts/server_status.py,sha256=BgBLjYeMDN41zk9ADyPWZFBaQX0TqiCZ9pjesnByUhM,3346
|
30
|
-
pyegeria-0.3.6.data/scripts/server_status_widget.py,sha256=tyx1I7olr6e5kJF22ou9rqsztrRDdrPCq5uVa3hhPBU,3088
|
31
|
-
pyegeria-0.3.6.data/scripts/view_my_profile.py,sha256=KFeGAkR-DHX01jcOPOP7HMCTrAyY3i4mQKhq1dG86vE,4605
|
32
|
-
pyegeria-0.3.6.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
33
|
-
pyegeria-0.3.6.dist-info/METADATA,sha256=9nwghGHjIrPyVEgyZ8CIk91aqXelR9eK8VzXBZimAJ4,2398
|
34
|
-
pyegeria-0.3.6.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
35
|
-
pyegeria-0.3.6.dist-info/top_level.txt,sha256=tHowU8jow7WJGmbr4QdIk7gJWdslRgbWBiF2lMeduLQ,9
|
36
|
-
pyegeria-0.3.6.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|