pyegeria 5.4.0.20__py3-none-any.whl → 5.4.0.23__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 (121) hide show
  1. commands/cat/.DS_Store +0 -0
  2. commands/cat/.env +8 -0
  3. commands/cat/debug_log.log +0 -0
  4. commands/cat/list_collections.py +15 -6
  5. commands/cat/list_format_set.py +90 -85
  6. commands/cat/logs/pyegeria.log +136 -0
  7. commands/cli/debug_log.log +0 -0
  8. commands/ops/logs/pyegeria.log +0 -0
  9. md_processing/.DS_Store +0 -0
  10. md_processing/dr-egeria-outbox/Collections-2025-08-12-13-30-37.md +163 -0
  11. md_processing/dr-egeria-outbox/Collections-2025-08-12-13-35-58.md +474 -0
  12. md_processing/dr_egeria_inbox/Derive-Dr-Gov-Defs.md +8 -0
  13. md_processing/dr_egeria_inbox/Dr.Egeria Templates.md +873 -0
  14. md_processing/dr_egeria_inbox/arch_test.md +57 -0
  15. md_processing/dr_egeria_inbox/archive/dr_egeria_intro.md +254 -0
  16. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_more_terms.md +696 -0
  17. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part1.md +254 -0
  18. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part2.md +298 -0
  19. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part3.md +608 -0
  20. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part4.md +94 -0
  21. md_processing/dr_egeria_inbox/archive/freddie_intro.md +284 -0
  22. md_processing/dr_egeria_inbox/archive/freddie_intro_orig.md +275 -0
  23. md_processing/dr_egeria_inbox/archive/test-term.md +110 -0
  24. md_processing/dr_egeria_inbox/cat_test.md +100 -0
  25. md_processing/dr_egeria_inbox/collections.md +39 -0
  26. md_processing/dr_egeria_inbox/data_designer_debug.log +6 -0
  27. md_processing/dr_egeria_inbox/data_designer_out.md +60 -0
  28. md_processing/dr_egeria_inbox/data_designer_search_test.md +11 -0
  29. md_processing/dr_egeria_inbox/data_field.md +54 -0
  30. md_processing/dr_egeria_inbox/data_spec.md +77 -0
  31. md_processing/dr_egeria_inbox/data_spec_test.md +2406 -0
  32. md_processing/dr_egeria_inbox/data_test.md +179 -0
  33. md_processing/dr_egeria_inbox/data_test2.md +429 -0
  34. md_processing/dr_egeria_inbox/data_test3.md +462 -0
  35. md_processing/dr_egeria_inbox/dr_egeria_data_designer_1.md +124 -0
  36. md_processing/dr_egeria_inbox/dr_egeria_intro_categories.md +168 -0
  37. md_processing/dr_egeria_inbox/dr_egeria_intro_part1.md +280 -0
  38. md_processing/dr_egeria_inbox/dr_egeria_intro_part2.md +313 -0
  39. md_processing/dr_egeria_inbox/dr_egeria_intro_part3.md +1073 -0
  40. md_processing/dr_egeria_inbox/dr_egeria_isc1.md +44 -0
  41. md_processing/dr_egeria_inbox/generated_help_report.md +9 -0
  42. md_processing/dr_egeria_inbox/glossary_list.md +5 -0
  43. md_processing/dr_egeria_inbox/glossary_search_test.md +40 -0
  44. md_processing/dr_egeria_inbox/glossary_test1.md +324 -0
  45. md_processing/dr_egeria_inbox/gov_def.md +424 -0
  46. md_processing/dr_egeria_inbox/gov_def2.md +447 -0
  47. md_processing/dr_egeria_inbox/product.md +50 -0
  48. md_processing/dr_egeria_inbox/rel.md +8 -0
  49. md_processing/dr_egeria_inbox/sb.md +119 -0
  50. md_processing/dr_egeria_inbox/solution-components.md +136 -0
  51. md_processing/dr_egeria_inbox/solution_blueprints.md +118 -0
  52. md_processing/dr_egeria_inbox/synonym_test.md +42 -0
  53. md_processing/dr_egeria_inbox/t2.md +268 -0
  54. md_processing/dr_egeria_outbox/.obsidian/app.json +1 -0
  55. md_processing/dr_egeria_outbox/.obsidian/appearance.json +1 -0
  56. md_processing/dr_egeria_outbox/.obsidian/community-plugins.json +6 -0
  57. md_processing/dr_egeria_outbox/.obsidian/core-plugins.json +31 -0
  58. md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/data.json +10 -0
  59. md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/main.js +4459 -0
  60. md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/manifest.json +10 -0
  61. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/data.json +3 -0
  62. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/main.js +153 -0
  63. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/manifest.json +11 -0
  64. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/styles.css +1 -0
  65. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/main.js +500 -0
  66. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/manifest.json +12 -0
  67. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/styles.css +1 -0
  68. md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/main.js +37 -0
  69. md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/manifest.json +11 -0
  70. md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/styles.css +220 -0
  71. md_processing/dr_egeria_outbox/.obsidian/types.json +28 -0
  72. md_processing/dr_egeria_outbox/.obsidian/workspace.json +220 -0
  73. md_processing/dr_egeria_outbox/Untitled.canvas +1 -0
  74. md_processing/dr_egeria_outbox/friday/processed-2025-07-18 15:00-product.md +62 -0
  75. md_processing/dr_egeria_outbox/friday/processed-2025-07-18 15:13-product.md +62 -0
  76. md_processing/dr_egeria_outbox/friday/processed-2025-07-20 13:23-product.md +47 -0
  77. md_processing/dr_egeria_outbox/friday/processed-2025-08-01 11:55-data_test3.md +503 -0
  78. md_processing/dr_egeria_outbox/monday/processed-2025-07-14 12:38-data_designer_out.md +663 -0
  79. md_processing/dr_egeria_outbox/monday/processed-2025-07-21 10:52-generated_help_report.md +2744 -0
  80. md_processing/dr_egeria_outbox/monday/processed-2025-07-21 18:38-collections.md +62 -0
  81. md_processing/dr_egeria_outbox/monday/processed-2025-08-01 11:34-gov_def.md +444 -0
  82. md_processing/dr_egeria_outbox/processed-2025-08-03 16:05-glossary_list.md +37 -0
  83. md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 14:55-product.md +77 -0
  84. md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 15:05-product.md +75 -0
  85. md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 15:11-product.md +74 -0
  86. md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 20:40-collections.md +49 -0
  87. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 15:00-Derive-Dr-Gov-Defs.md +719 -0
  88. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:13-Derive-Dr-Gov-Defs.md +41 -0
  89. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:14-Derive-Dr-Gov-Defs.md +33 -0
  90. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:50-Derive-Dr-Gov-Defs.md +192 -0
  91. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 22:08-gov_def2.md +486 -0
  92. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 22:10-gov_def2.md +486 -0
  93. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 08:53-gov_def2.md +486 -0
  94. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 08:54-gov_def2.md +486 -0
  95. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:03-gov_def2.md +486 -0
  96. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:06-gov_def2.md +486 -0
  97. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:10-gov_def2.md +486 -0
  98. md_processing/dr_egeria_outbox/tuesday/processed-2025-07-16 19:15-gov_def2.md +527 -0
  99. md_processing/dr_egeria_outbox/tuesday/processed-2025-07-17 12:08-gov_def2.md +527 -0
  100. md_processing/dr_egeria_outbox/tuesday/processed-2025-07-17 14:27-gov_def2.md +485 -0
  101. md_processing/md_processing_utils/debug_log.log +0 -0
  102. md_processing/md_processing_utils/solution_architect_log.log +0 -0
  103. pyegeria/.DS_Store +0 -0
  104. pyegeria/__init__.py +2 -2
  105. pyegeria/_client_new.py +392 -98
  106. pyegeria/_exceptions_new.py +16 -13
  107. pyegeria/_output_format_models.py +22 -17
  108. pyegeria/_output_formats.py +107 -34
  109. pyegeria/collection_manager.py +703 -1429
  110. pyegeria/collection_manager_omvs.py +48 -19
  111. pyegeria/egeria_cat_client.py +1 -1
  112. pyegeria/egeria_client.py +6 -0
  113. pyegeria/egeria_tech_client.py +6 -1
  114. pyegeria/governance_officer.py +2515 -0
  115. pyegeria/models.py +23 -6
  116. pyegeria/output_formatter.py +298 -79
  117. {pyegeria-5.4.0.20.dist-info → pyegeria-5.4.0.23.dist-info}/METADATA +1 -1
  118. {pyegeria-5.4.0.20.dist-info → pyegeria-5.4.0.23.dist-info}/RECORD +121 -19
  119. {pyegeria-5.4.0.20.dist-info → pyegeria-5.4.0.23.dist-info}/LICENSE +0 -0
  120. {pyegeria-5.4.0.20.dist-info → pyegeria-5.4.0.23.dist-info}/WHEEL +0 -0
  121. {pyegeria-5.4.0.20.dist-info → pyegeria-5.4.0.23.dist-info}/entry_points.txt +0 -0
@@ -16,7 +16,7 @@ from pyegeria._client import Client
16
16
  from pyegeria._globals import NO_ELEMENTS_FOUND, NO_GUID_RETURNED, NO_MEMBERS_FOUND
17
17
  from pyegeria._validators import validate_guid, validate_search_string
18
18
  from pyegeria.output_formatter import (generate_output,
19
- _extract_referenceable_properties)
19
+ _extract_referenceable_properties, get_required_relationships)
20
20
  from pyegeria.utils import body_slimmer, dynamic_catch
21
21
 
22
22
 
@@ -6431,34 +6431,63 @@ class CollectionManager(Client2):
6431
6431
  return resp
6432
6432
 
6433
6433
 
6434
- def _extract_collection_properties(self, element: dict) -> dict:
6434
+ def _extract_collection_properties(self, element: dict, columns_struct: dict) -> dict:
6435
6435
  """
6436
- Extract common properties from a collection element.
6436
+ Extract common properties from a collection element and populate into the provided columns_struct.
6437
6437
 
6438
6438
  Args:
6439
6439
  element (dict): The collection element
6440
+ columns_struct (dict): The columns structure to populate
6440
6441
 
6441
6442
  Returns:
6442
- dict: Dictionary of extracted properties
6443
+ dict: columns_struct with column 'value' fields populated
6443
6444
  """
6444
-
6445
- props = _extract_referenceable_properties(element)
6446
- classification_names = ""
6447
- # classifications = element['elementHeader'].get("classifications", [])
6448
- for classification in props['classifications']:
6449
- classification_names += f"{classification['classificationName']}, "
6450
- props["classifications"] = classification_names[:-2] # why?
6451
-
6452
- props['mermaid'] = element.get('mermaidGraph', "") or ""
6453
-
6445
+ col_data = columns_struct
6446
+ # Populate display/qualified/description etc. from properties via output formatter util not available here,
6447
+ # so we do minimal direct mapping for OMVS variant.
6448
+ props = element.get('properties', {}) or {}
6449
+ columns_list = col_data.get('formats', {}).get('columns', [])
6450
+
6451
+ # Header props
6452
+ header_props = _extract_referenceable_properties(element)
6453
+ for column in columns_list:
6454
+ key = column.get('key')
6455
+ # from element.properties (camelCase); keys here are snake_case or GUID
6456
+ if isinstance(key, str):
6457
+ if key.lower() == 'guid':
6458
+ column['value'] = header_props.get('GUID')
6459
+ elif key in header_props:
6460
+ column['value'] = header_props.get(key)
6461
+ else:
6462
+ # simple camelCase mapping inline to reduce imports here
6463
+ snake_parts = key.split('_')
6464
+ camel = snake_parts[0] + ''.join([p.capitalize() if p.lower() != 'guid' else 'GUID' for p in snake_parts[1:]])
6465
+ if camel in props:
6466
+ column['value'] = props.get(camel)
6467
+
6468
+ # Mermaid graph
6469
+ for column in columns_list:
6470
+ if column.get('key') == 'mermaid':
6471
+ column['value'] = element.get('mermaidGraph', '') or ''
6472
+ break
6473
+
6474
+ # Members list (uses API call)
6454
6475
  member_names = ""
6455
- members = self.get_member_list(collection_guid=props["GUID"])
6476
+ members = self.get_member_list(collection_guid=header_props.get('GUID'))
6456
6477
  if isinstance(members, list):
6457
6478
  for member in members:
6458
6479
  member_names += f"{member['qualifiedName']}, "
6459
- props['members'] = member_names[:-2]
6460
- logger.trace(f"Extracted properties: {props}")
6461
- return props
6480
+ member_names = member_names[:-2]
6481
+ for column in columns_list:
6482
+ if column.get('key') == 'members':
6483
+ column['value'] = member_names
6484
+ break
6485
+
6486
+ # Populate any additional requested relationship-based columns generically
6487
+ col_data = get_required_relationships(element, col_data)
6488
+
6489
+ logger.trace(f"Extracted/Populated columns: {col_data}")
6490
+ return col_data
6462
6491
 
6463
6492
 
6464
6493
  def _generate_collection_output(self, elements: dict|list[dict], filter: Optional[str],
@@ -6487,7 +6516,7 @@ class CollectionManager(Client2):
6487
6516
  output_formats = select_output_format_set(output_format_set, output_format)
6488
6517
  if isinstance(output_format_set, dict):
6489
6518
  output_formats = get_output_format_type_match(output_format_set, output_format)
6490
- # If no output_format was set, then use the classification_name to lookup the output format
6519
+ # If no output_format was set, then use the collection_type to lookup the output format
6491
6520
  elif classification_name:
6492
6521
  output_formats = select_output_format_set(classification_name, output_format)
6493
6522
  else:
@@ -8,7 +8,7 @@ AssetCatalog, CollectionManager, GlossaryManager, and ProjectManager.
8
8
  """
9
9
  from pyegeria.egeria_my_client import EgeriaMy
10
10
  from pyegeria.asset_catalog_omvs import AssetCatalog
11
- from pyegeria.collection_manager_omvs import CollectionManager
11
+ from pyegeria.collection_manager import CollectionManager
12
12
  from pyegeria.glossary_manager_omvs import GlossaryManager
13
13
  from pyegeria.project_manager_omvs import ProjectManager
14
14
 
pyegeria/egeria_client.py CHANGED
@@ -15,6 +15,7 @@ for all use cases..using the more role based clients is often appropriate:
15
15
  from pyegeria.asset_catalog_omvs import AssetCatalog
16
16
  from pyegeria.collection_manager_omvs import CollectionManager
17
17
  from pyegeria.glossary_manager_omvs import GlossaryManager
18
+ from pyegeria.governance_officer import GovernanceOfficer
18
19
  from pyegeria.project_manager_omvs import ProjectManager
19
20
  from pyegeria.automated_curation_omvs import AutomatedCuration
20
21
  from pyegeria.classification_manager_omvs import ClassificationManager
@@ -30,6 +31,7 @@ from pyegeria.registered_info import RegisteredInfo
30
31
  from pyegeria.valid_metadata_omvs import ValidMetadataManager
31
32
  from pyegeria.egeria_config_client import EgeriaConfig
32
33
  from pyegeria.data_designer_omvs import DataDesigner
34
+ from pyegeria.governance_officer import GovernanceOfficer
33
35
  # from pyegeria.md_processing_utils import render_markdown
34
36
 
35
37
 
@@ -55,6 +57,7 @@ class Egeria(
55
57
  SolutionArchitect,
56
58
  EgeriaConfig,
57
59
  DataDesigner,
60
+ GovernanceOfficer
58
61
  ):
59
62
  """
60
63
  Client to issue Runtime status requests.
@@ -129,4 +132,7 @@ class Egeria(
129
132
  DataDesigner.__init__(
130
133
  self, view_server, platform_url, user_id, user_pwd, token
131
134
  )
135
+ GovernanceOfficer.__init__(
136
+ self, view_server, platform_url, user_id, user_pwd, token
137
+ )
132
138
  print(Egeria.mro())
@@ -15,7 +15,8 @@ from pyegeria.runtime_manager_omvs import RuntimeManager
15
15
  from pyegeria.solution_architect_omvs import SolutionArchitect
16
16
  from pyegeria.template_manager_omvs import TemplateManager
17
17
  from pyegeria.valid_metadata_omvs import ValidMetadataManager
18
- from pyegeria.governance_officer_omvs import GovernanceOfficer
18
+ from pyegeria.governance_officer import GovernanceOfficer
19
+ from pyegeria.collection_manager import CollectionManager
19
20
 
20
21
 
21
22
  class EgeriaTech(
@@ -31,6 +32,7 @@ class EgeriaTech(
31
32
  DataDesigner,
32
33
  TemplateManager,
33
34
  GovernanceOfficer,
35
+ CollectionManager
34
36
  ):
35
37
  """
36
38
  Client for technical Egeria users.
@@ -94,6 +96,9 @@ class EgeriaTech(
94
96
  GovernanceOfficer.__init__(
95
97
  self, view_server, platform_url, user_id, user_pwd, token
96
98
  )
99
+ CollectionManager.__init__(
100
+ self, view_server, platform_url, user_id, user_pwd, token
101
+ )
97
102
 
98
103
  if __name__ == "__main__":
99
104
  print("Main-Tech Client")