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
@@ -2,35 +2,32 @@
2
2
  SPDX-License-Identifier: Apache-2.0
3
3
  Copyright Contributors to the ODPi Egeria project.
4
4
 
5
- This class is meant to be a client for catalog users and currently inherits from
6
- AssetCatalog, CollectionManager, GlossaryManager, and ProjectManager.
5
+ EgeriaCat: Catalog-oriented client using multiple inheritance.
7
6
 
7
+ This client combines methods from:
8
+ - AssetCatalog (asset_catalog_omvs)
9
+ - GlossaryManager (glossary_manager)
10
+ - ProjectManager (project_manager)
11
+ - MyProfile (my_profile_omvs)
12
+
13
+ to provide a single, convenient surface for catalog users.
8
14
  """
9
- from pyegeria.egeria_my_client import EgeriaMy
10
- from pyegeria.asset_catalog_omvs import AssetCatalog
11
- # from pyegeria.collection_manager import CollectionManager
12
- from pyegeria.glossary_manager import GlossaryManager
13
- from pyegeria.project_manager import ProjectManager
15
+ from pyegeria.omvs.asset_catalog import AssetCatalog
16
+ from pyegeria.omvs.glossary_manager import GlossaryManager
17
+ from pyegeria.omvs.project_manager import ProjectManager
18
+ from pyegeria.omvs.my_profile import MyProfile
14
19
 
15
20
 
16
- class EgeriaCat:
21
+ class EgeriaCat(ProjectManager, GlossaryManager, AssetCatalog, MyProfile):
17
22
  """
18
- Catalog-oriented client using composition of AssetCatalog, EgeriaMy, GlossaryManager, and ProjectManager.
19
-
20
- Attributes:
21
- view_server: str
22
- Name of the view server to use.
23
- platform_url : str
24
- URL of the server platform to connect to
25
- user_id : str
26
- The identity of the user calling the method.
27
- user_pwd: str
28
- The password associated with the user_id. Defaults to None
29
- token: str
30
- An optional bearer token
31
-
32
- Methods:
33
- Methods are provided by composed sub-clients via delegation.
23
+ Catalog-oriented client that exposes the combined methods of
24
+ ProjectManager, GlossaryManager, AssetCatalog, and MyProfile via inheritance.
25
+
26
+ Notes:
27
+ - ProjectManager is listed first to prefer the BaseServerClient (ServerClient) token/session
28
+ implementations in method resolution order.
29
+ - Each parent class is explicitly initialized to ensure its internal state
30
+ (URLs, roots, etc.) is set up.
34
31
  """
35
32
 
36
33
  def __init__(
@@ -41,52 +38,11 @@ class EgeriaCat:
41
38
  user_pwd: str = None,
42
39
  token: str = None,
43
40
  ):
44
- self.view_server = view_server
45
- self.platform_url = platform_url
46
- self.user_id = user_id
47
- self.user_pwd = user_pwd
48
-
49
- # Compose sub-clients
50
- self._asset_catalog = AssetCatalog(view_server, platform_url, user_id, user_pwd, token)
51
- self._my = EgeriaMy(view_server, platform_url, user_id, user_pwd, token)
52
- self._glossary = GlossaryManager(view_server, platform_url, user_id, user_pwd, token)
53
- self._projects = ProjectManager(view_server, platform_url, user_id, user_pwd, token)
54
- self._subclients = [
55
- self._asset_catalog,
56
- self._my,
57
- self._glossary,
58
- self._projects,
59
- ]
60
-
61
- def __getattr__(self, name):
62
- for sub in self._subclients:
63
- if hasattr(sub, name):
64
- return getattr(sub, name)
65
- raise AttributeError(f"{self.__class__.__name__!s} object has no attribute {name!r}")
66
-
67
- def create_egeria_bearer_token(self, user_id: str = None, user_pwd: str = None):
68
- token_val = None
69
- for sub in self._subclients:
70
- token_val = sub.create_egeria_bearer_token(user_id, user_pwd)
71
- return token_val
72
-
73
- def set_bearer_token(self, token: str) -> None:
74
- for sub in self._subclients:
75
- sub.set_bearer_token(token)
76
-
77
- def get_token(self) -> str:
78
- for sub in self._subclients:
79
- if hasattr(sub, "get_token"):
80
- return sub.get_token()
81
- return None
82
-
83
- def close_session(self) -> None:
84
- for sub in self._subclients:
85
- if hasattr(sub, "close_session"):
86
- try:
87
- sub.close_session()
88
- except Exception:
89
- pass
41
+ # Initialize each parent explicitly (do not rely on cooperative super)
42
+ ProjectManager.__init__(self, view_server, platform_url, user_id, user_pwd, token)
43
+ GlossaryManager.__init__(self, view_server, platform_url, user_id, user_pwd, token)
44
+ AssetCatalog.__init__(self, view_server, platform_url, user_id, user_pwd, token)
45
+ MyProfile.__init__(self, view_server, platform_url, user_id, user_pwd, token)
90
46
 
91
47
 
92
48
  if __name__ == "__main__":
pyegeria/egeria_client.py CHANGED
@@ -11,48 +11,53 @@ for all use cases..using the more role based clients is often appropriate:
11
11
  * EgeriaTech - for technical users such as data scientists and engineers
12
12
 
13
13
  """
14
- # from pyegeria.x_action_author_omvs import ActionAuthor
15
- from pyegeria.asset_catalog_omvs import AssetCatalog
16
- # from pyegeria.collection_manager import CollectionManager
17
- from pyegeria.glossary_manager import GlossaryManager
18
- from pyegeria.project_manager import ProjectManager
19
- from pyegeria.automated_curation_omvs import AutomatedCuration
20
- from pyegeria.classification_manager_omvs import ClassificationManager
21
- from pyegeria.template_manager_omvs import TemplateManager
22
- from pyegeria.runtime_manager_omvs import RuntimeManager
23
- from pyegeria.full_omag_server_config import FullServerConfig
24
- from pyegeria.metadata_explorer_omvs import MetadataExplorer
25
- from pyegeria.my_profile_omvs import MyProfile
26
- from pyegeria.feedback_manager_omvs import FeedbackManager
27
- from pyegeria.solution_architect_omvs import SolutionArchitect
28
- from pyegeria.server_operations import ServerOps
29
- from pyegeria.registered_info import RegisteredInfo
30
- from pyegeria.valid_metadata_omvs import ValidMetadataManager
14
+ from typing import Optional, Dict, Any
15
+
31
16
  from pyegeria.egeria_config_client import EgeriaConfig
32
- from pyegeria.data_designer import DataDesigner
33
- from pyegeria.governance_officer import GovernanceOfficer
34
- # from pyegeria.md_processing_utils import render_markdown
17
+ from pyegeria.omvs.action_author import ActionAuthor
18
+ from pyegeria.omvs.actor_manager import ActorManager
19
+ from pyegeria.omvs.asset_catalog import AssetCatalog
20
+ from pyegeria.omvs.asset_maker import AssetMaker
21
+ from pyegeria.omvs.automated_curation import AutomatedCuration
22
+ from pyegeria.omvs.classification_manager import ClassificationManager
23
+ from pyegeria.omvs.collection_manager import CollectionManager
24
+ from pyegeria.omvs.community_matters_omvs import CommunityMatters
25
+ from pyegeria.omvs.data_designer import DataDesigner
26
+ from pyegeria.omvs.data_discovery import DataDiscovery
27
+ from pyegeria.omvs.data_engineer import DataEngineer
28
+ from pyegeria.omvs.digital_business import DigitalBusiness
29
+ from pyegeria.omvs.external_links import ExternalReferences
30
+ from pyegeria.omvs.feedback_manager import FeedbackManager
31
+ from pyegeria.omvs.full_omag_server_config import FullServerConfig
32
+ from pyegeria.omvs.glossary_manager import GlossaryManager
33
+ from pyegeria.omvs.governance_officer import GovernanceOfficer
34
+ from pyegeria.omvs.lineage_linker import LineageLinker
35
+ from pyegeria.omvs.location_arena import Location
36
+ from pyegeria.omvs.metadata_expert import MetadataExpert
37
+ from pyegeria.omvs.metadata_explorer_omvs import MetadataExplorer
38
+ from pyegeria.omvs.my_profile import MyProfile
39
+ from pyegeria.omvs.notification_manager import NotificationManager
40
+ from pyegeria.omvs.people_organizer import PeopleOrganizer
41
+ from pyegeria.omvs.product_manager import ProductManager
42
+ from pyegeria.omvs.project_manager import ProjectManager
43
+ from pyegeria.omvs.reference_data import ReferenceDataManager
44
+ from pyegeria.omvs.registered_info import RegisteredInfo
45
+ from pyegeria.omvs.runtime_manager import RuntimeManager
46
+ from pyegeria.omvs.schema_maker import SchemaMaker
47
+ from pyegeria.omvs.server_operations import ServerOps
48
+ from pyegeria.omvs.solution_architect import SolutionArchitect
49
+ from pyegeria.omvs.specification_properties import SpecificationProperties
50
+ from pyegeria.omvs.subject_area import SubjectArea
51
+ from pyegeria.omvs.template_manager_omvs import TemplateManager
52
+ from pyegeria.omvs.time_keeper import TimeKeeper
53
+ from pyegeria.omvs.valid_metadata import ValidMetadataManager
54
+ from pyegeria.omvs.valid_metadata_lists import ValidMetadataLists
55
+ from pyegeria.omvs.valid_type_lists import ValidTypeLists
35
56
 
36
57
 
37
58
  class Egeria:
38
59
  """
39
- Overall Egeria client that composes all functional pyegeria clients and delegates calls to them.
40
-
41
- Attributes:
42
- view_server: str
43
- Name of the view server to use.
44
- platform_url : str
45
- URL of the server platform to connect to
46
- user_id : str
47
- The identity of the user calling the method - this sets a default optionally used by the methods
48
- when the user doesn't pass the user_id on a method call.
49
- user_pwd: str
50
- The password associated with the user_id. Defaults to None
51
- token: str
52
- An optional bearer token
53
-
54
- Methods:
55
- Methods are provided by composed sub-clients via delegation.
60
+ Overall Egeria client that composes all functional pyegeria clients using lazy loading.
56
61
  """
57
62
 
58
63
  def __init__(
@@ -63,75 +68,107 @@ class Egeria:
63
68
  user_pwd: str = None,
64
69
  token: str = None,
65
70
  ):
66
- # Compose major umbrella and service clients
67
- self._asset_catalog = AssetCatalog(view_server, platform_url, user_id, user_pwd, token)
68
- self._my_profile = MyProfile(view_server, platform_url, user_id, user_pwd, token)
69
- self._feedback = FeedbackManager(view_server, platform_url, user_id, user_pwd, token)
70
- self._glossary = GlossaryManager(view_server, platform_url, user_id, user_pwd, token)
71
- self._projects = ProjectManager(view_server, platform_url, user_id, user_pwd, token)
72
- self._runtime = RuntimeManager(view_server, platform_url, user_id, user_pwd, token)
73
- self._server_ops = ServerOps(view_server, platform_url, user_id, user_pwd)
74
- self._full_server_config = FullServerConfig(view_server, platform_url, user_id, user_pwd)
75
- self._auto_curate = AutomatedCuration(view_server, platform_url, user_id, user_pwd, token)
76
- self._class_mgr = ClassificationManager(view_server, platform_url, user_id, user_pwd, token)
77
- self._reg_info = RegisteredInfo(view_server, platform_url, user_id, user_pwd, token)
78
- self._templates = TemplateManager(view_server, platform_url, user_id, user_pwd, token)
79
- self._valid = ValidMetadataManager(view_server, platform_url, user_id, user_pwd, token)
80
- self._explorer = MetadataExplorer(view_server, platform_url, user_id, user_pwd, token)
81
- self._sol_arch = SolutionArchitect(view_server, platform_url, user_id, user_pwd, token)
82
- self._config = EgeriaConfig(view_server, platform_url, user_id, user_pwd)
83
- self._designer = DataDesigner(view_server, platform_url, user_id, user_pwd, token)
84
- self._gov_officer = GovernanceOfficer(view_server, platform_url, user_id, user_pwd, token)
71
+ self.view_server = view_server
72
+ self.platform_url = platform_url
73
+ self.user_id = user_id
74
+ self.user_pwd = user_pwd
75
+ self.token = token
85
76
 
86
- self._subclients = [
87
- self._asset_catalog,
88
- self._my_profile,
89
- self._feedback,
90
- self._glossary,
91
- self._projects,
92
- self._runtime,
93
- self._server_ops,
94
- self._full_server_config,
95
- self._auto_curate,
96
- self._class_mgr,
97
- self._reg_info,
98
- self._templates,
99
- self._valid,
100
- self._explorer,
101
- self._sol_arch,
102
- self._config,
103
- self._designer,
104
- self._gov_officer,
105
- ]
77
+ self._subclient_map = {
78
+ "action_author": ActionAuthor,
79
+ "actor_manager": ActorManager,
80
+ "asset_catalog": AssetCatalog,
81
+ "asset_maker": AssetMaker,
82
+ "auto_curate": AutomatedCuration,
83
+ "class_mgr": ClassificationManager,
84
+ "collections": CollectionManager,
85
+ "community": CommunityMatters,
86
+ "community_matters": CommunityMatters,
87
+ "config": EgeriaConfig,
88
+ "data_discovery": DataDiscovery,
89
+ "data_engineer": DataEngineer,
90
+ "designer": DataDesigner,
91
+ "data_designer": DataDesigner,
92
+ "digital_business": DigitalBusiness,
93
+ "expert": MetadataExpert,
94
+ "explorer": MetadataExplorer,
95
+ "external_refs": ExternalReferences,
96
+ "feedback": FeedbackManager,
97
+ "feedback_manager": FeedbackManager,
98
+ "full_server_config": FullServerConfig,
99
+ "glossary": GlossaryManager,
100
+ "gov_officer": GovernanceOfficer,
101
+ "lineage_linker": LineageLinker,
102
+ "location": Location,
103
+ "my_profile": MyProfile,
104
+ "notifications": NotificationManager,
105
+ "notification_manager": NotificationManager,
106
+ "people_organizer": PeopleOrganizer,
107
+ "product_manager": ProductManager,
108
+ "projects": ProjectManager,
109
+ "project_manager": ProjectManager,
110
+ "reference_data": ReferenceDataManager,
111
+ "reg_info": RegisteredInfo,
112
+ "runtime": RuntimeManager,
113
+ "schema_maker": SchemaMaker,
114
+ "server_ops": ServerOps,
115
+ "sol_arch": SolutionArchitect,
116
+ "specification_properties": SpecificationProperties,
117
+ "subject_area": SubjectArea,
118
+ "templates": TemplateManager,
119
+ "template_manager": TemplateManager,
120
+ "time_keeper": TimeKeeper,
121
+ "valid": ValidMetadataManager,
122
+ "valid_metadata": ValidMetadataManager,
123
+ "valid_metadata_lists": ValidMetadataLists,
124
+ "valid_type_lists": ValidTypeLists,
125
+ }
126
+ self._instantiated_clients = {}
127
+
128
+ def _get_subclient(self, attr_name: str):
129
+ if attr_name not in self._instantiated_clients:
130
+ client_cls = self._subclient_map[attr_name]
131
+ self._instantiated_clients[attr_name] = client_cls(
132
+ self.view_server, self.platform_url, self.user_id, self.user_pwd, self.token
133
+ )
134
+ return self._instantiated_clients[attr_name]
106
135
 
107
136
  def __getattr__(self, name):
108
- for sub in self._subclients:
109
- if hasattr(sub, name):
110
- return getattr(sub, name)
111
- raise AttributeError(f"{self.__class__.__name__!s} object has no attribute {name!r}")
137
+ """Resolves attributes via instantiated or mapped subclients"""
138
+ # Allow direct access to sub-clients if the name matches a key in the map
139
+ if name in self._subclient_map:
140
+ return self._get_subclient(name)
141
+
142
+ for inst in self._instantiated_clients.values():
143
+ if hasattr(inst, name):
144
+ return getattr(inst, name)
145
+ for attr_name, client_cls in self._subclient_map.items():
146
+ if hasattr(client_cls, name):
147
+ return getattr(self._get_subclient(attr_name), name)
148
+ raise AttributeError(f"{self.__class__.__name__} object has no attribute {name}")
112
149
 
113
150
  def create_egeria_bearer_token(self, user_id: str = None, user_pwd: str = None):
114
- token_val = None
115
- for sub in self._subclients:
116
- if hasattr(sub, "create_egeria_bearer_token"):
117
- token_val = sub.create_egeria_bearer_token(user_id, user_pwd)
151
+ # Use server_ops as a reliable helper for token generation
152
+ helper = self._get_subclient("server_ops")
153
+ token_val = helper.create_egeria_bearer_token(user_id, user_pwd)
154
+ self.set_bearer_token(token_val)
118
155
  return token_val
119
156
 
120
157
  def set_bearer_token(self, token: str) -> None:
121
- for sub in self._subclients:
122
- if hasattr(sub, "set_bearer_token"):
123
- sub.set_bearer_token(token)
158
+ self.token = token
159
+ for sub in self._instantiated_clients.values():
160
+ sub.set_bearer_token(token)
124
161
 
125
162
  def get_token(self) -> str:
126
- for sub in self._subclients:
163
+ if self.token: return self.token
164
+ for sub in self._instantiated_clients.values():
127
165
  if hasattr(sub, "get_token"):
128
166
  return sub.get_token()
129
167
  return None
130
168
 
131
169
  def close_session(self) -> None:
132
- for sub in self._subclients:
170
+ for sub in self._instantiated_clients.values():
133
171
  if hasattr(sub, "close_session"):
134
- try:
135
- sub.close_session()
136
- except Exception:
137
- pass
172
+ try: sub.close_session()
173
+ except Exception: pass
174
+ self._instantiated_clients.clear()
@@ -5,71 +5,65 @@ Copyright Contributors to the ODPi Egeria project.
5
5
  Client to configure the Egeria platform and servers
6
6
 
7
7
  """
8
-
9
- from pyegeria.full_omag_server_config import FullServerConfig
10
- from pyegeria.server_operations import ServerOps
8
+ from pyegeria.omvs.core_omag_server_config import CoreServerConfig
9
+ from pyegeria.omvs.full_omag_server_config import FullServerConfig
10
+ from pyegeria.omvs.server_operations import ServerOps
11
11
 
12
12
 
13
13
  class EgeriaConfig:
14
14
  """
15
- Client for configuring the Egeria Platform and Servers using composition.
16
-
17
- Attributes:
18
- server_name: str
19
- Name of the 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 - this sets a default optionally used by the methods
24
- when the user doesn't pass the user_id on a method call.
25
- user_pwd: str
26
- The password associated with the user_id. Defaults to None
27
-
28
- Methods:
29
- Methods are provided by composed sub-clients via delegation.
15
+ Client for managing Egeria configuration using lazy loading.
30
16
  """
31
17
 
32
18
  def __init__(
33
- self, server_name: str, platform_url: str, user_id: str, user_pwd: str = None
19
+ self,
20
+ view_server: str,
21
+ platform_url: str,
22
+ user_id: str,
23
+ user_pwd: str = None,
24
+ token: str = None,
34
25
  ):
35
- self.server_name = server_name
26
+ self.view_server = view_server
36
27
  self.platform_url = platform_url
37
28
  self.user_id = user_id
38
29
  self.user_pwd = user_pwd
39
-
40
- self._config = FullServerConfig(server_name, platform_url, user_id, user_pwd)
41
- self._ops = ServerOps(server_name, platform_url, user_id, user_pwd)
42
- self._subclients = [self._config, self._ops]
30
+ self.token = token
31
+
32
+ self._subclient_map = {
33
+ "core_config": CoreServerConfig,
34
+ "full_config": FullServerConfig,
35
+ }
36
+ self._instantiated_clients = {}
37
+
38
+ def _get_subclient(self, attr_name: str):
39
+ if attr_name not in self._instantiated_clients:
40
+ client_cls = self._subclient_map[attr_name]
41
+ self._instantiated_clients[attr_name] = client_cls(
42
+ self.view_server, self.platform_url, self.user_id, self.user_pwd, self.token
43
+ )
44
+ return self._instantiated_clients[attr_name]
43
45
 
44
46
  def __getattr__(self, name):
45
- for sub in self._subclients:
46
- if hasattr(sub, name):
47
- return getattr(sub, name)
48
- raise AttributeError(f"{self.__class__.__name__!s} object has no attribute {name!r}")
49
-
50
- def create_egeria_bearer_token(self, user_id: str = None, user_pwd: str = None):
51
- token_val = None
52
- for sub in self._subclients:
53
- token_val = sub.create_egeria_bearer_token(user_id, user_pwd)
54
- return token_val
47
+ """Resolves attribute via instantiated or mapped subclients"""
48
+ for inst in self._instantiated_clients.values():
49
+ if hasattr(inst, name):
50
+ return getattr(inst, name)
51
+ for attr_name, client_cls in self._subclient_map.items():
52
+ if hasattr(client_cls, name):
53
+ return getattr(self._get_subclient(attr_name), name)
54
+ raise AttributeError(f"{self.__class__.__name__} object has no attribute {name}")
55
55
 
56
56
  def set_bearer_token(self, token: str) -> None:
57
- for sub in self._subclients:
57
+ self.token = token
58
+ for sub in self._instantiated_clients.values():
58
59
  sub.set_bearer_token(token)
59
60
 
60
- def get_token(self) -> str:
61
- for sub in self._subclients:
62
- if hasattr(sub, "get_token"):
63
- return sub.get_token()
64
- return None
65
-
66
61
  def close_session(self) -> None:
67
- for sub in self._subclients:
62
+ for sub in self._instantiated_clients.values():
68
63
  if hasattr(sub, "close_session"):
69
- try:
70
- sub.close_session()
71
- except Exception:
72
- pass
64
+ try: sub.close_session()
65
+ except Exception: pass
66
+ self._instantiated_clients.clear()
73
67
 
74
68
 
75
69
  if __name__ == "__main__":