pyegeria 5.4.0.28__py3-none-any.whl → 5.5.3.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (433) hide show
  1. commands/__init__.py +24 -0
  2. commands/cat/Dr-Egeria_md-orig.py +2 -2
  3. commands/cat/collection_actions.py +197 -0
  4. commands/cat/dr_egeria_command_help.py +137 -38
  5. commands/cat/dr_egeria_jupyter.py +7 -7
  6. commands/cat/dr_egeria_md.py +10 -267
  7. commands/cat/exp_list_glossaries.py +11 -14
  8. commands/cat/get_asset_graph.py +37 -267
  9. commands/cat/{get_collection.py → get_collection_tree.py} +10 -18
  10. commands/cat/get_project_dependencies.py +14 -14
  11. commands/cat/get_project_structure.py +15 -14
  12. commands/cat/get_tech_type_elements.py +16 -116
  13. commands/cat/glossary_actions.py +145 -298
  14. commands/cat/list_assets.py +3 -11
  15. commands/cat/list_cert_types.py +17 -63
  16. commands/cat/list_collections.py +17 -139
  17. commands/cat/list_deployed_catalogs.py +15 -27
  18. commands/cat/list_deployed_database_schemas.py +27 -43
  19. commands/cat/list_deployed_databases.py +16 -31
  20. commands/cat/list_deployed_servers.py +35 -54
  21. commands/cat/list_glossaries.py +18 -17
  22. commands/cat/list_projects.py +10 -12
  23. commands/cat/list_tech_type_elements.py +21 -37
  24. commands/cat/list_tech_types.py +13 -25
  25. commands/cat/list_terms.py +38 -79
  26. commands/cat/list_todos.py +4 -11
  27. commands/cat/list_user_ids.py +3 -10
  28. commands/cat/my_reports.py +559 -0
  29. commands/cat/run_report.py +394 -0
  30. commands/cat/{list_format_set.py → run_report_orig.py} +136 -44
  31. commands/cli/egeria.py +182 -219
  32. commands/cli/egeria_cat.py +32 -59
  33. commands/cli/egeria_my.py +13 -0
  34. commands/cli/egeria_ops.py +69 -74
  35. commands/cli/egeria_tech.py +17 -93
  36. commands/{cat → deprecated}/list_data_designer.py +2 -4
  37. commands/{cat → deprecated}/list_data_structures_full.py +3 -6
  38. commands/deprecated/old_get_asset_graph.py +315 -0
  39. commands/my/__init__.py +0 -2
  40. commands/my/list_my_profile.py +27 -34
  41. commands/my/list_my_roles.py +1 -7
  42. commands/my/monitor_my_todos.py +1 -7
  43. commands/my/monitor_open_todos.py +6 -7
  44. commands/my/todo_actions.py +4 -5
  45. commands/ops/__init__.py +0 -2
  46. commands/ops/gov_server_actions.py +17 -21
  47. commands/ops/list_archives.py +17 -38
  48. commands/ops/list_catalog_targets.py +33 -40
  49. commands/ops/load_archive.py +14 -11
  50. commands/ops/{monitor_engine_activity_c.py → monitor_active_engine_activity.py} +51 -82
  51. commands/ops/{monitor_integ_daemon_status.py → monitor_daemon_status.py} +35 -55
  52. commands/ops/monitor_engine_activity.py +79 -77
  53. commands/ops/{monitor_gov_eng_status.py → monitor_engine_status.py} +10 -7
  54. commands/ops/monitor_platform_status.py +38 -50
  55. commands/ops/monitor_server_startup.py +6 -11
  56. commands/ops/monitor_server_status.py +7 -11
  57. commands/ops/orig_monitor_server_list.py +8 -8
  58. commands/ops/orig_monitor_server_status.py +1 -5
  59. commands/ops/refresh_integration_daemon.py +5 -5
  60. commands/ops/restart_integration_daemon.py +5 -5
  61. commands/ops/table_integ_daemon_status.py +6 -6
  62. commands/ops/x_engine_actions.py +7 -7
  63. commands/tech/__init__.py +0 -2
  64. commands/tech/{generic_actions.py → element_actions.py} +6 -11
  65. commands/tech/get_element_info.py +20 -29
  66. commands/tech/get_guid_info.py +23 -42
  67. commands/tech/get_tech_details.py +20 -35
  68. commands/tech/get_tech_type_template.py +28 -39
  69. commands/tech/list_all_om_type_elements.py +24 -30
  70. commands/tech/list_all_om_type_elements_x.py +22 -28
  71. commands/tech/list_all_related_elements.py +19 -28
  72. commands/tech/list_anchored_elements.py +22 -30
  73. commands/tech/list_asset_types.py +19 -24
  74. commands/tech/list_elements_by_classification_by_property_value.py +26 -32
  75. commands/tech/list_elements_by_property_value.py +19 -25
  76. commands/tech/list_elements_by_property_value_x.py +20 -28
  77. commands/tech/list_elements_for_classification.py +28 -41
  78. commands/tech/list_gov_action_processes.py +16 -27
  79. commands/tech/list_information_supply_chains.py +22 -30
  80. commands/tech/list_registered_services.py +14 -26
  81. commands/tech/list_related_elements_with_prop_value.py +15 -25
  82. commands/tech/list_related_specification.py +1 -4
  83. commands/tech/list_relationship_types.py +15 -25
  84. commands/tech/list_relationships.py +20 -36
  85. commands/tech/list_solution_blueprints.py +28 -33
  86. commands/tech/list_solution_components.py +23 -29
  87. commands/tech/list_solution_roles.py +21 -32
  88. commands/tech/list_tech_templates.py +51 -54
  89. commands/tech/list_valid_metadata_values.py +5 -9
  90. commands/tech/table_tech_templates.py +2 -6
  91. commands/tech/x_list_related_elements.py +1 -4
  92. examples/GeoSpatial Products Example.py +524 -0
  93. examples/Jupyter Notebooks/P-egeria-server-config.ipynb +2137 -0
  94. examples/Jupyter Notebooks/README.md +2 -0
  95. examples/Jupyter Notebooks/common/P-environment-check.ipynb +115 -0
  96. examples/Jupyter Notebooks/common/__init__.py +14 -0
  97. examples/Jupyter Notebooks/common/common-functions.ipynb +4694 -0
  98. examples/Jupyter Notebooks/common/environment-check.ipynb +52 -0
  99. examples/Jupyter Notebooks/common/globals.ipynb +184 -0
  100. examples/Jupyter Notebooks/common/globals.py +154 -0
  101. examples/Jupyter Notebooks/common/orig_globals.py +152 -0
  102. examples/format_sets/all_format_sets.json +910 -0
  103. examples/format_sets/custom_format_sets.json +268 -0
  104. examples/format_sets/subset_format_sets.json +187 -0
  105. examples/format_sets_save_load_example.py +291 -0
  106. examples/jacquard_data_sets.py +129 -0
  107. examples/output_formats_example.py +193 -0
  108. examples/test_jacquard_data_sets.py +54 -0
  109. examples/test_jacquard_data_sets_scenarios.py +94 -0
  110. md_processing/__init__.py +33 -24
  111. md_processing/command_dispatcher.py +33 -0
  112. md_processing/command_mapping.py +221 -0
  113. md_processing/data/commands/commands_data_designer.json +537 -0
  114. md_processing/data/commands/commands_external_reference.json +733 -0
  115. md_processing/data/commands/commands_feedback.json +155 -0
  116. md_processing/data/commands/commands_general.json +204 -0
  117. md_processing/data/commands/commands_glossary.json +218 -0
  118. md_processing/data/commands/commands_governance.json +3678 -0
  119. md_processing/data/commands/commands_product_manager.json +865 -0
  120. md_processing/data/commands/commands_project.json +642 -0
  121. md_processing/data/commands/commands_solution_architect.json +366 -0
  122. md_processing/data/commands.json +6489 -30060
  123. md_processing/data/{commands-working.json → commands_working.json} +9304 -13513
  124. md_processing/data/gened_report_specs.py +6584 -0
  125. md_processing/data/generated_format_sets.json +6533 -0
  126. md_processing/data/generated_format_sets_old.json +4137 -0
  127. md_processing/data/generated_format_sets_old.py +45 -0
  128. md_processing/dr_egeria.py +182 -0
  129. md_processing/md_commands/data_designer_commands.py +195 -583
  130. md_processing/md_commands/ext_ref_commands.py +530 -0
  131. md_processing/md_commands/feedback_commands.py +726 -0
  132. md_processing/md_commands/glossary_commands.py +106 -490
  133. md_processing/md_commands/governance_officer_commands.py +129 -18
  134. md_processing/md_commands/product_manager_commands.py +362 -115
  135. md_processing/md_commands/project_commands.py +351 -134
  136. md_processing/md_commands/solution_architect_commands.py +276 -232
  137. md_processing/md_commands/view_commands.py +295 -0
  138. md_processing/md_processing_utils/common_md_proc_utils.py +258 -166
  139. md_processing/md_processing_utils/common_md_utils.py +138 -43
  140. md_processing/md_processing_utils/determine_width.py +103 -0
  141. md_processing/md_processing_utils/extraction_utils.py +100 -39
  142. md_processing/md_processing_utils/gen_report_specs.py +643 -0
  143. md_processing/md_processing_utils/generate_dr_help.py +61 -33
  144. md_processing/md_processing_utils/generate_md_cmd_templates.py +20 -19
  145. md_processing/md_processing_utils/generate_md_templates.py +3 -12
  146. md_processing/md_processing_utils/md_processing_constants.py +1053 -72
  147. pyegeria/__init__.py +203 -158
  148. pyegeria/core/__init__.py +40 -0
  149. pyegeria/core/_base_platform_client.py +574 -0
  150. pyegeria/core/_base_server_client.py +573 -0
  151. pyegeria/{_exceptions_new.py → core/_exceptions.py} +62 -30
  152. pyegeria/{_globals.py → core/_globals.py} +14 -3
  153. pyegeria/core/_server_client.py +6073 -0
  154. pyegeria/{_validators.py → core/_validators.py} +7 -8
  155. pyegeria/core/config.py +654 -0
  156. pyegeria/{create_tech_guid_lists.py → core/create_tech_guid_lists.py} +0 -1
  157. pyegeria/core/load_config.py +37 -0
  158. pyegeria/{logging_configuration.py → core/logging_configuration.py} +1 -1
  159. pyegeria/core/mcp_adapter.py +144 -0
  160. pyegeria/core/mcp_server.py +212 -0
  161. pyegeria/core/utils.py +405 -0
  162. pyegeria/{_client.py → deprecated/_client.py} +24 -25
  163. pyegeria/{_deprecated_gov_engine.py → deprecated/_deprecated_gov_engine.py} +16 -16
  164. pyegeria/{classification_manager_omvs.py → deprecated/classification_manager_omvs.py} +1987 -1877
  165. pyegeria/{output_formatter.py → deprecated/output_formatter_with_machine_keys.py} +298 -45
  166. pyegeria/{runtime_manager_omvs.py → deprecated/runtime_manager_omvs.py} +155 -171
  167. pyegeria/{valid_metadata_omvs.py → deprecated/valid_metadata_omvs.py} +93 -93
  168. pyegeria/{x_action_author_omvs.py → deprecated/x_action_author_omvs.py} +2 -3
  169. pyegeria/egeria_cat_client.py +26 -70
  170. pyegeria/egeria_client.py +130 -93
  171. pyegeria/egeria_config_client.py +40 -46
  172. pyegeria/egeria_tech_client.py +141 -54
  173. pyegeria/models/__init__.py +150 -0
  174. pyegeria/{models.py → models/models.py} +156 -20
  175. pyegeria/omvs/__init__.py +84 -0
  176. pyegeria/omvs/action_author.py +342 -0
  177. pyegeria/omvs/actor_manager.py +5980 -0
  178. pyegeria/omvs/asset_catalog.py +842 -0
  179. pyegeria/omvs/asset_maker.py +2736 -0
  180. pyegeria/omvs/automated_curation.py +4403 -0
  181. pyegeria/omvs/classification_manager.py +11213 -0
  182. pyegeria/{collection_manager.py → omvs/collection_manager.py} +1334 -1160
  183. pyegeria/omvs/community_matters_omvs.py +468 -0
  184. pyegeria/{core_omag_server_config.py → omvs/core_omag_server_config.py} +157 -157
  185. pyegeria/{data_designer.py → omvs/data_designer.py} +1115 -660
  186. pyegeria/omvs/data_discovery.py +869 -0
  187. pyegeria/omvs/data_engineer.py +372 -0
  188. pyegeria/omvs/digital_business.py +1133 -0
  189. pyegeria/omvs/external_links.py +1752 -0
  190. pyegeria/omvs/feedback_manager.py +834 -0
  191. pyegeria/{full_omag_server_config.py → omvs/full_omag_server_config.py} +73 -69
  192. pyegeria/{glossary_manager.py → omvs/glossary_manager.py} +857 -519
  193. pyegeria/{governance_officer.py → omvs/governance_officer.py} +964 -468
  194. pyegeria/omvs/lineage_linker.py +314 -0
  195. pyegeria/omvs/location_arena.py +1525 -0
  196. pyegeria/omvs/metadata_expert.py +668 -0
  197. pyegeria/omvs/metadata_explorer_omvs.py +2943 -0
  198. pyegeria/omvs/my_profile.py +1042 -0
  199. pyegeria/omvs/notification_manager.py +358 -0
  200. pyegeria/omvs/people_organizer.py +394 -0
  201. pyegeria/{platform_services.py → omvs/platform_services.py} +113 -193
  202. pyegeria/omvs/product_manager.py +1825 -0
  203. pyegeria/omvs/project_manager.py +1907 -0
  204. pyegeria/omvs/reference_data.py +1140 -0
  205. pyegeria/omvs/registered_info.py +334 -0
  206. pyegeria/omvs/runtime_manager.py +2817 -0
  207. pyegeria/omvs/schema_maker.py +446 -0
  208. pyegeria/{server_operations.py → omvs/server_operations.py} +27 -26
  209. pyegeria/{solution_architect_omvs.py → omvs/solution_architect.py} +1886 -1505
  210. pyegeria/omvs/specification_properties.py +37 -0
  211. pyegeria/omvs/subject_area.py +1042 -0
  212. pyegeria/omvs/template_manager_omvs.py +236 -0
  213. pyegeria/omvs/time_keeper.py +1761 -0
  214. pyegeria/omvs/valid_metadata.py +3221 -0
  215. pyegeria/omvs/valid_metadata_lists.py +37 -0
  216. pyegeria/omvs/valid_type_lists.py +37 -0
  217. pyegeria/view/__init__.py +28 -0
  218. pyegeria/{_output_format_models.py → view/_output_format_models.py} +160 -24
  219. pyegeria/view/_output_formats.py +14 -0
  220. pyegeria/view/base_report_formats.py +2719 -0
  221. pyegeria/view/dr_egeria_reports.py +56 -0
  222. pyegeria/view/format_set_executor.py +397 -0
  223. pyegeria/{md_processing_utils.py → view/md_processing_utils.py} +5 -5
  224. pyegeria/{mermaid_utilities.py → view/mermaid_utilities.py} +2 -154
  225. pyegeria/view/output_formatter.py +1297 -0
  226. pyegeria-5.5.3.3.dist-info/METADATA +218 -0
  227. pyegeria-5.5.3.3.dist-info/RECORD +241 -0
  228. {pyegeria-5.4.0.28.dist-info → pyegeria-5.5.3.3.dist-info}/WHEEL +2 -1
  229. pyegeria-5.5.3.3.dist-info/entry_points.txt +103 -0
  230. pyegeria-5.5.3.3.dist-info/top_level.txt +4 -0
  231. commands/cat/.DS_Store +0 -0
  232. commands/cat/.env +0 -8
  233. commands/cat/README.md +0 -16
  234. commands/cat/debug_log +0 -1126
  235. commands/cat/debug_log.2025-08-18_11-34-38_088636.zip +0 -0
  236. commands/cat/list_categories.py +0 -192
  237. commands/cat/logs/pyegeria.log +0 -4
  238. commands/cli/debug_log +0 -0
  239. commands/cli/debug_log.log +0 -0
  240. commands/cli/txt_custom_v2.tcss +0 -19
  241. commands/my/README.md +0 -17
  242. commands/ops/README.md +0 -24
  243. commands/ops/logs/pyegeria.log +0 -0
  244. commands/ops/monitor_asset_events.py +0 -108
  245. commands/tech/README.md +0 -24
  246. md_processing/.DS_Store +0 -0
  247. md_processing/dr-egeria-outbox/Collections-2025-08-12-13-30-37.md +0 -163
  248. md_processing/dr-egeria-outbox/Collections-2025-08-12-13-35-58.md +0 -474
  249. md_processing/dr_egeria_inbox/Derive-Dr-Gov-Defs.md +0 -8
  250. md_processing/dr_egeria_inbox/Dr.Egeria Templates.md +0 -873
  251. md_processing/dr_egeria_inbox/arch_test.md +0 -57
  252. md_processing/dr_egeria_inbox/archive/dr_egeria_intro.md +0 -254
  253. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_more_terms.md +0 -696
  254. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part1.md +0 -254
  255. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part2.md +0 -298
  256. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part3.md +0 -608
  257. md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part4.md +0 -94
  258. md_processing/dr_egeria_inbox/archive/freddie_intro.md +0 -284
  259. md_processing/dr_egeria_inbox/archive/freddie_intro_orig.md +0 -275
  260. md_processing/dr_egeria_inbox/archive/test-term.md +0 -110
  261. md_processing/dr_egeria_inbox/cat_test.md +0 -100
  262. md_processing/dr_egeria_inbox/collections.md +0 -39
  263. md_processing/dr_egeria_inbox/data_designer_debug.log +0 -6
  264. md_processing/dr_egeria_inbox/data_designer_out.md +0 -60
  265. md_processing/dr_egeria_inbox/data_designer_search_test.md +0 -11
  266. md_processing/dr_egeria_inbox/data_field.md +0 -54
  267. md_processing/dr_egeria_inbox/data_spec.md +0 -77
  268. md_processing/dr_egeria_inbox/data_spec_test.md +0 -2406
  269. md_processing/dr_egeria_inbox/data_test.md +0 -179
  270. md_processing/dr_egeria_inbox/data_test2.md +0 -429
  271. md_processing/dr_egeria_inbox/data_test3.md +0 -462
  272. md_processing/dr_egeria_inbox/dr_egeria_data_designer_1.md +0 -124
  273. md_processing/dr_egeria_inbox/dr_egeria_intro_categories.md +0 -168
  274. md_processing/dr_egeria_inbox/dr_egeria_intro_part1.md +0 -280
  275. md_processing/dr_egeria_inbox/dr_egeria_intro_part2.md +0 -318
  276. md_processing/dr_egeria_inbox/dr_egeria_intro_part3.md +0 -1073
  277. md_processing/dr_egeria_inbox/dr_egeria_isc1.md +0 -44
  278. md_processing/dr_egeria_inbox/generated_help_report.md +0 -9
  279. md_processing/dr_egeria_inbox/glossary_creation_experiment.ipynb +0 -341
  280. md_processing/dr_egeria_inbox/glossary_list.md +0 -5
  281. md_processing/dr_egeria_inbox/glossary_search_test.md +0 -40
  282. md_processing/dr_egeria_inbox/glossary_test1.md +0 -324
  283. md_processing/dr_egeria_inbox/gov_def.md +0 -482
  284. md_processing/dr_egeria_inbox/gov_def2.md +0 -447
  285. md_processing/dr_egeria_inbox/img.png +0 -0
  286. md_processing/dr_egeria_inbox/product.md +0 -211
  287. md_processing/dr_egeria_inbox/rel.md +0 -8
  288. md_processing/dr_egeria_inbox/sb.md +0 -119
  289. md_processing/dr_egeria_inbox/solution-components.md +0 -136
  290. md_processing/dr_egeria_inbox/solution_blueprints.md +0 -118
  291. md_processing/dr_egeria_inbox/synonym_test.md +0 -42
  292. md_processing/dr_egeria_inbox/t2.md +0 -268
  293. md_processing/dr_egeria_outbox/.obsidian/app.json +0 -1
  294. md_processing/dr_egeria_outbox/.obsidian/appearance.json +0 -1
  295. md_processing/dr_egeria_outbox/.obsidian/community-plugins.json +0 -6
  296. md_processing/dr_egeria_outbox/.obsidian/core-plugins.json +0 -31
  297. md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/data.json +0 -10
  298. md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/main.js +0 -4459
  299. md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/manifest.json +0 -10
  300. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/data.json +0 -3
  301. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/main.js +0 -153
  302. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/manifest.json +0 -11
  303. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/styles.css +0 -1
  304. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/main.js +0 -500
  305. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/manifest.json +0 -12
  306. md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/styles.css +0 -1
  307. md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/main.js +0 -37
  308. md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/manifest.json +0 -11
  309. md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/styles.css +0 -220
  310. md_processing/dr_egeria_outbox/.obsidian/types.json +0 -28
  311. md_processing/dr_egeria_outbox/.obsidian/workspace.json +0 -220
  312. md_processing/dr_egeria_outbox/Untitled.canvas +0 -1
  313. md_processing/dr_egeria_outbox/friday/processed-2025-08-22 21:22-dr_egeria_intro_part1.md +0 -312
  314. md_processing/dr_egeria_outbox/friday/processed-2025-08-22 21:23-dr_egeria_intro_part1.md +0 -265
  315. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:06-dr_egeria_intro_part1.md +0 -230
  316. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:30-dr_egeria_intro_part1.md +0 -296
  317. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:31-dr_egeria_intro_part1.md +0 -253
  318. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 16:08-dr_egeria_intro_part2.md +0 -343
  319. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 16:12-dr_egeria_intro_part2.md +0 -343
  320. md_processing/dr_egeria_outbox/monday/processed-2025-08-19 07:05-product.md +0 -426
  321. md_processing/dr_egeria_outbox/monday/processed-2025-08-19 07:56-product.md +0 -212
  322. md_processing/dr_egeria_outbox/monday/processed-2025-08-19 09:43-product.md +0 -201
  323. md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 14:55-product.md +0 -77
  324. md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 15:05-product.md +0 -75
  325. md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 15:11-product.md +0 -74
  326. md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 20:40-collections.md +0 -49
  327. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 15:00-Derive-Dr-Gov-Defs.md +0 -719
  328. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:13-Derive-Dr-Gov-Defs.md +0 -41
  329. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:14-Derive-Dr-Gov-Defs.md +0 -33
  330. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:50-Derive-Dr-Gov-Defs.md +0 -192
  331. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 22:08-gov_def2.md +0 -486
  332. md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 22:10-gov_def2.md +0 -486
  333. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 08:53-gov_def2.md +0 -486
  334. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 08:54-gov_def2.md +0 -486
  335. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:03-gov_def2.md +0 -486
  336. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:06-gov_def2.md +0 -486
  337. md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:10-gov_def2.md +0 -486
  338. md_processing/dr_egeria_outbox/tuesday/processed-2025-07-16 19:15-gov_def2.md +0 -527
  339. md_processing/dr_egeria_outbox/tuesday/processed-2025-07-17 12:08-gov_def2.md +0 -527
  340. md_processing/dr_egeria_outbox/tuesday/processed-2025-07-17 14:27-gov_def2.md +0 -485
  341. md_processing/dr_egeria_outbox/tuesday/processed-2025-08-19 10:55-product.md +0 -209
  342. md_processing/family_docs/Data Designer/Create_Data_Class.md +0 -164
  343. md_processing/family_docs/Data Designer/Create_Data_Dictionary.md +0 -30
  344. md_processing/family_docs/Data Designer/Create_Data_Field.md +0 -162
  345. md_processing/family_docs/Data Designer/Create_Data_Specification.md +0 -36
  346. md_processing/family_docs/Data Designer/Create_Data_Structure.md +0 -38
  347. md_processing/family_docs/Data Designer/View_Data_Classes.md +0 -78
  348. md_processing/family_docs/Data Designer/View_Data_Dictionaries.md +0 -78
  349. md_processing/family_docs/Data Designer/View_Data_Fields.md +0 -78
  350. md_processing/family_docs/Data Designer/View_Data_Specifications.md +0 -78
  351. md_processing/family_docs/Data Designer/View_Data_Structures.md +0 -78
  352. md_processing/family_docs/Data Designer.md +0 -842
  353. md_processing/family_docs/Digital Product Manager/Add_Member->Collection.md +0 -42
  354. md_processing/family_docs/Digital Product Manager/Attach_Collection->Resource.md +0 -36
  355. md_processing/family_docs/Digital Product Manager/Create_Agreement.md +0 -96
  356. md_processing/family_docs/Digital Product Manager/Create_Data_Sharing_Agreement.md +0 -72
  357. md_processing/family_docs/Digital Product Manager/Create_DigitalSubscription.md +0 -102
  358. md_processing/family_docs/Digital Product Manager/Create_Digital_Product.md +0 -134
  359. md_processing/family_docs/Digital Product Manager/Link_Agreement_Items.md +0 -60
  360. md_processing/family_docs/Digital Product Manager/Link_Contracts.md +0 -26
  361. md_processing/family_docs/Digital Product Manager/Link_Digital_Product_-_Digital_Product.md +0 -30
  362. md_processing/family_docs/Digital Product Manager/Link_Subscribers.md +0 -48
  363. md_processing/family_docs/Digital Product Manager.md +0 -668
  364. md_processing/family_docs/Glossary/Attach_Category_Parent.md +0 -18
  365. md_processing/family_docs/Glossary/Attach_Term-Term_Relationship.md +0 -26
  366. md_processing/family_docs/Glossary/Create_Category.md +0 -38
  367. md_processing/family_docs/Glossary/Create_Glossary.md +0 -42
  368. md_processing/family_docs/Glossary/Create_Term.md +0 -70
  369. md_processing/family_docs/Glossary.md +0 -206
  370. md_processing/family_docs/Governance Officer/Create_Business_Imperative.md +0 -106
  371. md_processing/family_docs/Governance Officer/Create_Certification_Type.md +0 -112
  372. md_processing/family_docs/Governance Officer/Create_Governance_Approach.md +0 -114
  373. md_processing/family_docs/Governance Officer/Create_Governance_Obligation.md +0 -114
  374. md_processing/family_docs/Governance Officer/Create_Governance_Principle.md +0 -114
  375. md_processing/family_docs/Governance Officer/Create_Governance_Procedure.md +0 -128
  376. md_processing/family_docs/Governance Officer/Create_Governance_Process.md +0 -122
  377. md_processing/family_docs/Governance Officer/Create_Governance_Processing_Purpose.md +0 -106
  378. md_processing/family_docs/Governance Officer/Create_Governance_Responsibility.md +0 -122
  379. md_processing/family_docs/Governance Officer/Create_Governance_Rule.md +0 -122
  380. md_processing/family_docs/Governance Officer/Create_Governance_Strategy.md +0 -106
  381. md_processing/family_docs/Governance Officer/Create_License_Type.md +0 -112
  382. md_processing/family_docs/Governance Officer/Create_Naming_Standard_Rule.md +0 -122
  383. md_processing/family_docs/Governance Officer/Create_Regulation_Article.md +0 -106
  384. md_processing/family_docs/Governance Officer/Create_Regulation_Definition.md +0 -118
  385. md_processing/family_docs/Governance Officer/Create_Security_Access_Control.md +0 -114
  386. md_processing/family_docs/Governance Officer/Create_Security_Group.md +0 -120
  387. md_processing/family_docs/Governance Officer/Create_Service_Level_Objectives.md +0 -122
  388. md_processing/family_docs/Governance Officer/Create_Threat_Definition.md +0 -106
  389. md_processing/family_docs/Governance Officer/Link_Governance_Controls.md +0 -32
  390. md_processing/family_docs/Governance Officer/Link_Governance_Drivers.md +0 -32
  391. md_processing/family_docs/Governance Officer/Link_Governance_Policies.md +0 -32
  392. md_processing/family_docs/Governance Officer/View_Governance_Definitions.md +0 -82
  393. md_processing/family_docs/Governance Officer.md +0 -2412
  394. md_processing/family_docs/Solution Architect/Create_Information_Supply_Chain.md +0 -70
  395. md_processing/family_docs/Solution Architect/Create_Solution_Blueprint.md +0 -44
  396. md_processing/family_docs/Solution Architect/Create_Solution_Component.md +0 -96
  397. md_processing/family_docs/Solution Architect/Create_Solution_Role.md +0 -66
  398. md_processing/family_docs/Solution Architect/Link_Information_Supply_Chain_Peers.md +0 -32
  399. md_processing/family_docs/Solution Architect/Link_Solution_Component_Peers.md +0 -32
  400. md_processing/family_docs/Solution Architect/View_Information_Supply_Chains.md +0 -32
  401. md_processing/family_docs/Solution Architect/View_Solution_Blueprints.md +0 -32
  402. md_processing/family_docs/Solution Architect/View_Solution_Components.md +0 -32
  403. md_processing/family_docs/Solution Architect/View_Solution_Roles.md +0 -32
  404. md_processing/family_docs/Solution Architect.md +0 -490
  405. md_processing/md_processing_utils/debug_log +0 -574
  406. md_processing/md_processing_utils/debug_log.log +0 -0
  407. md_processing/md_processing_utils/dr-egeria-help-2025-07-17T17:22:09.md +0 -2065
  408. md_processing/md_processing_utils/generated_help_terms.md +0 -842
  409. pyegeria/.DS_Store +0 -0
  410. pyegeria/README.md +0 -35
  411. pyegeria/_client_new.py +0 -1102
  412. pyegeria/_output_formats.py +0 -730
  413. pyegeria/asset_catalog_omvs.py +0 -864
  414. pyegeria/automated_curation_omvs.py +0 -3765
  415. pyegeria/config.py +0 -523
  416. pyegeria/egeria_my_client.py +0 -91
  417. pyegeria/feedback_manager_omvs.py +0 -4573
  418. pyegeria/load_config_orig.py +0 -218
  419. pyegeria/md_processing_helpers.py +0 -58
  420. pyegeria/md_processing_utils_orig.py +0 -1103
  421. pyegeria/metadata_explorer_omvs.py +0 -2326
  422. pyegeria/my_profile_omvs.py +0 -1022
  423. pyegeria/project_manager.py +0 -1591
  424. pyegeria/registered_info.py +0 -167
  425. pyegeria/template_manager_omvs.py +0 -1414
  426. pyegeria/utils.py +0 -256
  427. pyegeria-5.4.0.28.dist-info/METADATA +0 -77
  428. pyegeria-5.4.0.28.dist-info/RECORD +0 -343
  429. pyegeria-5.4.0.28.dist-info/entry_points.txt +0 -105
  430. /commands/cat/debug_log.log → /pyegeria/deprecated/__init__.py +0 -0
  431. /pyegeria/{_exceptions.py → deprecated/_exceptions.py} +0 -0
  432. /pyegeria/{collection_models.py → models/collection_models.py} +0 -0
  433. {pyegeria-5.4.0.28.dist-info → pyegeria-5.5.3.3.dist-info/licenses}/LICENSE +0 -0
@@ -1,730 +0,0 @@
1
- """
2
- SPDX-License-Identifier: Apache-2.0
3
- Copyright Contributors to the ODPi Egeria project.
4
- """
5
-
6
- """
7
- # Purpose
8
- This file manages output format sets.
9
-
10
- pyegeria allows find and get requests to generate output in different output formats -
11
- including DICT, MD, FORM, REPORT, LIST, MERMAID, TABLE, and perhaps additional ones in the future.
12
-
13
- It is important to be able to filter which attributes to
14
- display, and the order in which they appear. However, many, if not most users will likely not want to customize
15
- the column list and so we need a sensible set of defaults for each type of output. These defaults are used
16
- by the find and get methods if the user doesn't provide a value for the columns parameter.
17
-
18
- This file contains these defaults and functions to work with them. The output format sets are now implemented
19
- using Pydantic models defined in `_output_format_models.py`, which provide several advantages:
20
- - Type validation: The models ensure that the data has the correct types and structure.
21
- - Composition: The models support composition of formats, allowing formats to be reused and combined.
22
- - Documentation: The models provide clear documentation of the data structure.
23
- - IDE support: The models provide better IDE support, including autocompletion and type hints.
24
-
25
- The functions in this module are designed to be backward compatible with code that expects the old
26
- dictionary-based format. They convert between Pydantic models and dictionaries as needed.
27
-
28
- Example usage:
29
- ```python
30
- # Get a format set by name and output type
31
- format_set = select_output_format_set("Collections", "TABLE")
32
-
33
- # Get a list of all available format sets
34
- format_sets = output_format_set_list()
35
-
36
- # Get the heading and description of a format set
37
- heading = get_output_format_set_heading("Collections")
38
- description = get_output_format_set_description("Collections")
39
-
40
- # Match a format set with a specific output type
41
- matched_format_set = get_output_format_type_match(format_set, "DICT")
42
- ```
43
-
44
- For more advanced usage, you can work directly with the Pydantic models:
45
- ```python
46
- from pyegeria._output_format_models import Column, Format, FormatSet
47
-
48
- # Create a new format set
49
- format_set = FormatSet(
50
- heading="Example Format Set",
51
- description="An example format set",
52
- formats=[
53
- Format(
54
- types=["TABLE", "DICT"],
55
- columns=[
56
- Column(name="Display Name", key="display_name"),
57
- Column(name="Description", key="description", format=True),
58
- ],
59
- ),
60
- ],
61
- )
62
-
63
- # Add the format set to the output_format_sets dictionary
64
- output_format_sets["Example"] = format_set
65
- ```
66
- """
67
-
68
- import os
69
- from pathlib import Path
70
- from typing import Dict, List, Optional, Union, Any
71
- from loguru import logger
72
-
73
- from pyegeria._output_format_models import (Column, Format, ActionParameter, FormatSet, FormatSetDict,
74
- save_format_sets_to_json, load_format_sets_from_json)
75
- from pyegeria.config import settings
76
-
77
-
78
- # Get the configured value for the user format sets directory
79
-
80
- USER_FORMAT_SETS_DIR = os.path.expanduser(settings.Environment.pyegeria_user_format_sets_dir)
81
-
82
- # Constants
83
- MD_SEPARATOR = "\n---\n\n"
84
-
85
- # Define shared elements
86
- COMMON_COLUMNS = [
87
- Column(name='Display Name', key='display_name'),
88
- Column(name='Qualified Name', key='qualified_name', format=True),
89
- Column(name='Category', key='category'),
90
- Column(name='Description', key='description', format=True),
91
- ]
92
-
93
- COMMON_METADATA_COLUMNS = [
94
- Column(name='GUID', key='guid', format=True),
95
- Column(name='Type Name', key='type_name'),
96
- Column(name='Metadata Collection ID', key='metadata_collection_id', format=True),
97
- Column(name='Metadata Collection Name', key='metadata_collection_name', format=True),
98
- ]
99
-
100
- COMMON_HEADER_COLUMNS = [
101
- Column(name="Classifications", key='classifications'),
102
- Column(name="Created By", key='created_by'),
103
- Column(name="Create Time", key='create_time'),
104
- Column(name="Updated By", key='updated_by'),
105
- Column(name="Update Time", key='update_time'),
106
- Column(name="Effective From", key='effective_from'),
107
- Column(name="Effective To", key='effective_to'),
108
- Column(name="Version", key='version'),
109
- Column(name="Open Metadata Type Name", key='type_name'),
110
- ]
111
-
112
-
113
- REFERNCEABLE_COLUMNS = COMMON_COLUMNS + [
114
- Column(name='Version Identifier', key='version_identifier'),
115
- Column(name='Additional Properties', key='additional_properties')
116
- ]
117
-
118
-
119
- COMMON_FORMATS_ALL = Format(
120
- types=["ALL"],
121
- columns=COMMON_COLUMNS,
122
- )
123
-
124
- PROJECT_COLUMNS = COMMON_COLUMNS + [
125
- Column(name="Classifications", key='classifications'),
126
- Column(name='Priority', key='priority'),
127
- Column(name='Project Status', key='project_status'),
128
- Column(name='Element Status', key='status'),
129
- Column(name='Start Date', key='start_date'),
130
- Column(name='Assigned Actors', key='assigned_actors'),
131
- Column(name='Resources', key='resource_list'),
132
-
133
- ]
134
- COLLECTIONS_COLUMNS = COMMON_COLUMNS + [
135
- Column(name='Type Name', key='type_name'),
136
- Column(name='Classifications', key='classifications'),
137
- Column(name="Created By", key='created_by'),
138
- Column(name="Create Time", key='create_time'),
139
- Column(name="Updated By", key='updated_by'),
140
- Column(name="Update Time", key='update_time'),
141
- ]
142
-
143
- COLLECTIONS_MEMBERS_COLUMNS = COLLECTIONS_COLUMNS + [
144
- Column(name="Containing Members", key='collection_members'),
145
- Column(name="Member Of", key='member_of_collections')
146
- ]
147
-
148
- COLLECTION_DICT = Format(
149
- types=["DICT"],
150
- columns=COLLECTIONS_MEMBERS_COLUMNS + [
151
- Column(name="GUID", key='GUID'),
152
- ],
153
- )
154
-
155
- BASIC_COLLECTIONS_COLUMNS = [
156
- Column(name='Qualified Name', key='qualified_name', format=True),
157
- Column(name='GUID', key='guid', format=True),
158
- Column(name='Type Name', key='type_name'),
159
- Column(name="Containing Members", key='collection_members'),
160
- Column(name="Member Of", key='member_of_collections')
161
- ]
162
-
163
- COLLECTION_REPORT = Format(
164
- types=["REPORT"],
165
- columns=COLLECTIONS_MEMBERS_COLUMNS + [
166
- Column(name="GUID", key='GUID'),
167
- Column(name="Mermaid", key='mermaid'),
168
- ],
169
- )
170
-
171
- COLLECTION_TABLE = Format(
172
- types=["TABLE"],
173
- columns=COLLECTIONS_MEMBERS_COLUMNS,
174
- )
175
-
176
- GOVERNANCE_DEFINITIONS_COLUMNS = COMMON_COLUMNS + [
177
- Column(name="Summary", key='summary'),
178
- Column(name="Usage", key='usage'),
179
- Column(name="Importance", key='importance'),
180
- Column(name="Scope", key='scope'),
181
- Column(name="Type", key='type_name'),
182
- ]
183
- GOVERNANCE_DEFINITIONS_BASIC = [
184
- Column(name="Type", key='type_name'),
185
- Column(name='Qualified Name', key='qualified_name', format=True),
186
- Column(name="GUID", key='guid', format=True),
187
- ]
188
- COMMON_ANNOTATIONS = {
189
- "wikilinks": ["[[Commons]]"]
190
- }
191
-
192
- # Modularized output_format_sets
193
- output_format_sets = FormatSetDict({
194
- "Default": FormatSet(
195
- heading="Default Base Attributes",
196
- description="Was a valid combination of output_format_set and output_format provided?",
197
- annotations={}, # No specific annotations
198
- formats=[
199
- Format(
200
- types=["ALL"],
201
- columns=COMMON_COLUMNS + COMMON_METADATA_COLUMNS + [
202
- Column(name='Version Identifier', key='version_identifier'),
203
- Column(name="Classifications", key='classifications'),
204
- Column(name="Additional Properties", key='additional_properties'),
205
- Column(name="Created By", key='created_by'),
206
- Column(name="Create Time", key='create_time'),
207
- Column(name="Updated By", key='updated_by'),
208
- Column(name="Update Time", key='update_time'),
209
- Column(name="Effective From", key='effective_from'),
210
- Column(name="Effective To", key='effective_to'),
211
- Column(name="Version", key='version'),
212
- Column(name="Open Metadata Type Name", key='type_name'),
213
- ],
214
- )
215
- ],
216
- ),
217
- "Referenceable": FormatSet(
218
- heading="Common Attributes",
219
- description="Attributes that apply to all Referenceables.",
220
- annotations={}, # No specific annotations
221
- formats=[
222
- Format(
223
- types=["ALL"],
224
- columns=COMMON_COLUMNS + COMMON_METADATA_COLUMNS + [
225
- Column(name='Version Identifier', key='version_identifier'),
226
- Column(name="Classifications", key='classifications'),
227
- Column(name="Additional Properties", key='additional_properties'),
228
- Column(name="Created By", key='created_by'),
229
- Column(name="Create Time", key='create_time'),
230
- Column(name="Updated By", key='updated_by'),
231
- Column(name="Update Time", key='update_time'),
232
- Column(name="Effective From", key='effective_from'),
233
- Column(name="Effective To", key='effective_to'),
234
- Column(name="Version", key='version'),
235
- Column(name="Open Metadata Type Name", key='type_name'),
236
- ],
237
- )
238
- ],
239
- ),
240
- "Project": FormatSet(
241
- heading="Project Attributes",
242
- description="Attributes that apply to all Projects.",
243
- annotations={},
244
- formats=[
245
- Format(
246
- types=["ALL"],
247
- columns=PROJECT_COLUMNS
248
- )
249
- ]
250
- ),
251
- "Basic-Terms": FormatSet(
252
- heading="Basic Glossary Term Attributes",
253
- description="Attributes that apply to all Basic Glossary Terms.",
254
- annotations={},
255
- formats=[
256
- Format(
257
- types=["ALL"],
258
- columns=COMMON_COLUMNS + COMMON_METADATA_COLUMNS + [
259
- Column(name='Version Identifier', key='version_identifier'),
260
- Column(name="Summary", key='summary'),
261
- Column(name="Additional Properties", key='additional_properties'),
262
- Column(name="Example", key='example'),
263
- Column(name="Usage", key='usage'),
264
- Column(name="Updated By", key='updated_by'),
265
- Column(name="Update Time", key='update_time'),
266
- Column(name="Effective From", key='effective_from'),
267
- Column(name="Effective To", key='effective_to'),
268
- Column(name="GUID", key='guid'),
269
- Column(name="Open Metadata Type Name", key='type_name'),
270
- Column(name="Glossary", key='parent_glossary'),
271
- Column(name="Subject Aream", key='subject_area'),
272
- ],
273
- )
274
- ]
275
- ),
276
-
277
- "Collections": FormatSet(
278
- heading="Common Collection Information",
279
- description="Attributes generic to all Collections.",
280
- aliases=["Collection", "RootCollection", "Folder", "ReferenceList", "HomeCollection",
281
- "ResultSet", "RecentAccess", "WorkItemList", "Namespace"],
282
- annotations=COMMON_ANNOTATIONS,
283
- formats=[COLLECTION_DICT, COLLECTION_TABLE, COLLECTION_REPORT, COMMON_FORMATS_ALL], # Reusing common formats
284
- action=ActionParameter(
285
- function="CollectionManager.find_collections",
286
- user_params=["search_string"],
287
- spec_params={},
288
- )
289
- ),
290
- "BasicCollections": FormatSet(
291
- heading="Common Collection Information",
292
- description="Attributes generic to all Collections.",
293
- aliases=[],
294
- annotations=COMMON_ANNOTATIONS,
295
- formats=[Format(
296
- types=["ALL"],
297
- columns=BASIC_COLLECTIONS_COLUMNS,
298
- )], # Reusing common formats
299
- action=ActionParameter(
300
- function="CollectionManager.find_collections",
301
- user_params=["search_string"],
302
- spec_params={},
303
- )
304
- ),
305
-
306
- "CollectionMembers": FormatSet(
307
- heading="Collection Membership Information",
308
- description="Attributes about all CollectionMembers.",
309
- aliases=["CollectionMember", "Member", "Members"],
310
- annotations= {"wikilinks": ["[[CollectionMembers]]"]},
311
- formats = [COLLECTION_DICT, COLLECTION_TABLE],
312
- action=ActionParameter(
313
- function="CollectionManager.get_collection_members",
314
- user_params=["collection_guid"],
315
- spec_params={"output_format": "DICT"},
316
- )
317
- ),
318
- "DigitalProducts": FormatSet(
319
- heading="Digital Product Information",
320
- description="Attributes useful to Digital Products.",
321
- aliases=["DigitalProduct", "DataProducts"],
322
- annotations={},
323
- formats=[
324
- Format(
325
- types=["REPORT", "DICT", "TABLE"],
326
- columns=COMMON_COLUMNS + [
327
- Column(name="Status", key='status'),
328
- Column(name='Product Name', key='product_name'),
329
- Column(name='Identifier', key='identifier'),
330
- Column(name='Maturity', key='maturity'),
331
- Column(name='Service Life', key='service_life'),
332
- Column(name='Next Version', key='next_version'),
333
- Column(name='Withdraw Date', key='withdraw_date'),
334
- Column(name='Members', key='members', format=True),
335
- Column(name='Uses Products', key='uses_digital_products'),
336
- Column(name='Used by Products', key='used_by_digital_products'),
337
- ],
338
- )
339
- ],
340
- action=ActionParameter(
341
- function="CollectionManager.find_collections",
342
- user_params=["search_string"],
343
- spec_params={},
344
- ),
345
- get_additional_props=ActionParameter(
346
- function="CollectionManager._extract_digital_product_properties",
347
- user_params = [],
348
- spec_params={},
349
- )
350
- ),
351
-
352
- "Agreements": FormatSet(
353
- heading="General Agreement Information",
354
- description="Attributes generic to all Agreements.",
355
- aliases=["DataSharingAgreement", "Agreement"],
356
- annotations={"wikilinks": ["[[Agreements]]", "[[Egeria]]"]},
357
- formats=[
358
- Format(
359
- types=["REPORT", "DICT", "TABLE"],
360
- columns=COMMON_COLUMNS + COMMON_HEADER_COLUMNS + [
361
- Column(name='Identifier', key='identifier'),
362
- Column(name='Support Level', key='support_level'),
363
- Column(name='service Levels', key='service_levels'),
364
- Column(name='Agreement Items', key='agreement_items', format=True),
365
- Column(name='Members', key='members', format=True),
366
- ]
367
- )
368
- ],
369
- action=ActionParameter(
370
- function="CollectionManager.find_collections",
371
- user_params=["search_string"],
372
- spec_params={"metadata_element_types": ["Agreement"]},
373
- # spec_params={},
374
- ),
375
- get_additional_props=ActionParameter(
376
- function="CollectionManager._extract_agreement_properties",
377
- user_params=[],
378
- spec_params={},
379
- ),
380
- ),
381
-
382
-
383
- "DataDictionary": FormatSet(
384
- heading="Data Dictionary Information",
385
- description="Attributes useful to Data Dictionary.",
386
- aliases=["Data Dict", "Data Dictionary"],
387
- annotations={"wikilinks": ["[[Data Dictionary]]"]},
388
- formats=[COMMON_FORMATS_ALL], # Reusing common formats and columns
389
- action=ActionParameter(
390
- function="CollectionManager.find_collections",
391
- user_params=["search_string"],
392
- spec_params={"initial_classifications": "DataDictionary"},
393
- )
394
- ),
395
-
396
- "Data Specification": FormatSet(
397
- heading="Data Specification Information",
398
- description="Attributes useful to Data Specification.",
399
- aliases=["Data Spec", "DataSpec", "DataSpecification"],
400
- annotations={"wikilinks": ["[[Data Specification]]"]},
401
- formats=[
402
- Format(types=["REPORT", "HTML"],columns=COMMON_COLUMNS + [Column(name="Mermaid", key='mermaid'),]),
403
- Format(types=["MERMAID"], columns=[
404
- Column(name="Display Name", key='display_name'),
405
- Column(name="Mermaid", key='mermaid'),
406
- ]),
407
- Format(types=["ALL"], columns=COMMON_COLUMNS)], # Reusing common formats and columns
408
- action=ActionParameter(
409
- function="CollectionManager.find_collections",
410
- user_params=["search_string"],
411
- spec_params={"initial_classifications": "DataSpec"},
412
- )
413
- ),
414
-
415
- "DataStruct": FormatSet(
416
- heading="Data Structure Information",
417
- description="Attributes useful to Data Structures.",
418
- aliases=["Data Structure", "DataStructures", "Data Structures", "Data Struct", "DataStructure"],
419
- annotations={"wikilinks": ["[[Data Structure]]"]},
420
- formats=[Format(types=["ALL"], columns=COMMON_COLUMNS)], # Reusing common formats and columns
421
- action=ActionParameter(
422
- function="DataDesigner.find_data_structures",
423
- user_params=["search_string"],
424
- spec_params={},
425
- )
426
- ),
427
-
428
- "DataField": FormatSet(
429
- heading="Data Structure Information",
430
- description="Attributes useful to Data Structures.",
431
- aliases=["Data Field", "Data Fields", "DataFields"],
432
- annotations={"wikilinks": ["[[Data Field]]"]},
433
- formats=[Format(types=["ALL"], columns=COMMON_COLUMNS)], # Reusing common formats and columns
434
- action=ActionParameter(
435
- function="DataDesigner.find_data_fields",
436
- user_params=["search_string"],
437
- spec_params={},
438
- )
439
- ),
440
-
441
- "Mandy-DataStruct": FormatSet(
442
- heading="Puddy Approves",
443
- description="This is a tutorial on how to use a data struct description",
444
- aliases=[],
445
- annotations={"wikilinks": ["[[Data Structure]]"]},
446
- formats=[
447
- Format(types=["TABLE"], columns=COMMON_COLUMNS + [Column(name='GUID', key='GUID')]),
448
- Format(types=[ "DICT","LIST", ], columns=COMMON_COLUMNS + [Column(name='GUID', key='GUID')]),
449
- Format(types=["REPORT","MERMAID", "HTML"], columns=[Column(name='Display Name', key='display_name'),
450
- Column(name='Mermaid', key='mermaid'),]),
451
- ],
452
- action=ActionParameter(
453
- function="DataDesigner.find_data_structures",
454
- user_params=["search_string"],
455
- spec_params={"output_format":"DICT"},
456
- )
457
- ),
458
- "Governance Basics": FormatSet(
459
- heading="Basic Governance-Definitions Information",
460
- description="Core Attributes useful to Governance-Definitions.",
461
- aliases=["BasicGovernance"],
462
- annotations={"wikilinks": ["[[Governance]]"]},
463
- formats=[Format(types=["ALL"], columns=GOVERNANCE_DEFINITIONS_BASIC)],
464
- action=ActionParameter(
465
- function="GovernanceOfficer.find_governance_definitions",
466
- user_params=["search_string"],
467
- spec_params={},
468
- )
469
- ),
470
- "Governance Definitions": FormatSet(
471
- heading="Governance-Definitions Information",
472
- description="Attributes useful to Governance-Definitions.",
473
- aliases=["GovernanceDefinitions"],
474
- annotations={"wikilinks": ["[[Governance]]"]},
475
- formats=[Format(types=["ALL"], columns=GOVERNANCE_DEFINITIONS_COLUMNS)],
476
- action=ActionParameter(
477
- function="GovernanceOfficer.find_governance_definitions",
478
- user_params=["search_string"],
479
- spec_params={},
480
- )
481
- ),
482
- })
483
-
484
- def select_output_format_set(kind: str, output_type: str) -> dict | None:
485
- """
486
- This function retrieves the appropriate output set configuration dictionary based on the `kind` and `output_type`.
487
- If output_type = `ANY` that indicates this is just a test to see of the output format set exists.
488
-
489
- :param kind: The kind of output set (e.g., "Referenceable", "Collections").
490
- :param output_type: The desired output format type (e.g., "DICT", "LIST", "REPORT").
491
- :return: The matched output set dictionary or None if no match is found.
492
-
493
- Returns:
494
- dict | None:
495
- """
496
- # Normalize the output type to uppercase for consistency
497
- output_type = output_type.upper()
498
- output_struct: dict = {}
499
-
500
- # Step 1: Check if `kind` exists in the `output_format_sets` dictionary
501
- element = output_format_sets.get(kind)
502
-
503
- # Step 2: If not found, attempt to match `kind` in aliases
504
- if element is None:
505
- for key, value in output_format_sets.items():
506
- aliases = value.aliases
507
- if kind in aliases:
508
- element = value
509
- break
510
-
511
- # Step 3: If still not found, return None
512
- if element is None:
513
- msg = f"No matching column set found for kind='{kind}' and output type='{output_type}'."
514
- logger.error(msg)
515
- return None
516
- else:
517
- # Convert FormatSet to dictionary for backward compatibility
518
- output_struct["aliases"] = element.aliases
519
- output_struct["heading"] = element.heading
520
- output_struct["description"] = element.description
521
- output_struct["annotations"] = element.annotations
522
- if element.action:
523
- # Convert ActionParameter to dictionary for backward compatibility
524
- output_struct["action"] = element.action.dict()
525
- if element.get_additional_props:
526
- output_struct["get_additional_props"] = element.get_additional_props.dict()
527
-
528
- # If this was just a validation that the format set could be found then the output type is ANY - so just return.
529
- if output_type == "ANY":
530
- return output_struct
531
-
532
- # Step 4: Search for a matching format in the `formats` list
533
- for format in element.formats:
534
- if output_type in format.types:
535
- # Convert Format to dictionary for backward compatibility
536
- output_struct["formats"] = format.dict()
537
- return output_struct
538
-
539
- # Step 5: Handle the fallback case of "ALL"
540
- for format in element.formats:
541
- if "ALL" in format.types:
542
- # Convert Format to dictionary for backward compatibility
543
- output_struct["formats"] = format.dict()
544
- return output_struct
545
-
546
- # Step 6: If no match is found, return None
547
- logger.error(f"No matching format found for kind='{kind}' with output type='{output_type}'.")
548
- return None
549
-
550
- def output_format_set_list() -> list[str]:
551
- """
552
- Returns a list of all available format set names.
553
-
554
- Returns:
555
- list[str]: A list of format set names
556
- """
557
- return list(output_format_sets.keys())
558
-
559
- def get_output_format_set_heading(format_set: str) -> str:
560
- """
561
- Gets the heading of a format set.
562
-
563
- Args:
564
- format_set: The name of the format set
565
-
566
- Returns:
567
- str: The heading of the format set
568
- """
569
- return output_format_sets[format_set].heading
570
-
571
- def get_output_format_set_description(format_set: str) -> str:
572
- """
573
- Gets the description of a format set.
574
-
575
- Args:
576
- format_set: The name of the format set
577
-
578
- Returns:
579
- str: The description of the format set
580
- """
581
- return output_format_sets[format_set].description
582
-
583
- def get_output_format_type_match(format_set: Union[dict, FormatSet], output_format: str) -> dict:
584
- """
585
- Matches a format set with a specific output format.
586
-
587
- Args:
588
- format_set: The format set to match, either a FormatSet instance or a dictionary
589
- output_format: The output format to match
590
-
591
- Returns:
592
- dict: The format set with the matching format
593
- """
594
- # Convert FormatSet to dictionary if needed
595
- if isinstance(format_set, FormatSet):
596
- format_set_dict = format_set.dict()
597
- else:
598
- format_set_dict = format_set
599
-
600
- # Handle the case where format_set is a list (legacy code)
601
- if isinstance(format_set_dict, list):
602
- for format in format_set_dict.get("formats", []):
603
- if output_format in format.get("types", []):
604
- format_set_dict["formats"] = format
605
- return format_set_dict
606
-
607
- # Handle the fallback case of "ALL"
608
- for format in format_set_dict.get("formats", []):
609
- if "ALL" in format.get("types", []):
610
- format_set_dict["formats"] = format
611
- return format_set_dict
612
- else:
613
- # Handle the case where format_set is a dictionary
614
- if "formats" in format_set_dict:
615
- formats = format_set_dict["formats"]
616
- if isinstance(formats, list):
617
- for format in formats:
618
- if output_format in format.get("types", []):
619
- format_set_dict["formats"] = format
620
- return format_set_dict
621
-
622
- # Handle the fallback case of "ALL"
623
- for format in formats:
624
- if "ALL" in format.get("types", []):
625
- format_set_dict["formats"] = format
626
- return format_set_dict
627
- else:
628
- # Handle the case where format_set is a dictionary from select_output_format_set with the "ANY" output type
629
- # In this case, we need to look up the format set by name and get the formats
630
- if "heading" in format_set_dict and "description" in format_set_dict:
631
- # Try to find the format set by heading
632
- for key, value in output_format_sets.items():
633
- if value.heading == format_set_dict["heading"] and value.description == format_set_dict["description"]:
634
- # Found the format set, now find the matching format
635
- for format in value.formats:
636
- if output_format in format.types:
637
- format_set_dict["formats"] = format.dict()
638
- return format_set_dict
639
-
640
- # Handle the fallback case of "ALL"
641
- for format in value.formats:
642
- if "ALL" in format.types:
643
- format_set_dict["formats"] = format.dict()
644
- return format_set_dict
645
-
646
- # If no match is found, return the original format set
647
- return format_set_dict
648
-
649
- def save_output_format_sets(file_path: str, format_set_names: List[str] = None) -> None:
650
- """
651
- Save output format sets to a JSON file.
652
-
653
- This function allows saving all format sets or a subset of format sets to a JSON file.
654
- The saved format sets can later be loaded using the `load_output_format_sets` function.
655
-
656
- Args:
657
- file_path: The path to save the file to
658
- format_set_names: Optional list of format set names to save. If None, all format sets are saved.
659
- """
660
- if format_set_names is None:
661
- # Save all format sets
662
- output_format_sets.save_to_json(file_path)
663
- logger.info(f"All format sets saved to {file_path}")
664
- else:
665
- # Save only specified format sets
666
- subset = FormatSetDict()
667
- for name in format_set_names:
668
- format_set = output_format_sets.get(name)
669
- if format_set:
670
- subset[name] = format_set
671
- else:
672
- logger.warning(f"Format set '{name}' not found, skipping")
673
-
674
- if subset:
675
- subset.save_to_json(file_path)
676
- logger.info(f"Selected format sets saved to {file_path}")
677
- else:
678
- logger.warning(f"No valid format sets to save, file not created")
679
-
680
- def load_output_format_sets(file_path: str, merge: bool = True) -> None:
681
- """
682
- Load output format sets from a JSON file.
683
-
684
- This function loads format sets from a JSON file and either merges them with the existing
685
- format sets or replaces the existing format sets.
686
-
687
- Args:
688
- file_path: The path to load the file from
689
- merge: If True, merge with existing format sets. If False, replace existing format sets.
690
- """
691
- global output_format_sets
692
- try:
693
- loaded_sets = FormatSetDict.load_from_json(file_path)
694
-
695
- if merge:
696
- # Merge with existing format sets
697
- for key, value in loaded_sets.items():
698
- output_format_sets[key] = value
699
- logger.info(f"Format sets from {file_path} merged with existing format sets")
700
- else:
701
- # Replace existing format sets
702
- output_format_sets = loaded_sets
703
- logger.info(f"Existing format sets replaced with format sets from {file_path}")
704
- except Exception as e:
705
- logger.error(f"Error loading format sets from {file_path}: {e}")
706
- raise
707
-
708
- def load_user_format_sets() -> None:
709
- """
710
- Load all user-defined format sets from the user format sets directory.
711
-
712
- This function loads all JSON files in the user format sets directory and merges
713
- the format sets with the existing format sets.
714
- """
715
- if not os.path.exists(USER_FORMAT_SETS_DIR):
716
- logger.debug(f"User format sets directory {USER_FORMAT_SETS_DIR} does not exist")
717
- return
718
-
719
- # Load all JSON files in the directory
720
- for file_path in Path(USER_FORMAT_SETS_DIR).glob("*.json"):
721
- try:
722
- load_output_format_sets(str(file_path), merge=True)
723
- except Exception as e:
724
- logger.error(f"Error loading format sets from {file_path}: {e}")
725
-
726
- # Load user-defined format sets at module initialization
727
- try:
728
- load_user_format_sets()
729
- except Exception as e:
730
- logger.error(f"Error loading user-defined format sets: {e}")