pyegeria 5.3.3.10.dev9__py3-none-any.whl → 5.3.3.11__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 (23) hide show
  1. pyegeria/__init__.py +4 -3
  2. pyegeria/commands/tech/list_information_supply_chains.py +151 -0
  3. pyegeria/commands/tech/list_isolution_blueprints.py +166 -0
  4. pyegeria/commands/tech/list_isolution_blueprints2.py +164 -0
  5. pyegeria/commands/tech/work/mermaid_graphs/Clinical Trial Subject Onboarding.mmd +49 -0
  6. pyegeria/commands/tech/work/mermaid_graphs/Clinical Trial Treatment Validation.mmd +129 -0
  7. pyegeria/commands/tech/work/mermaid_graphs/Employee Expense Payment.mmd +40 -0
  8. pyegeria/commands/tech/work/mermaid_graphs/New Drug Product Information Distribution.mmd +55 -0
  9. pyegeria/commands/tech/work/mermaid_graphs/New Employee Onboarding.mmd +52 -0
  10. pyegeria/commands/tech/work/mermaid_graphs/Personalized Treatment Ordering.mmd +57 -0
  11. pyegeria/commands/tech/work/mermaid_graphs/Physical Inventory Tracking.mmd +92 -0
  12. pyegeria/commands/tech/work/mermaid_graphs/Sustainability Reporting.mmd +117 -0
  13. pyegeria/commands/tech/work/mermaid_graphs/{{displayName}}.mmd +29 -0
  14. pyegeria/egeria_client.py +5 -0
  15. pyegeria/egeria_tech_client.py +5 -2
  16. pyegeria/mermaid_utilities.py +31 -1
  17. pyegeria/solution_architect_omvs.py +8 -1
  18. {pyegeria-5.3.3.10.dev9.dist-info → pyegeria-5.3.3.11.dist-info}/METADATA +1 -1
  19. {pyegeria-5.3.3.10.dev9.dist-info → pyegeria-5.3.3.11.dist-info}/RECORD +22 -11
  20. {pyegeria-5.3.3.10.dev9.dist-info → pyegeria-5.3.3.11.dist-info}/entry_points.txt +1 -1
  21. pyegeria/commands/cat/get_information_supply_chains.py +0 -207
  22. {pyegeria-5.3.3.10.dev9.dist-info → pyegeria-5.3.3.11.dist-info}/LICENSE +0 -0
  23. {pyegeria-5.3.3.10.dev9.dist-info → pyegeria-5.3.3.11.dist-info}/WHEEL +0 -0
pyegeria/__init__.py CHANGED
@@ -68,14 +68,15 @@ from .create_tech_guid_lists import build_global_guid_lists
68
68
  from .classification_manager_omvs import ClassificationManager
69
69
  from .feedback_manager_omvs import FeedbackManager
70
70
  from .metadata_explorer_omvs import MetadataExplorer
71
- from .mermaid_utilities import load_mermaid, render_mermaid, generate_process_graph
71
+ from .mermaid_utilities import load_mermaid, render_mermaid, generate_process_graph, save_mermaid_graph
72
72
  from .egeria_my_client import EgeriaMy
73
+
74
+ from .solution_architect_omvs import SolutionArchitect
75
+
73
76
  from .egeria_cat_client import EgeriaCat
74
77
  from .egeria_tech_client import EgeriaTech
75
78
  from .egeria_config_client import EgeriaConfig
76
79
  from .egeria_client import Egeria
77
- from .solution_architect_omvs import SolutionArchitect
78
-
79
80
 
80
81
  #
81
82
  # The following assignments were generated by the `create_tech_guid_lists.py` utility that uses the pyegeria functions
@@ -0,0 +1,151 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ SPDX-License-Identifier: Apache-2.0
4
+ Copyright Contributors to the ODPi Egeria project.
5
+
6
+ A simple viewer for Information Supply Chains
7
+
8
+ """
9
+
10
+ import argparse
11
+ import os
12
+ import time
13
+
14
+ from rich import print, box
15
+ from rich.console import Console
16
+ from rich.markdown import Markdown
17
+ from rich.panel import Panel
18
+ from rich.prompt import Prompt
19
+ from rich.table import Table
20
+ from rich.text import Text
21
+ from rich.tree import Tree
22
+ from pyegeria.solution_architect_omvs import SolutionArchitect
23
+ from pyegeria import (
24
+ ProjectManager,
25
+ UserNotAuthorizedException,
26
+ PropertyServerException,
27
+ InvalidParameterException, save_mermaid_graph,
28
+ )
29
+
30
+ from pyegeria._exceptions import (
31
+ print_exception_response,
32
+ )
33
+
34
+ disable_ssl_warnings = True
35
+ EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
36
+ EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
37
+ EGERIA_PLATFORM_URL = os.environ.get("EGERIA_PLATFORM_URL", "https://localhost:9443")
38
+ EGERIA_VIEW_SERVER = os.environ.get("EGERIA_VIEW_SERVER", "qs-view-server")
39
+ EGERIA_VIEW_SERVER_URL = os.environ.get(
40
+ "EGERIA_VIEW_SERVER_URL", "https://localhost:9443"
41
+ )
42
+ EGERIA_INTEGRATION_DAEMON = os.environ.get("INTEGRATION_DAEMON", "integration-daemon")
43
+ EGERIA_ADMIN_USER = os.environ.get("ADMIN_USER", "garygeeke")
44
+ EGERIA_ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "secret")
45
+ EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
46
+ EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
47
+ EGERIA_JUPYTER = bool(os.environ.get("EGERIA_JUPYTER", "False"))
48
+ EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "150"))
49
+ EGERIA_MERMAID_FOLDER = os.environ.get("EGERIA_MERMAID_FOLDER", "./work/mermaid_graphs")
50
+
51
+ def supply_chain_viewer(
52
+ search_string: str,
53
+ server_name: str,
54
+ platform_url: str,
55
+ user: str,
56
+ user_password: str,
57
+ jupyter: bool = EGERIA_JUPYTER,
58
+ width: int = EGERIA_WIDTH,
59
+ timeout: int = 30,
60
+ ):
61
+ """A Supply Chain viewer"""
62
+ client = SolutionArchitect(server_name, platform_url, user, user_password)
63
+ token = client.create_egeria_bearer_token()
64
+
65
+ def generate_table() -> Table | str:
66
+ table = Table(
67
+ title=f"Supply Chains matching {search_string} @ {time.asctime()}",
68
+ style="bright_white on black",
69
+ header_style="bright_white on dark_blue",
70
+ title_style="bold white on black",
71
+ caption_style="white on black",
72
+ show_lines=True,
73
+ box=box.ROUNDED,
74
+ caption=f"View Server '{server_name}' @ Platform - {platform_url}",
75
+ expand=True,
76
+ )
77
+ table.add_column("Supply Chain Name")
78
+ table.add_column("Qualified Name \n/\n GUID", width=38, no_wrap=False)
79
+ table.add_column("Purposes")
80
+ table.add_column("Scope\n/\n Mermaid Link")
81
+ table.add_column("Description")
82
+
83
+ supply_chains = client.find_information_supply_chains(search_string)
84
+ if isinstance(supply_chains, list) is False:
85
+ return "No Supply Chains found"
86
+
87
+ for sc in supply_chains:
88
+ sc_name = sc["properties"].get("displayName", '---')
89
+ sc_qname = sc["properties"].get("qualifiedName", '---')
90
+ sc_guid = sc["elementHeader"]["guid"]
91
+ sc_purpose = sc["properties"].get("purposes",'---')
92
+ if isinstance(sc_purpose, list):
93
+ sc_purpose_str = "\n* ".join(sc_purpose)
94
+ else:
95
+ sc_purpose_str = sc_purpose
96
+ sc_scope = sc["properties"].get("scope",'---')
97
+ sc_desc = sc["properties"].get("description",'---')
98
+ sc_unique_name = f"{sc_qname}\n\n\t\t/\n\n{sc_guid}"
99
+ sc_mermaid = sc.get("mermaidGraph",'---')
100
+ if sc_mermaid != '---':
101
+ link = save_mermaid_graph(sc_name, sc_mermaid, EGERIA_MERMAID_FOLDER )
102
+ sc_mermaid_link = f"[link=file://:{link}]file://:{link}[/link])"
103
+ # sc_scope = Text(f"{sc_scope}\n\t\t/\n{sc_mermaid_link}")
104
+ sc_scope = Text(f"{sc_scope}\n\t\t/\n{sc_mermaid_link}", style="underline")
105
+ sc_scope.stylize("link " + sc_mermaid_link)
106
+
107
+ table.add_row(sc_name, sc_unique_name, sc_purpose_str, sc_scope, sc_desc)
108
+
109
+ return table
110
+
111
+
112
+
113
+
114
+ try:
115
+ console = Console(width=width, force_terminal=not jupyter)
116
+ with console.pager():
117
+ console.print(generate_table())
118
+
119
+ except (
120
+ InvalidParameterException,
121
+ PropertyServerException,
122
+ UserNotAuthorizedException,
123
+ ) as e:
124
+ print_exception_response(e)
125
+
126
+
127
+ def main():
128
+ parser = argparse.ArgumentParser()
129
+
130
+ parser.add_argument("--server", help="Name of the server to display status for")
131
+ parser.add_argument("--url", help="URL Platform to connect to")
132
+ parser.add_argument("--userid", help="User Id")
133
+ parser.add_argument("--password", help="User Password")
134
+ args = parser.parse_args()
135
+
136
+ server = args.server if args.server is not None else EGERIA_VIEW_SERVER
137
+ url = args.url if args.url is not None else EGERIA_PLATFORM_URL
138
+ userid = args.userid if args.userid is not None else EGERIA_USER
139
+ user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
140
+
141
+ try:
142
+ search_string = Prompt.ask(
143
+ "Enter a search string:", default="*"
144
+ )
145
+ supply_chain_viewer(search_string, server, url, userid, user_pass)
146
+ except KeyboardInterrupt:
147
+ pass
148
+
149
+
150
+ if __name__ == "__main__":
151
+ main()
@@ -0,0 +1,166 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ SPDX-License-Identifier: Apache-2.0
4
+ Copyright Contributors to the ODPi Egeria project.
5
+
6
+ A simple viewer for Information Supply Chains
7
+
8
+ """
9
+
10
+ import argparse
11
+ import os
12
+ import time
13
+
14
+ from rich import print, box
15
+ from rich.console import Console
16
+ from rich.markdown import Markdown
17
+ from rich.panel import Panel
18
+ from rich.prompt import Prompt
19
+ from rich.table import Table
20
+ from rich.text import Text
21
+ from rich.tree import Tree
22
+ from pyegeria.solution_architect_omvs import SolutionArchitect
23
+ from pyegeria import (
24
+ ProjectManager,
25
+ UserNotAuthorizedException,
26
+ PropertyServerException,
27
+ InvalidParameterException,
28
+ )
29
+
30
+ from pyegeria._exceptions import (
31
+ print_exception_response,
32
+ )
33
+
34
+ disable_ssl_warnings = True
35
+ EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
36
+ EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
37
+ EGERIA_PLATFORM_URL = os.environ.get("EGERIA_PLATFORM_URL", "https://localhost:9443")
38
+ EGERIA_VIEW_SERVER = os.environ.get("EGERIA_VIEW_SERVER", "qs-view-server")
39
+ EGERIA_VIEW_SERVER_URL = os.environ.get(
40
+ "EGERIA_VIEW_SERVER_URL", "https://localhost:9443"
41
+ )
42
+ EGERIA_INTEGRATION_DAEMON = os.environ.get("INTEGRATION_DAEMON", "integration-daemon")
43
+ EGERIA_ADMIN_USER = os.environ.get("ADMIN_USER", "garygeeke")
44
+ EGERIA_ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "secret")
45
+ EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
46
+ EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
47
+ EGERIA_JUPYTER = bool(os.environ.get("EGERIA_JUPYTER", "False"))
48
+ EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "150"))
49
+
50
+
51
+ def blueprint_list(
52
+ search_string: str,
53
+ server_name: str,
54
+ platform_url: str,
55
+ user: str,
56
+ user_password: str,
57
+ jupyter: bool = EGERIA_JUPYTER,
58
+ width: int = EGERIA_WIDTH,
59
+ timeout: int = 30,
60
+ ):
61
+ """A Supply Chain viewer"""
62
+ client = SolutionArchitect(server_name, platform_url, user, user_password)
63
+ token = client.create_egeria_bearer_token()
64
+
65
+ def generate_table() -> Table | str:
66
+ table = Table(
67
+ title=f"Blueprints matching {search_string} @ {time.asctime()}",
68
+ style="bright_white on black",
69
+ header_style="bright_white on dark_blue",
70
+ title_style="bold white on black",
71
+ caption_style="white on black",
72
+ show_lines=True,
73
+ box=box.ROUNDED,
74
+ caption=f"View Server '{server_name}' @ Platform - {platform_url}",
75
+ expand=True,
76
+ )
77
+ table.add_column("Blueprint Name")
78
+ table.add_column("Qualified Name \n/\n GUID\n/\nVersion", width=38, no_wrap=False)
79
+ table.add_column("Description")
80
+ table.add_column("Solution Components")
81
+
82
+ blueprints = client.find_solution_blueprints(search_string)
83
+ if isinstance(blueprints, list) is False:
84
+ return "No Blueprints found"
85
+
86
+ for bp in blueprints:
87
+ bp_name = bp["properties"].get("displayName", '---')
88
+ bp_qname = bp["properties"].get("qualifiedName", '---')
89
+ bp_guid = bp["elementHeader"]["guid"]
90
+ bp_desc = bp["properties"].get("description",'---')
91
+ bp_unique_name = f"{bp_qname}\n\n\t\t/\n\n{bp_guid}"
92
+ bp_mermaid = bp.get("mermaid",'---')
93
+
94
+ bp_components = bp.get("solutionComponents",[])
95
+ comp_table = Table(title="No Solution Components")
96
+ for component in bp_components:
97
+ comp = component.get("solutionComponent","")
98
+ if isinstance(comp,dict) is False:
99
+ continue
100
+ comp_props = comp.get("properties",{})
101
+ comp_name = comp_props.get("displayName",'---')
102
+ comp_description = comp_props.get("description",'---')
103
+ comp_planned = comp_props['extendedProperties'].get("plannedDeployedImplementationType",'---')
104
+ comp_type = comp_props.get('solutionComponentType','---')
105
+ comp_actors = comp_props.get('actors', [])
106
+ comp_actors_list = ""
107
+ for actor in comp_actors:
108
+ comp_actor_role = actor['relationshipProperties'].get('role','---')
109
+ comp_actor_props = actor['relatedElement'].get('properties',{})
110
+ comp_actor_props_md = f"* Role: {comp_actor_role}\n"
111
+ for prop in comp_actor_props.keys():
112
+ comp_actor_props_md += f"* {prop}: {comp_actor_props[prop]}\n"
113
+ comp_actors_list += comp_actor_props_md
114
+
115
+ comp_table = Table(title=f"Solution Component {comp_name}")
116
+ comp_table.add_column("Comp Type")
117
+ comp_table.add_column("Description")
118
+ comp_table.add_column("Planned Deployment")
119
+ comp_table.add_column("Actors")
120
+ comp_table.add_row(comp_type, comp_description, comp_planned, comp_actors_list)
121
+
122
+ table.add_row(bp_name, bp_unique_name, bp_desc, comp_table)
123
+
124
+ return table
125
+
126
+
127
+
128
+
129
+ try:
130
+ console = Console(width=width, force_terminal=not jupyter)
131
+ with console.pager():
132
+ console.print(generate_table())
133
+
134
+ except (
135
+ InvalidParameterException,
136
+ PropertyServerException,
137
+ UserNotAuthorizedException,
138
+ ) as e:
139
+ print_exception_response(e)
140
+
141
+
142
+ def main():
143
+ parser = argparse.ArgumentParser()
144
+
145
+ parser.add_argument("--server", help="Name of the server to display status for")
146
+ parser.add_argument("--url", help="URL Platform to connect to")
147
+ parser.add_argument("--userid", help="User Id")
148
+ parser.add_argument("--password", help="User Password")
149
+ args = parser.parse_args()
150
+
151
+ server = args.server if args.server is not None else EGERIA_VIEW_SERVER
152
+ url = args.url if args.url is not None else EGERIA_PLATFORM_URL
153
+ userid = args.userid if args.userid is not None else EGERIA_USER
154
+ user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
155
+
156
+ try:
157
+ search_string = Prompt.ask(
158
+ "Enter a search string:", default="*"
159
+ )
160
+ blueprint_list(search_string, server, url, userid, user_pass)
161
+ except KeyboardInterrupt:
162
+ pass
163
+
164
+
165
+ if __name__ == "__main__":
166
+ main()
@@ -0,0 +1,164 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ SPDX-License-Identifier: Apache-2.0
4
+ Copyright Contributors to the ODPi Egeria project.
5
+
6
+ A simple viewer for Information Supply Chains
7
+
8
+ """
9
+
10
+ import argparse
11
+ import os
12
+ import time
13
+
14
+ from rich import print, box
15
+ from rich.console import Console
16
+ from rich.markdown import Markdown
17
+ from rich.panel import Panel
18
+ from rich.prompt import Prompt
19
+ from rich.table import Table
20
+ from rich.text import Text
21
+ from rich.tree import Tree
22
+ from pyegeria.solution_architect_omvs import SolutionArchitect
23
+ from pyegeria import (
24
+ ProjectManager,
25
+ UserNotAuthorizedException,
26
+ PropertyServerException,
27
+ InvalidParameterException,
28
+ )
29
+
30
+ from pyegeria._exceptions import (
31
+ print_exception_response,
32
+ )
33
+
34
+ disable_ssl_warnings = True
35
+ EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
36
+ EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
37
+ EGERIA_PLATFORM_URL = os.environ.get("EGERIA_PLATFORM_URL", "https://localhost:9443")
38
+ EGERIA_VIEW_SERVER = os.environ.get("EGERIA_VIEW_SERVER", "qs-view-server")
39
+ EGERIA_VIEW_SERVER_URL = os.environ.get(
40
+ "EGERIA_VIEW_SERVER_URL", "https://localhost:9443"
41
+ )
42
+ EGERIA_INTEGRATION_DAEMON = os.environ.get("INTEGRATION_DAEMON", "integration-daemon")
43
+ EGERIA_ADMIN_USER = os.environ.get("ADMIN_USER", "garygeeke")
44
+ EGERIA_ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "secret")
45
+ EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
46
+ EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
47
+ EGERIA_JUPYTER = bool(os.environ.get("EGERIA_JUPYTER", "False"))
48
+ EGERIA_WIDTH = int(os.environ.get("EGERIA_WIDTH", "150"))
49
+
50
+
51
+ def blueprint_list(
52
+ search_string: str,
53
+ server_name: str,
54
+ platform_url: str,
55
+ user: str,
56
+ user_password: str,
57
+ jupyter: bool = EGERIA_JUPYTER,
58
+ width: int = EGERIA_WIDTH,
59
+ timeout: int = 30,
60
+ ):
61
+ """A Supply Chain viewer"""
62
+ client = SolutionArchitect(server_name, platform_url, user, user_password)
63
+ token = client.create_egeria_bearer_token()
64
+
65
+ def generate_table() -> Table | str:
66
+ table = Table(
67
+ title=f"Blueprints matching {search_string} @ {time.asctime()}",
68
+ style="bright_white on black",
69
+ header_style="bright_white on dark_blue",
70
+ title_style="bold white on black",
71
+ caption_style="white on black",
72
+ show_lines=True,
73
+ box=box.ROUNDED,
74
+ caption=f"View Server '{server_name}' @ Platform - {platform_url}",
75
+ expand=True,
76
+ )
77
+ table.add_column("Blueprint Name")
78
+ table.add_column("Qualified Name \n/\n GUID\n/\nVersion", width=38, no_wrap=False)
79
+ table.add_column("Description")
80
+ table.add_column("Solution Components")
81
+
82
+ blueprints = client.find_solution_blueprints(search_string)
83
+ if isinstance(blueprints, list) is False:
84
+ return "No Blueprints found"
85
+
86
+ for bp in blueprints:
87
+ bp_name = bp["properties"].get("displayName", '---')
88
+ bp_qname = bp["properties"].get("qualifiedName", '---')
89
+ bp_guid = bp["elementHeader"]["guid"]
90
+ bp_desc = bp["properties"].get("description",'---')
91
+ bp_unique_name = f"{bp_qname}\n\n\t\t/\n\n{bp_guid}"
92
+ bp_mermaid = bp.get("mermaid",'---')
93
+
94
+ bp_components = bp.get("solutionComponents",[])
95
+ comp_md=""
96
+ for component in bp_components:
97
+ comp = component.get("solutionComponent","")
98
+ if isinstance(comp,dict) is False:
99
+ continue
100
+ comp_props = comp.get("properties",{})
101
+ comp_name = comp_props.get("displayName",'---')
102
+ comp_description = comp_props.get("description",'---')
103
+ comp_planned = comp_props['extendedProperties'].get("plannedDeployedImplementationType",'---')
104
+ comp_type = comp_props.get('solutionComponentType','---')
105
+ comp_actors = comp_props.get('actors', [])
106
+ comp_actors_list = ""
107
+ for actor in comp_actors:
108
+ comp_actor_role = actor['relationshipProperties'].get('role','---')
109
+ comp_actor_props = actor['relatedElement'].get('properties',{})
110
+ comp_actor_props_md = f"* Role: {comp_actor_role}\n"
111
+ for prop in comp_actor_props.keys():
112
+ comp_actor_props_md += f"* {prop}: {comp_actor_props[prop]}\n"
113
+ comp_actors_list += comp_actor_props_md
114
+
115
+ comp_md = f"Solution Component {comp_name}\n\n"
116
+ comp_md += f"* Description: {comp_description}\n"
117
+ comp_md += f"* Planned Deployment: {comp_planned}\n"
118
+ comp_md += f"* Actors: {comp_actors_list}\n---\n"
119
+ comp_out = Markdown(comp_md)
120
+ table.add_row(bp_name, bp_unique_name, bp_desc, comp_out)
121
+
122
+ return table
123
+
124
+
125
+
126
+
127
+ try:
128
+ console = Console(width=width, force_terminal=not jupyter)
129
+ with console.pager():
130
+ console.print(generate_table())
131
+
132
+ except (
133
+ InvalidParameterException,
134
+ PropertyServerException,
135
+ UserNotAuthorizedException,
136
+ ) as e:
137
+ print_exception_response(e)
138
+
139
+
140
+ def main():
141
+ parser = argparse.ArgumentParser()
142
+
143
+ parser.add_argument("--server", help="Name of the server to display status for")
144
+ parser.add_argument("--url", help="URL Platform to connect to")
145
+ parser.add_argument("--userid", help="User Id")
146
+ parser.add_argument("--password", help="User Password")
147
+ args = parser.parse_args()
148
+
149
+ server = args.server if args.server is not None else EGERIA_VIEW_SERVER
150
+ url = args.url if args.url is not None else EGERIA_PLATFORM_URL
151
+ userid = args.userid if args.userid is not None else EGERIA_USER
152
+ user_pass = args.password if args.password is not None else EGERIA_USER_PASSWORD
153
+
154
+ try:
155
+ search_string = Prompt.ask(
156
+ "Enter a search string:", default="*"
157
+ )
158
+ blueprint_list(search_string, server, url, userid, user_pass)
159
+ except KeyboardInterrupt:
160
+ pass
161
+
162
+
163
+ if __name__ == "__main__":
164
+ main()
@@ -0,0 +1,49 @@
1
+
2
+ <!DOCTYPE html>
3
+ <html>
4
+ <head>
5
+ <script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
6
+ </head>
7
+ <body>
8
+ <div class="mermaid">
9
+ ---
10
+ title: Information Supply Chain - Clinical Trial Subject Onboarding [39a035f0-3b2b-45fe-adb8-ee8a19581f6a]
11
+ ---
12
+ flowchart TD
13
+ %%{init: {"flowchart": {"htmlLabels": false}} }%%
14
+
15
+ 39a035f0-3b2b-45fe-adb8-ee8a19581f6a@{ shape: flip-tri, label: "*Information Supply Chain*
16
+ **Clinical Trial Subject Onboarding**"}
17
+ a02292f3-6333-42de-a102-d97c21532561@{ shape: text, label: "*Description*
18
+ **Delivering the data necessary to add a person as a subject in a clinical trial.**"}
19
+ 39a035f0-3b2b-45fe-adb8-ee8a19581f6a~~~a02292f3-6333-42de-a102-d97c21532561
20
+ 5c45e887-11e0-41fe-baec-ed25f831e36d@{ shape: text, label: "*Purpose*
21
+ **Ensure patient subject is aware of the process and potential risks in participation.**"}
22
+ a02292f3-6333-42de-a102-d97c21532561~~~5c45e887-11e0-41fe-baec-ed25f831e36d
23
+ e4329c56-3ebd-4ebb-a7f1-0949a788dab1@{ shape: text, label: "*Purpose*
24
+ **Ensure patient subject has given permission for Coco Pharmaceuticals to acquire, store and process their personal data needed for the clinical trial.**"}
25
+ 5c45e887-11e0-41fe-baec-ed25f831e36d~~~e4329c56-3ebd-4ebb-a7f1-0949a788dab1
26
+ 7cd6c004-cb55-4126-8fe9-9d10f871c1d7@{ shape: text, label: "*Purpose*
27
+ **Ensure incoming data is validated and catalogued.**"}
28
+ e4329c56-3ebd-4ebb-a7f1-0949a788dab1~~~7cd6c004-cb55-4126-8fe9-9d10f871c1d7
29
+ 68187078-26f4-4ccf-9bea-310fcbd6562f@{ shape: text, label: "*Purpose*
30
+ **Ensure data and process owners are informed of key milestones and issues requiring attention.**"}
31
+ 7cd6c004-cb55-4126-8fe9-9d10f871c1d7~~~68187078-26f4-4ccf-9bea-310fcbd6562f
32
+ f0957b39-1f6c-4362-bf8a-ec0c4b537560@{ shape: text, label: "*Purpose*
33
+ **Ensure the process of data capture and validation is transparent and auditable.**"}
34
+ 68187078-26f4-4ccf-9bea-310fcbd6562f~~~f0957b39-1f6c-4362-bf8a-ec0c4b537560
35
+ style 39a035f0-3b2b-45fe-adb8-ee8a19581f6a color:#FFFFFF, fill:#004563, stroke:#b7c0c7
36
+ style 68187078-26f4-4ccf-9bea-310fcbd6562f color:#000000, fill:#F9F7ED, stroke:#b7c0c7
37
+ style 5c45e887-11e0-41fe-baec-ed25f831e36d color:#000000, fill:#F9F7ED, stroke:#b7c0c7
38
+ style f0957b39-1f6c-4362-bf8a-ec0c4b537560 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
39
+ style e4329c56-3ebd-4ebb-a7f1-0949a788dab1 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
40
+ style a02292f3-6333-42de-a102-d97c21532561 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
41
+ style 7cd6c004-cb55-4126-8fe9-9d10f871c1d7 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
42
+
43
+ </div>
44
+
45
+ <script>
46
+ mermaid.initialize({startOnLoad:true});
47
+ </script>
48
+ </body>
49
+ </html>
@@ -0,0 +1,129 @@
1
+
2
+ <!DOCTYPE html>
3
+ <html>
4
+ <head>
5
+ <script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
6
+ </head>
7
+ <body>
8
+ <div class="mermaid">
9
+ ---
10
+ title: Information Supply Chain - Clinical Trial Treatment Validation [1f71e403-1187-4f03-a1dd-ae7dc105f06f]
11
+ ---
12
+ flowchart TD
13
+ %%{init: {"flowchart": {"htmlLabels": false}} }%%
14
+
15
+ 1f71e403-1187-4f03-a1dd-ae7dc105f06f@{ shape: flip-tri, label: "*Information Supply Chain*
16
+ **Clinical Trial Treatment Validation**"}
17
+ ca5c1980-a6e1-4c48-af90-d4aed6314aaf@{ shape: text, label: "*Description*
18
+ **Delivering data relating to a clinical trial from the hospitals to the Coco Researchers so that they can then determine the efficacy of the treatment to report to the regulators.**"}
19
+ 1f71e403-1187-4f03-a1dd-ae7dc105f06f~~~ca5c1980-a6e1-4c48-af90-d4aed6314aaf
20
+ 278d35bd-0f2f-4f54-931f-6006d550360c@{ shape: text, label: "*Purpose*
21
+ **Deliver patient measurement data from hospitals to data scientists in research.**"}
22
+ ca5c1980-a6e1-4c48-af90-d4aed6314aaf~~~278d35bd-0f2f-4f54-931f-6006d550360c
23
+ db603776-6152-49b0-9141-c16024c2268e@{ shape: text, label: "*Purpose*
24
+ **Ensure incoming data is only from certified hospitals.**"}
25
+ 278d35bd-0f2f-4f54-931f-6006d550360c~~~db603776-6152-49b0-9141-c16024c2268e
26
+ 0b74a538-54cd-4a20-9b6b-88d970361a69@{ shape: text, label: "*Purpose*
27
+ **Ensure incoming data is validated and catalogued.**"}
28
+ db603776-6152-49b0-9141-c16024c2268e~~~0b74a538-54cd-4a20-9b6b-88d970361a69
29
+ f3d86b7b-0c4e-4f86-83f9-76680539091a@{ shape: text, label: "*Purpose*
30
+ **Ensure data and process owners are informed of key milestones and issues requiring attention.**"}
31
+ 0b74a538-54cd-4a20-9b6b-88d970361a69~~~f3d86b7b-0c4e-4f86-83f9-76680539091a
32
+ 1a0c1a1c-c8e9-4556-9c47-537a07c230a6@{ shape: text, label: "*Purpose*
33
+ **Ensure the process of data capture and treatment validation is transparent and auditable.**"}
34
+ f3d86b7b-0c4e-4f86-83f9-76680539091a~~~1a0c1a1c-c8e9-4556-9c47-537a07c230a6
35
+ 4b99798c-9918-47f0-9bad-3737cab1e07c@{ shape: text, label: "*Purpose*
36
+ **Ensure the treatment validation report is complete and regulatory compliant.**"}
37
+ 1a0c1a1c-c8e9-4556-9c47-537a07c230a6~~~4b99798c-9918-47f0-9bad-3737cab1e07c
38
+ 38635d38-f728-400d-a8ec-7c26e68b7c0f@{ shape: hex, label: "*Information Supply Chain Segment*
39
+ **Weekly Measurements Onboarding**"}
40
+ 38635d38-f728-400d-a8ec-7c26e68b7c0f-->|"capture and catalog,
41
+ [Information Supply Chain Link]"|7edca02c-e726-4570-815c-280bdf5498b9
42
+ e4303326-e418-4f77-b8e7-fd5d34717594@{ shape: hex, label: "*Information Supply Chain Segment*
43
+ **Assess Treatment under Trial**"}
44
+ e4303326-e418-4f77-b8e7-fd5d34717594-->|"publish results,
45
+ [Information Supply Chain Link]"|4fc47e60-f1b5-469c-b666-e1f4570e749f
46
+ 04ae768e-3816-47bc-bddb-c9ae25018684@{ shape: hex, label: "*Information Supply Chain Segment*
47
+ **Hospital Delivers Patient Weekly Readings**"}
48
+ 04ae768e-3816-47bc-bddb-c9ae25018684-->|"publish,
49
+ [Information Supply Chain Link]"|38635d38-f728-400d-a8ec-7c26e68b7c0f
50
+ 4fc47e60-f1b5-469c-b666-e1f4570e749f@{ shape: hex, label: "*Information Supply Chain Segment*
51
+ **Deliver Treatment Assessment Report**"}
52
+ 7edca02c-e726-4570-815c-280bdf5498b9@{ shape: hex, label: "*Information Supply Chain Segment*
53
+ **Data Lake to Sandbox**"}
54
+ 7edca02c-e726-4570-815c-280bdf5498b9-->|"assemble,
55
+ [Information Supply Chain Link]"|e4303326-e418-4f77-b8e7-fd5d34717594
56
+ 1c150d6e-30cf-481c-9afb-3b06c9c9e78f@{ shape: rect, label: "*Solution Component*
57
+ **SolutionComponent:Hospital Landing Area Folder:V1.0**"}
58
+ 7f5dca65-50b4-4103-9ac7-3a406a09047a@{ shape: rect, label: "*Solution Component*
59
+ **SolutionComponent:Weekly Measurements Onboarding Pipeline:V1.0**"}
60
+ 07705e15-efff-4f80-8992-f04ac85e0ef1@{ shape: rect, label: "*Solution Component*
61
+ **SolutionComponent:Landing Folder Cataloguer:V1.0**"}
62
+ a5d4d638-6836-47e5-99d0-fdcde637e13f@{ shape: rect, label: "*Solution Component*
63
+ **SolutionComponent:Weekly Measurements Data Lake Folder:V1.0**"}
64
+ 1c150d6e-30cf-481c-9afb-3b06c9c9e78f-->|"detect new files,
65
+ [Solution Linking Wire]"|07705e15-efff-4f80-8992-f04ac85e0ef1
66
+ ee2bb773-e630-4cf9-bdf1-7c2dd64fe4ec@{ shape: rect, label: "*Solution Component*
67
+ **SolutionComponent:Hospital Processes:V1.0**"}
68
+ ee2bb773-e630-4cf9-bdf1-7c2dd64fe4ec-->|"publish,
69
+ [Solution Linking Wire]"|1c150d6e-30cf-481c-9afb-3b06c9c9e78f
70
+ 07705e15-efff-4f80-8992-f04ac85e0ef1-->|"request onboarding,
71
+ [Solution Linking Wire]"|7f5dca65-50b4-4103-9ac7-3a406a09047a
72
+ 7f5dca65-50b4-4103-9ac7-3a406a09047a-->|"save new files,
73
+ [Solution Linking Wire]"|a5d4d638-6836-47e5-99d0-fdcde637e13f
74
+ 26c07ca4-3b8e-484b-812b-36c1ace4b275@{ shape: rect, label: "*Solution Component*
75
+ **SolutionComponent:Populate Sandbox:V1.0**"}
76
+ a5d4d638-6836-47e5-99d0-fdcde637e13f-->|"read certified files,
77
+ [Solution Linking Wire]"|26c07ca4-3b8e-484b-812b-36c1ace4b275
78
+ 48bc201e-3d4e-4beb-bdb2-0fd9d134f6d5@{ shape: rect, label: "*Solution Component*
79
+ **SolutionComponent:Treatment Efficacy Evidence:V1.0**"}
80
+ b5c8da4c-f925-4cf1-8294-e43cd2c1a584@{ shape: rect, label: "*Solution Component*
81
+ **SolutionComponent:Analyse Patient Data:V1.0**"}
82
+ d48f579f-76d3-4c49-b1b4-575f5645a9d0@{ shape: rect, label: "*Solution Component*
83
+ **SolutionComponent:Treatment Validation Sandbox:V1.0**"}
84
+ 72a86eec-9734-4bc0-babb-4fec0aa7c9ff@{ shape: rect, label: "*Solution Component*
85
+ **SolutionComponent:Assemble Treatment Assessment Report:V1.0**"}
86
+ 48bc201e-3d4e-4beb-bdb2-0fd9d134f6d5-->|"retrieve evidence,
87
+ [Solution Linking Wire]"|72a86eec-9734-4bc0-babb-4fec0aa7c9ff
88
+ b5c8da4c-f925-4cf1-8294-e43cd2c1a584-->|"publish results,
89
+ [Solution Linking Wire]"|48bc201e-3d4e-4beb-bdb2-0fd9d134f6d5
90
+ d48f579f-76d3-4c49-b1b4-575f5645a9d0-->|"retrieve patient data,
91
+ [Solution Linking Wire]"|b5c8da4c-f925-4cf1-8294-e43cd2c1a584
92
+ 26c07ca4-3b8e-484b-812b-36c1ace4b275-->|"write patient measurements,
93
+ [Solution Linking Wire]"|d48f579f-76d3-4c49-b1b4-575f5645a9d0
94
+ 0bf2547c-937c-41b6-814f-6284849271a1@{ shape: rect, label: "*Solution Component*
95
+ **SolutionComponent:Treatment Assessment Report Validation and Delivery:V1.0**"}
96
+ 72a86eec-9734-4bc0-babb-4fec0aa7c9ff-->|"publish results,
97
+ [Solution Linking Wire]"|0bf2547c-937c-41b6-814f-6284849271a1
98
+ style 278d35bd-0f2f-4f54-931f-6006d550360c color:#000000, fill:#F9F7ED, stroke:#b7c0c7
99
+ style 48bc201e-3d4e-4beb-bdb2-0fd9d134f6d5 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
100
+ style ca5c1980-a6e1-4c48-af90-d4aed6314aaf color:#000000, fill:#F9F7ED, stroke:#b7c0c7
101
+ style f3d86b7b-0c4e-4f86-83f9-76680539091a color:#000000, fill:#F9F7ED, stroke:#b7c0c7
102
+ style 0b74a538-54cd-4a20-9b6b-88d970361a69 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
103
+ style e4303326-e418-4f77-b8e7-fd5d34717594 color:#004563, fill:#b7c0c7, stroke:#004563
104
+ style 4fc47e60-f1b5-469c-b666-e1f4570e749f color:#004563, fill:#b7c0c7, stroke:#004563
105
+ style 1a0c1a1c-c8e9-4556-9c47-537a07c230a6 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
106
+ style 7f5dca65-50b4-4103-9ac7-3a406a09047a color:#FFFFFF, fill:#838cc7, stroke:#3079ab
107
+ style ee2bb773-e630-4cf9-bdf1-7c2dd64fe4ec color:#FFFFFF, fill:#838cc7, stroke:#3079ab
108
+ style a5d4d638-6836-47e5-99d0-fdcde637e13f color:#FFFFFF, fill:#838cc7, stroke:#3079ab
109
+ style 72a86eec-9734-4bc0-babb-4fec0aa7c9ff color:#FFFFFF, fill:#838cc7, stroke:#3079ab
110
+ style 38635d38-f728-400d-a8ec-7c26e68b7c0f color:#004563, fill:#b7c0c7, stroke:#004563
111
+ style 7edca02c-e726-4570-815c-280bdf5498b9 color:#004563, fill:#b7c0c7, stroke:#004563
112
+ style b5c8da4c-f925-4cf1-8294-e43cd2c1a584 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
113
+ style 0bf2547c-937c-41b6-814f-6284849271a1 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
114
+ style d48f579f-76d3-4c49-b1b4-575f5645a9d0 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
115
+ style 1f71e403-1187-4f03-a1dd-ae7dc105f06f color:#FFFFFF, fill:#004563, stroke:#b7c0c7
116
+ style db603776-6152-49b0-9141-c16024c2268e color:#000000, fill:#F9F7ED, stroke:#b7c0c7
117
+ style 04ae768e-3816-47bc-bddb-c9ae25018684 color:#004563, fill:#b7c0c7, stroke:#004563
118
+ style 26c07ca4-3b8e-484b-812b-36c1ace4b275 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
119
+ style 4b99798c-9918-47f0-9bad-3737cab1e07c color:#000000, fill:#F9F7ED, stroke:#b7c0c7
120
+ style 1c150d6e-30cf-481c-9afb-3b06c9c9e78f color:#FFFFFF, fill:#838cc7, stroke:#3079ab
121
+ style 07705e15-efff-4f80-8992-f04ac85e0ef1 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
122
+
123
+ </div>
124
+
125
+ <script>
126
+ mermaid.initialize({startOnLoad:true});
127
+ </script>
128
+ </body>
129
+ </html>