pyegeria 5.4.3.3__py3-none-any.whl → 5.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.
Files changed (230) hide show
  1. commands/cat/debug_log.2025-09-02_07-44-39_567276.log.zip +0 -0
  2. commands/cat/debug_log.2025-09-03_07-45-21_986388.log.zip +0 -0
  3. commands/cat/debug_log.2025-09-04_08-21-58_788009.log.zip +0 -0
  4. commands/cat/debug_log.2025-09-05_09-37-53_062579.log.zip +0 -0
  5. commands/cat/list_format_set.py +5 -3
  6. commands/tech/list_information_supply_chains.py +1 -1
  7. commands/tech/list_solution_blueprints.py +1 -1
  8. commands/tech/list_solution_components.py +1 -1
  9. commands/tech/list_solution_roles.py +1 -1
  10. md_processing/__init__.py +9 -5
  11. md_processing/data/commands.json +7182 -1401
  12. md_processing/data/generated_format_sets.json +4137 -0
  13. md_processing/data/generated_format_sets.py +51 -0
  14. md_processing/dr_egeria.py +20 -11
  15. md_processing/md_commands/data_designer_commands.py +90 -425
  16. md_processing/md_commands/ext_ref_commands.py +543 -0
  17. md_processing/md_commands/old_solution_architect_commands.py +1139 -0
  18. md_processing/md_commands/solution_architect_commands.py +26 -59
  19. md_processing/md_processing_utils/common_md_utils.py +50 -1
  20. md_processing/md_processing_utils/debug_log +1 -3
  21. md_processing/md_processing_utils/dr-egeria-help-2025-09-09T11:10:03.md +3305 -0
  22. md_processing/md_processing_utils/extraction_utils.py +14 -7
  23. md_processing/md_processing_utils/gen_format_sets.py +422 -0
  24. md_processing/md_processing_utils/md_processing_constants.py +20 -2
  25. pyegeria/__init__.py +1 -1
  26. pyegeria/_client_new.py +9 -7
  27. pyegeria/_output_formats.py +278 -3
  28. pyegeria/collection_manager.py +20 -59
  29. pyegeria/config.py +10 -1
  30. pyegeria/data_designer.py +166 -117
  31. pyegeria/egeria_client.py +1 -1
  32. pyegeria/egeria_tech_client.py +4 -1
  33. pyegeria/external_references.py +1794 -0
  34. pyegeria/glossary_manager.py +71 -85
  35. pyegeria/governance_officer.py +26 -29
  36. pyegeria/output_formatter.py +127 -1
  37. pyegeria/project_manager.py +33 -36
  38. pyegeria/{solution_architect_omvs.py → solution_architect.py} +733 -873
  39. {pyegeria-5.4.3.3.dist-info → pyegeria-5.4.4.dist-info}/METADATA +1 -1
  40. {pyegeria-5.4.3.3.dist-info → pyegeria-5.4.4.dist-info}/RECORD +43 -219
  41. commands/.DS_Store +0 -0
  42. commands/cat/.DS_Store +0 -0
  43. commands/cat/.env +0 -8
  44. commands/cat/debug_log.2025-08-29_07-07-27_848189.log.zip +0 -0
  45. commands/cat/debug_log.2025-08-30_21-15-48_528443.log.zip +0 -0
  46. commands/cat/debug_log.log +0 -6102
  47. commands/cat/logs/pyegeria.log +0 -90
  48. commands/cli/debug_log.log +0 -0
  49. commands/doc/.DS_Store +0 -0
  50. commands/ops/logs/pyegeria.log +0 -0
  51. md_processing/.DS_Store +0 -0
  52. md_processing/.idea/.gitignore +0 -8
  53. md_processing/.idea/inspectionProfiles/Project_Default.xml +0 -59
  54. md_processing/.idea/md_processing.iml +0 -15
  55. md_processing/.idea/modules.xml +0 -8
  56. md_processing/.idea/sonarlint/issuestore/index.pb +0 -0
  57. md_processing/.idea/sonarlint/securityhotspotstore/index.pb +0 -0
  58. md_processing/.idea/vcs.xml +0 -6
  59. md_processing/.idea/workspace.xml +0 -107
  60. md_processing/dr_egeria_inbox/Derive-Dr-Gov-Defs.md +0 -8
  61. md_processing/dr_egeria_inbox/Dr.Egeria Templates.md +0 -873
  62. md_processing/dr_egeria_inbox/arch_test.md +0 -57
  63. md_processing/dr_egeria_inbox/archive/dr_egeria_intro.md +0 -254
  64. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_more_terms.md +0 -696
  65. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part1.md +0 -254
  66. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part2.md +0 -298
  67. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part3.md +0 -608
  68. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part4.md +0 -94
  69. md_processing/dr_egeria_inbox/archive/freddie_intro.md +0 -284
  70. md_processing/dr_egeria_inbox/archive/freddie_intro_orig.md +0 -275
  71. md_processing/dr_egeria_inbox/archive/test-term.md +0 -110
  72. md_processing/dr_egeria_inbox/cat_test.md +0 -100
  73. md_processing/dr_egeria_inbox/collections.md +0 -39
  74. md_processing/dr_egeria_inbox/data_designer_debug.log +0 -6
  75. md_processing/dr_egeria_inbox/data_designer_out.md +0 -60
  76. md_processing/dr_egeria_inbox/data_designer_search_test.md +0 -11
  77. md_processing/dr_egeria_inbox/data_field.md +0 -54
  78. md_processing/dr_egeria_inbox/data_spec.md +0 -77
  79. md_processing/dr_egeria_inbox/data_spec_test.md +0 -2340
  80. md_processing/dr_egeria_inbox/data_test.md +0 -179
  81. md_processing/dr_egeria_inbox/data_test2.md +0 -429
  82. md_processing/dr_egeria_inbox/data_test3.md +0 -462
  83. md_processing/dr_egeria_inbox/dr_egeria_data_designer_1.md +0 -124
  84. md_processing/dr_egeria_inbox/dr_egeria_intro_categories.md +0 -168
  85. md_processing/dr_egeria_inbox/dr_egeria_intro_part1.md +0 -280
  86. md_processing/dr_egeria_inbox/dr_egeria_intro_part2.md +0 -318
  87. md_processing/dr_egeria_inbox/dr_egeria_intro_part3.md +0 -1073
  88. md_processing/dr_egeria_inbox/dr_egeria_isc1.md +0 -44
  89. md_processing/dr_egeria_inbox/generated_help_report.md +0 -9
  90. md_processing/dr_egeria_inbox/generated_help_terms.md +0 -842
  91. md_processing/dr_egeria_inbox/glossary_list.md +0 -5
  92. md_processing/dr_egeria_inbox/glossary_search_test.md +0 -40
  93. md_processing/dr_egeria_inbox/glossary_test1.md +0 -378
  94. md_processing/dr_egeria_inbox/gov_def.md +0 -718
  95. md_processing/dr_egeria_inbox/gov_def2.md +0 -447
  96. md_processing/dr_egeria_inbox/img.png +0 -0
  97. md_processing/dr_egeria_inbox/output_tests.md +0 -114
  98. md_processing/dr_egeria_inbox/product.md +0 -211
  99. md_processing/dr_egeria_inbox/rel.md +0 -8
  100. md_processing/dr_egeria_inbox/sb.md +0 -119
  101. md_processing/dr_egeria_inbox/solution-components.md +0 -136
  102. md_processing/dr_egeria_inbox/solution_blueprints.md +0 -118
  103. md_processing/dr_egeria_inbox/synonym_test.md +0 -42
  104. md_processing/dr_egeria_inbox/t2.md +0 -268
  105. md_processing/dr_egeria_outbox/.DS_Store +0 -0
  106. md_processing/dr_egeria_outbox/.obsidian/app.json +0 -1
  107. md_processing/dr_egeria_outbox/.obsidian/appearance.json +0 -1
  108. md_processing/dr_egeria_outbox/.obsidian/community-plugins.json +0 -7
  109. md_processing/dr_egeria_outbox/.obsidian/core-plugins.json +0 -33
  110. md_processing/dr_egeria_outbox/.obsidian/plugins/buttons/main.js +0 -5164
  111. md_processing/dr_egeria_outbox/.obsidian/plugins/buttons/manifest.json +0 -10
  112. md_processing/dr_egeria_outbox/.obsidian/plugins/buttons/styles.css +0 -624
  113. md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/data.json +0 -10
  114. md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/main.js +0 -4459
  115. md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/manifest.json +0 -10
  116. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/data.json +0 -3
  117. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/main.js +0 -153
  118. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/manifest.json +0 -11
  119. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/styles.css +0 -1
  120. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/main.js +0 -500
  121. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/manifest.json +0 -12
  122. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/styles.css +0 -1
  123. md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/data.json +0 -38
  124. md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/main.js +0 -37
  125. md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/manifest.json +0 -11
  126. md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/styles.css +0 -220
  127. md_processing/dr_egeria_outbox/.obsidian/types.json +0 -28
  128. md_processing/dr_egeria_outbox/.obsidian/workspace.json +0 -270
  129. md_processing/dr_egeria_outbox/Button Test.md +0 -11
  130. md_processing/dr_egeria_outbox/Scripts/.DS_Store +0 -0
  131. md_processing/dr_egeria_outbox/Scripts/sendRest.js +0 -24
  132. md_processing/dr_egeria_outbox/Templates/sendToApi.md.md +0 -17
  133. md_processing/dr_egeria_outbox/Untitled.canvas +0 -1
  134. md_processing/dr_egeria_outbox/monday/processed-2025-09-01 09:26-product.md +0 -210
  135. md_processing/dr_egeria_outbox/monday/processed-2025-09-01 14:03-product.md +0 -209
  136. md_processing/dr_egeria_outbox/monday/processed-2025-09-01 14:24-product.md +0 -263
  137. md_processing/dr_egeria_outbox/monday/processed-2025-09-01 16:03-data_spec_test.md +0 -2374
  138. md_processing/dr_egeria_outbox/monday/processed-2025-09-01 16:05-data_spec_test.md +0 -2374
  139. md_processing/dr_egeria_outbox/monday/processed-2025-09-02 08:28-data_spec_test.md +0 -2321
  140. md_processing/dr_egeria_outbox/monday/processed-2025-09-02 08:37-data_spec_test.md +0 -2304
  141. md_processing/dr_egeria_outbox/monday/processed-2025-09-02 08:56-data_spec_test.md +0 -2324
  142. md_processing/dr_egeria_outbox/monday/processed-2025-09-02 09:00-data_spec_test.md +0 -2324
  143. md_processing/dr_egeria_outbox/processed-2025-08-30 16:56-generated_help_terms.md +0 -795
  144. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 15:00-Derive-Dr-Gov-Defs.md +0 -719
  145. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:13-Derive-Dr-Gov-Defs.md +0 -41
  146. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:14-Derive-Dr-Gov-Defs.md +0 -33
  147. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:50-Derive-Dr-Gov-Defs.md +0 -192
  148. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 22:08-gov_def2.md +0 -486
  149. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 22:10-gov_def2.md +0 -486
  150. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 08:53-gov_def2.md +0 -486
  151. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 08:54-gov_def2.md +0 -486
  152. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:03-gov_def2.md +0 -486
  153. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:06-gov_def2.md +0 -486
  154. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:10-gov_def2.md +0 -486
  155. md_processing/dr_egeria_outbox/tuesday/processed-2025-09-02 13:07-gov_def.md +0 -492
  156. md_processing/dr_egeria_outbox/tuesday/processed-2025-09-02 13:25-gov_def.md +0 -520
  157. md_processing/dr_egeria_outbox/tuesday/processed-2025-09-02 16:43-gov_def.md +0 -636
  158. md_processing/dr_egeria_outbox/tuesday/processed-2025-09-02 16:46-gov_def.md +0 -636
  159. md_processing/family_docs/Data Designer/Create_Data_Class.md +0 -164
  160. md_processing/family_docs/Data Designer/Create_Data_Dictionary.md +0 -30
  161. md_processing/family_docs/Data Designer/Create_Data_Field.md +0 -162
  162. md_processing/family_docs/Data Designer/Create_Data_Specification.md +0 -36
  163. md_processing/family_docs/Data Designer/Create_Data_Structure.md +0 -38
  164. md_processing/family_docs/Data Designer/View_Data_Classes.md +0 -78
  165. md_processing/family_docs/Data Designer/View_Data_Dictionaries.md +0 -78
  166. md_processing/family_docs/Data Designer/View_Data_Fields.md +0 -78
  167. md_processing/family_docs/Data Designer/View_Data_Specifications.md +0 -78
  168. md_processing/family_docs/Data Designer/View_Data_Structures.md +0 -78
  169. md_processing/family_docs/Data Designer.md +0 -842
  170. md_processing/family_docs/Digital Product Manager/Add_Member->Collection.md +0 -42
  171. md_processing/family_docs/Digital Product Manager/Attach_Collection->Resource.md +0 -36
  172. md_processing/family_docs/Digital Product Manager/Create_Agreement.md +0 -96
  173. md_processing/family_docs/Digital Product Manager/Create_Data_Sharing_Agreement.md +0 -72
  174. md_processing/family_docs/Digital Product Manager/Create_DigitalSubscription.md +0 -102
  175. md_processing/family_docs/Digital Product Manager/Create_Digital_Product.md +0 -134
  176. md_processing/family_docs/Digital Product Manager/Link_Agreement_Items.md +0 -60
  177. md_processing/family_docs/Digital Product Manager/Link_Contracts.md +0 -26
  178. md_processing/family_docs/Digital Product Manager/Link_Digital_Product_-_Digital_Product.md +0 -30
  179. md_processing/family_docs/Digital Product Manager/Link_Subscribers.md +0 -48
  180. md_processing/family_docs/Digital Product Manager.md +0 -668
  181. md_processing/family_docs/Glossary/Attach_Category_Parent.md +0 -18
  182. md_processing/family_docs/Glossary/Attach_Term-Term_Relationship.md +0 -26
  183. md_processing/family_docs/Glossary/Create_Category.md +0 -38
  184. md_processing/family_docs/Glossary/Create_Glossary.md +0 -42
  185. md_processing/family_docs/Glossary/Create_Term.md +0 -70
  186. md_processing/family_docs/Glossary.md +0 -206
  187. md_processing/family_docs/Governance Officer/Create_Business_Imperative.md +0 -106
  188. md_processing/family_docs/Governance Officer/Create_Certification_Type.md +0 -112
  189. md_processing/family_docs/Governance Officer/Create_Governance_Approach.md +0 -114
  190. md_processing/family_docs/Governance Officer/Create_Governance_Obligation.md +0 -114
  191. md_processing/family_docs/Governance Officer/Create_Governance_Principle.md +0 -114
  192. md_processing/family_docs/Governance Officer/Create_Governance_Procedure.md +0 -128
  193. md_processing/family_docs/Governance Officer/Create_Governance_Process.md +0 -122
  194. md_processing/family_docs/Governance Officer/Create_Governance_Processing_Purpose.md +0 -106
  195. md_processing/family_docs/Governance Officer/Create_Governance_Responsibility.md +0 -122
  196. md_processing/family_docs/Governance Officer/Create_Governance_Rule.md +0 -122
  197. md_processing/family_docs/Governance Officer/Create_Governance_Strategy.md +0 -106
  198. md_processing/family_docs/Governance Officer/Create_License_Type.md +0 -112
  199. md_processing/family_docs/Governance Officer/Create_Naming_Standard_Rule.md +0 -122
  200. md_processing/family_docs/Governance Officer/Create_Regulation_Article.md +0 -106
  201. md_processing/family_docs/Governance Officer/Create_Regulation_Definition.md +0 -118
  202. md_processing/family_docs/Governance Officer/Create_Security_Access_Control.md +0 -114
  203. md_processing/family_docs/Governance Officer/Create_Security_Group.md +0 -120
  204. md_processing/family_docs/Governance Officer/Create_Service_Level_Objectives.md +0 -122
  205. md_processing/family_docs/Governance Officer/Create_Threat_Definition.md +0 -106
  206. md_processing/family_docs/Governance Officer/Link_Governance_Controls.md +0 -32
  207. md_processing/family_docs/Governance Officer/Link_Governance_Drivers.md +0 -32
  208. md_processing/family_docs/Governance Officer/Link_Governance_Policies.md +0 -32
  209. md_processing/family_docs/Governance Officer/View_Governance_Definitions.md +0 -82
  210. md_processing/family_docs/Governance Officer.md +0 -2412
  211. md_processing/family_docs/Solution Architect/Create_Information_Supply_Chain.md +0 -70
  212. md_processing/family_docs/Solution Architect/Create_Solution_Blueprint.md +0 -44
  213. md_processing/family_docs/Solution Architect/Create_Solution_Component.md +0 -96
  214. md_processing/family_docs/Solution Architect/Create_Solution_Role.md +0 -66
  215. md_processing/family_docs/Solution Architect/Link_Information_Supply_Chain_Peers.md +0 -32
  216. md_processing/family_docs/Solution Architect/Link_Solution_Component_Peers.md +0 -32
  217. md_processing/family_docs/Solution Architect/View_Information_Supply_Chains.md +0 -32
  218. md_processing/family_docs/Solution Architect/View_Solution_Blueprints.md +0 -32
  219. md_processing/family_docs/Solution Architect/View_Solution_Components.md +0 -32
  220. md_processing/family_docs/Solution Architect/View_Solution_Roles.md +0 -32
  221. md_processing/family_docs/Solution Architect.md +0 -490
  222. md_processing/md_commands/old_project_commands.py +0 -164
  223. md_processing/md_processing_utils/debug_log.log +0 -5580
  224. md_processing/md_processing_utils/generated_help_terms.md +0 -842
  225. md_processing/md_processing_utils/logs/pyegeria.log +0 -56
  226. pyegeria/.DS_Store +0 -0
  227. pyegeria/___external_references.py +0 -3267
  228. {pyegeria-5.4.3.3.dist-info → pyegeria-5.4.4.dist-info}/LICENSE +0 -0
  229. {pyegeria-5.4.3.3.dist-info → pyegeria-5.4.4.dist-info}/WHEEL +0 -0
  230. {pyegeria-5.4.3.3.dist-info → pyegeria-5.4.4.dist-info}/entry_points.txt +0 -0
@@ -12,10 +12,11 @@ from rich.console import Console
12
12
  from rich.markdown import Markdown
13
13
 
14
14
  from md_processing.md_processing_utils.common_md_proc_utils import (parse_upsert_command, parse_view_command)
15
- from md_processing.md_processing_utils.common_md_utils import update_element_dictionary
15
+ from md_processing.md_processing_utils.common_md_utils import update_element_dictionary, set_element_prop_body, \
16
+ set_update_body, set_create_body
16
17
  from md_processing.md_processing_utils.extraction_utils import (extract_command_plus, update_a_command)
17
18
  from md_processing.md_processing_utils.md_processing_constants import (load_commands)
18
- from pyegeria import body_slimmer, EgeriaTech
19
+ from pyegeria import body_slimmer, EgeriaTech, PyegeriaException, print_basic_exception
19
20
 
20
21
  load_commands('commands.json')
21
22
 
@@ -275,30 +276,15 @@ def process_blueprint_upsert_command(egeria_client: EgeriaTech, txt: str, direct
275
276
  attributes = parsed_output['attributes']
276
277
  description = attributes.get('Description', {}).get('value', None)
277
278
  display_name = attributes['Display Name'].get('value', None)
278
- version_identifier = attributes.get('Version Identifier', {}).get('value', None)
279
- effective_time = attributes.get('Effective Time', {}).get('value', None)
280
- effective_from = attributes.get('Effective From', {}).get('value', None)
281
- effective_to = attributes.get('Effective To', {}).get('value', None)
282
- external_source_guid = attributes.get('External Source GUID', {}).get('value', None)
283
- external_source_name = attributes.get('External Source Name', {}).get('value', None)
284
279
 
285
- anchor_guid = attributes.get('Anchor ID', {}).get('guid', None)
286
- parent_guid = attributes.get('Parent ID', {}).get('guid', None)
287
- parent_relationship_type_name = attributes.get('Parent Relationship Type Name', {}).get('value', None)
288
- parent_at_end1 = attributes.get('Parent at End1', {}).get('value', True)
289
280
 
290
- anchor_scope_guid = attributes.get('Anchor Scope GUID', {}).get('value', None)
291
- is_own_anchor = attributes.get('Is Own Anchor', {}).get('value', True)
292
- if parent_guid is None:
293
- is_own_anchor = True
294
281
 
295
- additional_prop = attributes.get('Additional Properties', {}).get('value', None)
296
- additional_properties = json.loads(additional_prop) if additional_prop is not None else None
297
- extended_prop = attributes.get('Extended Properties', {}).get('value', None)
298
- extended_properties = json.loads(extended_prop) if extended_prop is not None else None
282
+
299
283
  component_guids = attributes.get('Solution Components', {}).get('guid_list', None)
300
284
 
301
- initial_status = "ACTIVE"
285
+ status = attributes.get('Status', {}).get('value', None)
286
+ if status is None:
287
+ status = "ACTIVE"
302
288
 
303
289
  replace_all_props = not attributes.get('Merge Update', {}).get('value', True)
304
290
 
@@ -313,6 +299,8 @@ def process_blueprint_upsert_command(egeria_client: EgeriaTech, txt: str, direct
313
299
  return valid
314
300
 
315
301
  elif directive == "process":
302
+ prop_body = set_element_prop_body(object_type, qualified_name, attributes)
303
+
316
304
  try:
317
305
  if object_action == "Update":
318
306
  if not exists:
@@ -326,16 +314,19 @@ def process_blueprint_upsert_command(egeria_client: EgeriaTech, txt: str, direct
326
314
  print(Markdown(
327
315
  f"==> Validation of {command} completed successfully! Proceeding to apply the changes.\n"))
328
316
 
329
- body = body_slimmer({
330
- "class": "UpdateSolutionBlueprintRequestBody", "externalSourceGUID": external_source_guid,
331
- "externalSourceName": external_source_name, "effectiveTime": effective_time,
332
- "forLineage": False, "forDuplicateProcessing": False, "properties": {
333
- "class": "SolutionBlueprintProperties", "qualifiedName": qualified_name,
334
- "displayName": display_name, "description": description, "version": version_identifier,
335
- "additionalProperties": additional_properties, "extendedProperties": extended_properties,
336
- "effectiveFrom": effective_from, "effectiveTo": effective_to
337
- }
338
- })
317
+ body = set_update_body(object_type, attributes)
318
+ body['properties'] = prop_body
319
+ egeria_client.update_solution_blueprint(guid, body)
320
+ if status:
321
+ egeria_client.update_solution_element_status(guid, status)
322
+
323
+ msg = f"Updated {object_type} `{display_name}` with GUID {guid}\n\n___"
324
+ update_element_dictionary(qualified_name, {
325
+ 'guid': guid, 'display_name': display_name
326
+ })
327
+ logger.info(msg)
328
+ logger.success(msg)
329
+ return egeria_client.find_solution_blueprints(qualified_name, output_format='MD')
339
330
 
340
331
  egeria_client.update_solution_blueprint(guid, body, replace_all_props)
341
332
  logger.success(f"==> Updated {object_type} `{display_name}` with GUID {guid}\n\n")
@@ -363,32 +354,8 @@ def process_blueprint_upsert_command(egeria_client: EgeriaTech, txt: str, direct
363
354
  return
364
355
 
365
356
  else:
366
- body = {
367
- "class": "NewSolutionBlueprintRequestBody",
368
- "externalSourceGUID": external_source_guid,
369
- "externalSourceName": external_source_name,
370
- "forLineage": False,
371
- "forDuplicateProcessing": False,
372
- "effectiveTime": effective_time,
373
- "anchorGUID": anchor_guid,
374
- "isOwnAnchor": is_own_anchor,
375
- "anchorScopeGUID": anchor_scope_guid,
376
- "parentGUID": parent_guid,
377
- "parentRelationshipTypeName": parent_relationship_type_name,
378
- "parentAtEnd1": parent_at_end1,
379
- "properties": {
380
- "class": "SolutionBlueprintProperties",
381
- "effectiveFrom": effective_from,
382
- "effectiveTo": effective_to, # "typeName": type_name,
383
- "extendedProperties": extended_properties,
384
- "qualifiedName": qualified_name,
385
- "additionalProperties": additional_properties,
386
- "displayName": display_name,
387
- "description": description,
388
- "versionIdentifier": version_identifier
389
- },
390
- "initialStatus": initial_status,
391
- }
357
+ body = set_create_body(object_type,attributes)
358
+ body['properties'] = prop_body
392
359
  guid = egeria_client.create_solution_blueprint(body)
393
360
  except Exception as e:
394
361
  print(f"Unexpected error: {e}, {type(valid)}, {valid}")
@@ -406,8 +373,8 @@ def process_blueprint_upsert_command(egeria_client: EgeriaTech, txt: str, direct
406
373
  logger.error(msg)
407
374
  return None
408
375
 
409
- except Exception as e:
410
- print("why did I get here")
376
+ except PyegeriaException as e:
377
+ print_basic_exception(e)
411
378
  logger.error(f"Error performing {command}: {e}")
412
379
  return None
413
380
  else:
@@ -240,6 +240,14 @@ def set_find_body(object_type: str, attributes: dict)->dict:
240
240
 
241
241
 
242
242
  def set_create_body(object_type: str, attributes: dict)->dict:
243
+ """
244
+ Build the OUTER request body for a create action (NewElementRequestBody).
245
+
246
+ Notes on two-layer convention:
247
+ - Outer layer (this function): action wrapper with metadata like externalSource*, effectiveTime, anchor/parent hints, and an empty "properties" field.
248
+ - Inner layer: an element-type-specific Properties structure built by set_element_prop_body, set_product_body, set_data_field_body, etc.
249
+ Callers should build the inner body separately with the appropriate helper and then assign it to body["properties"].
250
+ """
243
251
  prop_name = object_type.replace(" ", "")
244
252
  body = {
245
253
  "class": "NewElementRequestBody",
@@ -266,6 +274,13 @@ def set_create_body(object_type: str, attributes: dict)->dict:
266
274
 
267
275
 
268
276
  def set_update_body(object_type: str, attributes: dict)->dict:
277
+ """
278
+ Build the OUTER request body for an update action (UpdateElementRequestBody).
279
+
280
+ Two-layer convention:
281
+ - Outer layer (this function) provides action metadata and an empty "properties" slot.
282
+ - Inner layer must be constructed via element-specific helpers (e.g., set_element_prop_body) and assigned to the returned dict's "properties" key by the caller before invoking the client.
283
+ """
269
284
  return {
270
285
  "class" : "UpdateElementRequestBody",
271
286
  "externalSourceGUID": attributes.get('External Source GUID', {}).get('guid', None),
@@ -292,6 +307,16 @@ def set_rel_prop_body(object_type: str, attributes: dict)->dict:
292
307
  }
293
308
 
294
309
  def set_element_prop_body(object_type: str, qualified_name: str, attributes: dict)->dict:
310
+ """
311
+ Build the INNER element-specific Properties body to be placed under the outer body's "properties" key.
312
+
313
+ This returns the typed properties structure (e.g., "ReferenceableProperties" subtypes) appropriate for the object_type.
314
+ Usage example:
315
+ - outer = set_create_body(object_type, attributes)
316
+ - props = set_element_prop_body(object_type, qualified_name, attributes)
317
+ - outer["properties"] = props
318
+ - client.create_xxx(outer)
319
+ """
295
320
  prop_name = object_type.replace(" ", "")
296
321
  display_name = attributes.get('Display Name', {}).get('value', None)
297
322
 
@@ -323,7 +348,21 @@ def set_product_body(object_type: str, qualified_name: str, attributes: dict)->d
323
348
  prop_bod["nextVersion"] = attributes.get('Next Version Date', {}).get('value', [])
324
349
  return prop_bod
325
350
 
326
-
351
+ def set_data_field_body(object_type: str, qualified_name: str, attributes: dict)->dict:
352
+ prop_bod = set_element_prop_body(object_type, qualified_name, attributes)
353
+ prop_bod["namespace"] = attributes.get('Namespace', {}).get('value', None)
354
+ prop_bod["aliases"] = attributes.get('Aliases', {}).get('value', [])
355
+ prop_bod["namePatterns"] = attributes.get('Name Patterns', {}).get('value', [])
356
+ prop_bod["defaultValue"] = attributes.get('Default Value', {}).get('value', None)
357
+ prop_bod["isNullable"] = attributes.get('Is Nullable', {}).get('value', None)
358
+ prop_bod["dataType"] = attributes.get('Data Type', {}).get('value', None)
359
+ prop_bod["units"] = attributes.get('Units', {}).get('value', None)
360
+ prop_bod["minimumLength"] = attributes.get('Minimum Length', {}).get('value', None)
361
+ prop_bod["length"] = attributes.get('Length', {}).get('value', None)
362
+ prop_bod["precision"] = attributes.get('Precision', {}).get('value', None)
363
+ prop_bod["orderedValues"] = attributes.get('Ordered Values', {}).get('value', [])
364
+ prop_bod["sortOrder"] = attributes.get('Sort Order', {}).get('value', None)
365
+ return prop_bod
327
366
 
328
367
  def set_update_status_body(object_type: str, attributes: dict)->dict:
329
368
  return {
@@ -394,6 +433,11 @@ def update_gov_body_for_type(object_type: str, body: dict, attributes: dict) ->
394
433
 
395
434
 
396
435
  def set_rel_request_body(object_type: str, attributes: dict)->dict:
436
+ """
437
+ Build the OUTER request body for creating a relationship (NewRelationshipRequestBody).
438
+ The inner relationship properties must be assigned to the returned dict under the "properties" key,
439
+ commonly via set_rel_prop_body or set_rel_request_body_for_type.
440
+ """
397
441
  return {
398
442
  "class" : "NewRelationshipRequestBody",
399
443
  "externalSourceGUID": attributes.get('External Source GUID', {}).get('guid', None),
@@ -416,6 +460,11 @@ def set_peer_gov_def_request_body(object_type: str, attributes: dict)->dict:
416
460
  return rel_body
417
461
 
418
462
  def set_rel_request_body_for_type(object_type: str, attributes: dict)->dict:
463
+ """
464
+ Convenience helper that builds both layers (outer + inner) for a relationship of a known type.
465
+ It creates the outer NewRelationshipRequestBody via set_rel_request_body and fills rel_body["properties"]
466
+ with a typed properties structure under the "class" of f"{object_type}Properties".
467
+ """
419
468
  rel_body = set_rel_request_body(object_type, attributes)
420
469
  # class_prop = camel_to_title_case(object_type) + "Properties"
421
470
  class_prop = f"{object_type}Properties"
@@ -1,3 +1 @@
1
- D 2025-08-27T07:09:25.357601-0500 | INFO | create_help_terms | 162 | Help documentation saved to ././dr-egeria-help-2025-08-27T07:09:25.md | {}
2
- D 2025-08-27T10:11:41.452446-0500 | INFO | create_help_terms | 184 | Help documentation saved to ././dr-egeria-help-2025-08-27T10:11:41.md | {}
3
- D 2025-08-27T10:33:31.756212-0500 | INFO | create_help_terms | 184 | Help documentation saved to ././dr-egeria-help-2025-08-27T10:33:31.md | {}
1
+ D 2025-09-09T11:10:03.787382-0500 | INFO | create_help_terms | 184 | Help documentation saved to ././dr-egeria-help-2025-09-09T11:10:03.md | {}