pyegeria 5.4.8.6__py3-none-any.whl → 5.4.8.8__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. examples/Coco_config/README.md +19 -0
  2. examples/Coco_config/__init__.py +4 -0
  3. examples/Coco_config/config_cocoMDS1.py +108 -0
  4. examples/Coco_config/config_cocoMDS2.py +126 -0
  5. examples/Coco_config/config_cocoMDS3.py +109 -0
  6. examples/Coco_config/config_cocoMDS4.py +91 -0
  7. examples/Coco_config/config_cocoMDS5.py +116 -0
  8. examples/Coco_config/config_cocoMDS6.py +114 -0
  9. examples/Coco_config/config_cocoMDSx.py +119 -0
  10. examples/Coco_config/config_cocoView1.py +155 -0
  11. examples/Coco_config/config_coco_core.py +255 -0
  12. examples/Coco_config/config_coco_datalake.py +450 -0
  13. examples/Coco_config/config_exchangeDL01.py +106 -0
  14. examples/Coco_config/config_governDL01.py +80 -0
  15. examples/Coco_config/config_monitorDev01.py +60 -0
  16. examples/Coco_config/config_monitorGov01.py +194 -0
  17. examples/Coco_config/globals.py +154 -0
  18. examples/GeoSpatial Products Example.py +535 -0
  19. examples/Jupyter Notebooks/P-egeria-server-config.ipynb +2137 -0
  20. examples/Jupyter Notebooks/README.md +2 -0
  21. examples/Jupyter Notebooks/common/P-environment-check.ipynb +115 -0
  22. examples/Jupyter Notebooks/common/__init__.py +14 -0
  23. examples/Jupyter Notebooks/common/common-functions.ipynb +4694 -0
  24. examples/Jupyter Notebooks/common/environment-check.ipynb +53 -0
  25. examples/Jupyter Notebooks/common/globals.ipynb +184 -0
  26. examples/Jupyter Notebooks/common/globals.py +154 -0
  27. examples/Jupyter Notebooks/common/orig_globals.py +152 -0
  28. examples/format_sets/all_format_sets.json +910 -0
  29. examples/format_sets/custom_format_sets.json +268 -0
  30. examples/format_sets/subset_format_sets.json +187 -0
  31. examples/format_sets_save_load_example.py +294 -0
  32. examples/output_formats_example.py +193 -0
  33. md_processing/__init__.py +6 -0
  34. md_processing/data/commands.json +30640 -59579
  35. md_processing/dr_egeria.py +18 -0
  36. md_processing/md_commands/feedback_commands.py +763 -0
  37. md_processing/md_commands/project_commands.py +1 -1
  38. md_processing/md_processing_utils/md_processing_constants.py +134 -4
  39. pyegeria/__init__.py +1 -1
  40. pyegeria/_client_new.py +109 -12
  41. pyegeria/_globals.py +3 -2
  42. pyegeria/base_report_formats.py +17 -0
  43. pyegeria/format_set_executor.py +5 -2
  44. {pyegeria-5.4.8.6.dist-info → pyegeria-5.4.8.8.dist-info}/METADATA +1 -1
  45. {pyegeria-5.4.8.6.dist-info → pyegeria-5.4.8.8.dist-info}/RECORD +49 -16
  46. {pyegeria-5.4.8.6.dist-info → pyegeria-5.4.8.8.dist-info}/top_level.txt +1 -0
  47. {pyegeria-5.4.8.6.dist-info → pyegeria-5.4.8.8.dist-info}/WHEEL +0 -0
  48. {pyegeria-5.4.8.6.dist-info → pyegeria-5.4.8.8.dist-info}/entry_points.txt +0 -0
  49. {pyegeria-5.4.8.6.dist-info → pyegeria-5.4.8.8.dist-info}/licenses/LICENSE +0 -0
@@ -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.8
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,52 @@ 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
+ examples/GeoSpatial Products Example.py,sha256=nc3V0USKBhnBEVDFm49HAH3sDUbmdBfomzxTAXxX4X4,20509
94
+ examples/format_sets_save_load_example.py,sha256=zYmP8TT1oRBSh_iA6C6bg77SezGRg-YmMBFl2xP_fbY,10358
95
+ examples/output_formats_example.py,sha256=4Kvw1cO7Ry2B3939dUnlyF20eTT-G3j5QswjIsSf4wY,6842
96
+ examples/Coco_config/README.md,sha256=esOnItNjjk06ojF_cJoIrP07n8-gaGYej8TNUNlkkec,926
97
+ examples/Coco_config/__init__.py,sha256=ot3LsIUH5nGOJIf2NNZRyK604DRQHOohkGZ9qtf_SE4,45
98
+ examples/Coco_config/config_cocoMDS1.py,sha256=8xCOCQPCoz3t6roxAkfdCqBDJjEFamqXp7-I9bDks14,3861
99
+ examples/Coco_config/config_cocoMDS2.py,sha256=eDIOZpWgMwPl7vpT4J31R5K89OmnU5ryDG1eTwEsTAU,5040
100
+ examples/Coco_config/config_cocoMDS3.py,sha256=44hqsnP8q-JgiMyz5OVL3uSgXRNS6QZbzT6hsFqO3Po,3584
101
+ examples/Coco_config/config_cocoMDS4.py,sha256=MOkv7gqD-THf0rDKAd0dXMB1l5ZTF7QHQv4PbHhXxao,2774
102
+ examples/Coco_config/config_cocoMDS5.py,sha256=lDjzAgoycVaclYDJg_JCtD2MVoqqV3kq7JBjPXVyZyI,3093
103
+ examples/Coco_config/config_cocoMDS6.py,sha256=gVX0XqVV9fuNxdsRmFQnqjuaFmezhlL9WlnZPdgTbM0,3803
104
+ examples/Coco_config/config_cocoMDSx.py,sha256=Rqt1EEiqvhld-z51Z3Dzy248jZk8n0oJQ2OzzhSz8Zk,4111
105
+ examples/Coco_config/config_cocoView1.py,sha256=2I9SoDnQ8g0fU8_BDm31O2G8LC4DPH0kM8WgWum_3a4,5384
106
+ examples/Coco_config/config_coco_core.py,sha256=-1xVHx6ga0Yv4f7tVTRBTG9hiRFN-b9QK6EcukXDNK0,8919
107
+ examples/Coco_config/config_coco_datalake.py,sha256=GQojkwTNb1kBGVDBtpHm0Xm970LLIQodcNl9daIhvk4,14996
108
+ examples/Coco_config/config_exchangeDL01.py,sha256=mN6nASqLX_dH3-AagHAIbl1tVuSYIlFKslno_nPs3ps,3287
109
+ examples/Coco_config/config_governDL01.py,sha256=peZ8VTOlIctqFQmwpBPkzfkQuHYerUwh3ewvq09_Jz0,2341
110
+ examples/Coco_config/config_monitorDev01.py,sha256=cAdxWBw3yKFY4QbGLq3vxZ_kPg2MiAPz27U4XIlTpVE,1896
111
+ examples/Coco_config/config_monitorGov01.py,sha256=Xsq4MZF3DfrKTO1sUOIzar4homvQBWj0v9gwdHxdr-A,7148
112
+ examples/Coco_config/globals.py,sha256=fpaUhvvxKS4LE7sHvHhmtdz8ErPg-ZnidcviWfZMIKQ,5709
113
+ examples/Jupyter Notebooks/P-egeria-server-config.ipynb,sha256=IOuDa3Q6SqiIyXEDGMWC8y_DzSaGoU4mWxJxuWL-MzY,111675
114
+ examples/Jupyter Notebooks/README.md,sha256=1ZqEQWu3nrNcf8KG2b7q08OIx2J6iZ6sPyuwSdkRy40,170
115
+ examples/Jupyter Notebooks/common/P-environment-check.ipynb,sha256=fX34h-QZRphgAlzR0GGZttl78KxJlQP_2q4kNiSZhW8,2942
116
+ examples/Jupyter Notebooks/common/__init__.py,sha256=iA_4Q_V3MbNseuq7PFWunX9GmJo3FvJhz-fv7xpIGbU,407
117
+ examples/Jupyter Notebooks/common/common-functions.ipynb,sha256=ctOqx8zG-Yk5elPMWgM6lNx2hUCFSVMzYIjxWYwsGvs,276828
118
+ examples/Jupyter Notebooks/common/environment-check.ipynb,sha256=zQtXLCQBNvhIX9_eOviXHaX3MQ1g5Pgx-aGElFgckAA,1449
119
+ examples/Jupyter Notebooks/common/globals.ipynb,sha256=egoxpNUevuSeNTBV1d909u6W9NzfDPKcbgY_aZgX4Sg,7845
120
+ examples/Jupyter Notebooks/common/globals.py,sha256=Gn4Iij9DvVjinGqUPqtijfhewnU0vuramdmtk-Fs-8U,5710
121
+ examples/Jupyter Notebooks/common/orig_globals.py,sha256=VtwTB336p9WyNJaFEtE9keo9vdDl-GnvkZPaKiVa1VA,5659
122
+ examples/format_sets/all_format_sets.json,sha256=rPesOiP-Vgooe78Y_epuQjyk_KrabTV6icHwXF73p3s,19991
123
+ examples/format_sets/custom_format_sets.json,sha256=X3NG9Qe8L0KlfrUfjd2ju15I2IayV1mFEQxC4rdW2Fg,5614
124
+ examples/format_sets/subset_format_sets.json,sha256=cRgpGuuQht9KkJR6nLxQ8GaEAZtc-ZmbCgU8syHcNkc,4009
125
+ md_processing/__init__.py,sha256=2SrcrDsGaetFZgPLjNnDJ7q3t_19FsY-cFLOz5h1A4Q,7758
126
+ md_processing/dr_egeria.py,sha256=tir3svioN0y0O5lbK2LhrRQZ6ZcszJo9jme-czE9788,22174
95
127
  md_processing/data/commands-working.json,sha256=uCo_azcuuYqGm7QffJeCGj7PyZuZRGdu7kKf4XWmMoA,1162560
96
- md_processing/data/commands.json,sha256=AAZepSGa1NF7iSRRhSpUfVO9rv01ylklmI1Z0SfE-6E,1272835
128
+ md_processing/data/commands.json,sha256=1kd-soUijSsNCig9SbENdgCf5Zm1oLADJ1z_QR3AcYQ,1035975
97
129
  md_processing/data/generated_format_sets.json,sha256=80Z9yt8ll4x-gODzOQyGIweKoqfSsVIin9esaKUeKsA,98631
98
130
  md_processing/data/generated_format_sets.py,sha256=2BfRzb5G5n8Cz6VwirQXlBq1fHBISIh4x7jquXg6QEw,36402
99
131
  md_processing/md_commands/__init__.py,sha256=ssEojzFlSYtY2bHqqOoKo8PFaANZ_kq_gIbtlXnuc2s,93
100
132
  md_processing/md_commands/data_designer_commands.py,sha256=ab0uZo4NutKKpwbMnZhZvkyny2jf6lZjx4pJXdOPQ70,65456
101
133
  md_processing/md_commands/ext_ref_commands.py,sha256=jYTD_FsMK0M6pefnkluEpWEcS_VShllMvNFYsZTE3NQ,23558
134
+ md_processing/md_commands/feedback_commands.py,sha256=CgCkFWlJRMXycfK5srElBzN8aqU6mVMv61-fFOgiEz4,32919
102
135
  md_processing/md_commands/glossary_commands.py,sha256=F8BPFL5GlCQ3oSs8svSL5PipzmWBiXpCqUAdKUZhGkY,33373
103
136
  md_processing/md_commands/governance_officer_commands.py,sha256=drq7H-f9J8j1x9Gw2FKi9M92RsF22oX7cu_9JJdzWJ4,26467
104
137
  md_processing/md_commands/product_manager_commands.py,sha256=RPfApQQ4z0dLTBF9jUN1AaxnYAk_Vn6axlzvSiOgMk8,57742
105
- md_processing/md_commands/project_commands.py,sha256=bgMD93Z87zZZn3hxVOXgPFZ4xYhw7yr-NeNzRsj1DOg,17095
138
+ md_processing/md_commands/project_commands.py,sha256=mpQNQ1xj8QpSHQzBe-Egc-WSv_EUmZMoScl5fkeCJuc,17094
106
139
  md_processing/md_commands/solution_architect_commands.py,sha256=Oqtz6nIKA-ZoznZCzevq0rCnsp29j1_mwi1uQoiNyL0,55302
107
140
  md_processing/md_commands/view_commands.py,sha256=AQsjR6whW_mV-_I_Ihq2xCv3dbEXip6EQEpzB0-UiA0,12042
108
141
  md_processing/md_processing_utils/__init__.py,sha256=LxAmxlcji26ziKV4gGar01d95gL9vgToRIeJW8N-Ifs,80
@@ -114,23 +147,23 @@ md_processing/md_processing_utils/gen_format_sets.py,sha256=JoOUT56IEj3jT1StMdMe
114
147
  md_processing/md_processing_utils/generate_dr_help.py,sha256=NKSC2Tf7QzkYkGJD3u_o_Xn9nN9ZvrQU_jPt-R7X3Js,7422
115
148
  md_processing/md_processing_utils/generate_md_cmd_templates.py,sha256=mFenxe9Jq8QivgmI0ZFtO_iu6P6RH_EiNa__CGyDw_0,5809
116
149
  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
150
+ md_processing/md_processing_utils/md_processing_constants.py,sha256=19v2zggks8SijjvUXah9rxR7zuqiHkznU14cWUBcFGs,25827
118
151
  md_processing/md_processing_utils/message_constants.py,sha256=UBf18obM83umM6zplR7ychre4xLRbBnTzidHDZ2gNvM,548
119
- pyegeria/__init__.py,sha256=CRv1k6EjVlE1l0FzASDbIYhZ2GVMr6LR4r8sZASTYg0,4452
152
+ pyegeria/__init__.py,sha256=_Q93impwC_PIz1PQRy-6ka6r28VuiN3ASdDmLHf4m_s,4466
120
153
  pyegeria/_base_client.py,sha256=w2Cid4GZOTwc4dutipk2vy2cs2qj-faMF21eClitFEI,21525
121
154
  pyegeria/_client.py,sha256=hJHn5pD8sbelP_M9dK-M5Z2CYqpRXzXfg1UCgAdQ6dQ,33416
122
- pyegeria/_client_new.py,sha256=0tZbk4dq9yrSq0NHP_Ca2DKjhl4oDSGBqWh8djeOkho,196452
155
+ pyegeria/_client_new.py,sha256=h6seD2_1WSiLSbo-R2LtGyR4x7klKDf-j2Oqql0fqcc,200517
123
156
  pyegeria/_client_new_backup.py,sha256=Kznc1iHG_y1T4D2UlccbgHpczmcQkPSrTut4Wxqq2Rg,187354
124
157
  pyegeria/_deprecated_gov_engine.py,sha256=dWNcwVsE5__dF2u4QiIyQrssozzzOjBbLld8MdpmVCQ,17264
125
158
  pyegeria/_exceptions.py,sha256=1SrnV194V4_YJNnNAU0myTHQ3dhLn4GF2B2gZcj1u90,18153
126
159
  pyegeria/_exceptions_new.py,sha256=DthS0OQ6PPOrmQ8-LJA0xhIy_A4i_RZrppFEvL-nn74,19875
127
- pyegeria/_globals.py,sha256=EY4IR6wnET11GgoxFIllj8fXFrMWBZwl2vsbl1zAfAQ,8520
160
+ pyegeria/_globals.py,sha256=fE0txOo3lkNmVLLAqzvUUxzLtg6LxWt_GjGyImBhrIQ,8538
128
161
  pyegeria/_output_format_models.py,sha256=LB5ryEMF0xBFE38ZP9rAKFRof_4_mNBOPHhRJY0ur2M,15448
129
162
  pyegeria/_output_formats.py,sha256=u8_7zOI5VCWT-hJM5Bc7eCHQZI4kEfOhjzufINivEtg,384
130
163
  pyegeria/_validators.py,sha256=pNxND0dN2qvyuGE52N74l1Ezfrh2p9Hao2ziR_t1ENI,7425
131
164
  pyegeria/asset_catalog_omvs.py,sha256=sBXPgkRe_ZFOunZ-xoZe4qndILf9L0dPRHpQb_95bHw,29030
132
165
  pyegeria/automated_curation.py,sha256=DaEg_qB2TfgveKm4Y0aEKppoWwyUeY96VqjumVDCYN4,143103
133
- pyegeria/base_report_formats.py,sha256=mzEeR1GHdUKto6sRLYH7d4TGZUHhxZeSnn5-1GzGJMc,194321
166
+ pyegeria/base_report_formats.py,sha256=qJumPuAMPolVnNoCVpWqyNNSIPIog--QdyQCHCXnDJQ,194914
134
167
  pyegeria/classification_manager.py,sha256=HO5UcSb65FjeKWx8COD4kNYKd3zUfeGG05TiHV2CYis,282275
135
168
  pyegeria/classification_manager_omvs.py,sha256=CFFEZv9hBPv0UXIwyu5JyGBg_edGlRn5w6MUkPVC4pY,183952
136
169
  pyegeria/collection_manager.py,sha256=bfFQQiqOo2cVf5IqkQxFwZJn-SLhBngCGzJdS7KzncY,239812
@@ -146,7 +179,7 @@ pyegeria/egeria_tech_client.py,sha256=Kk9-0gHbPlftZ03W6_IerOnnAjWMiIsi01RhnQxo41
146
179
  pyegeria/external_links.py,sha256=kYruxxwrN75wLq9BAJLV4tUC5ceQUOjm8gWy3QW7MRM,74466
147
180
  pyegeria/feedback_manager.py,sha256=Y2lUJrb2_mejlKvmnpgRQbHPiSC7nDTRa7P7lky1Jpc,25911
148
181
  pyegeria/feedback_manager_omvs.py,sha256=FYWE-EIQiJ8B0rUkiqr9_cbGXZLDM4PlGsidgpL_D6o,148801
149
- pyegeria/format_set_executor.py,sha256=j5q5EU3jBYcvWYZyz9H-qdYv6sOVz6LtxNQi4yQpbXM,12394
182
+ pyegeria/format_set_executor.py,sha256=daQuhWpT75epp9zbRLBHxAGcY_6dtI7I6Stb4colD0k,12487
150
183
  pyegeria/full_omag_server_config.py,sha256=832EiMX7oeTHQxWf_4NQ4gXze9PMA9Vsx1jn9m9a_Mw,47457
151
184
  pyegeria/glossary_manager.py,sha256=pZYtB-K1WWYEPdlNaPG_qYw5p_Ae6Hu9jQLdWRCwnog,106904
152
185
  pyegeria/governance_officer.py,sha256=VOwt6HMxVhbPEfmQNNAs93qXj-x2PLzO9TZ0lrDJ9Ps,109381
@@ -172,9 +205,9 @@ pyegeria/template_manager_omvs.py,sha256=chBljs1vy5wr9DRAtbvIt4Cob_7HxGfxLkCNlDT
172
205
  pyegeria/utils.py,sha256=xOTxk9PH8ZGZmgIwz_a6rczTVLADLEjucr10ZJTUnY4,9272
173
206
  pyegeria/valid_metadata_omvs.py,sha256=Xq9DqBQvBFFJzaFIRKcVZ2k4gJvSh9yeXs_j-O3vn1w,65050
174
207
  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,,
208
+ pyegeria-5.4.8.8.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
209
+ pyegeria-5.4.8.8.dist-info/METADATA,sha256=8WqvNOSaCuirDp9vrVmziijPJjq1RdKz12jDeh1fkQE,7295
210
+ pyegeria-5.4.8.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
211
+ pyegeria-5.4.8.8.dist-info/entry_points.txt,sha256=erl7EsY2vrll8DL_wr28FlvoWk7TQ2liioGYej0C2X4,6585
212
+ pyegeria-5.4.8.8.dist-info/top_level.txt,sha256=79GSLIQLdnCT1ApFEbFYr2flWPPANEUlnvMZXWn4fng,41
213
+ pyegeria-5.4.8.8.dist-info/RECORD,,
@@ -1,3 +1,4 @@
1
1
  commands
2
+ examples
2
3
  md_processing
3
4
  pyegeria