pyegeria 5.4.8.6__py3-none-any.whl → 5.4.8.7__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.

Potentially problematic release.


This version of pyegeria might be problematic. Click here for more details.

@@ -1,5 +1,5 @@
1
1
  """
2
- This file contains glossary-related object_action functions for processing Egeria Markdown
2
+ This file contains project-related object_action functions for processing Egeria Markdown
3
3
  """
4
4
 
5
5
  import json
@@ -167,7 +167,8 @@ COLLECTION_CREATE = ["Create Collection", "Update Collection", "Create Digital P
167
167
  "Update Digital Product Catalog",
168
168
  "Create Root Collection", "Update Root Collection", "Create Folder", "Update Folder",
169
169
  ]
170
-
170
+ FEEDBACK_COMMANDS = ["Create Comment", "Update Comment", "Create NoteLog", "Update NoteLog", "Create Note", "Update Note",
171
+ "Create Informal Tag", "Update Informal Tag", "Tag Element"]
171
172
 
172
173
  command_list = ["Provenance", "Create Glossary", "Update Glossary", "Create Term", "Update Term", "List Terms",
173
174
  "List Term Details", "List Glossary Terms", "List Term History", "List Term Revision History",
@@ -256,7 +257,7 @@ command_list.extend(PROJECT_COMMANDS)
256
257
  command_list.extend(EXT_REF_COMMANDS)
257
258
  command_list.extend(["Link Governance Response", "Detach Governance Response",
258
259
  "Link Governance Mechanism", "Detach Governance Mechanism"])
259
-
260
+ command_list.extend(FEEDBACK_COMMANDS)
260
261
  pre_command = "\n---\n==> Processing object_action:"
261
262
  command_seperator = Markdown("\n---\n")
262
263
  EXISTS_REQUIRED = "Exists Required"
@@ -265,18 +266,147 @@ COMMAND_DEFINITIONS = {}
265
266
  debug_level = DEBUG_LEVEL
266
267
 
267
268
 
269
+ # def load_commands(filename: str) -> None:
270
+ # global COMMAND_DEFINITIONS
271
+ #
272
+ # try:
273
+ # config_path = importlib.resources.files("md_processing") / "data" / filename
274
+ # config_str = config_path.read_text(encoding="utf-8")
275
+ # COMMAND_DEFINITIONS = json.loads(config_str)
276
+ #
277
+ # except FileNotFoundError:
278
+ # msg = f"ERROR: File {filename} not found."
279
+ # print(ERROR, msg, debug_level)
280
+
268
281
  def load_commands(filename: str) -> None:
269
282
  global COMMAND_DEFINITIONS
270
283
 
271
284
  try:
272
285
  config_path = importlib.resources.files("md_processing") / "data" / filename
273
286
  config_str = config_path.read_text(encoding="utf-8")
274
- COMMAND_DEFINITIONS = json.loads(config_str)
287
+
288
+ # Validate JSON before attempting to load
289
+ try:
290
+ COMMAND_DEFINITIONS = json.loads(config_str)
291
+ print(f"Successfully loaded {filename}")
292
+ except json.JSONDecodeError as json_err:
293
+ # Provide detailed error information
294
+ error_line = json_err.lineno
295
+ error_col = json_err.colno
296
+ error_pos = json_err.pos
297
+
298
+ # Extract context around the error
299
+ lines = config_str.split('\n')
300
+ start_line = max(0, error_line - 3)
301
+ end_line = min(len(lines), error_line + 2)
302
+
303
+ context = '\n'.join([
304
+ f"Line {i + 1}: {lines[i]}"
305
+ for i in range(start_line, end_line)
306
+ ])
307
+
308
+ error_msg = (
309
+ f"\n{'=' * 80}\n"
310
+ f"ERROR: Invalid JSON in {filename}\n"
311
+ f"{'=' * 80}\n"
312
+ f"Location: Line {error_line}, Column {error_col} (char position {error_pos})\n"
313
+ f"Error: {json_err.msg}\n"
314
+ f"\nContext around error:\n{context}\n"
315
+ f"{'=' * 80}\n"
316
+ f"\nPlease fix the JSON syntax error in {filename} at line {error_line}.\n"
317
+ f"Common issues:\n"
318
+ f" - Missing comma between elements\n"
319
+ f" - Trailing comma before closing bracket/brace\n"
320
+ f" - Unescaped quotes in strings\n"
321
+ f" - Missing closing bracket/brace\n"
322
+ f"{'=' * 80}\n"
323
+ )
324
+
325
+ print(error_msg)
326
+
327
+ # Initialize with empty dict to allow application to continue
328
+ # (though functionality will be limited)
329
+ COMMAND_DEFINITIONS = {}
330
+
331
+ # Re-raise with more context
332
+ raise json.JSONDecodeError(
333
+ f"Invalid JSON in {filename}: {json_err.msg}",
334
+ json_err.doc,
335
+ json_err.pos
336
+ ) from json_err
275
337
 
276
338
  except FileNotFoundError:
277
339
  msg = f"ERROR: File {filename} not found."
278
- print(ERROR, msg, debug_level)
340
+ print(msg)
341
+ COMMAND_DEFINITIONS = {}
342
+ raise FileNotFoundError(msg)
343
+ except Exception as e:
344
+ msg = f"ERROR: Unexpected error loading {filename}: {str(e)}"
345
+ print(msg)
346
+ COMMAND_DEFINITIONS = {}
347
+ raise
348
+
349
+
350
+ def validate_json_file(filename: str) -> tuple[bool, str]:
351
+ """
352
+ Validate a JSON file and return status with error details.
353
+
354
+ Returns:
355
+ tuple: (is_valid: bool, message: str)
356
+ """
357
+ try:
358
+ config_path = importlib.resources.files("md_processing") / "data" / filename
359
+ config_str = config_path.read_text(encoding="utf-8")
360
+ json.loads(config_str)
361
+ return True, f"JSON file {filename} is valid"
362
+ except json.JSONDecodeError as e:
363
+ error_msg = (
364
+ f"Invalid JSON at line {e.lineno}, column {e.colno}: {e.msg}\n"
365
+ f"Character position: {e.pos}"
366
+ )
367
+ return False, error_msg
368
+ except Exception as e:
369
+ return False, f"Error reading file: {str(e)}"
370
+
371
+
372
+ def find_json_errors(filename: str, max_errors: int = 10) -> list[str]:
373
+ """
374
+ Attempt to find multiple JSON errors in a file.
375
+
376
+ This function tries to parse the JSON and collect error information.
377
+ """
378
+ errors = []
379
+ try:
380
+ config_path = importlib.resources.files("md_processing") / "data" / filename
381
+ config_str = config_path.read_text(encoding="utf-8")
382
+
383
+ # Try to parse
384
+ json.loads(config_str)
385
+ return ["No errors found - JSON is valid"]
386
+
387
+ except json.JSONDecodeError as e:
388
+ lines = config_str.split('\n')
389
+ error_line = e.lineno - 1 # Convert to 0-indexed
390
+
391
+ # Get context
392
+ start = max(0, error_line - 2)
393
+ end = min(len(lines), error_line + 3)
394
+
395
+ error_context = []
396
+ for i in range(start, end):
397
+ prefix = ">>> " if i == error_line else " "
398
+ error_context.append(f"{prefix}Line {i + 1}: {lines[i]}")
399
+
400
+ error_msg = (
401
+ f"Error at line {e.lineno}, column {e.colno}: {e.msg}\n" +
402
+ "\n".join(error_context)
403
+ )
404
+ errors.append(error_msg)
405
+
406
+ except Exception as e:
407
+ errors.append(f"Unexpected error: {str(e)}")
279
408
 
409
+ return errors
280
410
 
281
411
  def get_command_spec(command: str) -> dict | None:
282
412
  global COMMAND_DEFINITIONS
pyegeria/__init__.py CHANGED
@@ -15,7 +15,7 @@ the server platform and servers.
15
15
  from ._globals import (default_time_out, disable_ssl_warnings, enable_ssl_check,
16
16
  is_debug, max_paging_size, NO_ELEMENTS_FOUND, NO_ASSETS_FOUND, NO_SERVERS_FOUND,
17
17
  NO_CATALOGS_FOUND, NO_GLOSSARIES_FOUND, NO_TERMS_FOUND, NO_CATEGORIES_FOUND, NO_ELEMENT_FOUND,
18
- NO_PROJECTS_FOUND, DEBUG_LEVEL, NO_COLLECTION_FOUND, NO_GUID_RETURNED,
18
+ NO_PROJECTS_FOUND, DEBUG_LEVEL, NO_COLLECTION_FOUND, NO_GUID_RETURNED, COMMENT_TYPES
19
19
  )
20
20
 
21
21
 
pyegeria/_client_new.py CHANGED
@@ -23,7 +23,7 @@ from pyegeria._base_client import BaseClient
23
23
  from pyegeria._exceptions_new import (
24
24
  PyegeriaConnectionException, PyegeriaInvalidParameterException, PyegeriaException
25
25
  )
26
- from pyegeria._globals import max_paging_size, NO_ELEMENTS_FOUND, default_time_out
26
+ from pyegeria._globals import max_paging_size, NO_ELEMENTS_FOUND, default_time_out, COMMENT_TYPES
27
27
  from pyegeria.base_report_formats import get_report_spec_match
28
28
  from pyegeria.base_report_formats import select_report_spec
29
29
  from pyegeria.models import (SearchStringRequestBody, FilterRequestBody, GetRequestBody, NewElementRequestBody,
@@ -920,12 +920,15 @@ class Client2(BaseClient):
920
920
 
921
921
  """
922
922
  if body is None:
923
+ if comment_type not in COMMENT_TYPES:
924
+ context = {"issue": "Invalid comment type"}
925
+ raise PyegeriaInvalidParameterException(context=context)
923
926
  body = {
924
927
  "class": "NewAttachmentRequestBody",
925
928
  "properties": {
926
929
  "class": "CommentProperties",
927
- "qualifiedName": self.make_feedback_qn("Reply", comment_guid),
928
- "desription": comment,
930
+ "qualifiedName": self.make_feedback_qn("Comment", comment_guid),
931
+ "description": comment,
929
932
  "commentType": comment_type
930
933
  }
931
934
  }
@@ -1005,6 +1008,9 @@ class Client2(BaseClient):
1005
1008
 
1006
1009
  """
1007
1010
  if body is None:
1011
+ if comment_type not in COMMENT_TYPES:
1012
+ context = {"issue": "Invalid comment type"}
1013
+ raise PyegeriaInvalidParameterException(context=context)
1008
1014
  body = {
1009
1015
  "class": "NewAttachmentRequestBody",
1010
1016
  "properties": {
@@ -1095,6 +1101,9 @@ class Client2(BaseClient):
1095
1101
 
1096
1102
  """
1097
1103
  if body is None and comment:
1104
+ if comment_type not in COMMENT_TYPES:
1105
+ context = {"issue": "Invalid comment type"}
1106
+ raise PyegeriaInvalidParameterException(context=context)
1098
1107
  body = {
1099
1108
  "class": "UpdateElementRequestBody",
1100
1109
  "mergeUpdate": merge_update,
@@ -1426,7 +1435,7 @@ class Client2(BaseClient):
1426
1435
  """
1427
1436
  loop = asyncio.get_event_loop()
1428
1437
  response = loop.run_until_complete(
1429
- self._async_get_note_log_by_guid(comment_guid, element_type, body, output_format, report_spec)
1438
+ self._async_get_comment_by_guid(comment_guid, element_type, body, output_format, report_spec)
1430
1439
  )
1431
1440
  return response
1432
1441
 
@@ -1707,8 +1716,8 @@ class Client2(BaseClient):
1707
1716
  description: str, optional
1708
1717
  - text of the note log
1709
1718
  body
1710
- - contains the name of the log and text. If present, the contents overridee
1711
- the supplied parameters.
1719
+ - contains the name of the log and text. If present, the contents overrides
1720
+ the supplied parameters. If no element is provided, the property class must be "NewElementRequestBody".
1712
1721
 
1713
1722
  Returns
1714
1723
  -------
@@ -1719,7 +1728,7 @@ class Client2(BaseClient):
1719
1728
  PyegeriaException
1720
1729
  Notes:
1721
1730
  ------
1722
- Sample Body:
1731
+ Sample Body (simple version attaching to an associated element):
1723
1732
 
1724
1733
  {
1725
1734
  "class" : "NewAttachmentRequestBody",
@@ -1740,8 +1749,47 @@ class Client2(BaseClient):
1740
1749
  }
1741
1750
  }
1742
1751
  }
1752
+
1753
+ Full feature version allowing optional standalone use or attachment to an additional element:
1754
+ {
1755
+ "class" : "NewElementRequestBody",
1756
+ "anchorGUID" : "add guid here",
1757
+ "isOwnAnchor": false,
1758
+ "parentGUID": "add guid here",
1759
+ "parentRelationshipTypeName": "add type name here",
1760
+ "parentRelationshipProperties": {
1761
+ "class": "RelationshipElementProperties",
1762
+ "propertyValueMap" : {
1763
+ "description" : {
1764
+ "class": "PrimitiveTypePropertyValue",
1765
+ "typeName": "string",
1766
+ "primitiveValue" : "New description"
1767
+ }
1768
+ }
1769
+ },
1770
+ "parentAtEnd1": false,
1771
+ "properties": {
1772
+ "class": "NoteLogProperties",
1773
+ "qualifiedName": "Add unique name here",
1774
+ "displayName": "Add name here",
1775
+ "description": "Add description here",
1776
+ "additionalProperties": {
1777
+ "propertyName 1": "property value 1",
1778
+ "propertyName 2": "property value 2"
1779
+ },
1780
+ "effectiveFrom": "{{$isoTimestamp}}",
1781
+ "effectiveTo": "{{$isoTimestamp}}"
1782
+ },
1783
+ "externalSourceGUID": "add guid here",
1784
+ "externalSourceName": "add qualified name here",
1785
+ "effectiveTime" : "{{$isoTimestamp}}",
1786
+ "forLineage" : false,
1787
+ "forDuplicateProcessing" : false
1788
+ }
1789
+
1790
+
1743
1791
  """
1744
- if body is None:
1792
+ if body is None and element_guid:
1745
1793
  body = {
1746
1794
  "class": "NewAttachmentRequestBody",
1747
1795
  "properties": {
@@ -1751,6 +1799,17 @@ class Client2(BaseClient):
1751
1799
  "description": description,
1752
1800
  }
1753
1801
  }
1802
+ elif body is None and not element_guid:
1803
+ body = {
1804
+ "class": "NewAElementRequestBody",
1805
+ "properties": {
1806
+ "class": "NoteLogProperties",
1807
+ "displayName": display_name,
1808
+ "qualifiedName": self.make_feedback_qn("NoteLog", element_guid, display_name),
1809
+ "description": description,
1810
+ }
1811
+ }
1812
+
1754
1813
  elif body is None and display_name is None:
1755
1814
  context = {"issue": "Invalid display name and body not provided"}
1756
1815
  raise PyegeriaInvalidParameterException(context=context)
@@ -1815,6 +1874,44 @@ class Client2(BaseClient):
1815
1874
  }
1816
1875
  }
1817
1876
  }
1877
+
1878
+ Full feature version allowing optional standalone use or attachment to an additional element:
1879
+ {
1880
+ "class" : "NewElementRequestBody",
1881
+ "anchorGUID" : "add guid here",
1882
+ "isOwnAnchor": false,
1883
+ "parentGUID": "add guid here",
1884
+ "parentRelationshipTypeName": "add type name here",
1885
+ "parentRelationshipProperties": {
1886
+ "class": "RelationshipElementProperties",
1887
+ "propertyValueMap" : {
1888
+ "description" : {
1889
+ "class": "PrimitiveTypePropertyValue",
1890
+ "typeName": "string",
1891
+ "primitiveValue" : "New description"
1892
+ }
1893
+ }
1894
+ },
1895
+ "parentAtEnd1": false,
1896
+ "properties": {
1897
+ "class": "NoteLogProperties",
1898
+ "qualifiedName": "Add unique name here",
1899
+ "displayName": "Add name here",
1900
+ "description": "Add description here",
1901
+ "additionalProperties": {
1902
+ "propertyName 1": "property value 1",
1903
+ "propertyName 2": "property value 2"
1904
+ },
1905
+ "effectiveFrom": "{{$isoTimestamp}}",
1906
+ "effectiveTo": "{{$isoTimestamp}}"
1907
+ },
1908
+ "externalSourceGUID": "add guid here",
1909
+ "externalSourceName": "add qualified name here",
1910
+ "effectiveTime" : "{{$isoTimestamp}}",
1911
+ "forLineage" : false,
1912
+ "forDuplicateProcessing" : false
1913
+ }
1914
+
1818
1915
  """
1819
1916
  loop = asyncio.get_event_loop()
1820
1917
  response = loop.run_until_complete(
@@ -2208,7 +2305,7 @@ class Client2(BaseClient):
2208
2305
  return response
2209
2306
 
2210
2307
  @dynamic_catch
2211
- def get_note_log_by_name(
2308
+ def get_note_logs_by_name(
2212
2309
  self, filter: str,
2213
2310
  element_type: str = "NoteLog",
2214
2311
  body: dict | FilterRequestBody = None,
@@ -3354,7 +3451,7 @@ class Client2(BaseClient):
3354
3451
  )
3355
3452
 
3356
3453
  @dynamic_catch
3357
- async def _async_get_tag(
3454
+ async def _async_get_tag_by_guid(
3358
3455
  self,
3359
3456
  tag_guid: str,
3360
3457
  body: dict | GetRequestBody = None,
@@ -3396,7 +3493,7 @@ class Client2(BaseClient):
3396
3493
  return response
3397
3494
 
3398
3495
  @dynamic_catch
3399
- def get_tag(
3496
+ def get_tag_by_guid(
3400
3497
  self,
3401
3498
  tag_guid: str,
3402
3499
  body: dict | GetRequestBody = None,
@@ -3427,7 +3524,7 @@ class Client2(BaseClient):
3427
3524
  """
3428
3525
  loop = asyncio.get_event_loop()
3429
3526
  response = loop.run_until_complete(
3430
- self._async_get_tag(tag_guid, body, output_format, report_spec)
3527
+ self._async_get_tag_by_guid(tag_guid, body, output_format, report_spec)
3431
3528
  )
3432
3529
  return response
3433
3530
 
pyegeria/_globals.py CHANGED
@@ -15,13 +15,14 @@ enable_ssl_check = False
15
15
  max_paging_size = 500
16
16
  default_time_out = 30
17
17
  DEBUG_LEVEL = "quiet"
18
- comment_types = (
18
+ COMMENT_TYPES = (
19
+ "STANDARD_COMMENT",
19
20
  "ANSWER",
20
21
  "OTHER",
21
22
  "QUESTION",
22
- "STANDARD_COMMENT",
23
23
  "SUGGESTION",
24
24
  "USAGE_EXPERIENCE",
25
+ "REQUIREMENT"
25
26
  )
26
27
  star_ratings = (
27
28
  "FIVE_STARS",
@@ -348,6 +348,23 @@ base_report_specs = FormatSetDict({
348
348
  )
349
349
  ],
350
350
  ),
351
+ "Comments-DrE": FormatSet(
352
+ target_type="Comments",
353
+ heading="Comments",
354
+ description="Details of a comment.",
355
+ annotations={}, # No specific annotations
356
+ formats=[
357
+ Format(
358
+ types=["ALL"],
359
+ attributes=[
360
+ Column(name='Display Name', key='display_name'),
361
+ Column(name="Qualified Name", key='qualified_name'),
362
+ Column(name="GUID", key='guid'),
363
+ Column(name="Comment", key='description')
364
+ ],
365
+ )
366
+ ],
367
+ ),
351
368
 
352
369
  "ExternalReference": FormatSet(
353
370
  target_type="External Reference",
@@ -202,7 +202,7 @@ async def _async_run_report(
202
202
 
203
203
 
204
204
  def exec_report_spec(
205
- format_set_name: str,
205
+ format_set_name: str | dict,
206
206
  *,
207
207
  output_format: str = "DICT",
208
208
  params: Optional[Dict[str, Any]] = None,
@@ -224,7 +224,10 @@ def exec_report_spec(
224
224
  params = dict(params or {})
225
225
 
226
226
  # Resolve the format set and action
227
- fmt = select_report_spec(format_set_name, output_format)
227
+ if isinstance(format_set_name, dict):
228
+ fmt = format_set_name
229
+ else:
230
+ fmt = select_report_spec(format_set_name, output_format)
228
231
  if not fmt:
229
232
  raise ValueError(
230
233
  f"Output format set '{format_set_name}' does not have a compatible '{output_format}' format."
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyegeria
3
- Version: 5.4.8.6
3
+ Version: 5.4.8.7
4
4
  Summary: A python client for Egeria
5
5
  Author-email: Dan Wolfson <dan.wolfson@pdr-associates.com>
6
6
  License-Expression: Apache-2.0
@@ -90,19 +90,20 @@ commands/tech/list_tech_templates.py,sha256=5hhDJJjrqGyWDPPcFzFeFs-4rsal1M2Bl7EU
90
90
  commands/tech/list_valid_metadata_values.py,sha256=_zgOdq2N6s7GjLd8iEc5xVfplKfOnKZ-ySM-lSdgYn8,6315
91
91
  commands/tech/table_tech_templates.py,sha256=jI1c9YKa3KirArMNXeCRKeaiVdwQSN-ztPqkag6jdZs,9500
92
92
  commands/tech/x_list_related_elements.py,sha256=ynaw792VnbMZ9IXBi5mmG7xBfC0kn0esKiFTsjvLGzc,5900
93
- md_processing/__init__.py,sha256=Tv2JW-jtlYWUSut4bAqGNfHL9LaKlLgSbj_sM98uX6o,7394
94
- md_processing/dr_egeria.py,sha256=WF-3-TtIOUlVpekKcUEJ-LaLwjyyCirsoKJj9dJ_T9E,20824
93
+ md_processing/__init__.py,sha256=2SrcrDsGaetFZgPLjNnDJ7q3t_19FsY-cFLOz5h1A4Q,7758
94
+ md_processing/dr_egeria.py,sha256=tir3svioN0y0O5lbK2LhrRQZ6ZcszJo9jme-czE9788,22174
95
95
  md_processing/data/commands-working.json,sha256=uCo_azcuuYqGm7QffJeCGj7PyZuZRGdu7kKf4XWmMoA,1162560
96
- md_processing/data/commands.json,sha256=AAZepSGa1NF7iSRRhSpUfVO9rv01ylklmI1Z0SfE-6E,1272835
96
+ md_processing/data/commands.json,sha256=1kd-soUijSsNCig9SbENdgCf5Zm1oLADJ1z_QR3AcYQ,1035975
97
97
  md_processing/data/generated_format_sets.json,sha256=80Z9yt8ll4x-gODzOQyGIweKoqfSsVIin9esaKUeKsA,98631
98
98
  md_processing/data/generated_format_sets.py,sha256=2BfRzb5G5n8Cz6VwirQXlBq1fHBISIh4x7jquXg6QEw,36402
99
99
  md_processing/md_commands/__init__.py,sha256=ssEojzFlSYtY2bHqqOoKo8PFaANZ_kq_gIbtlXnuc2s,93
100
100
  md_processing/md_commands/data_designer_commands.py,sha256=ab0uZo4NutKKpwbMnZhZvkyny2jf6lZjx4pJXdOPQ70,65456
101
101
  md_processing/md_commands/ext_ref_commands.py,sha256=jYTD_FsMK0M6pefnkluEpWEcS_VShllMvNFYsZTE3NQ,23558
102
+ md_processing/md_commands/feedback_commands.py,sha256=CgCkFWlJRMXycfK5srElBzN8aqU6mVMv61-fFOgiEz4,32919
102
103
  md_processing/md_commands/glossary_commands.py,sha256=F8BPFL5GlCQ3oSs8svSL5PipzmWBiXpCqUAdKUZhGkY,33373
103
104
  md_processing/md_commands/governance_officer_commands.py,sha256=drq7H-f9J8j1x9Gw2FKi9M92RsF22oX7cu_9JJdzWJ4,26467
104
105
  md_processing/md_commands/product_manager_commands.py,sha256=RPfApQQ4z0dLTBF9jUN1AaxnYAk_Vn6axlzvSiOgMk8,57742
105
- md_processing/md_commands/project_commands.py,sha256=bgMD93Z87zZZn3hxVOXgPFZ4xYhw7yr-NeNzRsj1DOg,17095
106
+ md_processing/md_commands/project_commands.py,sha256=mpQNQ1xj8QpSHQzBe-Egc-WSv_EUmZMoScl5fkeCJuc,17094
106
107
  md_processing/md_commands/solution_architect_commands.py,sha256=Oqtz6nIKA-ZoznZCzevq0rCnsp29j1_mwi1uQoiNyL0,55302
107
108
  md_processing/md_commands/view_commands.py,sha256=AQsjR6whW_mV-_I_Ihq2xCv3dbEXip6EQEpzB0-UiA0,12042
108
109
  md_processing/md_processing_utils/__init__.py,sha256=LxAmxlcji26ziKV4gGar01d95gL9vgToRIeJW8N-Ifs,80
@@ -114,23 +115,23 @@ md_processing/md_processing_utils/gen_format_sets.py,sha256=JoOUT56IEj3jT1StMdMe
114
115
  md_processing/md_processing_utils/generate_dr_help.py,sha256=NKSC2Tf7QzkYkGJD3u_o_Xn9nN9ZvrQU_jPt-R7X3Js,7422
115
116
  md_processing/md_processing_utils/generate_md_cmd_templates.py,sha256=mFenxe9Jq8QivgmI0ZFtO_iu6P6RH_EiNa__CGyDw_0,5809
116
117
  md_processing/md_processing_utils/generate_md_templates.py,sha256=DMnMQ7_LbmQCS8aG-ppHGTu25obOSn4ZzSg7V21k9jo,3547
117
- md_processing/md_processing_utils/md_processing_constants.py,sha256=_j8FSsB1mZ2SsmDaQWaPH8iWKy1ZHYYjzOgcdIoLZPE,21108
118
+ md_processing/md_processing_utils/md_processing_constants.py,sha256=19v2zggks8SijjvUXah9rxR7zuqiHkznU14cWUBcFGs,25827
118
119
  md_processing/md_processing_utils/message_constants.py,sha256=UBf18obM83umM6zplR7ychre4xLRbBnTzidHDZ2gNvM,548
119
- pyegeria/__init__.py,sha256=CRv1k6EjVlE1l0FzASDbIYhZ2GVMr6LR4r8sZASTYg0,4452
120
+ pyegeria/__init__.py,sha256=_Q93impwC_PIz1PQRy-6ka6r28VuiN3ASdDmLHf4m_s,4466
120
121
  pyegeria/_base_client.py,sha256=w2Cid4GZOTwc4dutipk2vy2cs2qj-faMF21eClitFEI,21525
121
122
  pyegeria/_client.py,sha256=hJHn5pD8sbelP_M9dK-M5Z2CYqpRXzXfg1UCgAdQ6dQ,33416
122
- pyegeria/_client_new.py,sha256=0tZbk4dq9yrSq0NHP_Ca2DKjhl4oDSGBqWh8djeOkho,196452
123
+ pyegeria/_client_new.py,sha256=h6seD2_1WSiLSbo-R2LtGyR4x7klKDf-j2Oqql0fqcc,200517
123
124
  pyegeria/_client_new_backup.py,sha256=Kznc1iHG_y1T4D2UlccbgHpczmcQkPSrTut4Wxqq2Rg,187354
124
125
  pyegeria/_deprecated_gov_engine.py,sha256=dWNcwVsE5__dF2u4QiIyQrssozzzOjBbLld8MdpmVCQ,17264
125
126
  pyegeria/_exceptions.py,sha256=1SrnV194V4_YJNnNAU0myTHQ3dhLn4GF2B2gZcj1u90,18153
126
127
  pyegeria/_exceptions_new.py,sha256=DthS0OQ6PPOrmQ8-LJA0xhIy_A4i_RZrppFEvL-nn74,19875
127
- pyegeria/_globals.py,sha256=EY4IR6wnET11GgoxFIllj8fXFrMWBZwl2vsbl1zAfAQ,8520
128
+ pyegeria/_globals.py,sha256=fE0txOo3lkNmVLLAqzvUUxzLtg6LxWt_GjGyImBhrIQ,8538
128
129
  pyegeria/_output_format_models.py,sha256=LB5ryEMF0xBFE38ZP9rAKFRof_4_mNBOPHhRJY0ur2M,15448
129
130
  pyegeria/_output_formats.py,sha256=u8_7zOI5VCWT-hJM5Bc7eCHQZI4kEfOhjzufINivEtg,384
130
131
  pyegeria/_validators.py,sha256=pNxND0dN2qvyuGE52N74l1Ezfrh2p9Hao2ziR_t1ENI,7425
131
132
  pyegeria/asset_catalog_omvs.py,sha256=sBXPgkRe_ZFOunZ-xoZe4qndILf9L0dPRHpQb_95bHw,29030
132
133
  pyegeria/automated_curation.py,sha256=DaEg_qB2TfgveKm4Y0aEKppoWwyUeY96VqjumVDCYN4,143103
133
- pyegeria/base_report_formats.py,sha256=mzEeR1GHdUKto6sRLYH7d4TGZUHhxZeSnn5-1GzGJMc,194321
134
+ pyegeria/base_report_formats.py,sha256=qJumPuAMPolVnNoCVpWqyNNSIPIog--QdyQCHCXnDJQ,194914
134
135
  pyegeria/classification_manager.py,sha256=HO5UcSb65FjeKWx8COD4kNYKd3zUfeGG05TiHV2CYis,282275
135
136
  pyegeria/classification_manager_omvs.py,sha256=CFFEZv9hBPv0UXIwyu5JyGBg_edGlRn5w6MUkPVC4pY,183952
136
137
  pyegeria/collection_manager.py,sha256=bfFQQiqOo2cVf5IqkQxFwZJn-SLhBngCGzJdS7KzncY,239812
@@ -146,7 +147,7 @@ pyegeria/egeria_tech_client.py,sha256=Kk9-0gHbPlftZ03W6_IerOnnAjWMiIsi01RhnQxo41
146
147
  pyegeria/external_links.py,sha256=kYruxxwrN75wLq9BAJLV4tUC5ceQUOjm8gWy3QW7MRM,74466
147
148
  pyegeria/feedback_manager.py,sha256=Y2lUJrb2_mejlKvmnpgRQbHPiSC7nDTRa7P7lky1Jpc,25911
148
149
  pyegeria/feedback_manager_omvs.py,sha256=FYWE-EIQiJ8B0rUkiqr9_cbGXZLDM4PlGsidgpL_D6o,148801
149
- pyegeria/format_set_executor.py,sha256=j5q5EU3jBYcvWYZyz9H-qdYv6sOVz6LtxNQi4yQpbXM,12394
150
+ pyegeria/format_set_executor.py,sha256=daQuhWpT75epp9zbRLBHxAGcY_6dtI7I6Stb4colD0k,12487
150
151
  pyegeria/full_omag_server_config.py,sha256=832EiMX7oeTHQxWf_4NQ4gXze9PMA9Vsx1jn9m9a_Mw,47457
151
152
  pyegeria/glossary_manager.py,sha256=pZYtB-K1WWYEPdlNaPG_qYw5p_Ae6Hu9jQLdWRCwnog,106904
152
153
  pyegeria/governance_officer.py,sha256=VOwt6HMxVhbPEfmQNNAs93qXj-x2PLzO9TZ0lrDJ9Ps,109381
@@ -172,9 +173,9 @@ pyegeria/template_manager_omvs.py,sha256=chBljs1vy5wr9DRAtbvIt4Cob_7HxGfxLkCNlDT
172
173
  pyegeria/utils.py,sha256=xOTxk9PH8ZGZmgIwz_a6rczTVLADLEjucr10ZJTUnY4,9272
173
174
  pyegeria/valid_metadata_omvs.py,sha256=Xq9DqBQvBFFJzaFIRKcVZ2k4gJvSh9yeXs_j-O3vn1w,65050
174
175
  pyegeria/x_action_author_omvs.py,sha256=XyRsUgN-xnWR-cJayzo5RtY4Xv1uBDML4pwaKHrwC1w,6430
175
- pyegeria-5.4.8.6.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
176
- pyegeria-5.4.8.6.dist-info/METADATA,sha256=_9wlFbHxE4BD2AknfdWcTgrwAKiytvShjqnFiHf7j0s,7295
177
- pyegeria-5.4.8.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
178
- pyegeria-5.4.8.6.dist-info/entry_points.txt,sha256=erl7EsY2vrll8DL_wr28FlvoWk7TQ2liioGYej0C2X4,6585
179
- pyegeria-5.4.8.6.dist-info/top_level.txt,sha256=48Mt-O3p8yO7jiEv6-Y9bUsryqJn9BQsiyV0BqSn8tk,32
180
- pyegeria-5.4.8.6.dist-info/RECORD,,
176
+ pyegeria-5.4.8.7.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
177
+ pyegeria-5.4.8.7.dist-info/METADATA,sha256=LcFCdjX5URpt6D06MF-v3aiR_BOg8F2fWktj5OsbQvg,7295
178
+ pyegeria-5.4.8.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
179
+ pyegeria-5.4.8.7.dist-info/entry_points.txt,sha256=erl7EsY2vrll8DL_wr28FlvoWk7TQ2liioGYej0C2X4,6585
180
+ pyegeria-5.4.8.7.dist-info/top_level.txt,sha256=48Mt-O3p8yO7jiEv6-Y9bUsryqJn9BQsiyV0BqSn8tk,32
181
+ pyegeria-5.4.8.7.dist-info/RECORD,,