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.
Files changed (49) hide show
  1. pyegeria/Xasset_catalog_omvs.py +539 -0
  2. pyegeria/Xfeedback_manager_omvs.py +251 -0
  3. pyegeria/Xglossary_manager_omvs.py +3001 -0
  4. pyegeria/Xloaded_resources_omvs.py +91 -0
  5. pyegeria/__init__.py +6 -9
  6. pyegeria/_client.py +4 -6
  7. pyegeria/{gov_engine.py → _deprecated_gov_engine.py} +2 -59
  8. pyegeria/_exceptions.py +5 -6
  9. pyegeria/_globals.py +1 -1
  10. pyegeria/automated_curation_omvs.py +320 -315
  11. pyegeria/collection_manager_omvs.py +187 -248
  12. pyegeria/core_omag_server_config.py +1 -5
  13. pyegeria/full_omag_server_config.py +53 -83
  14. pyegeria/glossary_browser_omvs.py +2208 -0
  15. pyegeria/my_profile_omvs.py +8 -12
  16. pyegeria/platform_services.py +0 -3
  17. pyegeria/project_manager_omvs.py +9 -15
  18. pyegeria/registered_info.py +12 -52
  19. pyegeria/server_operations.py +1 -5
  20. pyegeria/valid_metadata_omvs.py +11 -23
  21. pyegeria-0.3.9.data/scripts/Create_Collection_Sample.py +292 -0
  22. pyegeria-0.3.9.data/scripts/Create_Sustainability_Collection_Sample.py +115 -0
  23. pyegeria-0.3.9.data/scripts/coco_status.py +98 -0
  24. {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/collection_viewer.py +12 -31
  25. {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/engine_action_status.py +14 -30
  26. {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/find_todos.py +12 -41
  27. pyegeria-0.3.9.data/scripts/get_registered_services.py +135 -0
  28. {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/get_relationship_types.py +16 -35
  29. {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/glossary_view.py +2 -2
  30. {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/gov_engine_status.py +0 -1
  31. {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/list_asset_types.py +3 -25
  32. {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/my_todos.py +1 -1
  33. {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/open_todos.py +3 -24
  34. {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/project_list_viewer.py +12 -26
  35. {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/server_status.py +1 -20
  36. {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/view_my_profile.py +8 -34
  37. {pyegeria-0.3.7.dist-info → pyegeria-0.3.9.dist-info}/METADATA +1 -3
  38. pyegeria-0.3.9.dist-info/RECORD +49 -0
  39. pyegeria/glossary_omvs.py +0 -789
  40. pyegeria-0.3.7.dist-info/RECORD +0 -41
  41. /pyegeria/{governance_author.py → Xaction_author_omvs.py} +0 -0
  42. {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/get_tech_details.py +0 -0
  43. {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/get_tech_types.py +0 -0
  44. {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/integration_daemon_status.py +0 -0
  45. {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/multi-server_status.py +0 -0
  46. {pyegeria-0.3.7.data → pyegeria-0.3.9.data}/scripts/server_status_widget.py +0 -0
  47. {pyegeria-0.3.7.dist-info → pyegeria-0.3.9.dist-info}/LICENSE +0 -0
  48. {pyegeria-0.3.7.dist-info → pyegeria-0.3.9.dist-info}/WHEEL +0 -0
  49. {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 - this file is in active development...
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
- verify_flag: bool
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
- self,
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
- "templateGUID": "5e1ff810-5418-43f7-b7c4-e6e062f9aff7",
180
- "isOwnAnchor": 'true',
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
- "templateGUID": "542134e6-b9ce-4dce-8aef-22e8daf34fdb",
250
- "isOwnAnchor": 'true',
251
- "placeholderPropertyValues": {
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
- port, db_user, db_pwd, server)
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
- ends_with, ignore_case, start_from,
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("GET", url)
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-process/"
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
- body = {
1010
- "class": "SearchStringRequestBody",
1011
- "name": search_string
1012
- }
1013
- response = await self._async_make_request("POST", url, body)
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
- "class": "GovernanceActionProcessRequestBody",
1102
- "processQualifiedName": action_type_qualified_name,
1103
- "requestSourceGUIDs": request_source_guids,
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
- action_targets: [str], start_time: datetime, request_parameters: dict,
1116
- orig_service_name: str, orig_engine_name: str, server: str = None) -> str:
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
- action_targets, start_time, request_parameters,
1153
- orig_service_name, orig_engine_name, server)
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
- start_from: int = 0, page_size: int = max_paging_size) -> list | str:
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
- start_from: int = 0, page_size: int = max_paging_size) -> list | str:
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
- ends_with: bool = False, ignore_case: bool = True, start_from: int = 0,
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
- ignore_case, start_from, page_size)
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
- orig_service_name: str = None, orig_engine_name: str = None,
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
- "class": "InitiateGovernanceActionTypeRequestBody",
1431
- "governanceActionTypeQualifiedName": action_type_qualified_name,
1432
- "requestSourceGUIDs": request_source_guids,
1433
- "actionTargets": action_targets,
1434
- "startDate": int(start_time.timestamp() * 1000),
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
- action_targets, start_time, request_parameters,
1481
- orig_service_name, orig_engine_name, server)
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
- "class": "InitiateGovernanceActionTypeRequestBody",
1492
- "governanceActionTypeQualifiedName": "Egeria:GovernanceActionType:2adeb8f1-0f59-4970-b6f2-6cc25d4d2402survey-postgres-database",
1493
- "actionTargets": [{
1494
- "class": "NewActionTarget",
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
- "class": "InitiateGovernanceActionTypeRequestBody",
1516
- "governanceActionTypeQualifiedName": "Egeria:GovernanceActionType:2adeb8f1-0f59-4970-b6f2-6cc25d4d2402survey-postgres-server",
1517
- "actionTargets": [{
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
- "class": "InitiateGovernanceActionTypeRequestBody",
1546
- "governanceActionTypeQualifiedName":
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, server: str = None) -> 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
- server: str = None) -> str:
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
- "class": "InitiateGovernanceActionTypeRequestBody",
1572
- "governanceActionTypeQualifiedName":
1573
- "Egeria:GovernanceActionType:2adeb8f1-0f59-4970-b6f2-6cc25d4d2402survey-folder",
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
- "class": "InitiateGovernanceActionTypeRequestBody",
1597
- "governanceActionTypeQualifiedName":
1598
- "Egeria:GovernanceActionType:2adeb8f1-0f59-4970-b6f2-6cc25d4d2402survey-kafka-server",
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 governance action.
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
- "class": "GovernanceActionRequestBody",
1670
- "qualifiedName": qualified_name + str(int(start_time.timestamp())),
1671
- "domainIdentifier": domain_identifier,
1672
- "displayName": display_name,
1673
- "description": description,
1674
- "requestSourceGUIDs": request_source_guids,
1675
- "actionTargets": action_targets,
1676
- "receivedGuards": received_guards,
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
- description: str, request_source_guids: str, action_targets: str,
1691
- received_guards: [str], start_time: datetime, gov_engine_name: str,
1692
- request_type: str, request_parameters: dict, process_name: str,
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 governance action.
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
- description, request_source_guids, action_targets,
1733
- received_guards, start_time, gov_engine_name,
1734
- request_type, request_parameters, process_name,
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
- start_from: int = 0, page_size: int = max_paging_size) -> list | str:
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
- start_from: int = 0, page_size: int = max_paging_size) -> list | str:
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, config_properties: dict = 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
- "catalogTargetName": catalog_target_name,
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, server: str = None) -> 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, 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
- server: str = None) -> None:
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 be used.
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 be used.
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
- ends_with: bool = False, ignore_case: bool = True) -> list | str:
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
- page_size, starts_with, ends_with, ignore_case)
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
- if __name__ == "__main__":
2260
- p = AutomatedCuration("meow", "https://127.0.0.1:9443", "garygeeke", verify_flag=False)
2261
- response = p.get_active_engine_actions()
2262
- out = response.json()
2263
- print(out)
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])