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.
Files changed (27) hide show
  1. pyegeria/__init__.py +2 -1
  2. pyegeria/loaded_resources_omvs.py +159 -0
  3. pyegeria/my_profile_omvs.py +6 -5
  4. pyegeria/registered_info.py +1 -1
  5. pyegeria-0.3.8.data/scripts/collection_viewer.py +98 -0
  6. {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/engine_action_status.py +7 -4
  7. {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/find_todos.py +3 -3
  8. pyegeria-0.3.8.data/scripts/get_relationship_types.py +141 -0
  9. pyegeria-0.3.8.data/scripts/get_tech_details.py +147 -0
  10. pyegeria-0.3.8.data/scripts/get_tech_types.py +124 -0
  11. pyegeria-0.3.8.data/scripts/project_list_viewer.py +153 -0
  12. {pyegeria-0.3.6.dist-info → pyegeria-0.3.8.dist-info}/METADATA +1 -1
  13. pyegeria-0.3.8.dist-info/RECORD +42 -0
  14. pyegeria-0.3.6.dist-info/RECORD +0 -36
  15. {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/glossary_view.py +0 -0
  16. {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/gov_engine_status.py +0 -0
  17. {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/integration_daemon_status.py +0 -0
  18. {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/list_asset_types.py +0 -0
  19. {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/multi-server_status.py +0 -0
  20. {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/my_todos.py +0 -0
  21. {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/open_todos.py +0 -0
  22. {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/server_status.py +0 -0
  23. {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/server_status_widget.py +0 -0
  24. {pyegeria-0.3.6.data → pyegeria-0.3.8.data}/scripts/view_my_profile.py +0 -0
  25. {pyegeria-0.3.6.dist-info → pyegeria-0.3.8.dist-info}/LICENSE +0 -0
  26. {pyegeria-0.3.6.dist-info → pyegeria-0.3.8.dist-info}/WHEEL +0 -0
  27. {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
- __version__ = "0.3"
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')
@@ -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 = None,
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
- "status": status,
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 guid returned")
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 = True, ends_with: bool = False, ignore_case: bool = False,
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.text if response is not None else "No Results"
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:
@@ -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 important to know what companion service it depends on so that you can make sure the
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 "No Elements" in action_status:
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
- else:
90
+ elif type(action_status) is list:
90
91
  for action in action_status:
91
- requested_time = action["requestedTime"]
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("*", starts_with=True)
84
+ todo_items = m_client.find_to_do(search_string)
85
85
 
86
- if todo_items is None:
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 ("INPROGRESS", "COMPLETE"):
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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyegeria
3
- Version: 0.3.6
3
+ Version: 0.3.8
4
4
  Summary: A python client for Egeria
5
5
  Home-page: https://egeria-project.org/egeria-python
6
6
  Author: Dan Wolfson
@@ -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,,
@@ -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,,