pyegeria 5.4.5__py3-none-any.whl → 5.4.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.
Files changed (207) hide show
  1. commands/cat/dr_egeria_command_help.py +0 -0
  2. commands/cat/exp_list_glossaries.py +0 -0
  3. commands/cat/get_collection.py +0 -0
  4. commands/cat/get_project_dependencies.py +0 -0
  5. commands/cat/get_project_structure.py +0 -0
  6. commands/cat/list_assets.py +0 -0
  7. commands/cat/list_cert_types.py +0 -0
  8. commands/cat/list_collections.py +0 -0
  9. commands/cat/list_data_designer.py +0 -0
  10. commands/cat/list_data_structures_full.py +0 -0
  11. commands/cat/list_deployed_servers.py +0 -0
  12. commands/cat/list_glossaries.py +0 -0
  13. commands/cat/list_projects.py +0 -0
  14. commands/cat/list_tech_types.py +0 -0
  15. commands/cat/list_terms.py +0 -0
  16. commands/cat/list_todos.py +0 -0
  17. commands/cli/egeria.py +0 -0
  18. commands/my/list_my_profile.py +0 -0
  19. commands/my/list_my_roles.py +0 -0
  20. commands/my/monitor_my_todos.py +0 -0
  21. commands/my/monitor_open_todos.py +0 -0
  22. commands/ops/list_archives.py +0 -0
  23. commands/ops/list_catalog_targets.py +0 -0
  24. commands/ops/monitor_asset_events.py +0 -0
  25. commands/ops/monitor_engine_activity.py +0 -0
  26. commands/ops/monitor_engine_activity_c.py +0 -0
  27. commands/ops/monitor_gov_eng_status.py +0 -0
  28. commands/ops/monitor_integ_daemon_status.py +0 -0
  29. commands/ops/monitor_platform_status.py +0 -0
  30. commands/ops/monitor_server_startup.py +0 -0
  31. commands/ops/monitor_server_status.py +0 -0
  32. commands/ops/orig_monitor_server_list.py +0 -0
  33. commands/ops/orig_monitor_server_status.py +0 -0
  34. commands/ops/table_integ_daemon_status.py +0 -0
  35. commands/tech/get_guid_info.py +0 -0
  36. commands/tech/get_tech_details.py +0 -0
  37. commands/tech/list_anchored_elements.py +0 -0
  38. commands/tech/list_asset_types.py +0 -0
  39. commands/tech/list_gov_action_processes.py +0 -0
  40. commands/tech/list_information_supply_chains.py +0 -0
  41. commands/tech/list_registered_services.py +0 -0
  42. commands/tech/list_relationship_types.py +0 -0
  43. commands/tech/list_relationships.py +0 -0
  44. commands/tech/list_solution_blueprints.py +0 -0
  45. commands/tech/list_solution_components.py +0 -0
  46. commands/tech/list_solution_roles.py +0 -0
  47. commands/tech/list_valid_metadata_values.py +0 -0
  48. md_processing/__init__.py +2 -0
  49. md_processing/dr_egeria.py +5 -2
  50. md_processing/md_commands/data_designer_commands.py +6 -1
  51. md_processing/md_commands/product_manager_commands.py +101 -1
  52. md_processing/md_processing_utils/md_processing_constants.py +2 -1
  53. pyegeria/__init__.py +1 -0
  54. pyegeria/_client_new.py +1 -1
  55. pyegeria/_output_formats.py +43 -7
  56. pyegeria/automated_curation.py +122 -15
  57. pyegeria/data_designer.py +3 -3
  58. pyegeria/format_set_executor.py +159 -0
  59. pyegeria/mcp_adapter.py +110 -0
  60. pyegeria/mcp_server.py +172 -0
  61. pyegeria/project_manager.py +1 -1
  62. pyegeria/reference_data.py +1 -1
  63. pyegeria/x_action_author_omvs.py +1 -1
  64. {pyegeria-5.4.5.dist-info → pyegeria-5.4.7.dist-info}/METADATA +26 -29
  65. pyegeria-5.4.7.dist-info/RECORD +174 -0
  66. {pyegeria-5.4.5.dist-info → pyegeria-5.4.7.dist-info}/WHEEL +2 -1
  67. pyegeria-5.4.7.dist-info/entry_points.txt +105 -0
  68. pyegeria-5.4.7.dist-info/top_level.txt +3 -0
  69. commands/README.md +0 -47
  70. commands/cat/README.md +0 -16
  71. commands/cat/debug_log.2025-09-14_11-03-29_316193.log.zip +0 -0
  72. commands/cat/debug_log.2025-09-15_19-06-37_086464.log.zip +0 -0
  73. commands/cat/debug_log.2025-09-20_11-10-54_418109.log.zip +0 -0
  74. commands/cat/debug_log.2025-09-21_11-59-27_391328.log.zip +0 -0
  75. commands/cli/debug_log +0 -0
  76. commands/cli/txt_custom_v2.tcss +0 -19
  77. commands/doc/README.md +0 -145
  78. commands/doc/Visual Command Reference/README.md +0 -511
  79. commands/doc/Visual Command Reference/cat/show/assets/asset-graph 2024-11-20 at 15.56.42.png +0 -0
  80. commands/doc/Visual Command Reference/cat/show/assets/assets-in-domain 2024-11-20 at 15.49.55@2x.png +0 -0
  81. commands/doc/Visual Command Reference/cat/show/assets/elements-of-type 2024-11-20 at 16.01.35.png +0 -0
  82. commands/doc/Visual Command Reference/cat/show/assets/tech-type-elements 2024-11-20 at 16.05.05.png +0 -0
  83. commands/doc/Visual Command Reference/cat/show/deployed-data/deployed-data-catalogs 2024-12-17 at 15.43.27@2x.png +0 -0
  84. commands/doc/Visual Command Reference/cat/show/deployed-data/deployed-data-catalogs-2024-11-20 at 16.17.43@2x.png +0 -0
  85. commands/doc/Visual Command Reference/cat/show/deployed-data/deployed-schemas 2024-11-25 at 20.14.50@2x.png +0 -0
  86. commands/doc/Visual Command Reference/cat/show/deployed-data/deployed-schemas 2024-12-17 at 15.48.38@2x.png +0 -0
  87. commands/doc/Visual Command Reference/cat/show/deployed-data/deployed-servers 2024-11-25 at 20.21.25@2x.png +0 -0
  88. commands/doc/Visual Command Reference/cat/show/deployed-data/deployed-servers 2024-12-17 at 15.52.16@2x.png +0 -0
  89. commands/doc/Visual Command Reference/cat/show/deployed-data/deployed_databases 2024-12-16 at 16.40.31@2x.png +0 -0
  90. commands/doc/Visual Command Reference/cat/show/glossary/list-glossaries 2024-11-25 at 20.30.02.png +0 -0
  91. commands/doc/Visual Command Reference/cat/show/glossary/list-terms 2024-11-25 at 20.32.11.png +0 -0
  92. commands/doc/Visual Command Reference/cat/show/info/asset-types 2024-11-25 at 20.34.19@2x.png +0 -0
  93. commands/doc/Visual Command Reference/cat/show/info/certification-types 2024-11-25 at 20.37.07.png +0 -0
  94. commands/doc/Visual Command Reference/cat/show/info/collection-graph 2024-12-12 at 11.33.18@2x.png +0 -0
  95. commands/doc/Visual Command Reference/cat/show/info/list-collections 2024-12-10 at 14.25.51@2x.png +0 -0
  96. commands/doc/Visual Command Reference/cat/show/info/list-todos 2024-12-12 at 11.46.30@2x.png +0 -0
  97. commands/doc/Visual Command Reference/cat/show/info/list-user-ids 2024-12-12 at 11.51.09@2x.png +0 -0
  98. commands/doc/Visual Command Reference/cat/show/info/tech-types 2024-12-12 at 11.37.20@2x.png +0 -0
  99. commands/doc/Visual Command Reference/cat/show/projects/project_dependencies 2024-12-14 at 16.24.39@2x.png +0 -0
  100. commands/doc/Visual Command Reference/cat/show/projects/project_structure 2024-12-14 at 16.21.35@2x.png +0 -0
  101. commands/doc/Visual Command Reference/cat/show/projects/projects 2024-12-14 at 16.18.10@2x.png +0 -0
  102. commands/doc/Visual Command Reference/hey_egeria tui 2024-12-16 at 16.58.22@2x.png +0 -0
  103. commands/doc/Visual Command Reference/my/show/my_profile 2024-12-14 at 16.29.27@2x.png +0 -0
  104. commands/doc/Visual Command Reference/my/show/my_roles 2024-12-14 at 16.32.10@2x.png +0 -0
  105. commands/doc/Visual Command Reference/my/show/my_todos 2024-12-15 at 16.24.13@2x.png +0 -0
  106. commands/doc/Visual Command Reference/my/show/open_todos 2024-12-14 at 16.36.12@2x.png +0 -0
  107. commands/doc/Visual Command Reference/ops/show/engines/list_engine_activity compressed 2024-12-15 at 16.48.48@2x.png +0 -0
  108. commands/doc/Visual Command Reference/ops/show/engines/monitor_engine_activity 2024-12-15 at 16.32.55@2x.png +0 -0
  109. commands/doc/Visual Command Reference/ops/show/engines/monitor_engine_activity compressed 2024-12-15 at 16.38.29@2x.png +0 -0
  110. commands/doc/Visual Command Reference/ops/show/engines/monitor_engine_status 2024-12-15 at 16.51.26.jpeg +0 -0
  111. commands/doc/Visual Command Reference/ops/show/integrations/monitor_integration_daemon_status 2024-12-15 at 16.57.12@2x.png +0 -0
  112. commands/doc/Visual Command Reference/ops/show/integrations/monitor_integration_targets 2024-12-15 at 17.02.19@2x.png +0 -0
  113. commands/doc/Visual Command Reference/ops/show/platforms/monitor_platform_status 2024-12-15 at 19.53.18@2x.png +0 -0
  114. commands/doc/Visual Command Reference/ops/show/servers/monitor_server_status 2024-12-15 at 19.59.39@2x.png +0 -0
  115. commands/doc/Visual Command Reference/ops/show/servers/monitor_server_status full 2024-12-15 at 20.01.57@2x.png +0 -0
  116. commands/doc/Visual Command Reference/ops/show/servers/monitor_startup_servers 2024-12-15 at 19.56.07@2x.png +0 -0
  117. commands/doc/Visual Command Reference/tech/show/elements/get_anchored_elements 2024-12-15 at 21.25.41@2x.png +0 -0
  118. commands/doc/Visual Command Reference/tech/show/elements/get_elements_of_om_type 2024-12-16 at 14.39.59@2x.png +0 -0
  119. commands/doc/Visual Command Reference/tech/show/elements/info_for_guid 2024-12-16 at 11.35.29@2x.png +0 -0
  120. commands/doc/Visual Command Reference/tech/show/elements/list_elements_by_om-type 2024-12-16 at 14.24.18@2x.png +0 -0
  121. commands/doc/Visual Command Reference/tech/show/elements/list_elements_by_om-type extended 2024-12-16 at 14.28.46@2x.png +0 -0
  122. commands/doc/Visual Command Reference/tech/show/elements/list_elements_of_om_type_by_classification 2024-12-16 at 14.35.26@2x.png +0 -0
  123. commands/doc/Visual Command Reference/tech/show/elements/related_elements 2024-12-16 at 14.55.01@2x.png +0 -0
  124. commands/doc/Visual Command Reference/tech/show/elements/show_related_specifications 2024-12-16 at 15.04.55@2x.png +0 -0
  125. commands/doc/Visual Command Reference/tech/show/tech-info/asset_types 2024-12-16 at 15.10.16@2x.png +0 -0
  126. commands/doc/Visual Command Reference/tech/show/tech-info/detailed_governance_action_processes 2024-12-16 at 15.16.26@2x.png +0 -0
  127. commands/doc/Visual Command Reference/tech/show/tech-info/governance_action_processes 2024-12-16 at 15.13.01@2x.png +0 -0
  128. commands/doc/Visual Command Reference/tech/show/tech-info/registered_services 2024-12-16 at 16.44.54@2x.png +0 -0
  129. commands/doc/Visual Command Reference/tech/show/tech-info/relationship_types 2024-12-16 at 16.20.34@2x.png +0 -0
  130. commands/doc/Visual Command Reference/tech/show/tech-info/relationship_types 2024-12-19 at 10.51.54@2x.png +0 -0
  131. commands/doc/Visual Command Reference/tech/show/tech-info/valid_metadata_values 2024-12-16 at 15.31.56@2x.png +0 -0
  132. commands/doc/Visual Command Reference/tech/show/tech-types/list_tech_type_template_specs 2024-12-16 at 16.03.22@2x.png +0 -0
  133. commands/doc/Visual Command Reference/tech/show/tech-types/list_technology_types 2024-12-16 at 15.39.20@2x.png +0 -0
  134. commands/doc/Visual Command Reference/tech/show/tech-types/tech_type_details 2024-12-16 at 15.37.21@2x.png +0 -0
  135. commands/doc/Visual Command Reference/tech/show/tech-types/tech_type_templates 2024-12-16 at 16.11.48@2x.png +0 -0
  136. commands/doc/glossary/basic-glossary-tui.md +0 -109
  137. commands/doc/glossary/images/delete-glossary-step1 2024-11-06 at 15.47.23@2x.png +0 -0
  138. commands/doc/glossary/images/delete-glossary-step2 2024-11-06 at 15.51.29@2x.png +0 -0
  139. commands/doc/glossary/images/delete-glossary-step3 2024-11-06 at 15.53.19@2x.png +0 -0
  140. commands/doc/glossary/images/delete-glossary-step4 2024-11-06 at 15.55.11@2x.png +0 -0
  141. commands/doc/glossary/images/out-create-glossary example 2024-11-05 at 20.38.04@2x.png +0 -0
  142. commands/doc/glossary/images/out-create-term 2024-11-06 at 20.48.29.png +0 -0
  143. commands/doc/glossary/images/out-delete-term 2024-11-07 at 03.57.25.png +0 -0
  144. commands/doc/glossary/images/out-display-terms-for-glossary-test 2024-11-06 at 20.51.28.png +0 -0
  145. commands/doc/glossary/images/out-export-example 2024-11-07 at 09.54.57.png +0 -0
  146. commands/doc/glossary/images/out-exported-terms 2024-11-06 at 21.06.32.png +0 -0
  147. commands/doc/glossary/images/out-glossary-list example 2024-11-05 at 20.41.02@2x.png +0 -0
  148. commands/doc/glossary/images/out-import-terms 2024-11-07 at 08.15.18.png +0 -0
  149. commands/doc/glossary/images/out-list-all-terms 2024-11-06 at 16.22.20@2x.png +0 -0
  150. commands/doc/glossary/images/out-list-terms-for-example 2024-11-06 at 16.40.12.png +0 -0
  151. commands/doc/glossary/images/out-list-terms-second 2024-11-06 at 16.45.13.png +0 -0
  152. commands/doc/glossary/images/out-pipx install pyegeria 2024-11-10 at 18.12.21.png +0 -0
  153. commands/doc/glossary/images/out-server-status-full 2024-11-10 at 18.25.14.png +0 -0
  154. commands/doc/glossary/images/out-servers-status 2024-11-10 at 18.15.42.png +0 -0
  155. commands/doc/glossary/images/out-upsert-import 2024-11-07 at 19.37.00.png +0 -0
  156. commands/doc/glossary/images/tui-2024-11-10 at 18.26.29.png +0 -0
  157. commands/doc/glossary/images/tui-create-glossary example 2024-11-05 at 20.34.24@2x.png +0 -0
  158. commands/doc/glossary/images/tui-create-term 2024-11-06 at 20.46.35.png +0 -0
  159. commands/doc/glossary/images/tui-delete-term 2024-11-07 at 03.51.57.png +0 -0
  160. commands/doc/glossary/images/tui-display-terms-for-example 2024-11-06 at 20.56.49.png +0 -0
  161. commands/doc/glossary/images/tui-export-example 2024-11-07 at 09.52.59.png +0 -0
  162. commands/doc/glossary/images/tui-hey-egeria 2024-11-10 at 18.31.01.png +0 -0
  163. commands/doc/glossary/images/tui-import-upsert-example 2024-11-07 at 10.08.37.png +0 -0
  164. commands/doc/glossary/images/tui-list-terms-second 2024-11-06 at 16.46.34.png +0 -0
  165. commands/doc/glossary/images/tui-load-archive.png +0 -0
  166. commands/doc/glossary/images/tui-server-status-full 2024-11-10 at 19.14.36.png +0 -0
  167. commands/doc/glossary/images/tui-show-glossaries 2024-11-07 at 20.00.05.png +0 -0
  168. commands/doc/glossary/images/tui-show-glossary-terms 2024-11-05 at 19.37.53@2x.png +0 -0
  169. commands/doc/glossary/images/tui-upsert 2024-11-07 at 11.49.04.png +0 -0
  170. commands/doc/glossary/images/upsert-example.om-terms 2024-11-07 at 11.44.05.png +0 -0
  171. commands/doc/hey_egeria: a pyegeria command line interface/README.md +0 -346
  172. commands/doc/hey_egeria: a pyegeria command line interface/images/CleanShot 2024-11-18 at 21.32.03@2x.png +0 -0
  173. commands/doc/hey_egeria: a pyegeria command line interface/images/Xmind 1731421782704.png +0 -0
  174. commands/doc/hey_egeria: a pyegeria command line interface/images/Xmind 1731422134920.png +0 -0
  175. commands/doc/hey_egeria: a pyegeria command line interface/images/hey_egeria 2024-11-12 at 20.38.43.png +0 -0
  176. commands/doc/hey_egeria: a pyegeria command line interface/images/hey_egeria cat 2024-11-12 at 21.41.43.png +0 -0
  177. commands/doc/hey_egeria: a pyegeria command line interface/images/out-integ-status-list 2024-11-12 at 16.45.26.png +0 -0
  178. commands/doc/hey_egeria: a pyegeria command line interface/images/out-integ-status-live 2024-11-12 at 16.44.12@2x.png +0 -0
  179. commands/doc/hey_egeria: a pyegeria command line interface/images/out-server-status 2024-11-10 at 18.15.42@2x.png +0 -0
  180. commands/doc/hey_egeria: a pyegeria command line interface/images/out-server-status-full 2024-11-10 at 18.25.14@2x.png +0 -0
  181. commands/doc/hey_egeria: a pyegeria command line interface/images/short-cut commands 2024-11-12 at 22.22.13.png +0 -0
  182. commands/doc/hey_egeria: a pyegeria command line interface/images/tui-hey-egeria.png +0 -0
  183. commands/doc/hey_egeria: a pyegeria command line interface/images/tui-integration-status-paging.png +0 -0
  184. commands/doc/hey_egeria: a pyegeria command line interface/images/tui-load-archive 2024-11-10 at 19.19.09@2x.png +0 -0
  185. commands/doc/hey_egeria: a pyegeria command line interface/images/tui-show-server-status 2024-11-10 at 18.52.01@2x.png +0 -0
  186. commands/doc/hey_egeria: a pyegeria command line interface/images/tui-show-server-status-full 2024-11-10.png +0 -0
  187. commands/doc/hey_egeria: a pyegeria command line interface/images/tui-status-paging 2024-11-12 at 16.26.14@2x.png +0 -0
  188. commands/my/README.md +0 -17
  189. commands/ops/README.md +0 -24
  190. commands/tech/README.md +0 -24
  191. md_processing/.obsidian/app.json +0 -1
  192. md_processing/.obsidian/appearance.json +0 -1
  193. md_processing/.obsidian/community-plugins.json +0 -1
  194. md_processing/.obsidian/core-plugins.json +0 -33
  195. md_processing/.obsidian/workspace.json +0 -167
  196. md_processing/data/commands-working.json +0 -34850
  197. md_processing/data/commands.json +0 -51697
  198. md_processing/data/generated_format_sets.json +0 -4137
  199. md_processing/dr_egeria_inbox/glossary_creation_experiment.ipynb +0 -341
  200. md_processing/md_processing_utils/debug_log +0 -84
  201. md_processing/md_processing_utils/dr-egeria-help-2025-09-09T11:10:03.md +0 -3305
  202. md_processing/md_processing_utils/dr-egeria-help-2025-09-10T14:49:49.md +0 -3460
  203. md_processing/md_processing_utils/dr-egeria-help-2025-09-10T14:57:46.md +0 -472
  204. pyegeria/README.md +0 -35
  205. pyegeria-5.4.5.dist-info/RECORD +0 -306
  206. pyegeria-5.4.5.dist-info/entry_points.txt +0 -105
  207. {pyegeria-5.4.5.dist-info → pyegeria-5.4.7.dist-info/licenses}/LICENSE +0 -0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
commands/cli/egeria.py CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
md_processing/__init__.py CHANGED
@@ -16,6 +16,7 @@ from md_processing.md_commands.product_manager_commands import (process_digital_
16
16
  process_product_dependency_command,
17
17
  process_attach_collection_command,
18
18
  process_attach_subscriber_command,
19
+ process_csv_element_upsert_command,
19
20
  )
20
21
 
21
22
  from md_processing.md_commands.solution_architect_commands import (process_blueprint_upsert_command,
@@ -41,6 +42,7 @@ from md_processing.md_commands.ext_ref_commands import (process_external_referen
41
42
  process_link_to_media_reference_command,
42
43
  process_link_to_external_reference_command,
43
44
  process_link_to_cited_document_command,
45
+
44
46
  )
45
47
 
46
48
  # Re-export all functions from the original md_processing_utils.py to maintain backward compatibility
@@ -23,7 +23,7 @@ from md_processing import (extract_command, process_glossary_upsert_command, pro
23
23
  process_provenance_command, get_current_datetime_string,
24
24
  process_project_upsert_command, command_list, process_blueprint_upsert_command,
25
25
  process_solution_component_upsert_command, process_component_link_unlink_command,
26
-
26
+ process_csv_element_upsert_command,
27
27
  process_link_term_term_relationship_command,
28
28
  process_information_supply_chain_upsert_command,
29
29
  process_information_supply_chain_link_unlink_command, process_sol_arch_list_command,
@@ -202,6 +202,9 @@ def process_md_file(input_file: str, output_folder:str, directive: str, server:
202
202
  "Create Product Subscription", "Update Agreement", "Update Data Sharing Agreement",
203
203
  "Update Digital Subscription", "Update Product Subscription"]:
204
204
  result = process_agreement_upsert_command(client, current_block, directive)
205
+ elif potential_command in ["Create CSV File"]:
206
+ result = process_csv_element_upsert_command(client, current_block, directive)
207
+
205
208
  elif potential_command in SIMPLE_COLLECTIONS:
206
209
  result = process_collection_upsert_command(client, current_block, directive)
207
210
  elif potential_command in GOV_COM_LIST:
@@ -296,7 +299,7 @@ def process_md_file(input_file: str, output_folder:str, directive: str, server:
296
299
  process_current_block(current_block)
297
300
 
298
301
  # Join the final output list into a single string
299
- final_output = "\n".join(final_output)
302
+ final_output = "\n".join(final_output) if isinstance(final_output, list) else final_output
300
303
 
301
304
  try:
302
305
  if updated:
@@ -1,6 +1,11 @@
1
- """
1
+ """PDX-License-Identifier: Apache-2.0
2
+ Copyright Contributors to the ODPi Egeria project.
3
+
2
4
  This file contains term-related object_action functions for processing Egeria Markdown
5
+
6
+
3
7
  """
8
+
4
9
  import json
5
10
  import os
6
11
  import sys
@@ -265,7 +265,7 @@ def process_collection_upsert_command(egeria_client: EgeriaTech, txt: str, direc
265
265
  })
266
266
  msg = f"\nCreated Element `{display_name}` with GUID {guid}\n\n___"
267
267
  # todo - add the source member asset to the product manager
268
- # create_element_from_template
268
+ # create_elem_from_template
269
269
  # add this guid to the product collection
270
270
  logger.success(msg)
271
271
  return egeria_client.get_collection_by_guid(guid, obj, output_format='MD', output_format_set=output_set)
@@ -631,6 +631,106 @@ def process_agreement_upsert_command(egeria_client: EgeriaTech, txt: str, direct
631
631
 
632
632
 
633
633
 
634
+ @logger.catch
635
+ def process_csv_element_upsert_command(egeria_client: EgeriaTech, txt: str, directive: str = "display") -> Optional[str]:
636
+ """
637
+ Processes a create CSV element command by extracting key attributes and calling the pyegeria
638
+ api that creates a csv element from template.
639
+
640
+ :param txt: A string representing the input cell to be processed for
641
+ extracting glossary-related attributes.
642
+ :param directive: an optional string indicating the directive to be used - display, validate or execute
643
+ :return: A string summarizing the outcome of the processing.
644
+ """
645
+ command, object_type, object_action = extract_command_plus(txt)
646
+ print(Markdown(f"# {command}\n"))
647
+
648
+ parsed_output = parse_upsert_command(egeria_client, object_type, object_action, txt, directive)
649
+ if not parsed_output:
650
+ logger.error(f"No output for `{object_action}`")
651
+ return None
652
+
653
+ valid = parsed_output['valid']
654
+ exists = parsed_output['exists']
655
+
656
+ qualified_name = parsed_output.get('qualified_name', None)
657
+ guid = parsed_output.get('guid', None)
658
+
659
+ print(Markdown(parsed_output['display']))
660
+
661
+ logger.debug(json.dumps(parsed_output, indent=4))
662
+
663
+ attributes = parsed_output['attributes']
664
+
665
+ display_name = attributes['Display Name'].get('value', None)
666
+ status = attributes.get('Status', {}).get('value', None)
667
+ output_set = make_format_set_name_from_type(object_type)
668
+
669
+ file_name = attributes.get('File Name', {}).get('value', None)
670
+ file_type = attributes.get('File Type', {}).get('value', None)
671
+ file_path = attributes.get('File Path', {}).get('value', None)
672
+ file_encoding = attributes.get('File Encoding', {}).get('value', 'UTF-8')
673
+ file_extension = attributes.get('File Extension', {}).get('value', 'csv')
674
+ file_system_name = attributes.get('File System Name', {}).get('value', None)
675
+ version_identifier = attributes.get('Version Identifier', {}).get('value', None)
676
+ description = attributes.get('Description', {}).get('value', None)
677
+
678
+ if directive == "display":
679
+
680
+ return None
681
+ elif directive == "validate":
682
+ if valid:
683
+ print(Markdown(f"==> Validation of {command} completed successfully!\n"))
684
+ else:
685
+ msg = f"Validation failed for object_action `{command}`\n"
686
+ return valid
687
+
688
+ elif directive == "process":
689
+ try:
690
+
691
+ if object_action == "Create":
692
+ if valid is False and exists:
693
+ msg = (f" Element `{display_name}` already exists and result document updated changing "
694
+ f"`Create` to `Update` in processed output\n\n___")
695
+ logger.error(msg)
696
+ return update_a_command(txt, object_action, object_type, qualified_name, guid)
697
+
698
+ else:
699
+ guid = egeria_client.get_create_csv_data_file_element_from_template(
700
+ file_name, file_type, file_path, version_identifier, file_encoding, file_extension, file_system_name, description)
701
+
702
+ if guid:
703
+ update_element_dictionary(qualified_name, {
704
+ 'guid': guid, 'display_name': display_name
705
+ })
706
+ msg = f"Created Element `{display_name}` with GUID {guid}\n\n___"
707
+ logger.success(msg)
708
+ output_md = (f"# Create CSV File\n\n## Display Name:\n\n {display_name}\n\n"
709
+ f"## File Type:\n\n {file_type}\n\n## File Path:\n\n {file_path}\n\n"
710
+ f"## File Encoding:\n\n {file_encoding}\n\n## File Extension:\n\n {file_extension}\n\n"
711
+ f"## File System Name:\n\n {file_system_name}\n\n## Version Identifier:\n\n {version_identifier}\n\n"
712
+ f"## Description:\n\n {description}\n\n"
713
+ f"## Qualified Name\n\n {qualified_name}\n\n"
714
+ f"## GUID:\n\n {guid}\n\n"
715
+ )
716
+ return output_md
717
+ else:
718
+ msg = f"Failed to create element `{display_name}` with GUID {guid}\n\n___"
719
+ logger.error(msg)
720
+ return None
721
+ else:
722
+ logger.error(f"Currently only the Create action is supported for this command: {command}")
723
+
724
+ except PyegeriaException as e:
725
+ logger.error(f"Pyegeria error performing {command}: {e}")
726
+ print_exception_table(e)
727
+ return None
728
+ except Exception as e:
729
+ logger.error(f"Error performing {command}: {e}")
730
+ else:
731
+ logger.error(f"Invalid directive `{directive}`")
732
+ return None
733
+
634
734
 
635
735
 
636
736
  def process_link_agreement_item_command(egeria_client: EgeriaTech, txt: str,
@@ -242,7 +242,8 @@ command_list = ["Provenance", "Create Glossary", "Update Glossary", "Create Term
242
242
  "Link Governance Drivers", "Detach Governance Drivers",
243
243
  "Link Governance Policies", "Detach Governance Policies",
244
244
  "Link Governance Controls", "Detach Governance Controls",
245
- "Link Governed By", "Attach Governed By", "Detach Governed By"
245
+ "Link Governed By", "Attach Governed By", "Detach Governed By",
246
+ "Create CSV File"
246
247
 
247
248
  ]
248
249
  command_list.extend(LIST_COMMANDS)
pyegeria/__init__.py CHANGED
@@ -68,6 +68,7 @@ from .x_action_author_omvs import ActionAuthor
68
68
  from .template_manager_omvs import TemplateManager
69
69
  from .data_designer import DataDesigner
70
70
  from ._output_formats import select_output_format_set
71
+ from .mcp_adapter import list_reports, describe_report, run_report
71
72
  #
72
73
  global template_guids, integration_guids
73
74
 
pyegeria/_client_new.py CHANGED
@@ -1081,7 +1081,7 @@ class Client2:
1081
1081
  logger.info(response.json())
1082
1082
  return response.json().get("guid", "NO_GUID_RETURNED")
1083
1083
 
1084
- async def _async_create_elem_from_template(self, url: str, body: dict | TemplateRequestBody = None) -> str:
1084
+ async def _async_create_element_from_template(self, url: str, body: dict | TemplateRequestBody = None) -> str:
1085
1085
  validated_body = self.validate_new_element_from_template_request(body)
1086
1086
  json_body = validated_body.model_dump_json(indent=2, exclude_none=True)
1087
1087
  logger.info(json_body)
@@ -2179,15 +2179,16 @@ output_format_sets = combine_format_set_dicts(base_output_format_sets, generated
2179
2179
 
2180
2180
  def select_output_format_set(kind: str, output_type: str) -> dict | None:
2181
2181
  """
2182
- This function retrieves the appropriate output set configuration dictionary based on the `kind` and `output_type`.
2183
- If output_type = `ANY` that indicates this is just a test to see of the output format set exists.
2182
+ Retrieve the appropriate output set configuration dictionary based on `kind` and `output_type`.
2184
2183
 
2185
- :param kind: The kind of output set (e.g., "Referenceable", "Collections").
2186
- :param output_type: The desired output format type (e.g., "DICT", "LIST", "REPORT").
2187
- :return: The matched output set dictionary or None if no match is found.
2184
+ Intent of special output_type values:
2185
+ - "ANY": Discovery-only. Resolve the FormatSet (including aliases), action, and metadata, but DO NOT
2186
+ resolve a concrete format. Callers typically use this to check existence or to later pick a specific type
2187
+ via get_output_format_type_match(...).
2188
2188
 
2189
- Returns:
2190
- dict | None:
2189
+ :param kind: The kind of output set (e.g., "Referenceable", "Collections"). Aliases are supported.
2190
+ :param output_type: The desired output format type (e.g., "DICT", "LIST", "REPORT"), or "ANY".
2191
+ :return: The matched output set dictionary or None if no match is found.
2191
2192
  """
2192
2193
  # Normalize the output type to uppercase for consistency
2193
2194
  output_type = output_type.upper()
@@ -2256,6 +2257,41 @@ def output_format_set_list() -> list[str]:
2256
2257
  return list(output_format_sets.keys())
2257
2258
 
2258
2259
 
2260
+ def list_mcp_format_sets() -> dict:
2261
+ """
2262
+ Returns only those format set names that can be safely exposed as MCP tools.
2263
+ A format set is eligible if it has a DICT format or an ALL catch-all format.
2264
+
2265
+ This allows MCP to prefer machine-consumable outputs and avoid side effects.
2266
+ """
2267
+ # eligible: list[str] = []
2268
+ # for name, fs in output_format_sets.items():
2269
+ # try:
2270
+ # # fs is a FormatSet
2271
+ # has_dict = any("DICT" in f.types for f in fs.formats)
2272
+ # has_all = any("ALL" in f.types for f in fs.formats)
2273
+ # if has_dict or has_all:
2274
+ # eligible.append(name)
2275
+ # except Exception:
2276
+ # # Defensive: skip malformed entries
2277
+ # continue
2278
+ # return sorted(eligible)
2279
+ return {
2280
+ name: {
2281
+ "description": fs.description,
2282
+ "target_type": fs.target_type,
2283
+ "required_params": ", ".join(fs.action.required_params) or "",
2284
+ "optional_params": ", ".join(fs.action.optional_params) or "",
2285
+ }
2286
+ for name, fs in sorted(output_format_sets.items())
2287
+ if fs and fs.action and any(
2288
+ format_type in ["DICT", "ALL"]
2289
+ for format_obj in fs.formats
2290
+ for format_type in format_obj.types
2291
+ )
2292
+ }
2293
+
2294
+
2259
2295
  def get_output_format_set_heading(format_set: str) -> str:
2260
2296
  """
2261
2297
  Gets the heading of a format set.
@@ -54,7 +54,7 @@ class AutomatedCuration(Client2):
54
54
  Client2.__init__(self, view_server, platform_url, user_id, user_pwd, token=token)
55
55
  self.curation_command_root = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/automated-curation"
56
56
 
57
- async def _async_create_element_from_template(self, body: dict) -> str:
57
+ async def _async_create_elem_from_template(self, body: dict) -> str:
58
58
  """Create a new metadata element from a template. Async version.
59
59
  Parameters
60
60
  ----------
@@ -99,9 +99,9 @@ class AutomatedCuration(Client2):
99
99
  """
100
100
 
101
101
  url = f"{self.curation_command_root}/catalog-templates/new-element"
102
- return await self._async_create_elem_from_template(url, body)
102
+ return await self._async_create_element_from_template(url, body)
103
103
 
104
- def create_element_from_template(self, body: dict) -> str:
104
+ def create_elem_from_template(self, body: dict) -> str:
105
105
  """Create a new metadata element from a template. Async version.
106
106
  Parameters
107
107
  ----------
@@ -147,10 +147,11 @@ class AutomatedCuration(Client2):
147
147
  """
148
148
  loop = asyncio.get_event_loop()
149
149
  response = loop.run_until_complete(
150
- self._async_create_element_from_template(body)
150
+ self._async_create_elem_from_template(body)
151
151
  )
152
152
  return response
153
153
 
154
+
154
155
  async def _async_create_kafka_server_element_from_template(
155
156
  self,
156
157
  kafka_server: str,
@@ -194,7 +195,7 @@ class AutomatedCuration(Client2):
194
195
  },
195
196
  }
196
197
  body_s = body_slimmer(body)
197
- return await self._async_create_element_from_template(body_s)
198
+ return await self._async_create_elem_from_template(body_s)
198
199
 
199
200
  def create_kafka_server_element_from_template(
200
201
  self,
@@ -289,7 +290,7 @@ class AutomatedCuration(Client2):
289
290
  },
290
291
  }
291
292
  body_s = body_slimmer(body)
292
- return await self._async_create_element_from_template(body_s)
293
+ return await self._async_create_elem_from_template(body_s)
293
294
 
294
295
  def create_csv_data_file_element_from_template(
295
296
  self,
@@ -337,6 +338,112 @@ class AutomatedCuration(Client2):
337
338
  )
338
339
  return response
339
340
 
341
+ async def _async_get_create_csv_data_file_element_from_template(
342
+ self,
343
+ file_name: str,
344
+ file_type: str,
345
+ file_path_name: str,
346
+ version_identifier: str,
347
+ file_encoding: str = "UTF-8",
348
+ file_extension: str = "csv",
349
+ file_system_name: str = None,
350
+ description: str = None,
351
+ ) -> str:
352
+ """Create a CSV file element from a template if it doesn't exist. If it does exist,
353
+ the guid will be returned. Async version.
354
+
355
+ Parameters
356
+ ----------
357
+ file_name : str
358
+ The name of the Kafka server.
359
+ file_type : str
360
+ The host name of the Kafka server.
361
+ file_path_name : str
362
+ The port number of the Kafka server.
363
+ version_identifier : str
364
+ The version identifier of the CSV file..
365
+ file_encoding: str, opt, default UTF-8
366
+ The encoding of the CSV file.
367
+ file_extension: str, opt, default is CSV
368
+ File extension of the CSV file.
369
+ file_system_name: str, opt
370
+ Name of the file system the CSV file is hosted on.
371
+ description: str, opt
372
+ A description of the CSV file..
373
+
374
+
375
+ Returns
376
+ -------
377
+ str
378
+ The GUID of the CSV File element.
379
+ """
380
+ template_guid = await self._async_get_template_guid_for_technology_type("CSV Data File")
381
+ body = {
382
+ "class": "TemplateRequestBody",
383
+ "templateGUID": template_guid,
384
+ "isOwnAnchor": True,
385
+ "allowRetrieve" : True,
386
+ "placeholderPropertyValues": {
387
+ "fileName": file_name,
388
+ "fileType": file_type,
389
+ "filePathName": file_path_name,
390
+ "versionIdentifier": version_identifier,
391
+ "fileEncoding": file_encoding,
392
+ "fileExtension": file_extension,
393
+ "fileSystemName": file_system_name,
394
+ "description": description
395
+ },
396
+ }
397
+ body_s = body_slimmer(body)
398
+ return await self._async_create_elem_from_template(body_s)
399
+
400
+ def get_create_csv_data_file_element_from_template(
401
+ self,
402
+ file_name: str,
403
+ file_type: str,
404
+ file_path_name: str,
405
+ version_identifier: str,
406
+ file_encoding: str = "UTF-8",
407
+ file_extension: str = "csv",
408
+ file_system_name: str = None,
409
+ description: str = None,
410
+ ) -> str:
411
+ """Create a CSV file element from a template if it doesn't exist. If it does exist,
412
+ the guid will be returned.
413
+
414
+ Parameters
415
+ ----------
416
+ file_name : str
417
+ The name of the Kafka server.
418
+ file_type : str
419
+ The host name of the Kafka server.
420
+ file_path_name : str
421
+ The port number of the Kafka server.
422
+ version_identifier : str
423
+ The version identifier of the CSV file..
424
+ file_encoding: str, opt, default UTF-8
425
+ The encoding of the CSV file.
426
+ file_extension: str, opt, default is CSV
427
+ File extension of the CSV file.
428
+ file_system_name: str, opt
429
+ Name of the file system the CSV file is hosted on.
430
+ description: str, opt
431
+ A description of the CSV file..
432
+
433
+ Returns
434
+ -------
435
+ str
436
+ The GUID of the CSV File element.
437
+ """
438
+ loop = asyncio.get_event_loop()
439
+ response = loop.run_until_complete(
440
+ self._async_get_create_csv_data_file_element_from_template(
441
+ file_name, file_type, file_path_name, version_identifier,
442
+ file_encoding, file_extension, file_system_name, description
443
+ )
444
+ )
445
+ return response
446
+
340
447
  async def _async_create_postgres_server_element_from_template(
341
448
  self,
342
449
  postgres_server: str,
@@ -391,7 +498,7 @@ class AutomatedCuration(Client2):
391
498
  },
392
499
  }
393
500
  body_s = body_slimmer(body)
394
- return await self._async_create_element_from_template(body_s)
501
+ return await self._async_create_elem_from_template(body_s)
395
502
 
396
503
  def create_postgres_server_element_from_template(
397
504
  self,
@@ -490,7 +597,7 @@ class AutomatedCuration(Client2):
490
597
  },
491
598
  }
492
599
  body_s = body_slimmer(body)
493
- response = await self._async_create_element_from_template(body_s)
600
+ response = await self._async_create_elem_from_template(body_s)
494
601
  return str(response)
495
602
 
496
603
  def create_postgres_database_element_from_template(
@@ -592,7 +699,7 @@ class AutomatedCuration(Client2):
592
699
  },
593
700
  }
594
701
  body_s = body_slimmer(body)
595
- response = await self._async_create_element_from_template(body_s)
702
+ response = await self._async_create_elem_from_template(body_s)
596
703
  return str(response)
597
704
 
598
705
  def create_folder_element_from_template(
@@ -687,7 +794,7 @@ class AutomatedCuration(Client2):
687
794
  },
688
795
  }
689
796
  body_s = body_slimmer(body)
690
- response = await self._async_create_element_from_template(body_s)
797
+ response = await self._async_create_elem_from_template(body_s)
691
798
  return str(response)
692
799
 
693
800
  def create_uc_server_element_from_template(
@@ -776,7 +883,7 @@ class AutomatedCuration(Client2):
776
883
  },
777
884
  }
778
885
  body_s = body_slimmer(body)
779
- response = await self._async_create_element_from_template(body_s)
886
+ response = await self._async_create_elem_from_template(body_s)
780
887
  return str(response)
781
888
 
782
889
  def create_uc_catalog_element_from_template(
@@ -866,7 +973,7 @@ class AutomatedCuration(Client2):
866
973
  },
867
974
  }
868
975
  body_s = body_slimmer(body)
869
- response = await self._async_create_element_from_template(body_s)
976
+ response = await self._async_create_elem_from_template(body_s)
870
977
  return str(response)
871
978
 
872
979
  def create_uc_schema_element_from_template(
@@ -977,7 +1084,7 @@ class AutomatedCuration(Client2):
977
1084
  },
978
1085
  }
979
1086
  body_s = body_slimmer(body)
980
- response = await self._async_create_element_from_template(body_s)
1087
+ response = await self._async_create_elem_from_template(body_s)
981
1088
  return str(response)
982
1089
 
983
1090
  def create_uc_table_element_from_template(
@@ -1097,7 +1204,7 @@ class AutomatedCuration(Client2):
1097
1204
  },
1098
1205
  }
1099
1206
  body_s = body_slimmer(body)
1100
- response = await self._async_create_element_from_template(body_s)
1207
+ response = await self._async_create_elem_from_template(body_s)
1101
1208
  return str(response)
1102
1209
 
1103
1210
  def create_uc_function_element_from_template(
@@ -1214,7 +1321,7 @@ class AutomatedCuration(Client2):
1214
1321
  },
1215
1322
  }
1216
1323
  body_s = body_slimmer(body)
1217
- response = await self._async_create_element_from_template(body_s)
1324
+ response = await self._async_create_elem_from_template(body_s)
1218
1325
  return str(response)
1219
1326
 
1220
1327
  def create_uc_volume_element_from_template(