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
@@ -0,0 +1,37 @@
1
+ """
2
+ PDX-License-Identifier: Apache-2.0
3
+ Copyright Contributors to the ODPi Egeria project.
4
+
5
+ This module contains the Valid Metadata Lists View Service client.
6
+ """
7
+
8
+ from pyegeria.omvs.valid_metadata import ValidMetadataManager
9
+ from typing import Any, Optional
10
+
11
+ class ValidMetadataLists(ValidMetadataManager):
12
+ """
13
+ Client for the Valid Metadata Lists View Service.
14
+ This is a specialized version of the Valid Metadata Manager focusing on metadata lists.
15
+
16
+ Attributes
17
+ ----------
18
+ view_server : str
19
+ The name of the View Server to use.
20
+ platform_url : str
21
+ URL of the server platform to connect to.
22
+ user_id : str
23
+ The identity of the user calling the method.
24
+ user_pwd : str
25
+ The password associated with the user_id. Defaults to None.
26
+ """
27
+
28
+ def __init__(
29
+ self,
30
+ view_server: str,
31
+ platform_url: str,
32
+ user_id: str,
33
+ user_pwd: Optional[str] = None,
34
+ token: Optional[str] = None,
35
+ ):
36
+ super().__init__(view_server, platform_url, user_id, user_pwd, token)
37
+ self.url_marker = "valid-metadata"
@@ -0,0 +1,37 @@
1
+ """
2
+ PDX-License-Identifier: Apache-2.0
3
+ Copyright Contributors to the ODPi Egeria project.
4
+
5
+ This module contains the Valid Type Lists View Service client.
6
+ """
7
+
8
+ from pyegeria.omvs.valid_metadata import ValidMetadataManager
9
+ from typing import Any, Optional
10
+
11
+ class ValidTypeLists(ValidMetadataManager):
12
+ """
13
+ Client for the Valid Type Lists View Service.
14
+ This is a specialized version of the Valid Metadata Manager focusing on type lists.
15
+
16
+ Attributes
17
+ ----------
18
+ view_server : str
19
+ The name of the View Server to use.
20
+ platform_url : str
21
+ URL of the server platform to connect to.
22
+ user_id : str
23
+ The identity of the user calling the method.
24
+ user_pwd : str
25
+ The password associated with the user_id. Defaults to None.
26
+ """
27
+
28
+ def __init__(
29
+ self,
30
+ view_server: str,
31
+ platform_url: str,
32
+ user_id: str,
33
+ user_pwd: Optional[str] = None,
34
+ token: Optional[str] = None,
35
+ ):
36
+ super().__init__(view_server, platform_url, user_id, user_pwd, token)
37
+ self.url_marker = "valid-metadata"
@@ -0,0 +1,28 @@
1
+ """
2
+ View module for pyegeria, containing output formatters and mermaid utilities.
3
+ """
4
+ from pyegeria.view.mermaid_utilities import (
5
+ construct_mermaid_web,
6
+ construct_mermaid_jup,
7
+ load_mermaid,
8
+ render_mermaid,
9
+ save_mermaid_html,
10
+ save_mermaid_graph,
11
+ )
12
+ from pyegeria.view.output_formatter import (
13
+ generate_output,
14
+ resolve_output_formats,
15
+ populate_common_columns,
16
+ )
17
+
18
+ __all__ = [
19
+ "construct_mermaid_web",
20
+ "construct_mermaid_jup",
21
+ "load_mermaid",
22
+ "render_mermaid",
23
+ "save_mermaid_html",
24
+ "save_mermaid_graph",
25
+ "generate_output",
26
+ "resolve_output_formats",
27
+ "populate_common_columns",
28
+ ]
@@ -10,7 +10,7 @@ for different types of data, supporting composition and reuse of formats.
10
10
  The module defines the following models:
11
11
  - Column: Represents a column in an output format with name, key, and format attributes.
12
12
  - Format: Represents a format configuration with types and columns.
13
- - ActionParameter: Represents a parameter for an action with function, user_params, and spec_params.
13
+ - ActionParameter: Represents a parameter for an action with function, required_params, optional_params, and spec_params.
14
14
  - FormatSet: Represents a complete format set with heading, description, aliases, annotations, formats, and actions.
15
15
  - FormatSetDict: A dictionary of format sets with methods for backward compatibility.
16
16
 
@@ -51,14 +51,35 @@ format_set_dict = format_set.dict()
51
51
  The models are designed to be backward compatible with the existing dictionary-based
52
52
  implementation. The `FormatSet` class has a `get` method that mimics the behavior of a
53
53
  dictionary, and the `FormatSetDict` class provides dictionary-like access to the format sets.
54
+
55
+ Exceptions
56
+ ----------
57
+ The following exceptions may be raised by functions and classes in this module:
58
+ - FileNotFoundError: When attempting to load format sets from a non-existent JSON file.
59
+ - json.JSONDecodeError: When a JSON file cannot be parsed.
60
+ - pydantic.ValidationError: When provided data does not conform to the expected model schema
61
+ for `Column`/`Attribute`, `Format`, `ActionParameter`, `QuestionSpec`, or `FormatSet`.
62
+ - KeyError: Accessing a missing format set label via `FormatSetDict.__getitem__` or
63
+ `FormatSet.get` when a default is not supplied.
64
+ - ValueError: From internal validators if an attribute/format contains invalid values.
54
65
  """
55
66
 
56
67
  import json
57
68
  import os
58
69
  from pathlib import Path
59
70
  from typing import Dict, List, Optional, Union, Any
60
- from pydantic import BaseModel, Field, validator
71
+ from pydantic import BaseModel, Field, validator, root_validator
61
72
  from loguru import logger
73
+ __all__ = [
74
+ 'Column',
75
+ 'Attribute',
76
+ 'Format',
77
+ 'ActionParameter',
78
+ 'FormatSet',
79
+ 'FormatSetDict',
80
+ 'save_format_sets_to_json',
81
+ 'load_format_sets_from_json',
82
+ ]
62
83
 
63
84
  def save_format_sets_to_json(format_sets: Dict[str, 'FormatSet'], file_path: str) -> None:
64
85
  """
@@ -110,31 +131,42 @@ def load_format_sets_from_json(file_path: str) -> Dict[str, 'FormatSet']:
110
131
 
111
132
  class Column(BaseModel):
112
133
  """
113
- Represents a column in an output format.
134
+ Represents an attribute (formerly called a column) in an output format.
114
135
 
115
- Attributes:
116
- name: The display name of the column
117
- key: The key used to access the column's value in the data
118
- format: Whether the column's value should be formatted
136
+ Fields:
137
+ name: The display name of the attribute
138
+ key: The key used to access the attribute's value in the data
139
+ format: Whether the attribute's value should be formatted
119
140
  """
120
141
  name: str
121
142
  key: str
122
143
  format: bool = False
123
144
 
145
+ # New preferred alias for Column
146
+ Attribute = Column
147
+
124
148
  class Format(BaseModel):
125
149
  """
126
- Represents a format configuration with types and columns.
150
+ Represents a format configuration with types and attributes.
127
151
 
128
- Attributes:
152
+ Fields:
129
153
  types: The output types this format supports (e.g., "DICT", "TABLE", "ALL")
130
- columns: The columns to include in the output
154
+ attributes: The attributes (formerly columns) to include in the output
131
155
  """
132
156
  types: List[str]
133
- columns: List[Union[Column, Dict[str, Any]]]
157
+ attributes: List[Union[Column, Dict[str, Any]]]
134
158
 
135
- @validator('columns', pre=True)
136
- def validate_columns(cls, v):
137
- """Convert dictionary columns to Column objects."""
159
+ @root_validator(pre=True)
160
+ def _migrate_columns_to_attributes(cls, values):
161
+ """Support legacy 'columns' by migrating to 'attributes' when loading."""
162
+ if isinstance(values, dict):
163
+ if 'attributes' not in values and 'columns' in values:
164
+ values['attributes'] = values.pop('columns')
165
+ return values
166
+
167
+ @validator('attributes', pre=True)
168
+ def validate_attributes(cls, v):
169
+ """Convert dictionary attributes to Attribute/Column objects."""
138
170
  result = []
139
171
  for item in v:
140
172
  if isinstance(item, dict):
@@ -144,48 +176,105 @@ class Format(BaseModel):
144
176
  return result
145
177
 
146
178
  def dict(self, *args, **kwargs):
147
- """Override dict method to convert Column objects back to dictionaries."""
179
+ """Override dict method to convert Attribute objects back to dictionaries.
180
+ Emits both 'attributes' (preferred) and 'columns' (deprecated) for backward compatibility.
181
+ """
148
182
  result = super().dict(*args, **kwargs)
149
- result['columns'] = [
150
- column if isinstance(column, dict) else column.dict()
151
- for column in self.columns
183
+ result['attributes'] = [
184
+ attr if isinstance(attr, dict) else attr.dict()
185
+ for attr in self.attributes
152
186
  ]
187
+ # Backward-compat alias
188
+ result['columns'] = list(result['attributes'])
153
189
  return result
154
190
 
191
+ # Backward-compat property to expose 'columns'
192
+ @property
193
+ def columns(self):
194
+ return self.attributes
195
+
196
+ @columns.setter
197
+ def columns(self, value):
198
+ # Allow setting via legacy field
199
+ self.attributes = self.validate_attributes(value)
200
+
155
201
  class ActionParameter(BaseModel):
156
202
  """
157
203
  Represents a parameter for an action.
158
204
 
159
205
  Attributes:
160
206
  function: The function to call
161
- user_params: Parameters that can be provided by the user
207
+ required_params: Parameters that are required from the user
208
+ optional_params: Parameters that are optional from the user
162
209
  spec_params: Parameters that are fixed for this action
163
210
  """
164
211
  function: str
165
- user_params: List[str] = Field(default_factory=list)
212
+ required_params: List[str] = Field(default_factory=list)
213
+ optional_params: Optional[List[str]] = Field(default_factory=list)
166
214
  spec_params: Dict[str, Any] = Field(default_factory=dict)
167
215
 
216
+ @root_validator(pre=True)
217
+ def _migrate_legacy_user_params(cls, values):
218
+ """Migrate legacy 'user_params' into 'required_params' when loading from older dict/json."""
219
+ if isinstance(values, dict):
220
+ if 'required_params' not in values and 'user_params' in values:
221
+ values['required_params'] = values.pop('user_params')
222
+ return values
223
+
224
+
225
+ class QuestionSpec(BaseModel):
226
+ """
227
+ An example-question specification for a report spec.
228
+
229
+ Attributes:
230
+ perspectives: A list of perspective names for whom these questions are relevant
231
+ questions: Example natural-language questions this report spec can answer
232
+ """
233
+ @root_validator(pre=True)
234
+ def _migrate_legacy_roles(cls, values):
235
+ """Migrate legacy 'roles' field to 'perspectives' when loading from older dict/json."""
236
+ if isinstance(values, dict) and 'perspectives' not in values and 'roles' in values:
237
+ values = dict(values)
238
+ values['perspectives'] = values.pop('roles')
239
+ return values
240
+ perspectives: List[str] = Field(default_factory=list)
241
+ questions: List[str] = Field(default_factory=list)
242
+
168
243
  class FormatSet(BaseModel):
169
244
  """
170
- Represents a complete format set with heading, description, aliases, annotations, formats, and actions.
245
+ Represents a complete format set with target_type, heading, description, aliases, annotations, formats, and actions.
171
246
 
172
247
  Attributes:
248
+ target_type: The related Open Metadata entity type this format set targets (e.g., Glossary, Term). Optional.
173
249
  heading: A title for the format set
174
250
  description: A description of what the format set is for
175
251
  aliases: Alternative names that can be used to reference this format set
176
252
  annotations: Additional metadata, like wiki links
253
+ family: Optional tag to group related format sets for organization/searching
177
254
  formats: A list of format configurations
178
255
  action: Optional action associated with the format set
179
256
  get_additional_props: Optional action used to retrieve additional properties for a format set
180
257
  """
258
+ target_type: Optional[str] = None
181
259
  heading: str
182
260
  description: str
183
261
  aliases: List[str] = Field(default_factory=list)
184
262
  annotations: Dict[str, List[str]] = Field(default_factory=dict)
263
+ family: Optional[str] = None
185
264
  formats: List[Union[Format, Dict[str, Any]]]
186
265
  action: Optional[Union[ActionParameter, Dict[str, Any]]] = None
187
266
  get_additional_props: Optional[Union[ActionParameter, Dict[str, Any]]] = None
267
+ # Optional: example questions and perspectives this report spec can address
268
+ question_spec: Optional[List[Union[QuestionSpec, Dict[str, Any]]]] = None
188
269
 
270
+ @root_validator(pre=True)
271
+ def _migrate_legacy_fields(cls, values):
272
+ """Migrate legacy fields from older saved JSON (entity_type -> target_type)."""
273
+ if isinstance(values, dict):
274
+ if 'entity_type' in values and 'target_type' not in values:
275
+ values['target_type'] = values.pop('entity_type')
276
+ return values
277
+
189
278
  @validator('formats', pre=True)
190
279
  def validate_formats(cls, v):
191
280
  """Convert dictionary formats to Format objects."""
@@ -196,6 +285,19 @@ class FormatSet(BaseModel):
196
285
  else:
197
286
  result.append(item)
198
287
  return result
288
+
289
+ @validator('question_spec', pre=True)
290
+ def validate_question_spec(cls, v):
291
+ """Convert dictionary items to QuestionSpec objects when provided."""
292
+ if v is None:
293
+ return None
294
+ out: List[QuestionSpec] = []
295
+ for item in v:
296
+ if isinstance(item, dict):
297
+ out.append(QuestionSpec(**item))
298
+ else:
299
+ out.append(item)
300
+ return out
199
301
 
200
302
  @validator('action', 'get_additional_props', pre=True)
201
303
  def validate_action_like(cls, v):
@@ -225,6 +327,10 @@ class FormatSet(BaseModel):
225
327
  result['get_additional_props'] = (
226
328
  self.get_additional_props if isinstance(self.get_additional_props, dict) else self.get_additional_props.dict()
227
329
  )
330
+ if self.question_spec is not None:
331
+ result['question_spec'] = [
332
+ item if isinstance(item, dict) else item.dict() for item in self.question_spec
333
+ ]
228
334
  return result
229
335
 
230
336
  def get(self, key, default=None):
@@ -265,7 +371,7 @@ class FormatSetDict(Dict[str, FormatSet]):
265
371
  Args:
266
372
  key: The name or alias to look up
267
373
  default: The default value to return if the key is not found
268
-
374
+
269
375
  Returns:
270
376
  FormatSet: The format set if found, otherwise the default value
271
377
  """
@@ -292,12 +398,42 @@ class FormatSetDict(Dict[str, FormatSet]):
292
398
  Args:
293
399
  key: The name or alias to look up
294
400
  default: The default value to return if the key is not found
295
-
401
+
296
402
  Returns:
297
403
  FormatSet: The format set if found, otherwise the default value
298
404
  """
299
405
  return self.find_by_name_or_alias(key, default)
300
406
 
407
+ def filter_by_family(self, family: str) -> Dict[str, FormatSet]:
408
+ """
409
+ Return a plain dict of format sets whose `family` matches the given value.
410
+
411
+ Matching rules
412
+ - Case-insensitive comparison
413
+ - Leading/trailing whitespace in the input and stored family are ignored
414
+ - Pass an empty string ("") to match entries with no family assigned
415
+
416
+ Args:
417
+ family: Family name to match (case-insensitive). Use "" to select entries with no family.
418
+
419
+ Returns:
420
+ dict[str, FormatSet]: Mapping of spec name -> FormatSet for matching entries.
421
+ """
422
+ # Normalize the requested family
423
+ fam_norm = (family or "").strip().lower()
424
+ result: Dict[str, FormatSet] = {}
425
+ for name, fs in self.items():
426
+ fs_family_raw = getattr(fs, "family", None)
427
+ fs_family_norm = (fs_family_raw or "").strip().lower()
428
+ if fam_norm == "":
429
+ # Select items with no family set
430
+ if fs_family_norm == "":
431
+ result[name] = fs
432
+ else:
433
+ if fs_family_norm == fam_norm:
434
+ result[name] = fs
435
+ return result
436
+
301
437
  def values(self):
302
438
  """Get all format sets."""
303
439
  return super().values()
@@ -344,7 +480,7 @@ class FormatSetDict(Dict[str, FormatSet]):
344
480
 
345
481
  Args:
346
482
  key: The name or alias to check
347
-
483
+
348
484
  Returns:
349
485
  bool: True if the format set exists, False otherwise
350
486
  """
@@ -0,0 +1,14 @@
1
+ """
2
+ Deprecated module shim.
3
+ This module has been renamed to pyegeria.base_report_formats.
4
+ It re-exports all public APIs and raises DeprecationWarning on import.
5
+ """
6
+ import warnings
7
+
8
+ warnings.warn(
9
+ "pyegeria._output_formats is deprecated; use pyegeria.base_report_formats instead",
10
+ DeprecationWarning,
11
+ stacklevel=2,
12
+ )
13
+
14
+ from pyegeria.view.base_report_formats import * # noqa: F401,F403