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,291 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ SPDX-License-Identifier: Apache-2.0
4
+ Copyright Contributors to the ODPi Egeria project.
5
+
6
+ Example script demonstrating how to save and load report specs (formerly called format sets).
7
+
8
+ This script shows how to:
9
+ 1. Create custom report specs
10
+ 2. Save report specs to a file
11
+ 3. Load report specs from a file
12
+ 4. Use the loaded report specs
13
+ 5. Work with the user report specs directory
14
+ """
15
+
16
+ import sys
17
+ import os
18
+
19
+ # Add the parent directory to the path so we can import the modules
20
+ sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
21
+
22
+ from pyegeria.view._output_format_models import Column, Format, ActionParameter, FormatSet, FormatSetDict
23
+ from pyegeria.view.base_report_formats import (
24
+ report_specs,
25
+ save_report_specs,
26
+ USER_FORMAT_SETS_DIR,
27
+ select_report_spec,
28
+ )
29
+
30
+ def create_custom_format_sets():
31
+ """
32
+ Create custom report specs for the example.
33
+
34
+ Returns:
35
+ FormatSetDict: A dictionary of custom format sets
36
+ """
37
+ print("\n=== Creating Custom Report Specs ===")
38
+
39
+ # Create common columns that will be used in multiple formats
40
+ common_columns = [
41
+ Column(name="ID", key="id"),
42
+ Column(name="Name", key="name"),
43
+ Column(name="Description", key="description", format=True),
44
+ ]
45
+
46
+ # Create additional columns for specific formats
47
+ detail_columns = [
48
+ Column(name="Created By", key="created_by"),
49
+ Column(name="Created Date", key="created_date"),
50
+ Column(name="Modified By", key="modified_by"),
51
+ Column(name="Modified Date", key="modified_date"),
52
+ ]
53
+
54
+ technical_columns = [
55
+ Column(name="Type", key="type"),
56
+ Column(name="Status", key="status"),
57
+ Column(name="Version", key="version"),
58
+ ]
59
+
60
+ # Create formats that reuse and compose columns
61
+ table_format = Format(
62
+ types=["TABLE"],
63
+ columns=common_columns, # Basic columns for table view
64
+ )
65
+
66
+ detail_format = Format(
67
+ types=["DETAIL", "FORM"],
68
+ columns=common_columns + detail_columns, # Common columns plus detail columns
69
+ )
70
+
71
+ technical_format = Format(
72
+ types=["TECHNICAL", "DICT"],
73
+ columns=common_columns + technical_columns, # Common columns plus technical columns
74
+ )
75
+
76
+ full_format = Format(
77
+ types=["FULL", "REPORT"],
78
+ columns=common_columns + detail_columns + technical_columns, # All columns
79
+ )
80
+
81
+ # Create format sets that include the formats
82
+ product_format_set = FormatSet(
83
+ heading="Product Format Set",
84
+ description="A format set for product information",
85
+ aliases=["Product", "Products"],
86
+ formats=[table_format, detail_format, technical_format],
87
+ action=[
88
+ ActionParameter(
89
+ function="ProductManager.find_products",
90
+ required_params=["search_string"],
91
+ spec_params={},
92
+ )
93
+ ],
94
+ )
95
+
96
+ customer_format_set = FormatSet(
97
+ heading="Customer Format Set",
98
+ description="A format set for customer information",
99
+ aliases=["Customer", "Customers"],
100
+ formats=[table_format, detail_format, full_format],
101
+ action=[
102
+ ActionParameter(
103
+ function="CustomerManager.find_customers",
104
+ required_params=["search_string"],
105
+ spec_params={},
106
+ )
107
+ ],
108
+ )
109
+
110
+ # Create a FormatSetDict with the custom format sets
111
+ custom_format_sets = FormatSetDict({
112
+ "Product": product_format_set,
113
+ "Customer": customer_format_set,
114
+ })
115
+
116
+ print(f"Created {len(custom_format_sets)} custom format sets:")
117
+ for name, format_set in custom_format_sets.items():
118
+ print(f" - {name}: {format_set.heading}")
119
+ print(f" Description: {format_set.description}")
120
+ print(f" Aliases: {format_set.aliases}")
121
+ print(f" Number of formats: {len(format_set.formats)}")
122
+
123
+ return custom_format_sets
124
+
125
+ def save_format_sets_example(custom_format_sets):
126
+ """
127
+ Example of saving report specs to a file.
128
+
129
+ Args:
130
+ custom_format_sets: The custom report specs to save
131
+
132
+ Returns:
133
+ str: The path to the saved file
134
+ """
135
+ print("\n=== Saving Report Specs ===")
136
+
137
+ # Create a directory for the example files
138
+ example_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "format_sets")
139
+ os.makedirs(example_dir, exist_ok=True)
140
+
141
+ # Save all format sets to a file
142
+ all_format_sets_path = os.path.join(example_dir, "all_format_sets.json")
143
+ save_report_specs(all_format_sets_path)
144
+ print(f"Saved all report specs to {all_format_sets_path}")
145
+
146
+ # Save only the custom format sets to a file
147
+ custom_format_sets_path = os.path.join(example_dir, "custom_format_sets.json")
148
+ custom_format_sets.save_to_json(custom_format_sets_path)
149
+ print(f"Saved custom report specs to {custom_format_sets_path}")
150
+
151
+ # Save a subset of the predefined format sets to a file
152
+ subset_format_sets_path = os.path.join(example_dir, "subset_format_sets.json")
153
+ save_report_specs(subset_format_sets_path, format_set_names=["Collections", "DataDictionary"])
154
+ print(f"Saved subset of report specs to {subset_format_sets_path}")
155
+
156
+ return custom_format_sets_path
157
+
158
+ def load_format_sets_example(file_path):
159
+ """
160
+ Example of loading report specs from a file.
161
+
162
+ Args:
163
+ file_path: The path to the file to load
164
+
165
+ Returns:
166
+ FormatSetDict: The loaded report specs
167
+ """
168
+ print("\n=== Loading Report Specs ===")
169
+
170
+ # Create a new FormatSetDict to load the report specs into
171
+ loaded_format_sets = FormatSetDict()
172
+
173
+ # Load the report specs from the file
174
+ try:
175
+ loaded_format_sets = FormatSetDict.load_from_json(file_path)
176
+ print(f"Loaded {len(loaded_format_sets)} report specs from {file_path}")
177
+
178
+ # Print information about the loaded report specs
179
+ for name, format_set in loaded_format_sets.items():
180
+ print(f" - {name}: {format_set.heading}")
181
+ print(f" Description: {format_set.description}")
182
+ print(f" Aliases: {format_set.aliases}")
183
+ print(f" Number of formats: {len(format_set.formats)}")
184
+
185
+ return loaded_format_sets
186
+ except Exception as e:
187
+ print(f"Error loading report specs from {file_path}: {e}")
188
+ return None
189
+
190
+ def use_loaded_format_sets(loaded_format_sets):
191
+ """
192
+ Example of using loaded report specs.
193
+
194
+ Args:
195
+ loaded_format_sets: The loaded report specs to use
196
+ """
197
+ print("\n=== Using Loaded Report Specs ===")
198
+
199
+ # Add the loaded format sets to the global report_specs
200
+ for name, format_set in loaded_format_sets.items():
201
+ report_specs[name] = format_set
202
+
203
+ # Use the select_report_spec function to get a report spec by name
204
+ product_format_set = select_report_spec("Product", "TABLE")
205
+ if product_format_set:
206
+ print(f"Found report spec for 'Product' with output type 'TABLE'")
207
+ print(f" Heading: {product_format_set['heading']}")
208
+ print(f" Description: {product_format_set['description']}")
209
+ print(f" Number of columns: {len(product_format_set['formats']['columns'])}")
210
+ else:
211
+ print("Format set for 'Product' not found")
212
+
213
+ # Use the select_report_spec function to get a report spec by alias
214
+ customer_format_set = select_report_spec("Customers", "DETAIL")
215
+ if customer_format_set:
216
+ print(f"Found report spec for 'Customers' with output type 'DETAIL'")
217
+ print(f" Heading: {customer_format_set['heading']}")
218
+ print(f" Description: {customer_format_set['description']}")
219
+ print(f" Number of columns: {len(customer_format_set['formats']['columns'])}")
220
+ else:
221
+ print("Format set for 'Customers' not found")
222
+
223
+ def user_format_sets_directory_example(custom_format_sets):
224
+ """
225
+ Example of working with the user report specs directory.
226
+
227
+ Args:
228
+ custom_format_sets: The custom report specs to save to the user directory
229
+ """
230
+ print("\n=== Working with User Report Specs Directory ===")
231
+
232
+ # Create the user report specs directory if it doesn't exist
233
+ os.makedirs(USER_FORMAT_SETS_DIR, exist_ok=True)
234
+ print(f"User report specs directory: {USER_FORMAT_SETS_DIR}")
235
+
236
+ # Save a custom report spec to the user directory
237
+ user_format_set = FormatSet(
238
+ heading="User Custom Format Set",
239
+ description="A custom format set for the user directory",
240
+ formats=[
241
+ Format(
242
+ types=["TABLE"],
243
+ columns=[
244
+ Column(name="Column 1", key="column1"),
245
+ Column(name="Column 2", key="column2"),
246
+ ],
247
+ ),
248
+ ],
249
+ )
250
+
251
+ user_format_sets = FormatSetDict({"UserCustomFormatSet": user_format_set})
252
+ user_format_sets_path = os.path.join(USER_FORMAT_SETS_DIR, "user_custom_format_sets.json")
253
+ user_format_sets.save_to_json(user_format_sets_path)
254
+ print(f"Saved user custom report spec to {user_format_sets_path}")
255
+
256
+ # Load the user format sets
257
+ from pyegeria.view.base_report_formats import load_user_report_specs
258
+ load_user_report_specs()
259
+
260
+ # Check if the user report spec was loaded
261
+ if "UserCustomFormatSet" in report_specs:
262
+ print("User custom report spec was successfully loaded")
263
+ print(f" Heading: {report_specs['UserCustomFormatSet'].heading}")
264
+ print(f" Description: {report_specs['UserCustomFormatSet'].description}")
265
+ else:
266
+ print("User custom report spec was not loaded")
267
+
268
+ def main():
269
+ """Run the example."""
270
+ print("=== Report Specs Save/Load Example ===")
271
+
272
+ # Create custom format sets
273
+ custom_format_sets = create_custom_format_sets()
274
+
275
+ # Save format sets to files
276
+ file_path = save_format_sets_example(custom_format_sets)
277
+
278
+ # Load format sets from a file
279
+ loaded_format_sets = load_format_sets_example(file_path)
280
+
281
+ # Use the loaded format sets
282
+ if loaded_format_sets:
283
+ use_loaded_format_sets(loaded_format_sets)
284
+
285
+ # Work with the user format sets directory
286
+ user_format_sets_directory_example(custom_format_sets)
287
+
288
+ print("\n=== Example Complete ===")
289
+
290
+ if __name__ == "__main__":
291
+ main()
@@ -0,0 +1,129 @@
1
+ """
2
+ PDX-License-Identifier: Apache-2.0
3
+ Copyright Contributors to the ODPi Egeria project.
4
+
5
+ This module contains the Jacquard Data Sets View Service client.
6
+ """
7
+
8
+ import asyncio
9
+
10
+ from pyegeria.core._server_client import ServerClient
11
+ from pyegeria.models import (
12
+ SearchStringRequestBody,
13
+ )
14
+ from pyegeria.core.utils import dynamic_catch
15
+
16
+
17
+ class JacquardDataSets(ServerClient):
18
+ """
19
+ Client for the Jacquard Data Sets View Service.
20
+
21
+ The Jacquard Data Sets View Service provides methods to manage and retrieve tabular data sets.
22
+ Note: Many of these methods are implemented in the Data Engineer View Service.
23
+
24
+ Attributes
25
+ ----------
26
+ view_server : str
27
+ The name of the View Server to use.
28
+ platform_url : str
29
+ URL of the server platform to connect to.
30
+ user_id : str
31
+ The identity of the user calling the method.
32
+ user_pwd : str
33
+ The password associated with the user_id. Defaults to None.
34
+ """
35
+
36
+ def __init__(
37
+ self,
38
+ view_server: str,
39
+ platform_url: str,
40
+ user_id: str,
41
+ user_pwd: str = None,
42
+ token: str = None,
43
+ ):
44
+ super().__init__(view_server, platform_url, user_id, user_pwd, token)
45
+ self.view_server = view_server
46
+ self.platform_url = platform_url
47
+ self.user_id = user_id
48
+ self.user_pwd = user_pwd
49
+ self.url_marker = "data-engineer"
50
+
51
+ @dynamic_catch
52
+ async def _async_find_tabular_data_sets(
53
+ self,
54
+ search_string: str = "*",
55
+ body: dict | SearchStringRequestBody = None,
56
+ ) -> list | str:
57
+ url = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/data-engineer/assets/by-search-string"
58
+ if body is None:
59
+ body = {
60
+ "class": "SearchStringRequestBody",
61
+ "searchString": search_string,
62
+ "metadataElementTypeName": "TabularDataSet",
63
+ "skipClassifiedElements": ["Template"],
64
+ }
65
+ response = await self._async_make_request("POST", url, body)
66
+ return response.json().get("elements")
67
+
68
+ def find_tabular_data_sets(
69
+ self,
70
+ search_string: str = "*",
71
+ body: dict | SearchStringRequestBody = None,
72
+ ) -> list | str:
73
+ loop = asyncio.get_event_loop()
74
+ return loop.run_until_complete(self._async_find_tabular_data_sets(search_string, body))
75
+
76
+ @dynamic_catch
77
+ async def _async_get_tabular_data_set_report(
78
+ self,
79
+ guid: str,
80
+ start_from_row: int = 0,
81
+ max_row_count: int = 5000,
82
+ ) -> dict | str:
83
+ url = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/data-engineer/tabular-data-sets/{guid}/report?startFromRow={start_from_row}&maxRowCount={max_row_count}"
84
+ response = await self._async_make_request("GET", url)
85
+ return response.json()
86
+
87
+ def get_tabular_data_set_report(
88
+ self,
89
+ guid: str,
90
+ start_from_row: int = 0,
91
+ max_row_count: int = 5000,
92
+ ) -> dict | str:
93
+ loop = asyncio.get_event_loop()
94
+ return loop.run_until_complete(
95
+ self._async_get_tabular_data_set_report(guid, start_from_row, max_row_count)
96
+ )
97
+
98
+ @dynamic_catch
99
+ async def _async_find_assets_by_name(
100
+ self,
101
+ filter_string: str,
102
+ metadata_element_type_name: str = "ReferenceCodeTable",
103
+ start_from: int = 0,
104
+ page_size: int = 10,
105
+ ) -> list | str:
106
+ url = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/asset-maker/assets/by-name"
107
+ body = {
108
+ "class": "FilterRequestBody",
109
+ "metadataElementTypeName": metadata_element_type_name,
110
+ "filter": filter_string,
111
+ "startFrom": start_from,
112
+ "pageSize": page_size,
113
+ }
114
+ response = await self._async_make_request("POST", url, body)
115
+ return response.json().get("elements")
116
+
117
+ def find_assets_by_name(
118
+ self,
119
+ filter_string: str,
120
+ metadata_element_type_name: str = "ReferenceCodeTable",
121
+ start_from: int = 0,
122
+ page_size: int = 10,
123
+ ) -> list | str:
124
+ loop = asyncio.get_event_loop()
125
+ return loop.run_until_complete(
126
+ self._async_find_assets_by_name(
127
+ filter_string, metadata_element_type_name, start_from, page_size
128
+ )
129
+ )
@@ -0,0 +1,193 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ SPDX-License-Identifier: Apache-2.0
4
+ Copyright Contributors to the ODPi Egeria project.
5
+
6
+ Example script demonstrating how to use the Pydantic models for output report specs.
7
+
8
+ This script shows how to:
9
+ 1. Create custom columns, formats, and report specs
10
+ 2. Compose formats by reusing columns
11
+ 3. Add a custom report spec to the report_specs dictionary
12
+ 4. Use the functions in _output_formats.py with the new models
13
+ """
14
+
15
+ import sys
16
+ import os
17
+
18
+ # Add the parent directory to the path so we can import the modules
19
+ sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
20
+
21
+ from pyegeria.view._output_format_models import Column, Format, ActionParameter, FormatSet
22
+ from pyegeria.view.base_report_formats import (
23
+ report_specs,
24
+ select_report_spec,
25
+ report_spec_list,
26
+ get_report_spec_heading,
27
+ get_report_spec_description,
28
+ get_report_spec_match,
29
+ )
30
+
31
+ def create_custom_report_spec():
32
+ """
33
+ Create a custom format set with multiple formats.
34
+
35
+ This demonstrates how to create columns, formats, and format sets,
36
+ and how to compose formats by reusing columns.
37
+ """
38
+ print("\n=== Creating a custom report spec ===")
39
+
40
+ # Create common columns that will be used in multiple formats
41
+ common_columns = [
42
+ Column(name="ID", key="id"),
43
+ Column(name="Name", key="name"),
44
+ Column(name="Description", key="description", format=True),
45
+ ]
46
+
47
+ # Create additional columns for specific formats
48
+ detail_columns = [
49
+ Column(name="Created By", key="created_by"),
50
+ Column(name="Created Date", key="created_date"),
51
+ Column(name="Modified By", key="modified_by"),
52
+ Column(name="Modified Date", key="modified_date"),
53
+ ]
54
+
55
+ technical_columns = [
56
+ Column(name="Type", key="type"),
57
+ Column(name="Status", key="status"),
58
+ Column(name="Version", key="version"),
59
+ ]
60
+
61
+ # Create formats that reuse and compose columns
62
+ table_format = Format(
63
+ types=["TABLE"],
64
+ columns=common_columns, # Basic columns for table view
65
+ )
66
+
67
+ detail_format = Format(
68
+ types=["DETAIL", "FORM"],
69
+ columns=common_columns + detail_columns, # Common columns plus detail columns
70
+ )
71
+
72
+ technical_format = Format(
73
+ types=["TECHNICAL", "DICT"],
74
+ columns=common_columns + technical_columns, # Common columns plus technical columns
75
+ )
76
+
77
+ full_format = Format(
78
+ types=["FULL", "REPORT"],
79
+ columns=common_columns + detail_columns + technical_columns, # All columns
80
+ )
81
+
82
+ # Create a report spec (format set) that includes all the formats
83
+ custom_format_set = FormatSet(
84
+ heading="Custom Example Format Set",
85
+ description="A custom format set demonstrating composition of formats",
86
+ aliases=["CustomExample", "Example"],
87
+ annotations={"wikilinks": ["[[Example]]", "[[Custom]]"]},
88
+ formats=[table_format, detail_format, technical_format, full_format],
89
+ action=[
90
+ ActionParameter(
91
+ function="ExampleManager.find_examples",
92
+ required_params=["search_string"],
93
+ spec_params={},
94
+ )
95
+ ],
96
+ )
97
+
98
+ # Print information about the report spec
99
+ print(f"Created report spec: {custom_format_set.heading}")
100
+ print(f"Description: {custom_format_set.description}")
101
+ print(f"Aliases: {custom_format_set.aliases}")
102
+ print(f"Number of formats: {len(custom_format_set.formats)}")
103
+
104
+ # Print information about each format
105
+ for i, format in enumerate(custom_format_set.formats):
106
+ print(f"\nFormat {i+1}:")
107
+ print(f" Types: {format.types}")
108
+ print(f" Number of columns: {len(format.columns)}")
109
+ print(f" Columns: {[column.name for column in format.columns]}")
110
+
111
+ return custom_format_set
112
+
113
+ def add_report_spec_to_dictionary(format_set):
114
+ """
115
+ Add a report spec to the report_specs dictionary.
116
+
117
+ This demonstrates how to add a custom report spec to the
118
+ report_specs dictionary for use with the functions
119
+ in _output_formats.py.
120
+ """
121
+ print("\n=== Adding report spec to dictionary ===")
122
+
123
+ # Add the report spec to the report_specs dictionary
124
+ report_specs["CustomExample"] = format_set
125
+
126
+ # Verify that the report spec was added
127
+ format_sets = report_spec_list()
128
+ if "CustomExample" in format_sets:
129
+ print("Report spec successfully added to the dictionary!")
130
+ print(f"Available report specs: {format_sets}")
131
+ else:
132
+ print("Failed to add report spec to the dictionary.")
133
+
134
+ def use_output_format_functions():
135
+ """
136
+ Use the functions in _output_formats.py with the new models.
137
+
138
+ This demonstrates how to use the functions in _output_formats.py
139
+ with the new Pydantic models.
140
+ """
141
+ print("\n=== Using output format functions ===")
142
+
143
+ # Get a report spec by name
144
+ format_set = select_report_spec("CustomExample", "TABLE")
145
+ if format_set:
146
+ print("Successfully retrieved report spec by name!")
147
+ print(f"Heading: {format_set['heading']}")
148
+ print(f"Description: {format_set['description']}")
149
+ else:
150
+ print("Failed to retrieve report spec by name.")
151
+
152
+ # Get a report spec by alias
153
+ format_set = select_report_spec("Example", "TABLE")
154
+ if format_set:
155
+ print("\nSuccessfully retrieved report spec by alias!")
156
+ print(f"Heading: {format_set['heading']}")
157
+ print(f"Description: {format_set['description']}")
158
+ else:
159
+ print("\nFailed to retrieve report spec by alias.")
160
+
161
+ # Get the heading and description of a report spec
162
+ heading = get_report_spec_heading("CustomExample")
163
+ description = get_report_spec_description("CustomExample")
164
+ print(f"\nHeading: {heading}")
165
+ print(f"Description: {description}")
166
+
167
+ # Match a report spec with a specific output type
168
+ format_set = select_report_spec("CustomExample", "ANY")
169
+ matched_format_set = get_report_spec_match(format_set, "DETAIL")
170
+ if matched_format_set and "formats" in matched_format_set:
171
+ print("\nSuccessfully matched report spec with output type!")
172
+ print(f"Output type: {matched_format_set['formats']['types']}")
173
+ print(f"Number of columns: {len(matched_format_set['formats']['columns'])}")
174
+ else:
175
+ print("\nFailed to match report spec with output type.")
176
+
177
+ def main():
178
+ """Run the example script."""
179
+ print("=== Output Formats Example ===")
180
+
181
+ # Create a custom report spec
182
+ custom_format_set = create_custom_report_spec()
183
+
184
+ # Add the report spec to the report_specs dictionary
185
+ add_report_spec_to_dictionary(custom_format_set)
186
+
187
+ # Use the functions in _output_formats.py with the new models
188
+ use_output_format_functions()
189
+
190
+ print("\n=== Example Complete ===")
191
+
192
+ if __name__ == "__main__":
193
+ main()
@@ -0,0 +1,54 @@
1
+ """
2
+ PDX-License-Identifier: Apache-2.0
3
+ Copyright Contributors to the ODPi Egeria project.
4
+
5
+ This module tests the JacquardDataSets class and methods from jacquard_data_sets.py
6
+ """
7
+
8
+ from rich import print
9
+ from rich.console import Console
10
+
11
+ from pyegeria.core._exceptions import (
12
+ PyegeriaInvalidParameterException,
13
+ PyegeriaConnectionException,
14
+ PyegeriaAPIException,
15
+ PyegeriaNotFoundException,
16
+ )
17
+ from examples.jacquard_data_sets import JacquardDataSets
18
+ from pyegeria.core.logging_configuration import config_logging, init_logging
19
+
20
+ disable_ssl_warnings = True
21
+
22
+ console = Console(width=250)
23
+
24
+ config_logging()
25
+ init_logging(True)
26
+
27
+ VIEW_SERVER = "qs-view-server"
28
+ PLATFORM_URL = "https://localhost:9443"
29
+ USER_ID = "peterprofile"
30
+ USER_PWD = "secret"
31
+
32
+
33
+ class TestJacquardDataSets:
34
+ good_platform1_url = PLATFORM_URL
35
+ good_user_1 = USER_ID
36
+ good_user_2 = USER_ID
37
+ good_view_server_1 = VIEW_SERVER
38
+
39
+ def test_find_tabular_data_sets(self):
40
+ """Test finding tabular data sets"""
41
+ jds_client = JacquardDataSets(self.good_view_server_1, self.good_platform1_url, user_id=self.good_user_2)
42
+ try:
43
+ jds_client.create_egeria_bearer_token(self.good_user_2, USER_PWD)
44
+
45
+ try:
46
+ response = jds_client.find_tabular_data_sets(search_string="*")
47
+ assert response is not None
48
+ except (PyegeriaInvalidParameterException, PyegeriaNotFoundException, PyegeriaAPIException):
49
+ pass
50
+
51
+ except PyegeriaConnectionException:
52
+ print("Skipping test due to connection error")
53
+ finally:
54
+ jds_client.close_session()