pyegeria 5.4.4.3__py3-none-any.whl → 5.4.4.4__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.
md_processing/__init__.py CHANGED
@@ -4,7 +4,7 @@ This package contains functions to parse and process Egeria Markdown (Freddie)
4
4
  from md_processing.md_commands.governance_officer_commands import (process_gov_definition_upsert_command,
5
5
  process_gov_def_link_detach_command,
6
6
  process_supporting_gov_def_link_detach_command,
7
- process_gov_def_context_command,
7
+ process_gov_def_context_command, process_governed_by_link_detach_command
8
8
  )
9
9
 
10
10
 
@@ -30,6 +30,7 @@ from md_processing import (extract_command, process_glossary_upsert_command, pro
30
30
  process_digital_product_upsert_command, process_agreement_upsert_command,
31
31
  process_collection_upsert_command, process_link_agreement_item_command,
32
32
  process_gov_definition_upsert_command, GOV_COM_LIST, GOV_LINK_LIST,
33
+ process_governed_by_link_detach_command,
33
34
  process_gov_def_link_detach_command, process_product_dependency_command,
34
35
  process_add_to_collection_command, process_attach_collection_command,
35
36
  # process_collection_list_command, process_gov_definition_list_command,
@@ -212,10 +213,14 @@ def process_md_file(input_file: str, output_folder:str, directive: str, server:
212
213
  elif potential_command in ['Link Governance Mechanism', 'Detach Governance Mechanism',
213
214
  'Link Governance Response', 'Detach Governance Response',]:
214
215
  result = process_supporting_gov_def_link_detach_command(client, current_block, directive)
216
+
215
217
  elif potential_command in ['Link Digital Products', 'Detach Digital Products',
216
218
  'Link Product-Product', 'Detach Product-Product'
217
219
  ]:
218
220
  result = process_product_dependency_command(client, current_block, directive)
221
+ elif potential_command in ['Link Governed By', 'Detach Governed By']
222
+ result = process_governed_by_link_detach_command(client, current_block, directive)
223
+
219
224
  elif potential_command in ['Link Agreement->Item', 'Detach Agreement->Item']:
220
225
  result = process_link_agreement_item_command(client, current_block, directive)
221
226
  elif potential_command in ['Link Collection->Resource', 'Detach Collection->Resource']:
@@ -8,22 +8,21 @@ from typing import Optional
8
8
  from inflect import engine
9
9
  from jsonschema import ValidationError
10
10
  from loguru import logger
11
- from md_processing.md_processing_utils.common_md_proc_utils import (parse_upsert_command, parse_view_command,
12
- process_output_command)
11
+ from rich import print
12
+ from rich.console import Console
13
+ from rich.markdown import Markdown
14
+
15
+ from md_processing import set_rel_prop_body
16
+ from md_processing.md_processing_utils.common_md_proc_utils import (parse_upsert_command, parse_view_command)
13
17
  from md_processing.md_processing_utils.common_md_utils import (set_gov_prop_body,
14
18
  set_update_body, set_create_body,
15
19
  set_peer_gov_def_request_body,
16
- ALL_GOVERNANCE_DEFINITIONS, GOVERNANCE_POLICIES,
17
- GOVERNANCE_CONTROLS, GOVERNANCE_DRIVERS,
18
- set_find_body,
19
- set_delete_request_body)
20
+ ALL_GOVERNANCE_DEFINITIONS, set_delete_request_body)
20
21
  from md_processing.md_processing_utils.extraction_utils import (extract_command_plus, update_a_command)
21
22
  from md_processing.md_processing_utils.md_processing_constants import (load_commands)
22
23
  from pyegeria import DEBUG_LEVEL, body_slimmer, PyegeriaException, print_basic_exception, print_validation_error
23
24
  from pyegeria.egeria_tech_client import EgeriaTech
24
- from rich import print
25
- from rich.console import Console
26
- from rich.markdown import Markdown
25
+ from pyegeria.utils import make_format_set_name_from_type
27
26
 
28
27
  GERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
29
28
  EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
@@ -152,10 +151,11 @@ def process_gov_definition_upsert_command(egeria_client: EgeriaTech, txt: str, d
152
151
  update_body = body_slimmer(update_body)
153
152
  egeria_client.update_governance_definition(guid, update_body)
154
153
  if status := parsed_output['attributes'].get('Status', {}).get('value', None):
155
- egeria_client.update_governance_definition_status(guid, status)
154
+ # egeria_client.update_governance_definition_status(guid, status)
155
+ egeria_client.update_element_status(guid, status)
156
156
  logger.success(f"Updated {object_type} `{display_name}` with GUID {guid}")
157
157
  return egeria_client.get_governance_definition_by_guid(guid, output_format='MD',
158
- output_format_set = output_set)
158
+ output_format_set=output_set)
159
159
 
160
160
  elif object_action == "Create":
161
161
  if valid is False and exists:
@@ -175,7 +175,8 @@ def process_gov_definition_upsert_command(egeria_client: EgeriaTech, txt: str, d
175
175
  guid = egeria_client.create_governance_definition(body_slimmer(create_body))
176
176
  if guid:
177
177
  logger.success(f"Created {object_type} `{display_name}` with GUID {guid}")
178
- return egeria_client.get_governance_definition_by_guid(guid, output_format='MD', output_format_set = output_set)
178
+ return egeria_client.get_governance_definition_by_guid(guid, output_format='MD',
179
+ output_format_set=output_set)
179
180
  else:
180
181
  logger.error(f"Failed to create {object_type} `{display_name}`.")
181
182
  return None
@@ -400,7 +401,7 @@ def process_supporting_gov_def_link_detach_command(egeria_client: EgeriaTech, tx
400
401
  "rationale": attributes.get('Rationale', {}).get('value', None),
401
402
  "effectiveFrom": attributes.get('Effective From', {}).get('value', None),
402
403
  "effectiveTo": attributes.get('Effective To', {}).get('value', None),
403
- }
404
+ }
404
405
 
405
406
  body = set_peer_gov_def_request_body(object_type, attributes)
406
407
  body['properties'] = body_prop
@@ -427,6 +428,112 @@ def process_supporting_gov_def_link_detach_command(egeria_client: EgeriaTech, tx
427
428
  return None
428
429
 
429
430
 
431
+
432
+ @logger.catch
433
+ def process_governed_by_link_detach_command(egeria_client: EgeriaTech, txt: str,
434
+ directive: str = "display") -> Optional[str]:
435
+ """
436
+ Processes a link or unlink command to associate or break up peer governance definitions.
437
+
438
+ :param txt: A string representing the input cell to be processed for
439
+ extracting blueprint-related attributes.
440
+ :param directive: an optional string indicating the directive to be used - display, validate or execute
441
+ :return: A string summarizing the outcome of the processing.
442
+ """
443
+ command, object_type, object_action = extract_command_plus(txt)
444
+ print(Markdown(f"# {command}\n"))
445
+
446
+ parsed_output = parse_view_command(egeria_client, object_type, object_action, txt, directive)
447
+
448
+ print(Markdown(parsed_output['display']))
449
+
450
+ logger.debug(json.dumps(parsed_output, indent=4))
451
+
452
+ attributes = parsed_output['attributes']
453
+
454
+ element_guid = attributes.get('Referencable', {}).get('guid', None)
455
+ definition_guid = attributes.get('Governance Definition', {}).get('guid', None)
456
+ label = attributes.get('Link Label', {}).get('value', None)
457
+ description = attributes.get('Description', {}).get('value', None)
458
+
459
+ valid = parsed_output['valid']
460
+ exists = element_guid is not None and definition_guid is not None
461
+
462
+ if directive == "display":
463
+
464
+ return None
465
+ elif directive == "validate":
466
+ if valid:
467
+ print(Markdown(f"==> Validation of {command} completed successfully!\n"))
468
+ else:
469
+ msg = f"Validation failed for object_action `{command}`\n"
470
+ return valid
471
+
472
+ elif directive == "process":
473
+
474
+
475
+ try:
476
+ if object_action == "Detach":
477
+ if not exists:
478
+ msg = (f" Link `{label}` does not exist! Updating result document with Link "
479
+ f"object_action\n")
480
+ logger.error(msg)
481
+ out = parsed_output['display'].replace('Link', 'Detach', 1)
482
+ return out
483
+ elif not valid:
484
+ return None
485
+ else:
486
+ print(Markdown(
487
+ f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
488
+ body = set_delete_request_body(object_type, attributes)
489
+
490
+ egeria_client.detach_governed_by_definitions(element_guid, definition_guid, body)
491
+
492
+ logger.success(f"===> Detached segment with {label} from `{definition1}`to {definition2}\n")
493
+ out = parsed_output['display'].replace('Unlink', 'Link', 1)
494
+
495
+ return (out)
496
+
497
+
498
+ elif object_action == "Link":
499
+ if valid is False and exists:
500
+ msg = (f"--> Link called `{label}` already exists and result document updated changing "
501
+ f"`Link` to `Detach` in processed output\n")
502
+ logger.error(msg)
503
+
504
+ elif valid is False:
505
+ msg = f"==>{object_type} Link with label `{label}` is not valid and can't be created"
506
+ logger.error(msg)
507
+ return
508
+
509
+ else:
510
+ body_prop = set_rel_prop_body(object_type, attributes)
511
+
512
+ body = set_rel_request_body(object_type, attributes)
513
+ body['properties'] = body_prop
514
+ egeria_client.attach_governed_by_definition(element_guid, definition_guid, body)
515
+ msg = f"==>Created {object_type} link named `{label}`\n"
516
+ logger.success(msg)
517
+ out = parsed_output['display'].replace('Link', 'Detach', 1)
518
+ return out
519
+
520
+ except ValidationError as e:
521
+ print_validation_error(e)
522
+ logger.error(f"Validation Error performing {command}: {e}")
523
+ return None
524
+ except PyegeriaException as e:
525
+ print_basic_exception(e)
526
+ logger.error(f"PyegeriaException occurred: {e}")
527
+ return None
528
+
529
+ except Exception as e:
530
+ logger.error(f"Error performing {command}: {e}")
531
+ return None
532
+ else:
533
+ return None
534
+
535
+
536
+
430
537
  @logger.catch
431
538
  def process_gov_def_context_command(egeria_client: EgeriaTech, txt: str,
432
539
  directive: str = "display") -> Optional[str]:
@@ -20,6 +20,7 @@ from md_processing.md_processing_utils.extraction_utils import (extract_command_
20
20
  from md_processing.md_processing_utils.md_processing_constants import (load_commands, ERROR)
21
21
  from pyegeria import DEBUG_LEVEL, body_slimmer, to_pascal_case, PyegeriaException, print_basic_exception, print_exception_table
22
22
  from pyegeria.egeria_tech_client import EgeriaTech
23
+ from pyegeria.utils import make_format_set_name_from_type
23
24
 
24
25
  EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
25
26
  EGERIA_KAFKA_ENDPOINT = os.environ.get("KAFKA_ENDPOINT", "localhost:9092")
@@ -50,7 +50,7 @@ TERM_RELATIONSHPS = ["Synonym", "Translation", "PreferredTerm", "TermISATYPEOFRe
50
50
  GOV_LINK_LIST = [ "Link Governance Drivers", "Link Drivers", "Detach Governance Drivers", "Detach Drivers",
51
51
  "Link Governance Policies", "Link Policies", "Detach Governance Policies", "Detach Policies",
52
52
  "Link Governance Controls", "Link Controls", "Detach Governance Controls", "Detach Controls",
53
- ]
53
+ ]
54
54
 
55
55
  GOV_COM_LIST = [ "Create Business Imperative", "Update Business Imperative",
56
56
  "Create Regulation Article Definition", "Update Regulation Article Definition",
@@ -70,7 +70,9 @@ GOV_COM_LIST = [ "Create Business Imperative", "Update Business Imperative",
70
70
  "Create Security Group", "Update Security Group",
71
71
  "Create Naming Standard Rule", "Update Naming Standard Rule",
72
72
  "Create Certification Type", "Update Certification Type",
73
- "Create License Type", "Update License Type",]
73
+ "Create License Type", "Update License Type",
74
+ "Link Governed By", "Detach Governed By"
75
+ ]
74
76
 
75
77
  SIMPLE_BASE_COLLECTIONS: set = { "Collection", "Home Collection", "Digital Product", "Result Set" , "Recent Access",
76
78
  "Reference List", "Work Item List", "Data Sharing Agreement", "Namespace", "Agreement",
pyegeria/_client_new.py CHANGED
@@ -102,6 +102,7 @@ class Client2:
102
102
  self.exc_type = None
103
103
  self.exc_value = None
104
104
  self.exc_tb = None
105
+ # self.url_marker = "MetadataExpert"
105
106
 
106
107
  #
107
108
  # I'm commenting this out since you should only have to use tokens if you want - just have to
@@ -1136,7 +1137,8 @@ class Client2:
1136
1137
  }
1137
1138
  """
1138
1139
 
1139
- url = f"{self.command_root}/metadata-elements/{guid}/update-status"
1140
+ url = (f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/"
1141
+ f"{self.url_marker}/metadata-elements/{guid}/update-status")
1140
1142
  await self._async_update_status_request(url, status, body)
1141
1143
 
1142
1144
  @dynamic_catch
@@ -805,9 +805,9 @@ base_output_format_sets = FormatSetDict({
805
805
  spec_params={"metadata_element_types": ["GovernancePrinciple", "GovernanceStrategy", "GovernanceResponse"]},
806
806
  )
807
807
  ),
808
- 'Governance Control': FormatSet(target_type='Control', heading='Control Attributes',
809
- description='Auto-generated format for Governance Control (Create).', formats=[
810
- Format(types=['ALL'],
808
+ 'Governance-Control': FormatSet(target_type='Governance Control', heading='Control Attributes',
809
+ description= 'Governance Control (Create).', formats=[
810
+ Format(types=['DICT', 'MD', 'FORM', 'REPORT'],
811
811
  columns=[Column(name='Display Name', key='display_name'), Column(name='Summary', key='summary'),
812
812
  Column(name='Description', key='description'), Column(name='Category', key='category'),
813
813
  Column(name='Domain Identifier', key='domain_identifier'),
@@ -820,14 +820,58 @@ base_output_format_sets = FormatSetDict({
820
820
  Column(name='Status', key='element_status'),
821
821
  Column(name='User Defined Status', key='user_defined_status'),
822
822
  Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid')
823
- ])],
824
- action=ActionParameter(
825
- function="GovernanceOfficer.find_governance_definitions",
826
- required_params=["search_string"],
827
- optional_params=OPTIONAL_PARAMS,
828
- spec_params={"metadata_element_types": ["GovernanceControl"]},
829
- )
830
- ),
823
+ ]),
824
+ Format(types=['TABLE', 'LIST'],
825
+ columns=[Column(name='Display Name', key='display_name'),
826
+ Column(name='Summary', key='summary'),
827
+ Column(name='Category', key='category'),
828
+ Column(name='Identifier', key='identifier'),
829
+ Column(name='Usage', key='usage'),
830
+ Column(name='Status', key='element_status'),
831
+ Column(name='Qualified Name', key='qualified_name'),
832
+ ])
833
+ ],
834
+ action=ActionParameter(
835
+ function="GovernanceOfficer.find_governance_definitions",
836
+ required_params=["search_string"],
837
+ optional_params=OPTIONAL_PARAMS,
838
+ spec_params={"metadata_element_types": ["GovernanceControl"]},
839
+ )
840
+ ),
841
+
842
+ 'License-Type': FormatSet(target_type='License Type', heading='License Type Attributes',
843
+ description='Attributes of a License type.', formats=[
844
+ Format(types=['DICT', 'MD', 'FORM', 'REPORT'],
845
+ columns=[Column(name='Display Name', key='display_name'), Column(name='Summary', key='summary'),
846
+ Column(name='Description', key='description'), Column(name='Category', key='category'),
847
+ Column(name='Domain Identifier', key='domain_identifier'),
848
+ Column(name='Identifier', key='identifier'),
849
+ Column(name='Version Identifier', key='version_identifier'),
850
+ Column(name='Usage', key='usage'), Column(name='Scope', key='scope'),
851
+ Column(name='Importance', key='importance'), Column(name='measurement', key='measurement'),
852
+ Column(name='target', key='target'), Column(name='Implications', key='implications'),
853
+ Column(name='Outcomes', key='outcomes'), Column(name='Results', key='results'),
854
+ Column(name='Status', key='element_status'),
855
+ Column(name='User Defined Status', key='user_defined_status'),
856
+ Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid')
857
+ ]),
858
+ Format(types=['TABLE', 'LIST'],
859
+ columns=[Column(name='Display Name', key='display_name'),
860
+ Column(name='Summary', key='summary'),
861
+ Column(name='Category', key='category'),
862
+ Column(name='Identifier', key='identifier'),
863
+ Column(name='Usage', key='usage'),
864
+ Column(name='Status', key='element_status'),
865
+ Column(name='Qualified Name', key='qualified_name'),
866
+ ])
867
+ ],
868
+ action=ActionParameter(
869
+ function="GovernanceOfficer.find_governance_definitions",
870
+ required_params=["search_string"],
871
+ optional_params=OPTIONAL_PARAMS,
872
+ spec_params={"metadata_element_types": ["LicenseType"]},
873
+ )
874
+ ),
831
875
 
832
876
  "Governance Policies": FormatSet(
833
877
  target_type="GovernancePolicy",
@@ -1182,7 +1226,7 @@ generated_format_sets = FormatSetDict({
1182
1226
  'starts_with', 'ends_with',
1183
1227
  'ignore_case'], spec_params={
1184
1228
  'metadata_element_types': ['DigitalSubscription']})),
1185
- 'External-Data-Source-DrE': FormatSet(target_type='External-Data-Source-DrE',
1229
+ 'External-Data-Source-DrE': FormatSet(target_type='External Data Source',
1186
1230
  heading='External-Data-Source-DrE Attributes',
1187
1231
  description='Auto-generated format for External Data Source (Create).',
1188
1232
  formats=[Format(types=['ALL'],
@@ -3681,7 +3681,7 @@ class ClassificationManager(Client):
3681
3681
  )
3682
3682
 
3683
3683
  url = (
3684
- f"{base_path(self, self.view_server)}/elements/{element_guid}/governed-by/definition/{definition_guid}"
3684
+ f"{base_path(self, self.view_server)}/elements/{element_guid}/governed-by/definition/{definition_guid}/attach"
3685
3685
  f"{possible_query_params}"
3686
3686
  )
3687
3687
 
@@ -3806,7 +3806,7 @@ class ClassificationManager(Client):
3806
3806
 
3807
3807
  url = (
3808
3808
  f"{base_path(self, self.view_server)}/elements/{element_guid}/governed-by/definition/"
3809
- f"{definition_guid}/remove{possible_query_params}"
3809
+ f"{definition_guid}/detach{possible_query_params}"
3810
3810
  )
3811
3811
 
3812
3812
  body = {"class": "ClassificationRequestBody", "effectiveTime": effective_time}
@@ -4769,7 +4769,7 @@ class ClassificationManager(Client):
4769
4769
  )
4770
4770
 
4771
4771
  url = (
4772
- f"{base_path(self, self.view_server)}/elements/{element_guid}/semantic-assignment/terms"
4772
+ f"{base_path(self, self.view_server)}/elements/{element_guid}/semantic-assignment/terms/attach"
4773
4773
  f"/{glossary_term_guid}{possible_query_params}"
4774
4774
  )
4775
4775
 
@@ -4911,7 +4911,7 @@ class ClassificationManager(Client):
4911
4911
 
4912
4912
  url = (
4913
4913
  f"{base_path(self, self.view_server)}/elements/{element_guid}/semantic-assignment/terms/"
4914
- f"{glossary_term_guid}/remove{possible_query_params}"
4914
+ f"{glossary_term_guid}/detach{possible_query_params}"
4915
4915
  )
4916
4916
 
4917
4917
  body = {"class": "ClassificationRequestBody", "effectiveTime": effective_time}
@@ -2535,8 +2535,8 @@ class CollectionManager(Client2):
2535
2535
  }
2536
2536
  """
2537
2537
 
2538
- url = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/collection-manager/metadata-elements/{collection_guid}/update-status"
2539
- await self._async_update_status_request(url, status, body)
2538
+
2539
+ await self._async_update_element_status(collection_guid, status, body)
2540
2540
 
2541
2541
  @dynamic_catch
2542
2542
  def update_collection_status(self, collection_guid: str, status: str = None,
@@ -91,6 +91,7 @@ class GlossaryManager(CollectionManager):
91
91
  self.platform_url = platform_url
92
92
  self.user_id = user_id
93
93
  self.user_pwd = user_pwd
94
+ self.url_marker = "glossary-manager"
94
95
 
95
96
 
96
97
  CollectionManager.__init__(self, view_server, platform_url, user_id, user_pwd, token)
@@ -991,94 +992,6 @@ class GlossaryManager(CollectionManager):
991
992
 
992
993
 
993
994
  @dynamic_catch
994
- async def _async_update_term_status(self, term_guid: str, status: str = None,
995
- body: dict | UpdateStatusRequestBody = None):
996
- """Update the status of a collection. Async version.
997
-
998
- Parameters
999
- ----------
1000
- collection_guid: str
1001
- The guid of the collection to update.
1002
- status: str, optional
1003
- The new lifecycle status for the collection. Ignored, if the body is provided.
1004
- body: dict | UpdateStatusRequestBody, optional
1005
- A structure representing the details of the collection to create. If supplied, these details
1006
- supersede the status parameter provided.
1007
-
1008
- Returns
1009
- -------
1010
- Nothing
1011
-
1012
- Raises
1013
- ------
1014
- InvalidParameterException
1015
- If the client passes incorrect parameters on the request - such as bad URLs or invalid values
1016
- PropertyServerException
1017
- Raised by the server when an issue arises in processing a valid request
1018
- NotAuthorizedException
1019
- The principle specified by the user_id does not have authorization for the requested action
1020
-
1021
- Notes
1022
- -----
1023
- JSON Structure looks like:
1024
- {
1025
- "class": "UpdateStatusRequestBody",
1026
- "status": "APPROVED",
1027
- "externalSourceGUID": "add guid here",
1028
- "externalSourceName": "add qualified name here",
1029
- "effectiveTime": "{{$isoTimestamp}}",
1030
- "forLineage": false,
1031
- "forDuplicateProcessing": false
1032
- }
1033
- """
1034
-
1035
- url = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/glossary-manager/metadata-elements/{term_guid}/update-status"
1036
- await self._async_update_status_request(url, status, body)
1037
- logger.info(f"Updated status for term {term_guid}")
1038
-
1039
- @dynamic_catch
1040
- def update_term_status(self, term_guid: str, status: str = None,
1041
- body: dict | UpdateStatusRequestBody = None):
1042
- """Update the status of a DigitalProduct collection.
1043
-
1044
- Parameters
1045
- ----------
1046
- collection_guid: str
1047
- The guid of the collection to update.
1048
- status: str, optional
1049
- The new lifecycle status for the digital product. Ignored, if the body is provided.
1050
- body: dict | UpdateStatusRequestBody, optional
1051
- A structure representing the details of the collection to create. If supplied, these details
1052
- supersede the status parameter provided.
1053
-
1054
- Returns
1055
- -------
1056
- Nothing
1057
-
1058
- Raises
1059
- ------
1060
- InvalidParameterException
1061
- If the client passes incorrect parameters on the request - such as bad URLs or invalid values
1062
- PropertyServerException
1063
- Raised by the server when an issue arises in processing a valid request
1064
- NotAuthorizedException
1065
- The principle specified by the user_id does not have authorization for the requested action
1066
-
1067
- Notes
1068
- -----
1069
- JSON Structure looks like:
1070
- {
1071
- "class": "UpdateStatusRequestBody",
1072
- "status": "APPROVED",
1073
- "externalSourceGUID": "add guid here",
1074
- "externalSourceName": "add qualified name here",
1075
- "effectiveTime": "{{$isoTimestamp}}",
1076
- "forLineage": false,
1077
- "forDuplicateProcessing": false
1078
- }
1079
- """
1080
- loop = asyncio.get_event_loop()
1081
- loop.run_until_complete(self._async_update_collection_status(term_guid, status, body))
1082
995
 
1083
996
 
1084
997
  async def _async_delete_term(
@@ -849,99 +849,6 @@ class GovernanceOfficer(Client2):
849
849
  loop = asyncio.get_event_loop()
850
850
  loop.run_until_complete(self._async_update_governance_definition(guid, body))
851
851
 
852
- @dynamic_catch
853
- async def _async_update_governance_definition_status(self, guid: str, status: str = None,
854
- body: dict | UpdateStatusRequestBody = None) -> None:
855
- """ Update the status of a governance definition. Async Version.
856
-
857
- Parameters
858
- ----------
859
- guid: str
860
- guid of the governance definition to update.
861
- status: str, optional, default is None
862
- The status to update the governance definition to. Superseded by the body definition if present.
863
- body: dict
864
- A dictionary containing the updates to the governance definition.
865
-
866
- Returns
867
- -------
868
-
869
- None
870
-
871
- Raises
872
- ------
873
- InvalidParameterException
874
- one of the parameters is null or invalid or
875
- PropertyServerException
876
- There is a problem adding the element properties to the metadata repository or
877
- UserNotAuthorizedException
878
- the requesting user is not authorized to issue this request.
879
-
880
- Notes
881
- ----
882
-
883
- Body structure:
884
- {
885
- "class": "UpdateGovernanceDefinitionRequestBody",
886
- "externalSourceGUID": "add guid here",
887
- "externalSourceName": "add qualified name here",
888
- "effectiveTime": "{{$isoTimestamp}}",
889
- "forLineage": false,
890
- "forDuplicateProcessing": false,
891
- "status": "ACTIVE"
892
- }
893
- """
894
-
895
- url = (
896
- f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/{self.url_marker}/governance-defnitions/"
897
- f"{guid}/update-status")
898
-
899
- # await self._async_update_status_request(url, status, body)
900
-
901
- def update_governance_definition_status(self, guid: str, status: str = None,
902
- body: dict | UpdateStatusRequestBody = None) -> None:
903
- """ Update the status of a governance definition.
904
-
905
- Parameters
906
- ----------
907
- guid: str
908
- guid of the information governance definition to update.
909
- status: str, optional, default is None
910
- The status to update the governance definition to. Superseded by the body definition if present.
911
- body: dict
912
- A dictionary containing the updates to the governance definition.
913
-
914
- Returns
915
- -------
916
-
917
- None
918
-
919
- Raises
920
- ------
921
- InvalidParameterException
922
- one of the parameters is null or invalid or
923
- PropertyServerException
924
- There is a problem adding the element properties to the metadata repository or
925
- UserNotAuthorizedException
926
- the requesting user is not authorized to issue this request.
927
-
928
- Notes
929
- ----
930
-
931
- Body structure:
932
- {
933
- "class" : "UpdateGovernanceDefinitionRequestBody",
934
- "externalSourceGUID": "add guid here",
935
- "externalSourceName": "add qualified name here",
936
- "effectiveTime" : "{{$isoTimestamp}}",
937
- "forLineage" : false,
938
- "forDuplicateProcessing" : false,
939
- "status": "ACTIVE"
940
- }
941
- """
942
- loop = asyncio.get_event_loop()
943
- loop.run_until_complete(self._async_update_governance_definition_status(guid, status, body))
944
-
945
852
  @dynamic_catch
946
853
  async def _async_delete_governance_definition(self, definition_guid: str,
947
854
  body: dict | DeleteRequestBody = None,
@@ -1430,7 +1337,7 @@ class GovernanceOfficer(Client2):
1430
1337
  logger.info(f"Detached digital supporting definitions: {definition_guid1} -> {definition_guid2}")
1431
1338
 
1432
1339
  @dynamic_catch
1433
- def detach_supporting_definitions(self, definition_guid1: str, relationship_type: str, definition_guid2: str,
1340
+ def detach_supporting_definitions(self, definition_guid: str, relationship_type: str, definition_guid2: str,
1434
1341
  body: dict | DeleteRequestBody = None) -> None:
1435
1342
  """ Detach a governance definition from a supporting governance definition.
1436
1343
  Request body is optional.
@@ -1476,6 +1383,197 @@ class GovernanceOfficer(Client2):
1476
1383
  loop.run_until_complete(
1477
1384
  self._async_detach_supporting_definitions(definition_guid1, relationship_type, definition_guid2, body))
1478
1385
 
1386
+
1387
+
1388
+ async def _async_attach_governed_by_definition(self, element_guid: str, definition_guid: str,
1389
+ body: dict | NewRelationshipRequestBody = None) -> None:
1390
+ """ Link a governance definition to an element using the GovernedBy relationship. Request body is optional.
1391
+
1392
+ Async Version.
1393
+
1394
+ Parameters
1395
+ ----------
1396
+ element_guid: str
1397
+ guid of the element to be governed.
1398
+ definition_guid: str
1399
+ the governance definition guid.
1400
+ body: dict
1401
+ The body describing the link between the two.
1402
+
1403
+ Returns
1404
+ -------
1405
+ None
1406
+
1407
+ Raises
1408
+ ------
1409
+ PyegeriaException
1410
+ ValidationError
1411
+
1412
+ Notes
1413
+ ----
1414
+
1415
+ Body structure:
1416
+ {
1417
+ "class" : "NewRelationshipRequestBody",
1418
+ "properties" : {
1419
+ "class" : "GovernedByProperties",
1420
+ "label" : "add label here",
1421
+ "description" : "add description here"
1422
+ },
1423
+ "externalSourceGUID": "Add guid here",
1424
+ "externalSourceName": "Add qualified name here",
1425
+ "forLineage": false,
1426
+ "forDuplicateProcessing": false,
1427
+ "effectiveTime" : "{{$isoTimestamp}}"
1428
+ }
1429
+ """
1430
+ url = (
1431
+ f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/"
1432
+ f"{self.url_marker}/elements/{element_guid}/governed-by/{definition_guid}/attach"
1433
+ )
1434
+ await self._async_new_relationship_request(url, "GovernedByProperties", body)
1435
+ logger.info(f"Linked Governed-By {definition_guid1} -> {definition_guid2}")
1436
+
1437
+ @dynamic_catch
1438
+ def attach_governed_by_definition(self, element_guid: str, definition_guid: str,
1439
+ body: dict | NewRelationshipRequestBody = None) -> None:
1440
+ """ Link a governance definition to an element using the GovernedBy relationship. Request body is optional.
1441
+
1442
+ Parameters
1443
+ ----------
1444
+ element_guid: str
1445
+ guid of the element to be governed.
1446
+ definition_guid: str
1447
+ the governance definition guid.
1448
+ body: dict
1449
+ The body describing the link between the two.
1450
+
1451
+ Returns
1452
+ -------
1453
+ None
1454
+
1455
+ Raises
1456
+ ------
1457
+ PyegeriaException
1458
+ ValidationError
1459
+
1460
+ Notes
1461
+ ----
1462
+
1463
+ Body structure:
1464
+ {
1465
+ "class" : "NewRelationshipRequestBody",
1466
+ "properties" : {
1467
+ "class" : "GovernedByProperties",
1468
+ "label" : "add label here",
1469
+ "description" : "add description here"
1470
+ },
1471
+ "externalSourceGUID": "Add guid here",
1472
+ "externalSourceName": "Add qualified name here",
1473
+ "forLineage": false,
1474
+ "forDuplicateProcessing": false,
1475
+ "effectiveTime" : "{{$isoTimestamp}}"
1476
+ }
1477
+ """
1478
+ loop = asyncio.get_event_loop()
1479
+ loop.run_until_complete(
1480
+ self._async_attach_governed_by_definition(element_guid, definition_guid, body))
1481
+
1482
+ @dynamic_catch
1483
+ async def _async_detach_governed_by_definition(self, element_guid: str, definition_guid: str,
1484
+ body: dict | DeleteRequestBody = None) -> None:
1485
+ """ Detach a governance definition from a supporting governance definition.
1486
+ Request body is optional. Async Version.
1487
+
1488
+ Parameters
1489
+ ----------
1490
+ element_guid: str
1491
+ guid of the element to be governed.
1492
+ definition_guid: str
1493
+ the governance definition guid.
1494
+ body: dict
1495
+ The body describing the link between the two.
1496
+
1497
+ Returns
1498
+ -------
1499
+ None
1500
+
1501
+ Raises
1502
+ ------
1503
+ InvalidParameterException
1504
+ one of the parameters is null or invalid or
1505
+ PropertyServerException
1506
+ There is a problem adding the element properties to the metadata repository or
1507
+ UserNotAuthorizedException
1508
+ the requesting user is not authorized to issue this request.
1509
+
1510
+ Notes
1511
+ ----
1512
+
1513
+ Body structure:
1514
+ {
1515
+ "class" : "DeleteRequestBody",
1516
+ "externalSourceGUID": "add guid here",
1517
+ "externalSourceName": "add qualified name here",
1518
+ "effectiveTime" : "{{$isoTimestamp}}",
1519
+ "forLineage" : false,
1520
+ "forDuplicateProcessing" : false
1521
+ }
1522
+ """
1523
+ url = (
1524
+ f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/"
1525
+ f"{self.url_marker}/elements/{element_guid}/governed-by/{definition_guid}/detach"
1526
+ )
1527
+ await self._async_delete_request(url, body)
1528
+ logger.info(f"Detached governed-by relationshup between: {definition_guid} -> {element_guid}")
1529
+
1530
+ @dynamic_catch
1531
+ def detach_governed_by_definitio(self, element_guid: str, definition_guid: str,
1532
+ body: dict | DeleteRequestBody = None) -> None:
1533
+ """ Detach a governance definition from a supporting governance definition.
1534
+ Request body is optional.
1535
+
1536
+ Parameters
1537
+ ----------
1538
+ element_guid: str
1539
+ guid of the element to be governed.
1540
+ definition_guid: str
1541
+ the governance definition guid.
1542
+ body: dict
1543
+ The body describing the link between the two.
1544
+
1545
+ Returns
1546
+ -------
1547
+ None
1548
+
1549
+ Raises
1550
+ ------
1551
+ InvalidParameterException
1552
+ one of the parameters is null or invalid or
1553
+ PropertyServerException
1554
+ There is a problem adding the element properties to the metadata repository or
1555
+ UserNotAuthorizedException
1556
+ the requesting user is not authorized to issue this request.
1557
+
1558
+ Notes
1559
+ ----
1560
+
1561
+ Body structure:
1562
+ {
1563
+ "class" : "DeleteRequestBody",
1564
+ "externalSourceGUID": "add guid here",
1565
+ "externalSourceName": "add qualified name here",
1566
+ "effectiveTime" : "{{$isoTimestamp}}",
1567
+ "forLineage" : false,
1568
+ "forDuplicateProcessing" : false
1569
+ }
1570
+ """
1571
+ loop = asyncio.get_event_loop()
1572
+ loop.run_until_complete(
1573
+ self._async_detach_governed_by_definition(element_guid, definition_guid, body))
1574
+
1575
+
1576
+
1479
1577
  @dynamic_catch
1480
1578
  async def _async_delete_governance_definition(self, guid: str, body: dict | DeleteRequestBody = None) -> None:
1481
1579
  """ Delete an information supply. Async version.
@@ -1484,7 +1582,7 @@ class GovernanceOfficer(Client2):
1484
1582
  ----------
1485
1583
  guid: str
1486
1584
  GUID of the governance definition to delete.
1487
-
1585
+
1488
1586
  body: dict, optional
1489
1587
  A dictionary containing the definition of the governance definition to create.
1490
1588
 
@@ -1522,6 +1620,7 @@ class GovernanceOfficer(Client2):
1522
1620
  await self._async_delete_request(url, body)
1523
1621
  logger.info(f"Deleted governance definition: {guid} ")
1524
1622
 
1623
+
1525
1624
  @dynamic_catch
1526
1625
  def delete_governance_definition(self, guid: str, body: dict | DeleteRequestBody = None) -> None:
1527
1626
  """ Delete an information supply. Request body is optional. Async version.
@@ -72,6 +72,7 @@ class ProjectManager(Client2):
72
72
  self.project_command_base: str = (
73
73
  f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/project-manager/projects"
74
74
  )
75
+ self.url_marker = 'project-manager'
75
76
  Client2.__init__(self, view_server, platform_url, user_id, user_pwd, token)
76
77
 
77
78
  def _extract_additional_project_properties(self, element: dict, columns_struct: dict)-> dict:
@@ -2612,96 +2612,6 @@ class SolutionArchitect(Client2):
2612
2612
  loop.run_until_complete(self._async_delete_info_supply_chain(guid, body, cascade))
2613
2613
 
2614
2614
 
2615
- @dynamic_catch
2616
- async def _async_update_solution_element_status(self, guid: str, status: str= None, body: dict| UpdateStatusRequestBody = None,
2617
- ) -> None:
2618
- """ Update the properties of a blueprint, solution component, or solution port. Async Version.
2619
-
2620
- Parameters
2621
- ----------
2622
- guid: str
2623
- guid of the information supply chain to update.
2624
- body: dict | UpdateStatusRequestBody, optional
2625
- A dictionary containing the updates to the supply chain.
2626
- status: str, optional
2627
- The status to update the supply chain to.
2628
-
2629
- Returns
2630
- -------
2631
-
2632
- None
2633
-
2634
- Raises
2635
- ------
2636
- InvalidParameterException
2637
- one of the parameters is null or invalid or
2638
- PropertyServerException
2639
- There is a problem adding the element properties to the metadata repository or
2640
- UserNotAuthorizedException
2641
- the requesting user is not authorized to issue this request.
2642
-
2643
- Notes
2644
- ----
2645
-
2646
- Body structure:
2647
- {
2648
- "class" : "UpdateStatusRequestBody",
2649
- "status" : "APPROVED",
2650
- "externalSourceGUID": "add guid here",
2651
- "externalSourceName": "add qualified name here",
2652
- "effectiveTime" : "{{$isoTimestamp}}",
2653
- "forLineage" : false,
2654
- "forDuplicateProcessing" : false
2655
- }
2656
- """
2657
-
2658
- url = (f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/solution-architect/"
2659
- f"solution-blueprints/{guid}/update")
2660
-
2661
- await self._async_update_status_request(url, status, body)
2662
-
2663
- @dynamic_catch
2664
- def update_solution_element_status(self, guid: str, status: str = None, body: dict| UpdateStatusRequestBody = None) -> None:
2665
- """ Update the status of a blueprint, solution component, or solution port.
2666
-
2667
- Parameters
2668
- ----------
2669
- guid: str
2670
- guid of the information supply chain to update.
2671
- body: dict
2672
- A dictionary containing the updates to the supply chain.
2673
-
2674
- Returns
2675
- -------
2676
- None
2677
-
2678
- Raises
2679
- ------
2680
- InvalidParameterException
2681
- one of the parameters is null or invalid or
2682
- PropertyServerException
2683
- There is a problem adding the element properties to the metadata repository or
2684
- UserNotAuthorizedException
2685
- the requesting user is not authorized to issue this request.
2686
-
2687
- Notes
2688
- ----
2689
-
2690
- Body structure:
2691
- {
2692
- "class" : "SolutionElementStatusRequestBody",
2693
- "status" : "APPROVED",
2694
- "externalSourceGUID": "add guid here",
2695
- "externalSourceName": "add qualified name here",
2696
- "effectiveTime" : "{{$isoTimestamp}}",
2697
- "forLineage" : false,
2698
- "forDuplicateProcessing" : false
2699
- }
2700
- """
2701
- loop = asyncio.get_event_loop()
2702
- loop.run_until_complete(self._async_update_solution_element_status(guid = guid, status= status, body=body))
2703
-
2704
-
2705
2615
  @dynamic_catch
2706
2616
  async def _async_link_solution_component_to_blueprint(self, blueprint_guid: str, component_guid: str,
2707
2617
  body: dict | NewRelationshipRequestBody) -> None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pyegeria
3
- Version: 5.4.4.3
3
+ Version: 5.4.4.4
4
4
  Summary: A python client for Egeria
5
5
  License: Apache 2.0
6
6
  Keywords: egeria,metadata,governance
@@ -4286,19 +4286,19 @@ md_processing/.obsidian/plugins/obsidian-sample-plugin/tsconfig.json,sha256=1WZq
4286
4286
  md_processing/.obsidian/plugins/obsidian-sample-plugin/version-bump.mjs,sha256=Abvp-AsbUJhsRdgmx6QRQeYkq1naolNfEaV84BhwXO0,648
4287
4287
  md_processing/.obsidian/plugins/obsidian-sample-plugin/versions.json,sha256=BUExoIjmkWRH0yMlAATwxxkgaaxTTZ6GQhT4JBDGofI,23
4288
4288
  md_processing/.obsidian/workspace.json,sha256=NLVJEOtsowljw7Ka035ReHLPu4iitk2ZsuSDN6zUAFY,4282
4289
- md_processing/__init__.py,sha256=cEB6Fq334zRFybe2gLQgmfvMW_6s489JRD-j9Apoowg,7325
4289
+ md_processing/__init__.py,sha256=u9hAxeDri4c8mjw9WkqiotRWwNIfrPiFn6-2Bj2Adro,7365
4290
4290
  md_processing/data/commands-working.json,sha256=uCo_azcuuYqGm7QffJeCGj7PyZuZRGdu7kKf4XWmMoA,1162560
4291
4291
  md_processing/data/commands.json,sha256=RIHRggidx9qPwBDVmXagoY0AkVcG-sL0yobl7aiGmHI,1712477
4292
4292
  md_processing/data/generated_format_sets.json,sha256=TXvGK_Gm5ieq9i6u9M1j4CaNPzoV2m0hisKK2fWCtIM,98502
4293
4293
  md_processing/data/generated_format_sets.py,sha256=ZUWlUi5BHdetUQP-Hx8nQqzd3mCEubsJQXjvPmqhY3M,54980
4294
- md_processing/dr_egeria.py,sha256=OlzP8LkXqZ79lxsWOnz8zOpcOdhpLp7m_PDE0fi-YPs,19963
4294
+ md_processing/dr_egeria.py,sha256=OLx2WbaZ7PAjmpm7DbCHlPPFV1PDFFjTz4qGV6Lo9c8,20213
4295
4295
  md_processing/dr_egeria_inbox/glossary_creation_experiment.ipynb,sha256=dbzNu90fCKNohOWVSRBOB1GLyd95x8Qw51I5AkaPtso,11552
4296
4296
  md_processing/md_commands/__init__.py,sha256=ssEojzFlSYtY2bHqqOoKo8PFaANZ_kq_gIbtlXnuc2s,93
4297
4297
  md_processing/md_commands/data_designer_commands.py,sha256=cT2godlpPS5vbWvpZbzTDlTMjZFPm8ggKTER0U0yb7U,65116
4298
4298
  md_processing/md_commands/ext_ref_commands.py,sha256=YPoEm_gitLvJXr7E4-9feLNpnoLnjSamti_lxlIoO5k,24675
4299
4299
  md_processing/md_commands/glossary_commands.py,sha256=IOQxXxmyhwPAAZy1jha91qhXQBqzhhxUFDuVj6QkRbA,33970
4300
- md_processing/md_commands/governance_officer_commands.py,sha256=IRCh0HOuz8C14WhZh8iooLFuUOHP6FamdzwbE28Os9s,22265
4301
- md_processing/md_commands/product_manager_commands.py,sha256=6RCWyxfQcCw_q41bcqFswuP4fOHgm20zePzYggVWFdc,46112
4300
+ md_processing/md_commands/governance_officer_commands.py,sha256=vpNIKF0F0MMepb0mZ3GsWqghFuQWtVixXjrLba1Uo6w,26421
4301
+ md_processing/md_commands/product_manager_commands.py,sha256=T2S4USHEPEQWMdMv2PUI_4PwHTdlKwWDjJwg3sTqNLc,46170
4302
4302
  md_processing/md_commands/project_commands.py,sha256=mjBSreHVkGCluChlO_p_5cEQ0CHlG5XJ3Fo6lL9C--w,17882
4303
4303
  md_processing/md_commands/solution_architect_commands.py,sha256=4Ghb8j2wlDdWtHoSCrx5jCJFEJfqII4mnFJ_tqduRKI,52569
4304
4304
  md_processing/md_commands/view_commands.py,sha256=dvRD0Vjv1w9FTfV5W-4EMQBTk2NAUJlIP2jQ411kHS4,11815
@@ -4316,23 +4316,23 @@ md_processing/md_processing_utils/gen_format_sets.py,sha256=R5IvrajER0Xj9kZ99UxR
4316
4316
  md_processing/md_processing_utils/generate_dr_help.py,sha256=MJWlr_22Y9pjWqQbfSLb6C-t1GlQNlbWXkCmDnphfME,7419
4317
4317
  md_processing/md_processing_utils/generate_md_cmd_templates.py,sha256=SVdtlA6Nc9JIN-pORGbf-_shEP7egReuVejEcMjxRYM,5797
4318
4318
  md_processing/md_processing_utils/generate_md_templates.py,sha256=DMnMQ7_LbmQCS8aG-ppHGTu25obOSn4ZzSg7V21k9jo,3547
4319
- md_processing/md_processing_utils/md_processing_constants.py,sha256=m-Vq0qPMkyF3riGcHWNid1_uRXPhCto8UdRxBKS3WvE,19458
4319
+ md_processing/md_processing_utils/md_processing_constants.py,sha256=OLx5ne7G4Boi_rE-imljGM2-dw7k84ykdmagJbwmrAQ,19533
4320
4320
  md_processing/md_processing_utils/message_constants.py,sha256=UBf18obM83umM6zplR7ychre4xLRbBnTzidHDZ2gNvM,548
4321
4321
  pyegeria/README.md,sha256=PwX5OC7-YSZUCIsoyHh1O-WBM2hE84sm3Bd4O353NOk,1464
4322
4322
  pyegeria/__init__.py,sha256=XxELwaqinmpSsdHaTd-5TGKRe-3Abi220tjZ6svIhLQ,11842
4323
4323
  pyegeria/_client.py,sha256=hJHn5pD8sbelP_M9dK-M5Z2CYqpRXzXfg1UCgAdQ6dQ,33416
4324
- pyegeria/_client_new.py,sha256=SZJkA2HJQXBU0-DrFvqtP2yD7kH_GPjy0dRwIGn6PtE,65415
4324
+ pyegeria/_client_new.py,sha256=npNLWfx9-EUp49lzzwLUdgD45TWr1CsaZseKkOCLmUk,65544
4325
4325
  pyegeria/_deprecated_gov_engine.py,sha256=dWNcwVsE5__dF2u4QiIyQrssozzzOjBbLld8MdpmVCQ,17264
4326
4326
  pyegeria/_exceptions.py,sha256=1SrnV194V4_YJNnNAU0myTHQ3dhLn4GF2B2gZcj1u90,18153
4327
4327
  pyegeria/_exceptions_new.py,sha256=srmrlqoWy7VvOJOhPcYFKW32MCIovgEg5J7PrYDxzQA,19706
4328
4328
  pyegeria/_globals.py,sha256=qSU5hM4uuJZPp-YapEEKxfcdgH9hauc6R7gRkELLroY,1132
4329
4329
  pyegeria/_output_format_models.py,sha256=p9fTYaIa5KyTMIR4-JAbE9g66_gGMPTnUqjIq20Zr1o,14494
4330
- pyegeria/_output_formats.py,sha256=LU36dzdUaNqVzQ6n0SV4tKfODcmmL2mm0-pEurCMPA4,171416
4330
+ pyegeria/_output_formats.py,sha256=wYVGJWEFjcY2WhAj1uopQ2kjlHHFuGuzAVsAxrpCwIc,174210
4331
4331
  pyegeria/_validators.py,sha256=pNxND0dN2qvyuGE52N74l1Ezfrh2p9Hao2ziR_t1ENI,7425
4332
4332
  pyegeria/asset_catalog_omvs.py,sha256=P6FceMP0FgakGSOt3ePxpEbsF7nnypzo1aQahjdL_94,29021
4333
4333
  pyegeria/automated_curation_omvs.py,sha256=tzwCyXL0Hx8UjryBBWcPoEuBRajXZpLuwPQ1vuOg2yc,130349
4334
- pyegeria/classification_manager_omvs.py,sha256=kMyDP_dtHf2czU4ZlWYrakQtccPoteadlUCpWRRFJ1Q,187235
4335
- pyegeria/collection_manager.py,sha256=Z7oQVwFZO73znOh13DCt6TfgOegq7lx68Mw9Zx09Teg,232804
4334
+ pyegeria/classification_manager_omvs.py,sha256=eodP8Fn7zi78unsjk0XNW7lnxI7R0Fb7_SLI-HA39PQ,187249
4335
+ pyegeria/collection_manager.py,sha256=Ou07fNgySK4Dfc5QWXKKJfrSq1wqGKzTc4epzad1ICI,232666
4336
4336
  pyegeria/collection_models.py,sha256=d3DdWONqDdAeuUQgussiCNfvhKIDFpaI35cdW_Tv4_0,5315
4337
4337
  pyegeria/config.py,sha256=N-qHq74GN29Mwfp8MbXvj7uEsKCIXotL7MDwFcj3nIU,29380
4338
4338
  pyegeria/core_omag_server_config.py,sha256=pNQpocICkZx8sRsTw5DPUe-TFyxlIo1U88qqgci_f7I,97764
@@ -4346,8 +4346,8 @@ pyegeria/egeria_tech_client.py,sha256=TjuwE9APWQZ4cRsxM0MoVrsikF8e4vkISDt_ra93tY
4346
4346
  pyegeria/external_references.py,sha256=DyOmGhG0LWIN4INABCiJRrHxfZ5FWE7TFtc3S_k5iEI,74360
4347
4347
  pyegeria/feedback_manager_omvs.py,sha256=0xBs0p54vmdfVYYgQ8pOanLC4fxfgTk1Z61Y6D1U7_I,152978
4348
4348
  pyegeria/full_omag_server_config.py,sha256=CQqLCy_3DZFvJZEOcGf50HWdFaWpiAIs6z-kKyjvpDA,47464
4349
- pyegeria/glossary_manager.py,sha256=NIq2YV-uQHuCVmylL52lI7S3YFwiC_8n7kjxIvE1uZ8,110258
4350
- pyegeria/governance_officer.py,sha256=d-hflvrMt-7hH6j47OicoolpU8rf6uzV-IZRgWL485Y,100023
4349
+ pyegeria/glossary_manager.py,sha256=EmCnIPG-W0bUD7MVn2Vopb-cb_TR1J8MMOOFzo38aWk,106786
4350
+ pyegeria/governance_officer.py,sha256=C3u5aV9dnGLHrkohQ9L-Gzlc7QVf5D7uD2a8KEhkMpU,102928
4351
4351
  pyegeria/load_config.py,sha256=XDwPAHB3MvGRuoP8kg1lJJAI4BgMWZ3TYxfxYROgJj4,1188
4352
4352
  pyegeria/load_config_orig.py,sha256=lOM37vdIBcYfLQFTLP5bDuNc7vTFGBNYPfqHtWGNvA4,11624
4353
4353
  pyegeria/logging_configuration.py,sha256=BxTQRN-7OOdk5t1f1xSn8gKU8iT-MfWEgbn6cYWrRsY,7674
@@ -4360,17 +4360,17 @@ pyegeria/models.py,sha256=JX81Wfskn5G4vTXFYl9Ctk-dnr6X2zuto-4gqbuAI9Y,19963
4360
4360
  pyegeria/my_profile_omvs.py,sha256=d0oJYCJG7pS9BINPuGciVa00ac0jwPHNANXDCLginEc,34720
4361
4361
  pyegeria/output_formatter.py,sha256=Fvup9Z-QKsG8JII2lR4kkXwAGhkhcyCVuBkdJd8si4Y,41856
4362
4362
  pyegeria/platform_services.py,sha256=AJNa8n2mKfAMK68q886YCD-p5bpCxIlCxBsRdr0R9O4,41708
4363
- pyegeria/project_manager.py,sha256=0rqR0Y-nVhtvkhXlGcSk4v1t1ImepHW34gGNXFnN7LQ,65843
4363
+ pyegeria/project_manager.py,sha256=BrI23_fWIM4FE1y5zRqo3651iaDJ1BI_aNBpZ7D6nJQ,65887
4364
4364
  pyegeria/registered_info.py,sha256=y0-LgDIQXpph0lEWxIOG3_HsqX_Z2iAIb3xu4Aa4B70,6344
4365
4365
  pyegeria/runtime_manager_omvs.py,sha256=bVAFJPRnIbTxdzmDHx7XgJBlyh_ZyHiKeUGqFT1Ozpg,80293
4366
4366
  pyegeria/server_operations.py,sha256=dTqUEmX1B77b0x61OSU0aonsW8KwIpfzb3eioRpwaiI,16832
4367
- pyegeria/solution_architect.py,sha256=hZQOEtenUGfTGYtI7kD0zI_Nf2IBy-RMNoasfp8BgGs,236903
4367
+ pyegeria/solution_architect.py,sha256=wds7wIBmDdV1H6SPhLPicWDzA7dfjhSCfO-_s4CByDM,233688
4368
4368
  pyegeria/template_manager_omvs.py,sha256=chBljs1vy5wr9DRAtbvIt4Cob_7HxGfxLkCNlDTM-rQ,42755
4369
4369
  pyegeria/utils.py,sha256=xOTxk9PH8ZGZmgIwz_a6rczTVLADLEjucr10ZJTUnY4,9272
4370
4370
  pyegeria/valid_metadata_omvs.py,sha256=Xq9DqBQvBFFJzaFIRKcVZ2k4gJvSh9yeXs_j-O3vn1w,65050
4371
4371
  pyegeria/x_action_author_omvs.py,sha256=RcqSzahUKCtvb_3u_wyintAlc9WFkC_2v0E12TZs8lQ,6433
4372
- pyegeria-5.4.4.3.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
4373
- pyegeria-5.4.4.3.dist-info/METADATA,sha256=-8F48a3OjwTXYvU8AepZ6MiZ3SNq2piVYCmu-UFiqoc,6292
4374
- pyegeria-5.4.4.3.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
4375
- pyegeria-5.4.4.3.dist-info/entry_points.txt,sha256=HAS-LHaaBfkaZ19XU9g5mXwn2uj2HK99isdijI-VIDk,6353
4376
- pyegeria-5.4.4.3.dist-info/RECORD,,
4372
+ pyegeria-5.4.4.4.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
4373
+ pyegeria-5.4.4.4.dist-info/METADATA,sha256=cAQPiOvB4JoxHV6Ax1RChWN0ZovMvmehxMpH7fuxpds,6292
4374
+ pyegeria-5.4.4.4.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
4375
+ pyegeria-5.4.4.4.dist-info/entry_points.txt,sha256=HAS-LHaaBfkaZ19XU9g5mXwn2uj2HK99isdijI-VIDk,6353
4376
+ pyegeria-5.4.4.4.dist-info/RECORD,,