pyegeria 0.3.7__py3-none-any.whl → 0.3.9__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/Xasset_catalog_omvs.py +539 -0
- pyegeria/Xfeedback_manager_omvs.py +251 -0
- pyegeria/Xglossary_manager_omvs.py +3001 -0
- pyegeria/Xloaded_resources_omvs.py +91 -0
- pyegeria/__init__.py +6 -9
- pyegeria/_client.py +4 -6
- pyegeria/{gov_engine.py → _deprecated_gov_engine.py} +2 -59
- pyegeria/_exceptions.py +5 -6
- pyegeria/_globals.py +1 -1
- pyegeria/automated_curation_omvs.py +320 -315
- pyegeria/collection_manager_omvs.py +187 -248
- pyegeria/core_omag_server_config.py +1 -5
- pyegeria/full_omag_server_config.py +53 -83
- pyegeria/glossary_browser_omvs.py +2208 -0
- pyegeria/my_profile_omvs.py +8 -12
- pyegeria/platform_services.py +0 -3
- pyegeria/project_manager_omvs.py +9 -15
- pyegeria/registered_info.py +12 -52
- pyegeria/server_operations.py +1 -5
- pyegeria/valid_metadata_omvs.py +11 -23
- pyegeria-0.3.9.data/scripts/Create_Collection_Sample.py +292 -0
- pyegeria-0.3.9.data/scripts/Create_Sustainability_Collection_Sample.py +115 -0
- pyegeria-0.3.9.data/scripts/coco_status.py +98 -0
- {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/collection_viewer.py +12 -31
- {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/engine_action_status.py +14 -30
- {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/find_todos.py +12 -41
- pyegeria-0.3.9.data/scripts/get_registered_services.py +135 -0
- {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/get_relationship_types.py +16 -35
- {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/glossary_view.py +2 -2
- {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/gov_engine_status.py +0 -1
- {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/list_asset_types.py +3 -25
- {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/my_todos.py +1 -1
- {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/open_todos.py +3 -24
- {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/project_list_viewer.py +12 -26
- {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/server_status.py +1 -20
- {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/view_my_profile.py +8 -34
- {pyegeria-0.3.7.dist-info → pyegeria-0.3.9.dist-info}/METADATA +1 -3
- pyegeria-0.3.9.dist-info/RECORD +49 -0
- pyegeria/glossary_omvs.py +0 -789
- pyegeria-0.3.7.dist-info/RECORD +0 -41
- /pyegeria/{governance_author.py → Xaction_author_omvs.py} +0 -0
- {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/get_tech_details.py +0 -0
- {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/get_tech_types.py +0 -0
- {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/integration_daemon_status.py +0 -0
- {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/multi-server_status.py +0 -0
- {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/server_status_widget.py +0 -0
- {pyegeria-0.3.7.dist-info → pyegeria-0.3.9.dist-info}/LICENSE +0 -0
- {pyegeria-0.3.7.dist-info → pyegeria-0.3.9.dist-info}/WHEEL +0 -0
- {pyegeria-0.3.7.dist-info → pyegeria-0.3.9.dist-info}/top_level.txt +0 -0
@@ -2,7 +2,7 @@
|
|
2
2
|
SPDX-License-Identifier: Apache-2.0
|
3
3
|
Copyright Contributors to the ODPi Egeria project.
|
4
4
|
|
5
|
-
Automated Curation View Service Methods
|
5
|
+
Automated Curation View Service Methods
|
6
6
|
|
7
7
|
"""
|
8
8
|
import asyncio
|
@@ -11,9 +11,7 @@ from datetime import datetime
|
|
11
11
|
from httpx import Response
|
12
12
|
|
13
13
|
from pyegeria import Client, max_paging_size, body_slimmer
|
14
|
-
from pyegeria._exceptions import (
|
15
|
-
InvalidParameterException,
|
16
|
-
)
|
14
|
+
from pyegeria._exceptions import (InvalidParameterException, )
|
17
15
|
from ._validators import validate_name, validate_guid, validate_search_string
|
18
16
|
|
19
17
|
|
@@ -30,24 +28,15 @@ class AutomatedCuration(Client):
|
|
30
28
|
when the user doesn't pass the user_id on a method call.
|
31
29
|
user_pwd: str
|
32
30
|
The password associated with the user_id. Defaults to None
|
33
|
-
|
34
|
-
Flag to indicate if SSL Certificates should be verified in the HTTP requests.
|
35
|
-
Defaults to False.
|
31
|
+
|
36
32
|
|
37
33
|
"""
|
38
34
|
|
39
|
-
def __init__(
|
40
|
-
|
41
|
-
server_name: str,
|
42
|
-
platform_url: str,
|
43
|
-
user_id: str,
|
44
|
-
user_pwd: str = None,
|
45
|
-
verify_flag: bool = False,
|
46
|
-
):
|
35
|
+
def __init__(self, server_name: str, platform_url: str, user_id: str, user_pwd: str = None,
|
36
|
+
verify_flag: bool = False, ):
|
47
37
|
Client.__init__(self, server_name, platform_url, user_id, user_pwd, verify_flag)
|
48
38
|
self.cur_command_root = f"{platform_url}/servers/"
|
49
39
|
|
50
|
-
|
51
40
|
async def _async_create_element_from_template(self, body: dict, server: str = None) -> str:
|
52
41
|
""" Create a new metadata element from a template. Async version.
|
53
42
|
Parameters
|
@@ -146,9 +135,7 @@ class AutomatedCuration(Client):
|
|
146
135
|
}
|
147
136
|
"""
|
148
137
|
loop = asyncio.get_event_loop()
|
149
|
-
response = loop.run_until_complete(
|
150
|
-
self._async_create_element_from_template(body, server)
|
151
|
-
)
|
138
|
+
response = loop.run_until_complete(self._async_create_element_from_template(body, server))
|
152
139
|
return response
|
153
140
|
|
154
141
|
async def _async_create_kafka_server_element_from_template(self, kafka_server: str, host_name: str, port: str,
|
@@ -175,17 +162,11 @@ class AutomatedCuration(Client):
|
|
175
162
|
The GUID of the Kafka server element.
|
176
163
|
"""
|
177
164
|
|
178
|
-
body = {
|
179
|
-
|
180
|
-
|
181
|
-
"placeholderPropertyValues": {
|
182
|
-
"serverName": kafka_server,
|
183
|
-
"hostIdentifier": host_name,
|
184
|
-
"portNumber": port
|
185
|
-
}
|
186
|
-
}
|
165
|
+
body = {"templateGUID": "5e1ff810-5418-43f7-b7c4-e6e062f9aff7", "isOwnAnchor": 'true',
|
166
|
+
"placeholderPropertyValues": {"serverName": kafka_server, "hostIdentifier": host_name,
|
167
|
+
"portNumber": port}}
|
187
168
|
response = await self._async_create_element_from_template(body, server)
|
188
|
-
return response
|
169
|
+
return str(response)
|
189
170
|
|
190
171
|
def create_kafka_server_element_from_template(self, kafka_server: str, host_name: str, port: str,
|
191
172
|
server: str = None) -> str:
|
@@ -212,8 +193,7 @@ class AutomatedCuration(Client):
|
|
212
193
|
"""
|
213
194
|
loop = asyncio.get_event_loop()
|
214
195
|
response = loop.run_until_complete(
|
215
|
-
self._async_create_kafka_server_element_from_template(kafka_server, host_name, port, server)
|
216
|
-
)
|
196
|
+
self._async_create_kafka_server_element_from_template(kafka_server, host_name, port, server))
|
217
197
|
return response
|
218
198
|
|
219
199
|
async def _async_create_postgres_server_element_from_template(self, postgres_server: str, host_name: str, port: str,
|
@@ -245,19 +225,12 @@ class AutomatedCuration(Client):
|
|
245
225
|
str
|
246
226
|
The GUID of the Kafka server element.
|
247
227
|
"""
|
248
|
-
body = {
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
"serverName": postgres_server,
|
253
|
-
"hostIdentifier": host_name,
|
254
|
-
"portNumber": port,
|
255
|
-
"databaseUserId": db_user,
|
256
|
-
"databasePassword": db_pwd
|
257
|
-
}
|
258
|
-
}
|
228
|
+
body = {"templateGUID": "542134e6-b9ce-4dce-8aef-22e8daf34fdb", "isOwnAnchor": 'true',
|
229
|
+
"placeholderPropertyValues": {"serverName": postgres_server, "hostIdentifier": host_name,
|
230
|
+
"portNumber": port, "databaseUserId": db_user,
|
231
|
+
"databasePassword": db_pwd}}
|
259
232
|
response = await self._async_create_element_from_template(body, server)
|
260
|
-
return response
|
233
|
+
return str(response)
|
261
234
|
|
262
235
|
def create_postgres_server_element_from_template(self, postgres_server: str, host_name: str, port: str,
|
263
236
|
db_user: str, db_pwd: str, server: str = None) -> str:
|
@@ -290,9 +263,8 @@ class AutomatedCuration(Client):
|
|
290
263
|
"""
|
291
264
|
loop = asyncio.get_event_loop()
|
292
265
|
response = loop.run_until_complete(
|
293
|
-
self._async_create_postgres_server_element_from_template(postgres_server, host_name,
|
294
|
-
|
295
|
-
)
|
266
|
+
self._async_create_postgres_server_element_from_template(postgres_server, host_name, port, db_user, db_pwd,
|
267
|
+
server))
|
296
268
|
return response
|
297
269
|
|
298
270
|
#
|
@@ -360,9 +332,7 @@ class AutomatedCuration(Client):
|
|
360
332
|
For more information see: https://egeria-project.org/concepts/engine-action
|
361
333
|
"""
|
362
334
|
loop = asyncio.get_event_loop()
|
363
|
-
response = loop.run_until_complete(
|
364
|
-
self._async_get_engine_actions(server, start_from, page_size)
|
365
|
-
)
|
335
|
+
response = loop.run_until_complete(self._async_get_engine_actions(server, start_from, page_size))
|
366
336
|
return response
|
367
337
|
|
368
338
|
async def _async_get_engine_action(self, engine_action_guid: str, server: str = None) -> dict:
|
@@ -424,9 +394,7 @@ class AutomatedCuration(Client):
|
|
424
394
|
For more information see: https://egeria-project.org/concepts/engine-action
|
425
395
|
"""
|
426
396
|
loop = asyncio.get_event_loop()
|
427
|
-
response = loop.run_until_complete(
|
428
|
-
self._async_get_engine_action(engine_action_guid, server)
|
429
|
-
)
|
397
|
+
response = loop.run_until_complete(self._async_get_engine_action(engine_action_guid, server))
|
430
398
|
return response
|
431
399
|
|
432
400
|
async def _async_cancel_engine_action(self, engine_action_guid: str, server: str = None) -> None:
|
@@ -488,8 +456,7 @@ class AutomatedCuration(Client):
|
|
488
456
|
For more information see: https://egeria-project.org/concepts/engine-action
|
489
457
|
"""
|
490
458
|
loop = asyncio.get_event_loop()
|
491
|
-
loop.run_until_complete(
|
492
|
-
self._async_cancel_engine_action(engine_action_guid, server))
|
459
|
+
loop.run_until_complete(self._async_cancel_engine_action(engine_action_guid, server))
|
493
460
|
return
|
494
461
|
|
495
462
|
async def _async_get_active_engine_actions(self, server: str = None, start_from: int = 0,
|
@@ -553,9 +520,7 @@ class AutomatedCuration(Client):
|
|
553
520
|
|
554
521
|
"""
|
555
522
|
loop = asyncio.get_event_loop()
|
556
|
-
response = loop.run_until_complete(
|
557
|
-
self._async_get_active_engine_actions(server, start_from, page_size)
|
558
|
-
)
|
523
|
+
response = loop.run_until_complete(self._async_get_active_engine_actions(server, start_from, page_size))
|
559
524
|
return response
|
560
525
|
|
561
526
|
async def _async_get_engine_actions_by_name(self, name: str, server: str = None, start_from: int = 0,
|
@@ -596,9 +561,7 @@ class AutomatedCuration(Client):
|
|
596
561
|
|
597
562
|
url = (f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/engine-actions/by-name?"
|
598
563
|
f"startFrom={start_from}&pageSize={page_size}")
|
599
|
-
body = {
|
600
|
-
"filter": name
|
601
|
-
}
|
564
|
+
body = {"filter": name}
|
602
565
|
response = await self._async_make_request("POST", url, body)
|
603
566
|
return response.json().get("elements", "no actions")
|
604
567
|
|
@@ -637,9 +600,7 @@ class AutomatedCuration(Client):
|
|
637
600
|
|
638
601
|
"""
|
639
602
|
loop = asyncio.get_event_loop()
|
640
|
-
response = loop.run_until_complete(
|
641
|
-
self._async_get_engine_actions_by_name(name, server, start_from, page_size)
|
642
|
-
)
|
603
|
+
response = loop.run_until_complete(self._async_get_engine_actions_by_name(name, server, start_from, page_size))
|
643
604
|
return response
|
644
605
|
|
645
606
|
async def _async_find_engine_actions(self, search_string: str, server: str = None, starts_with: bool = False,
|
@@ -695,12 +656,8 @@ class AutomatedCuration(Client):
|
|
695
656
|
|
696
657
|
url = (f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/engine-actions/"
|
697
658
|
f"by-search-string?startFrom={start_from}&pageSize={page_size}&startsWith={starts_with_s}&"
|
698
|
-
f"endsWith={ends_with_s}&ignoreCase={ignore_case_s}"
|
699
|
-
|
700
|
-
body = {
|
701
|
-
"class": "SearchStringRequestBody",
|
702
|
-
"name": search_string
|
703
|
-
}
|
659
|
+
f"endsWith={ends_with_s}&ignoreCase={ignore_case_s}")
|
660
|
+
body = {"class": "SearchStringRequestBody", "name": search_string}
|
704
661
|
response = await self._async_make_request("POST", url, body)
|
705
662
|
return response.json().get("elements", "no actions")
|
706
663
|
|
@@ -750,10 +707,8 @@ class AutomatedCuration(Client):
|
|
750
707
|
|
751
708
|
loop = asyncio.get_event_loop()
|
752
709
|
response = loop.run_until_complete(
|
753
|
-
self._async_find_engine_actions(search_string, server, starts_with,
|
754
|
-
|
755
|
-
page_size)
|
756
|
-
)
|
710
|
+
self._async_find_engine_actions(search_string, server, starts_with, ends_with, ignore_case, start_from,
|
711
|
+
page_size))
|
757
712
|
return response
|
758
713
|
|
759
714
|
#
|
@@ -812,9 +767,7 @@ class AutomatedCuration(Client):
|
|
812
767
|
UserNotAuthorizedException:
|
813
768
|
"""
|
814
769
|
loop = asyncio.get_event_loop()
|
815
|
-
response = loop.run_until_complete(
|
816
|
-
self._async_get_governance_action_process_by_guid(process_guid, server)
|
817
|
-
)
|
770
|
+
response = loop.run_until_complete(self._async_get_governance_action_process_by_guid(process_guid, server))
|
818
771
|
return response
|
819
772
|
|
820
773
|
async def _async_get_gov_action_process_graph(self, process_guid: str, server: str = None) -> dict | str:
|
@@ -846,7 +799,7 @@ class AutomatedCuration(Client):
|
|
846
799
|
url = (f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/"
|
847
800
|
f"governance-action-processes/{process_guid}/graph")
|
848
801
|
|
849
|
-
response = await self._async_make_request("
|
802
|
+
response = await self._async_make_request("POST", url)
|
850
803
|
return response.json().get("element", "no actions")
|
851
804
|
|
852
805
|
def get_gov_action_process_graph(self, process_guid: str, server: str = None) -> dict | str:
|
@@ -873,9 +826,7 @@ class AutomatedCuration(Client):
|
|
873
826
|
|
874
827
|
"""
|
875
828
|
loop = asyncio.get_event_loop()
|
876
|
-
response = loop.run_until_complete(
|
877
|
-
self._async_gov_action_process_graph(process_guid, server)
|
878
|
-
)
|
829
|
+
response = loop.run_until_complete(self._async_get_gov_action_process_graph(process_guid, server))
|
879
830
|
return response
|
880
831
|
|
881
832
|
async def _async_get_gov_action_processes_by_name(self, name: str, server: str = None, start_from: int = None,
|
@@ -912,10 +863,7 @@ class AutomatedCuration(Client):
|
|
912
863
|
|
913
864
|
url = (f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/governance-action-processes/"
|
914
865
|
f"by-name?startFrom={start_from}&pageSize={page_size}")
|
915
|
-
body = {
|
916
|
-
"class": "NameRequestBody",
|
917
|
-
"name": name
|
918
|
-
}
|
866
|
+
body = {"class": "NameRequestBody", "name": name}
|
919
867
|
response = await self._async_make_request("POST", url, body)
|
920
868
|
return response.json().get("elements", "no actions")
|
921
869
|
|
@@ -950,8 +898,7 @@ class AutomatedCuration(Client):
|
|
950
898
|
"""
|
951
899
|
loop = asyncio.get_event_loop()
|
952
900
|
response = loop.run_until_complete(
|
953
|
-
self._async_get_gov_action_processes_by_name(name, server, start_from, page_size)
|
954
|
-
)
|
901
|
+
self._async_get_gov_action_processes_by_name(name, server, start_from, page_size))
|
955
902
|
return response
|
956
903
|
|
957
904
|
async def _async_find_gov_action_processes(self, search_string: str, server: str = None, starts_with: bool = False,
|
@@ -1002,15 +949,16 @@ class AutomatedCuration(Client):
|
|
1002
949
|
ends_with_s = str(ends_with).lower()
|
1003
950
|
ignore_case_s = str(ignore_case).lower()
|
1004
951
|
|
1005
|
-
url = (f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/governance-action-
|
952
|
+
url = (f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/governance-action-processes/"
|
1006
953
|
f"by-search-string?startFrom={start_from}&pageSize={page_size}&startsWith={starts_with_s}&"
|
1007
|
-
f"endsWith={ends_with_s}&ignoreCase={ignore_case_s}"
|
1008
|
-
|
1009
|
-
|
1010
|
-
"
|
1011
|
-
"
|
1012
|
-
|
1013
|
-
|
954
|
+
f"endsWith={ends_with_s}&ignoreCase={ignore_case_s}")
|
955
|
+
|
956
|
+
if search_string:
|
957
|
+
body = {"filter": search_string}
|
958
|
+
response = await self._async_make_request("POST", url, body)
|
959
|
+
else:
|
960
|
+
response = await self._async_make_request("POST", url)
|
961
|
+
|
1014
962
|
return response.json().get("elements", "no actions")
|
1015
963
|
|
1016
964
|
def find_gov_action_processes(self, search_string: str = "*", server: str = None, starts_with: bool = False,
|
@@ -1057,8 +1005,7 @@ class AutomatedCuration(Client):
|
|
1057
1005
|
loop = asyncio.get_event_loop()
|
1058
1006
|
response = loop.run_until_complete(
|
1059
1007
|
self._async_find_gov_action_processes(search_string, server, starts_with, ends_with, ignore_case,
|
1060
|
-
start_from, page_size)
|
1061
|
-
)
|
1008
|
+
start_from, page_size))
|
1062
1009
|
return response
|
1063
1010
|
|
1064
1011
|
async def _async_initiate_gov_action_process(self, action_type_qualified_name: str, request_source_guids: [str],
|
@@ -1097,23 +1044,17 @@ class AutomatedCuration(Client):
|
|
1097
1044
|
"""
|
1098
1045
|
url = (f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/governance-action-processes/"
|
1099
1046
|
f"initiate")
|
1100
|
-
body = {
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1104
|
-
"actionTargets": action_targets,
|
1105
|
-
"startTime": int(start_time.timestamp() * 1000),
|
1106
|
-
"requestParameters": request_parameters,
|
1107
|
-
"originatorServiceName": orig_service_name,
|
1108
|
-
"originatorEngineName": orig_engine_name
|
1109
|
-
}
|
1047
|
+
body = {"class": "GovernanceActionProcessRequestBody", "processQualifiedName": action_type_qualified_name,
|
1048
|
+
"requestSourceGUIDs": request_source_guids, "actionTargets": action_targets,
|
1049
|
+
"startTime": int(start_time.timestamp() * 1000), "requestParameters": request_parameters,
|
1050
|
+
"originatorServiceName": orig_service_name, "originatorEngineName": orig_engine_name}
|
1110
1051
|
new_body = body_slimmer(body)
|
1111
1052
|
response = await self._async_make_request("POST", url, new_body)
|
1112
1053
|
return response.json().get("guid", "Action not initiated")
|
1113
1054
|
|
1114
1055
|
def initiate_gov_action_process(self, action_type_qualified_name: str, request_source_guids: [str],
|
1115
|
-
|
1116
|
-
|
1056
|
+
action_targets: [str], start_time: datetime, request_parameters: dict,
|
1057
|
+
orig_service_name: str, orig_engine_name: str, server: str = None) -> str:
|
1117
1058
|
""" Using the named governance action process as a template, initiate a chain of engine actions.
|
1118
1059
|
|
1119
1060
|
Parameters
|
@@ -1148,10 +1089,9 @@ class AutomatedCuration(Client):
|
|
1148
1089
|
"""
|
1149
1090
|
loop = asyncio.get_event_loop()
|
1150
1091
|
response = loop.run_until_complete(
|
1151
|
-
self._async_initiate_gov_action_process(action_type_qualified_name, request_source_guids,
|
1152
|
-
|
1153
|
-
|
1154
|
-
)
|
1092
|
+
self._async_initiate_gov_action_process(action_type_qualified_name, request_source_guids, action_targets,
|
1093
|
+
start_time, request_parameters, orig_service_name, orig_engine_name,
|
1094
|
+
server))
|
1155
1095
|
return response
|
1156
1096
|
|
1157
1097
|
async def _async_get_gov_action_types_by_guid(self, gov_action_type_guid: str, server: str = None) -> dict | str:
|
@@ -1204,13 +1144,11 @@ class AutomatedCuration(Client):
|
|
1204
1144
|
UserNotAuthorizedException:
|
1205
1145
|
"""
|
1206
1146
|
loop = asyncio.get_event_loop()
|
1207
|
-
response = loop.run_until_complete(
|
1208
|
-
self._async_get_gov_action_type_by_guid(gov_action_type_guid, server)
|
1209
|
-
)
|
1147
|
+
response = loop.run_until_complete(self._async_get_gov_action_types_by_guid(gov_action_type_guid, server))
|
1210
1148
|
return response
|
1211
1149
|
|
1212
|
-
async def _async_get_gov_action_types_by_name(self, action_type_name, server: str = None,
|
1213
|
-
|
1150
|
+
async def _async_get_gov_action_types_by_name(self, action_type_name, server: str = None, start_from: int = 0,
|
1151
|
+
page_size: int = max_paging_size) -> list | str:
|
1214
1152
|
""" Retrieve the list of governance action type metadata elements with a matching qualified or display name.
|
1215
1153
|
There are no wildcards supported on this request. Async version.
|
1216
1154
|
|
@@ -1238,16 +1176,13 @@ class AutomatedCuration(Client):
|
|
1238
1176
|
url = (f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/"
|
1239
1177
|
f"governance-action-types/by-name?startFrom={start_from}&pageSize={page_size}")
|
1240
1178
|
|
1241
|
-
body = {
|
1242
|
-
"class": "NameRequestBody",
|
1243
|
-
"name": action_type_name
|
1244
|
-
}
|
1179
|
+
body = {"class": "NameRequestBody", "name": action_type_name}
|
1245
1180
|
|
1246
1181
|
response = await self._async_make_request("POST", url, body)
|
1247
1182
|
return response.json().get("elements", "no actions")
|
1248
1183
|
|
1249
|
-
def get_gov_action_types_by_name(self, action_type_name, server: str = None,
|
1250
|
-
|
1184
|
+
def get_gov_action_types_by_name(self, action_type_name, server: str = None, start_from: int = 0,
|
1185
|
+
page_size: int = max_paging_size) -> list | str:
|
1251
1186
|
""" Retrieve the list of governance action type metadata elements with a matching qualified or display name.
|
1252
1187
|
There are no wildcards supported on this request. Async version.
|
1253
1188
|
|
@@ -1270,15 +1205,12 @@ class AutomatedCuration(Client):
|
|
1270
1205
|
"""
|
1271
1206
|
loop = asyncio.get_event_loop()
|
1272
1207
|
response = loop.run_until_complete(
|
1273
|
-
self._async_get_gov_action_types_by_name(action_type_name, server,
|
1274
|
-
start_from, page_size)
|
1275
|
-
)
|
1208
|
+
self._async_get_gov_action_types_by_name(action_type_name, server, start_from, page_size))
|
1276
1209
|
return response
|
1277
1210
|
|
1278
1211
|
async def _async_find_gov_action_types(self, search_string: str = "*", server: str = None,
|
1279
|
-
starts_with: bool = False,
|
1280
|
-
|
1281
|
-
page_size: int = max_paging_size) -> list | str:
|
1212
|
+
starts_with: bool = False, ends_with: bool = False, ignore_case: bool = True,
|
1213
|
+
start_from: int = 0, page_size: int = max_paging_size) -> list | str:
|
1282
1214
|
""" Retrieve the list of governance action type metadata elements that contain the search string.
|
1283
1215
|
Async Version.
|
1284
1216
|
|
@@ -1329,12 +1261,8 @@ class AutomatedCuration(Client):
|
|
1329
1261
|
|
1330
1262
|
url = (f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/governance-action-types/"
|
1331
1263
|
f"by-search-string?startFrom={start_from}&pageSize={page_size}&startsWith={starts_with_s}&"
|
1332
|
-
f"endsWith={ends_with_s}&ignoreCase={ignore_case_s}"
|
1333
|
-
|
1334
|
-
body = {
|
1335
|
-
"class": "SearchStringRequestBody",
|
1336
|
-
"name": search_string
|
1337
|
-
}
|
1264
|
+
f"endsWith={ends_with_s}&ignoreCase={ignore_case_s}")
|
1265
|
+
body = {"class": "SearchStringRequestBody", "name": search_string}
|
1338
1266
|
response = await self._async_make_request("POST", url, body)
|
1339
1267
|
return response.json().get("elements", "no action types")
|
1340
1268
|
|
@@ -1381,16 +1309,14 @@ class AutomatedCuration(Client):
|
|
1381
1309
|
"""
|
1382
1310
|
loop = asyncio.get_event_loop()
|
1383
1311
|
response = loop.run_until_complete(
|
1384
|
-
self._async_find_gov_action_types(search_string, server, starts_with, ends_with,
|
1385
|
-
|
1386
|
-
)
|
1312
|
+
self._async_find_gov_action_types(search_string, server, starts_with, ends_with, ignore_case, start_from,
|
1313
|
+
page_size))
|
1387
1314
|
return response
|
1388
1315
|
|
1389
1316
|
async def _async_initiate_gov_action_type(self, action_type_qualified_name: str, request_source_guids: [str],
|
1390
1317
|
action_targets: list, start_time: datetime = None,
|
1391
|
-
request_parameters: dict = None,
|
1392
|
-
|
1393
|
-
server: str = None) -> str:
|
1318
|
+
request_parameters: dict = None, orig_service_name: str = None,
|
1319
|
+
orig_engine_name: str = None, server: str = None) -> str:
|
1394
1320
|
""" Using the named governance action type as a template, initiate an engine action. Async version.
|
1395
1321
|
|
1396
1322
|
Parameters
|
@@ -1426,16 +1352,12 @@ class AutomatedCuration(Client):
|
|
1426
1352
|
server = self.server_name if server is None else server
|
1427
1353
|
url = (f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/governance-action-types/"
|
1428
1354
|
f"initiate")
|
1429
|
-
body = {
|
1430
|
-
|
1431
|
-
|
1432
|
-
|
1433
|
-
|
1434
|
-
|
1435
|
-
"requestParameters": request_parameters,
|
1436
|
-
"originatorServiceName": orig_service_name,
|
1437
|
-
"originatorEngineName": orig_engine_name
|
1438
|
-
}
|
1355
|
+
body = {"class": "InitiateGovernanceActionTypeRequestBody",
|
1356
|
+
"governanceActionTypeQualifiedName": action_type_qualified_name,
|
1357
|
+
"requestSourceGUIDs": request_source_guids,
|
1358
|
+
"actionTargets": action_targets, "startDate": int(start_time.timestamp() * 1000),
|
1359
|
+
"requestParameters": request_parameters, "originatorServiceName": orig_service_name,
|
1360
|
+
"originatorEngineName": orig_engine_name}
|
1439
1361
|
new_body = body_slimmer(body)
|
1440
1362
|
response = await self._async_make_request("POST", url, new_body)
|
1441
1363
|
return response.json().get("guid", "Action not initiated")
|
@@ -1476,149 +1398,204 @@ class AutomatedCuration(Client):
|
|
1476
1398
|
"""
|
1477
1399
|
loop = asyncio.get_event_loop()
|
1478
1400
|
response = loop.run_until_complete(
|
1479
|
-
self._async_initiate_gov_action_type(action_type_qualified_name, request_source_guids,
|
1480
|
-
|
1481
|
-
|
1482
|
-
)
|
1401
|
+
self._async_initiate_gov_action_type(action_type_qualified_name, request_source_guids, action_targets,
|
1402
|
+
start_time, request_parameters, orig_service_name, orig_engine_name,
|
1403
|
+
server))
|
1483
1404
|
return response
|
1484
1405
|
|
1485
1406
|
async def _async_initiate_postgres_database_survey(self, postgres_database_guid: str, server: str = None) -> str:
|
1407
|
+
""" Initiate a postgres database survey"""
|
1486
1408
|
server = self.server_name if server is None else server
|
1487
1409
|
url = (f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/governance-action-types/"
|
1488
1410
|
f"initiate")
|
1489
1411
|
|
1490
|
-
body = {
|
1491
|
-
|
1492
|
-
|
1493
|
-
|
1494
|
-
|
1495
|
-
"actionTargetName": "serverToSurvey",
|
1496
|
-
"actionTargetGUID": postgres_database_guid
|
1497
|
-
}]
|
1498
|
-
}
|
1412
|
+
body = {"class": "InitiateGovernanceActionTypeRequestBody",
|
1413
|
+
"governanceActionTypeQualifiedName":
|
1414
|
+
"Egeria:GovernanceActionType:2adeb8f1-0f59-4970-b6f2-6cc25d4d2402survey-postgres-database",
|
1415
|
+
"actionTargets": [{"class": "NewActionTarget", "actionTargetName": "serverToSurvey",
|
1416
|
+
"actionTargetGUID": postgres_database_guid}]}
|
1499
1417
|
response = await self._async_make_request("POST", url, body)
|
1500
1418
|
return response.json().get("guid", "Action not initiated")
|
1501
1419
|
|
1502
1420
|
def initiate_postgres_database_survey(self, postgres_database_guid: str, server: str = None) -> str:
|
1421
|
+
""" Initiate a postgres database survey"""
|
1503
1422
|
loop = asyncio.get_event_loop()
|
1504
|
-
response = loop.run_until_complete(
|
1505
|
-
self._async_initiate_postgres_server_survey(postgres_database_guid, server)
|
1506
|
-
)
|
1423
|
+
response = loop.run_until_complete(self._async_initiate_postgres_server_survey(postgres_database_guid, server))
|
1507
1424
|
return response
|
1508
1425
|
|
1509
1426
|
async def _async_initiate_postgres_server_survey(self, postgres_server_guid: str, server: str = None) -> str:
|
1427
|
+
""" Initiate a postgres server survey - Async version"""
|
1510
1428
|
server = self.server_name if server is None else server
|
1511
1429
|
url = (f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/governance-action-types/"
|
1512
1430
|
f"initiate")
|
1513
1431
|
|
1514
|
-
body = {
|
1515
|
-
|
1516
|
-
|
1517
|
-
|
1518
|
-
"class": "NewActionTarget",
|
1519
|
-
"actionTargetName": "serverToSurvey",
|
1520
|
-
"actionTargetGUID": postgres_server_guid
|
1521
|
-
}]
|
1522
|
-
}
|
1432
|
+
body = {"class": "InitiateGovernanceActionTypeRequestBody",
|
1433
|
+
"governanceActionTypeQualifiedName": "Egeria:GovernanceActionType:AssetSurvey:survey-postgres-server",
|
1434
|
+
"actionTargets": [{"class": "NewActionTarget", "actionTargetName": "serverToSurvey",
|
1435
|
+
"actionTargetGUID": postgres_server_guid}]}
|
1523
1436
|
response = await self._async_make_request("POST", url, body)
|
1524
1437
|
return response.json().get("guid", "Action not initiated")
|
1525
|
-
# Create/Retrieve the Postgres Server Element
|
1526
|
-
|
1527
|
-
# Run the survey using the information and return the engine action to monitor
|
1528
1438
|
|
1529
1439
|
def initiate_postgres_server_survey(self, postgres_server_guid: str, server: str = None) -> str:
|
1440
|
+
""" Initiate a postgres server survey"""
|
1530
1441
|
loop = asyncio.get_event_loop()
|
1531
|
-
response = loop.run_until_complete(
|
1532
|
-
self._async_initiate_postgres_server_survey(postgres_server_guid, server)
|
1533
|
-
)
|
1442
|
+
response = loop.run_until_complete(self._async_initiate_postgres_server_survey(postgres_server_guid, server))
|
1534
1443
|
return response
|
1535
1444
|
|
1536
|
-
|
1537
|
-
|
1538
1445
|
async def _async_initiate_file_folder_survey(self, file_folder_guid: str,
|
1446
|
+
survey_name: str =
|
1447
|
+
"Egeria:GovernanceActionType:AssetSurvey:survey-folder",
|
1539
1448
|
server: str = None) -> str:
|
1449
|
+
""" Initiate a file folder survey - async version
|
1450
|
+
|
1451
|
+
Parameters:
|
1452
|
+
----------
|
1453
|
+
file_folder_guid: str
|
1454
|
+
The GUID of the File Folder that we wish to survey.
|
1455
|
+
survey_name: str, optional
|
1456
|
+
The unique name of the survey routine to execute. Default surveys all folders.
|
1457
|
+
server: str, optional
|
1458
|
+
The name of the server. If None, will use the default server specified in the instance will be used.
|
1459
|
+
Returns:
|
1460
|
+
-------
|
1461
|
+
str:
|
1462
|
+
The guid of the survey being run.
|
1463
|
+
|
1464
|
+
Raises:
|
1465
|
+
------
|
1466
|
+
InvalidParameterException: If the API response indicates an error (non-200 status code),
|
1467
|
+
this exception is raised with details from the response content.
|
1468
|
+
PropertyServerException: If the API response indicates a server side error.
|
1469
|
+
UserNotAuthorizedException:
|
1470
|
+
|
1471
|
+
Notes:
|
1472
|
+
There are multiple kinds of file folder surveys available, each with their own purpose. They are described
|
1473
|
+
in the Core Content Brain.
|
1474
|
+
|
1475
|
+
File Folder Survey Names currently include::
|
1476
|
+
- Egeria:GovernanceActionType:AssetSurvey:survey-folders
|
1477
|
+
- Egeria:GovernanceActionType:AssetSurvey:survey-folder-and-files
|
1478
|
+
- Egeria:GovernanceActionType:AssetSurvey:survey-all-folders
|
1479
|
+
- Egeria:GovernanceActionType:AssetSurvey:survey-all-folders-and-files
|
1480
|
+
"""
|
1540
1481
|
server = self.server_name if server is None else server
|
1541
1482
|
url = (f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/governance-action-types/"
|
1542
1483
|
f"initiate")
|
1543
1484
|
|
1544
|
-
body = {
|
1545
|
-
|
1546
|
-
|
1547
|
-
"Egeria:GovernanceActionType:2adeb8f1-0f59-4970-b6f2-6cc25d4d2402survey-folder",
|
1548
|
-
"actionTargets": [{
|
1549
|
-
"class": "NewActionTarget",
|
1550
|
-
"actionTargetName": "folderToSurvey",
|
1551
|
-
"actionTargetGUID": file_folder_guid
|
1552
|
-
}]
|
1553
|
-
}
|
1485
|
+
body = {"class": "InitiateGovernanceActionTypeRequestBody", "governanceActionTypeQualifiedName": survey_name,
|
1486
|
+
"actionTargets": [{"class": "NewActionTarget", "actionTargetName": "folderToSurvey",
|
1487
|
+
"actionTargetGUID": file_folder_guid}]}
|
1554
1488
|
response = await self._async_make_request("POST", url, body)
|
1555
1489
|
return response.json().get("guid", "Action not initiated")
|
1556
1490
|
|
1557
|
-
def initiate_file_folder_survey(self, file_folder_guid:str,
|
1491
|
+
def initiate_file_folder_survey(self, file_folder_guid: str,
|
1492
|
+
survey_name: str = "Egeria:GovernanceActionType:AssetSurvey:survey-folder",
|
1493
|
+
server: str = None) -> str:
|
1494
|
+
""" Initiate a file folder survey - async version
|
1495
|
+
|
1496
|
+
Parameters:
|
1497
|
+
----------
|
1498
|
+
file_folder_guid: str
|
1499
|
+
The GUID of the File Folder that we wish to survey.
|
1500
|
+
survey_name: str, optional
|
1501
|
+
The unique name of the survey routine to execute. Default surveys all folders.
|
1502
|
+
server: str, optional
|
1503
|
+
The name of the server. If None, will use the default server specified in the instance will be used.
|
1504
|
+
Returns:
|
1505
|
+
-------
|
1506
|
+
str:
|
1507
|
+
The guid of the survey being run.
|
1508
|
+
|
1509
|
+
Raises:
|
1510
|
+
------
|
1511
|
+
InvalidParameterException: If the API response indicates an error (non-200 status code),
|
1512
|
+
this exception is raised with details from the response content.
|
1513
|
+
PropertyServerException: If the API response indicates a server side error.
|
1514
|
+
UserNotAuthorizedException:
|
1515
|
+
|
1516
|
+
Notes:
|
1517
|
+
There are multiple kinds of file folder surveys available, each with their own purpose. They are described
|
1518
|
+
in the Core Content Brain.
|
1519
|
+
|
1520
|
+
File Folder Survey Names currently include::
|
1521
|
+
- Egeria:GovernanceActionType:AssetSurvey:survey-folders
|
1522
|
+
- Egeria:GovernanceActionType:AssetSurvey:survey-folder-and-files
|
1523
|
+
- Egeria:GovernanceActionType:AssetSurvey:survey-all-folders
|
1524
|
+
- Egeria:GovernanceActionType:AssetSurvey:survey-all-folders-and-files
|
1525
|
+
|
1526
|
+
|
1527
|
+
"""
|
1558
1528
|
loop = asyncio.get_event_loop()
|
1559
1529
|
response = loop.run_until_complete(
|
1560
|
-
self._async_initiate_file_folder_survey(file_folder_guid, server)
|
1561
|
-
)
|
1530
|
+
self._async_initiate_file_folder_survey(file_folder_guid, survey_name, server))
|
1562
1531
|
return response
|
1563
1532
|
|
1564
|
-
async def _async_initiate_file_survey(self, file_guid: str,
|
1565
|
-
|
1533
|
+
async def _async_initiate_file_survey(self, file_guid: str, server: str = None) -> str:
|
1534
|
+
""" Initiate a file survey - async version"""
|
1566
1535
|
server = self.server_name if server is None else server
|
1567
1536
|
url = (f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/governance-action-types/"
|
1568
1537
|
f"initiate")
|
1569
1538
|
|
1570
|
-
body = {
|
1571
|
-
|
1572
|
-
|
1573
|
-
|
1574
|
-
"actionTargets": [{
|
1575
|
-
"class": "NewActionTarget",
|
1576
|
-
"actionTargetName": "fileToSurvey",
|
1577
|
-
"actionTargetGUID": file_guid
|
1578
|
-
}]
|
1579
|
-
}
|
1539
|
+
body = {"class": "InitiateGovernanceActionTypeRequestBody",
|
1540
|
+
"governanceActionTypeQualifiedName": "Egeria:GovernanceActionType:AssetSurvey:survey-data-file",
|
1541
|
+
"actionTargets": [
|
1542
|
+
{"class": "NewActionTarget", "actionTargetName": "fileToSurvey", "actionTargetGUID": file_guid}]}
|
1580
1543
|
response = await self._async_make_request("POST", url, body)
|
1581
1544
|
return response.json().get("guid", "Action not initiated")
|
1582
1545
|
|
1583
|
-
def initiate_file_survey(self, file_guid:str, server: str = None) -> str:
|
1546
|
+
def initiate_file_survey(self, file_guid: str, server: str = None) -> str:
|
1547
|
+
""" Initiate a file survey """
|
1584
1548
|
loop = asyncio.get_event_loop()
|
1585
|
-
response = loop.run_until_complete(
|
1586
|
-
self._async_initiate_file_survey(file_guid, server)
|
1587
|
-
)
|
1549
|
+
response = loop.run_until_complete(self._async_initiate_file_survey(file_guid, server))
|
1588
1550
|
return response
|
1589
1551
|
|
1590
1552
|
async def _async_initiate_kafka_server_survey(self, kafka_server_guid: str, server: str = None) -> str:
|
1553
|
+
""" Initiate survey of a kafka server. Async Version.
|
1554
|
+
Parameters
|
1555
|
+
----------
|
1556
|
+
kafka_server_guid : str
|
1557
|
+
The GUID of the Kafka server to be surveyed.
|
1558
|
+
|
1559
|
+
server : str, optional
|
1560
|
+
The name of the server. If not provided, the default server name is used.
|
1561
|
+
|
1562
|
+
Returns
|
1563
|
+
-------
|
1564
|
+
str
|
1565
|
+
The GUID of the initiated action or "Action not initiated" if the action was not initiated.
|
1566
|
+
|
1567
|
+
"""
|
1591
1568
|
server = self.server_name if server is None else server
|
1592
1569
|
url = (f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/governance-action-types/"
|
1593
1570
|
f"initiate")
|
1594
1571
|
|
1595
|
-
body = {
|
1596
|
-
|
1597
|
-
|
1598
|
-
|
1599
|
-
"actionTargets": [{
|
1600
|
-
"class": "NewActionTarget",
|
1601
|
-
"actionTargetName": "serverToSurvey",
|
1602
|
-
"actionTargetGUID": kafka_server_guid
|
1603
|
-
}]
|
1604
|
-
}
|
1572
|
+
body = {"class": "InitiateGovernanceActionTypeRequestBody",
|
1573
|
+
"governanceActionTypeQualifiedName": "Egeria:GovernanceActionType:AssetSurvey:survey-kafka-server",
|
1574
|
+
"actionTargets": [{"class": "NewActionTarget", "actionTargetName": "serverToSurvey",
|
1575
|
+
"actionTargetGUID": kafka_server_guid}]}
|
1605
1576
|
response = await self._async_make_request("POST", url, body)
|
1606
1577
|
return response.json().get("guid", "Action not initiated")
|
1607
1578
|
|
1608
1579
|
def initiate_kafka_server_survey(self, kafka_server_guid: str, server: str = None) -> str:
|
1580
|
+
""" Initiate survey of a kafka server.
|
1581
|
+
Parameters
|
1582
|
+
----------
|
1583
|
+
kafka_server_guid : str
|
1584
|
+
The GUID of the Kafka server to be surveyed.
|
1585
|
+
|
1586
|
+
server : str, optional
|
1587
|
+
The name of the server. If not provided, the default server name is used.
|
1588
|
+
|
1589
|
+
Returns
|
1590
|
+
-------
|
1591
|
+
str
|
1592
|
+
The GUID of the initiated action or "Action not initiated" if the action was not initiated.
|
1593
|
+
|
1594
|
+
"""
|
1609
1595
|
loop = asyncio.get_event_loop()
|
1610
|
-
response = loop.run_until_complete(
|
1611
|
-
self._async_initiate_file_folder_survey(kafka_server_guid, server)
|
1612
|
-
)
|
1596
|
+
response = loop.run_until_complete(self._async_initiate_file_folder_survey(kafka_server_guid, server))
|
1613
1597
|
return response
|
1614
1598
|
|
1615
|
-
async def run_gov_action_postgres_server_survey(self, postgres_server: str, host_name: str, port: str, ):
|
1616
|
-
pass
|
1617
|
-
# New combo process to do
|
1618
|
-
# run a process the creates the postgres server catalog entry, runs the server survey
|
1619
|
-
# creates a survey report
|
1620
|
-
# adds a to-do list element when done
|
1621
|
-
|
1622
1599
|
async def _async_initiate_engine_action(self, qualified_name: str, domain_identifier: int, display_name: str,
|
1623
1600
|
description: str, request_source_guids: str, action_targets: str,
|
1624
1601
|
received_guards: [str], start_time: datetime, gov_engine_name: str,
|
@@ -1658,39 +1635,31 @@ class AutomatedCuration(Client):
|
|
1658
1635
|
|
1659
1636
|
Note
|
1660
1637
|
----
|
1661
|
-
The `start_time` parameter should be a `datetime` object representing the start time of the
|
1638
|
+
The `start_time` parameter should be a `datetime` object representing the start time of the
|
1639
|
+
governance action.
|
1662
1640
|
|
1663
1641
|
|
1664
1642
|
"""
|
1665
1643
|
server = self.server_name if server is None else server
|
1666
1644
|
url = (f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/governance-engines/"
|
1667
1645
|
f"engine-actions/initiate")
|
1668
|
-
body = {
|
1669
|
-
|
1670
|
-
|
1671
|
-
|
1672
|
-
|
1673
|
-
|
1674
|
-
|
1675
|
-
|
1676
|
-
|
1677
|
-
"startTime": int(start_time.timestamp() * 1000),
|
1678
|
-
"requestType": request_type,
|
1679
|
-
"requestParameters": request_parameters,
|
1680
|
-
"processName": process_name,
|
1681
|
-
"requestSourceName": request_src_name,
|
1682
|
-
"originatorServiceName": originator_svc_name,
|
1683
|
-
"originatorEngineName": originator_eng_name
|
1684
|
-
}
|
1646
|
+
body = {"class": "GovernanceActionRequestBody",
|
1647
|
+
"qualifiedName": qualified_name + str(int(start_time.timestamp())),
|
1648
|
+
"domainIdentifier": domain_identifier,
|
1649
|
+
"displayName": display_name, "description": description, "requestSourceGUIDs": request_source_guids,
|
1650
|
+
"actionTargets": action_targets, "receivedGuards": received_guards,
|
1651
|
+
"startTime": int(start_time.timestamp() * 1000), "requestType": request_type,
|
1652
|
+
"requestParameters": request_parameters, "processName": process_name,
|
1653
|
+
"requestSourceName": request_src_name,
|
1654
|
+
"originatorServiceName": originator_svc_name, "originatorEngineName": originator_eng_name}
|
1685
1655
|
new_body = body_slimmer(body)
|
1686
1656
|
response = await self._async_make_request("POST", url, new_body)
|
1687
1657
|
return response.json().get("guid", "Action not initiated")
|
1688
1658
|
|
1689
|
-
def initiate_engine_action(self, qualified_name: str, domain_identifier: int, display_name: str,
|
1690
|
-
|
1691
|
-
|
1692
|
-
|
1693
|
-
request_src_name: str = None, originator_svc_name: str = None,
|
1659
|
+
def initiate_engine_action(self, qualified_name: str, domain_identifier: int, display_name: str, description: str,
|
1660
|
+
request_source_guids: str, action_targets: str, received_guards: [str],
|
1661
|
+
start_time: datetime, gov_engine_name: str, request_type: str, request_parameters: dict,
|
1662
|
+
process_name: str, request_src_name: str = None, originator_svc_name: str = None,
|
1694
1663
|
originator_eng_name: str = None, server: str = None) -> str:
|
1695
1664
|
""" Create an engine action in the metadata store that will trigger the governance service associated with
|
1696
1665
|
the supplied request type. The engine action remains to act as a record of the actions taken for auditing.
|
@@ -1724,21 +1693,19 @@ class AutomatedCuration(Client):
|
|
1724
1693
|
|
1725
1694
|
Note
|
1726
1695
|
----
|
1727
|
-
The `start_time` parameter should be a `datetime` object representing the start time of the
|
1696
|
+
The `start_time` parameter should be a `datetime` object representing the start time of the
|
1697
|
+
governance action.
|
1728
1698
|
"""
|
1729
1699
|
loop = asyncio.get_event_loop()
|
1730
1700
|
response = loop.run_until_complete(
|
1731
|
-
self._async_initiate_engine_action(qualified_name, domain_identifier, display_name,
|
1732
|
-
|
1733
|
-
|
1734
|
-
|
1735
|
-
request_src_name, originator_svc_name,
|
1736
|
-
originator_eng_name, server)
|
1737
|
-
)
|
1701
|
+
self._async_initiate_engine_action(qualified_name, domain_identifier, display_name, description,
|
1702
|
+
request_source_guids, action_targets, received_guards, start_time,
|
1703
|
+
gov_engine_name, request_type, request_parameters, process_name,
|
1704
|
+
request_src_name, originator_svc_name, originator_eng_name, server))
|
1738
1705
|
return response
|
1739
1706
|
|
1740
|
-
async def _async_get_catalog_targets(self, integ_connector_guid: str, server: str = None,
|
1741
|
-
|
1707
|
+
async def _async_get_catalog_targets(self, integ_connector_guid: str, server: str = None, start_from: int = 0,
|
1708
|
+
page_size: int = max_paging_size) -> list | str:
|
1742
1709
|
""" Retrieve the details of the metadata elements identified as catalog targets with an integration connector.
|
1743
1710
|
Async version.
|
1744
1711
|
|
@@ -1768,8 +1735,8 @@ class AutomatedCuration(Client):
|
|
1768
1735
|
response = await self._async_make_request("GET", url)
|
1769
1736
|
return response.json().get("elements", "no actions")
|
1770
1737
|
|
1771
|
-
def get_catalog_targets(self, integ_connector_guid: str, server: str = None,
|
1772
|
-
|
1738
|
+
def get_catalog_targets(self, integ_connector_guid: str, server: str = None, start_from: int = 0,
|
1739
|
+
page_size: int = max_paging_size) -> list | str:
|
1773
1740
|
""" Retrieve the details of the metadata elements identified as catalog targets with an integration connector.
|
1774
1741
|
|
1775
1742
|
Parameters:
|
@@ -1792,9 +1759,7 @@ class AutomatedCuration(Client):
|
|
1792
1759
|
|
1793
1760
|
loop = asyncio.get_event_loop()
|
1794
1761
|
response = loop.run_until_complete(
|
1795
|
-
self._async_get_catalog_targets(integ_connector_guid, server,
|
1796
|
-
start_from, page_size)
|
1797
|
-
)
|
1762
|
+
self._async_get_catalog_targets(integ_connector_guid, server, start_from, page_size))
|
1798
1763
|
return response
|
1799
1764
|
|
1800
1765
|
async def _async_get_catalog_target(self, integ_connector_guid: str, metadata_element_guid: str,
|
@@ -1857,14 +1822,12 @@ class AutomatedCuration(Client):
|
|
1857
1822
|
|
1858
1823
|
loop = asyncio.get_event_loop()
|
1859
1824
|
response = loop.run_until_complete(
|
1860
|
-
self._async_get_catalog_target(integ_connector_guid, metadata_element_guid,
|
1861
|
-
server)
|
1862
|
-
)
|
1825
|
+
self._async_get_catalog_target(integ_connector_guid, metadata_element_guid, server))
|
1863
1826
|
return response
|
1864
1827
|
|
1865
1828
|
async def _async_add_catalog_target(self, integ_connector_guid: str, metadata_element_guid: str,
|
1866
|
-
catalog_target_name: str, metadata_src_qual_name: str = None,
|
1867
|
-
, server: str = None) -> None:
|
1829
|
+
catalog_target_name: str, metadata_src_qual_name: str = None,
|
1830
|
+
config_properties: dict = None, server: str = None) -> None:
|
1868
1831
|
""" Add a catalog target to an integration connector.
|
1869
1832
|
Async version.
|
1870
1833
|
|
@@ -1899,16 +1862,14 @@ class AutomatedCuration(Client):
|
|
1899
1862
|
|
1900
1863
|
url = (f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/integration-connectors/"
|
1901
1864
|
f"{integ_connector_guid}/catalog-targets/{metadata_element_guid}")
|
1902
|
-
body = {
|
1903
|
-
|
1904
|
-
"metadataSourceQualifiedName": metadata_src_qual_name,
|
1905
|
-
"configProperties": config_properties
|
1906
|
-
}
|
1865
|
+
body = {"catalogTargetName": catalog_target_name, "metadataSourceQualifiedName": metadata_src_qual_name,
|
1866
|
+
"configProperties": config_properties}
|
1907
1867
|
await self._async_make_request("POST", url, body)
|
1908
1868
|
return
|
1909
1869
|
|
1910
1870
|
def add_catalog_target(self, integ_connector_guid: str, metadata_element_guid: str, catalog_target_name: str,
|
1911
|
-
metadata_src_qual_name: str = None, config_properties: dict = None,
|
1871
|
+
metadata_src_qual_name: str = None, config_properties: dict = None,
|
1872
|
+
server: str = None) -> None:
|
1912
1873
|
""" Add a catalog target to an integration connector.
|
1913
1874
|
|
1914
1875
|
Parameters:
|
@@ -1938,14 +1899,12 @@ class AutomatedCuration(Client):
|
|
1938
1899
|
"""
|
1939
1900
|
loop = asyncio.get_event_loop()
|
1940
1901
|
loop.run_until_complete(
|
1941
|
-
self._async_add_catalog_target(integ_connector_guid, metadata_element_guid,
|
1942
|
-
metadata_src_qual_name,
|
1943
|
-
config_properties, server)
|
1944
|
-
)
|
1902
|
+
self._async_add_catalog_target(integ_connector_guid, metadata_element_guid, catalog_target_name,
|
1903
|
+
metadata_src_qual_name, config_properties, server))
|
1945
1904
|
return
|
1946
1905
|
|
1947
1906
|
async def _async_remove_catalog_target(self, integ_connector_guid: str, metadata_element_guid: str,
|
1948
|
-
|
1907
|
+
server: str = None) -> None:
|
1949
1908
|
""" Remove a catalog target to an integration connector. Async version.
|
1950
1909
|
|
1951
1910
|
Parameters:
|
@@ -1977,8 +1936,7 @@ class AutomatedCuration(Client):
|
|
1977
1936
|
await self._async_make_request("POST", url)
|
1978
1937
|
return
|
1979
1938
|
|
1980
|
-
def remove_catalog_target(self, integ_connector_guid: str, metadata_element_guid: str,
|
1981
|
-
server: str = None) -> None:
|
1939
|
+
def remove_catalog_target(self, integ_connector_guid: str, metadata_element_guid: str, server: str = None) -> None:
|
1982
1940
|
""" Remove a catalog target to an integration connector.
|
1983
1941
|
|
1984
1942
|
Parameters:
|
@@ -2002,10 +1960,7 @@ class AutomatedCuration(Client):
|
|
2002
1960
|
"""
|
2003
1961
|
|
2004
1962
|
loop = asyncio.get_event_loop()
|
2005
|
-
loop.run_until_complete(
|
2006
|
-
self._async_remove_catalog_target(integ_connector_guid, metadata_element_guid,
|
2007
|
-
server)
|
2008
|
-
)
|
1963
|
+
loop.run_until_complete(self._async_remove_catalog_target(integ_connector_guid, metadata_element_guid, server))
|
2009
1964
|
return
|
2010
1965
|
|
2011
1966
|
#
|
@@ -2045,9 +2000,7 @@ class AutomatedCuration(Client):
|
|
2045
2000
|
# validate_name(type_name)
|
2046
2001
|
url = (f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/open-metadata-types/"
|
2047
2002
|
f"{type_name}/technology-types?startFrom={start_from}&pageSize={page_size}")
|
2048
|
-
body = {
|
2049
|
-
"filter": tech_name
|
2050
|
-
}
|
2003
|
+
body = {"filter": tech_name}
|
2051
2004
|
|
2052
2005
|
response = await self._async_make_request("GET", url, body)
|
2053
2006
|
return response.json().get("elements", "no tech found")
|
@@ -2082,9 +2035,7 @@ class AutomatedCuration(Client):
|
|
2082
2035
|
"""
|
2083
2036
|
loop = asyncio.get_event_loop()
|
2084
2037
|
response = loop.run_until_complete(
|
2085
|
-
self._async_get_tech_types_for_open_metadata_type(type_name, tech_name, server,
|
2086
|
-
start_from, page_size)
|
2087
|
-
)
|
2038
|
+
self._async_get_tech_types_for_open_metadata_type(type_name, tech_name, server, start_from, page_size))
|
2088
2039
|
return response
|
2089
2040
|
|
2090
2041
|
async def _async_get_technology_type_detail(self, type_name: str, server: str = None) -> list | str:
|
@@ -2095,7 +2046,8 @@ class AutomatedCuration(Client):
|
|
2095
2046
|
type_name : str
|
2096
2047
|
The name of the technology type to retrieve detailed information for.
|
2097
2048
|
server : str, optional
|
2098
|
-
The name of the server to fetch the technology type from. If not provided, the default server name will
|
2049
|
+
The name of the server to fetch the technology type from. If not provided, the default server name will
|
2050
|
+
be used.
|
2099
2051
|
|
2100
2052
|
Returns
|
2101
2053
|
-------
|
@@ -2114,7 +2066,7 @@ class AutomatedCuration(Client):
|
|
2114
2066
|
More information can be found at: https://egeria-project.org/concepts/deployed-implementation-type
|
2115
2067
|
"""
|
2116
2068
|
server = self.server_name if server is None else server
|
2117
|
-
validate_name(type_name)
|
2069
|
+
# validate_name(type_name)
|
2118
2070
|
url = f"{self.platform_url}/servers/{server}/api/open-metadata/automated-curation/technology-types/by-name"
|
2119
2071
|
|
2120
2072
|
body = {"filter": type_name}
|
@@ -2130,7 +2082,8 @@ class AutomatedCuration(Client):
|
|
2130
2082
|
type_name : str
|
2131
2083
|
The name of the technology type to retrieve detailed information for.
|
2132
2084
|
server : str, optional
|
2133
|
-
The name of the server to fetch the technology type from. If not provided, the default server name will
|
2085
|
+
The name of the server to fetch the technology type from. If not provided, the default server name will
|
2086
|
+
be used.
|
2134
2087
|
|
2135
2088
|
Returns
|
2136
2089
|
-------
|
@@ -2150,9 +2103,7 @@ class AutomatedCuration(Client):
|
|
2150
2103
|
"""
|
2151
2104
|
|
2152
2105
|
loop = asyncio.get_event_loop()
|
2153
|
-
response = loop.run_until_complete(
|
2154
|
-
self._async_get_technology_type_detail(type_name, server)
|
2155
|
-
)
|
2106
|
+
response = loop.run_until_complete(self._async_get_technology_type_detail(type_name, server))
|
2156
2107
|
return response
|
2157
2108
|
|
2158
2109
|
async def _async_find_technology_types(self, search_string: str = "*", server: str = None, start_from: int = 0,
|
@@ -2214,8 +2165,8 @@ class AutomatedCuration(Client):
|
|
2214
2165
|
return response.json().get("elements", "no tech found")
|
2215
2166
|
|
2216
2167
|
def find_technology_types(self, search_string: str = "*", server: str = None, start_from: int = 0,
|
2217
|
-
page_size: int = max_paging_size, starts_with: bool = False,
|
2218
|
-
|
2168
|
+
page_size: int = max_paging_size, starts_with: bool = False, ends_with: bool = False,
|
2169
|
+
ignore_case: bool = True) -> list | str:
|
2219
2170
|
""" Retrieve the list of technology types that contain the search string. Async version.
|
2220
2171
|
|
2221
2172
|
Parameters:
|
@@ -2242,22 +2193,76 @@ class AutomatedCuration(Client):
|
|
2242
2193
|
|
2243
2194
|
loop = asyncio.get_event_loop()
|
2244
2195
|
response = loop.run_until_complete(
|
2245
|
-
self._async_find_technology_types(search_string, server, start_from,
|
2246
|
-
|
2247
|
-
)
|
2196
|
+
self._async_find_technology_types(search_string, server, start_from, page_size, starts_with, ends_with,
|
2197
|
+
ignore_case))
|
2248
2198
|
return response
|
2249
2199
|
|
2250
2200
|
async def _async_get_all_technology_types(self, server: str = None, start_from: int = 0,
|
2251
2201
|
page_size: int = max_paging_size) -> list | str:
|
2202
|
+
"""Get all technology types - async version"""
|
2252
2203
|
return await self._async_find_technology_types("*", server, start_from, page_size)
|
2253
2204
|
|
2254
2205
|
def get_all_technology_types(self, server: str = None, start_from: int = 0,
|
2255
2206
|
page_size: int = max_paging_size) -> list | str:
|
2207
|
+
"""Get all technology types"""
|
2256
2208
|
return self.find_technology_types("*", server, start_from, page_size)
|
2257
2209
|
|
2210
|
+
def print_engine_action_summary(self, governance_action: dict):
|
2211
|
+
""" print_governance_action_summary
|
2212
|
+
|
2213
|
+
Print all the governance actions with their status, in the server.
|
2258
2214
|
|
2259
|
-
|
2260
|
-
|
2261
|
-
|
2262
|
-
|
2263
|
-
|
2215
|
+
Parameters
|
2216
|
+
----------
|
2217
|
+
|
2218
|
+
Returns
|
2219
|
+
-------
|
2220
|
+
|
2221
|
+
Raises
|
2222
|
+
------
|
2223
|
+
InvalidParameterException
|
2224
|
+
PropertyServerException
|
2225
|
+
UserNotAuthorizedException
|
2226
|
+
"""
|
2227
|
+
if governance_action:
|
2228
|
+
name = governance_action.get('displayName')
|
2229
|
+
if not name:
|
2230
|
+
name = governance_action.get('qualifiedName')
|
2231
|
+
action_status = governance_action.get('action_status')
|
2232
|
+
if governance_action.get('completion_guards'):
|
2233
|
+
completion_guards = governance_action.get('completion_guards')
|
2234
|
+
else:
|
2235
|
+
completion_guards = "\t"
|
2236
|
+
if governance_action.get('process_name'):
|
2237
|
+
process_name = governance_action.get('process_name')
|
2238
|
+
else:
|
2239
|
+
process_name = "\t"
|
2240
|
+
if governance_action.get('completion_message'):
|
2241
|
+
completion_message = governance_action.get('completion_message')
|
2242
|
+
else:
|
2243
|
+
completion_message = ""
|
2244
|
+
print(action_status + "\n\t| " + name + "\t| " + process_name + "\t| " + '%s' % ', '.join(
|
2245
|
+
map(str, completion_guards)) + "\t| " + completion_message)
|
2246
|
+
|
2247
|
+
def print_engine_actions(self):
|
2248
|
+
""" print_governance_actions
|
2249
|
+
|
2250
|
+
Print all the governance actions with their status, in the server.
|
2251
|
+
|
2252
|
+
Parameters
|
2253
|
+
----------
|
2254
|
+
|
2255
|
+
Returns
|
2256
|
+
-------
|
2257
|
+
|
2258
|
+
Raises
|
2259
|
+
------
|
2260
|
+
InvalidParameterException
|
2261
|
+
PropertyServerException
|
2262
|
+
UserNotAuthorizedException
|
2263
|
+
|
2264
|
+
"""
|
2265
|
+
governance_actions = self.get_engine_actions()
|
2266
|
+
if governance_actions is not None:
|
2267
|
+
for x in range(len(governance_actions)):
|
2268
|
+
self.print_engine_action_summary(governance_actions[x])
|