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,574 @@
1
+ """
2
+ SPDX-License-Identifier: Apache-2.0
3
+ Copyright Contributors to the ODPi Egeria project.
4
+
5
+ This is a simple class to create and manage a connection to an Egeria backend. It is the Superclass for the
6
+ different client capabilities. It also provides the common methods used to make restful self.session to Egeria.
7
+
8
+ """
9
+
10
+ import asyncio
11
+ import inspect
12
+ import json
13
+ import os
14
+
15
+ import httpcore
16
+ import httpx
17
+ from httpx import AsyncClient, Response, HTTPStatusError
18
+ # from venv import logger
19
+ from loguru import logger
20
+
21
+ from pyegeria.core._exceptions import (
22
+ PyegeriaAPIException, PyegeriaConnectionException, PyegeriaInvalidParameterException,
23
+ PyegeriaUnknownException, PyegeriaClientException
24
+ )
25
+ from pyegeria.core._globals import enable_ssl_check, max_paging_size
26
+ from pyegeria.core._validators import (
27
+ validate_name,
28
+ validate_server_name,
29
+ validate_url,
30
+ validate_user_id,
31
+ )
32
+
33
+ ...
34
+
35
+
36
+ class BasePlatformClient:
37
+ """
38
+ An abstract class used to establish connectivity for an Egeria Client
39
+ for a particular server, platform and user. This is a base client that more functional clients inherit from.
40
+
41
+ Attributes
42
+ ----------
43
+ server_name : str
44
+ Name of the OMAG server to use
45
+ platform_url : str
46
+ URL of the server platform to connect to
47
+ user_id : str
48
+ The identity of the user calling the method - this sets a default optionally used by the methods
49
+ when the user doesn't pass the user_id on a method call.
50
+ user_pwd : str
51
+ The password used to authenticate the server identity
52
+ page_size : int
53
+ The default page size for paged requests.
54
+ token : str
55
+ An optional bearer token for authentication.
56
+ token_src : str
57
+ The source of the bearer token (e.g., 'Egeria').
58
+ api_key : str
59
+ An optional API key for authentication.
60
+
61
+ """
62
+
63
+ json_header = {"Content-Type": "application/json"}
64
+
65
+ def __init__(
66
+ self,
67
+ server_name: str,
68
+ platform_url: str,
69
+ user_id: str = None,
70
+ user_pwd: str = None,
71
+ token: str = None,
72
+ token_src: str = None,
73
+ api_key: str = None,
74
+ page_size: int = max_paging_size,
75
+ ):
76
+ self.server_name = validate_server_name(server_name)
77
+ self.platform_url = validate_url(platform_url)
78
+ self.user_id = user_id
79
+ self.user_pwd = user_pwd
80
+ self.page_size = page_size
81
+ self.token_src = token_src
82
+ self.token = token
83
+ self.exc_type = None
84
+ self.exc_value = None
85
+ self.exc_tb = None
86
+ # self.url_marker = "MetadataExpert"
87
+
88
+ #
89
+ # I'm commenting this out since you should only have to use tokens if you want - just have to
90
+ # create or set the token with the appropriate methods as desired.
91
+ # if token is None:
92
+ # token = os.environ.get("Egeria_Bearer_Token", None)
93
+ # if token is None: # No token found - so make one
94
+ # self.create_egeria_bearer_token(self.user_id, self.user_pwd)
95
+ # else:
96
+ # self.token = token
97
+
98
+ if api_key is None:
99
+ api_key = os.environ.get("API_KEY", None)
100
+ self.api_key = api_key
101
+
102
+ self.headers = {
103
+ "Content-Type": "application/json",
104
+ }
105
+ self.text_headers = {
106
+ "Content-Type": "text/plain",
107
+ }
108
+ if self.api_key is not None:
109
+ self.headers["X-Api-Key"] = self.api_key
110
+ self.text_headers["X-Api-Key"] = self.api_key
111
+
112
+ if token is not None:
113
+ self.headers["Authorization"] = f"Bearer {token}"
114
+ self.text_headers["Authorization"] = f"Bearer {token}"
115
+
116
+ v_url = validate_url(platform_url)
117
+
118
+ if v_url:
119
+ self.platform_url = platform_url
120
+ if validate_server_name(server_name):
121
+ self.server_name = server_name
122
+ self.session = AsyncClient(verify=enable_ssl_check)
123
+ self.command_root: str = f"{self.platform_url}/servers/{self.server_name}/api/open-metadata/"
124
+
125
+ try:
126
+ result = self.check_connection()
127
+ logger.debug(f"client initialized, platform origin is: {result}")
128
+ except PyegeriaConnectionException as e:
129
+ raise
130
+
131
+ async def _async_check_connection(self) -> str:
132
+ """Check if the connection is working. Async version.
133
+
134
+ Returns
135
+ -------
136
+ str
137
+ The platform origin string if reachable, otherwise an empty string.
138
+
139
+ Raises
140
+ ------
141
+ PyegeriaConnectionException
142
+ If the connection to the platform fails.
143
+ """
144
+ try:
145
+ response = await self.async_get_platform_origin()
146
+ return response
147
+
148
+ except PyegeriaConnectionException as e:
149
+ raise
150
+ def check_connection(self) -> str:
151
+ """Check if the connection is working.
152
+
153
+ Returns
154
+ -------
155
+ str
156
+ The platform origin string if reachable, otherwise an empty string.
157
+
158
+ Raises
159
+ ------
160
+ PyegeriaConnectionException
161
+ If the connection to the platform fails.
162
+ """
163
+ loop = asyncio.get_event_loop()
164
+ response = loop.run_until_complete(self._async_check_connection())
165
+ return response
166
+
167
+ def __enter__(self):
168
+ return self
169
+
170
+ def __exit__(self, exc_type, exc_val, exc_tb):
171
+ self.session.aclose()
172
+ if exc_type is not None:
173
+ self.exc_type = exc_type
174
+ self.exc_val = exc_val
175
+ self.exc_tb = exc_tb
176
+
177
+ return False # allows exceptions to propagate
178
+
179
+ def __str__(self):
180
+ return (f"EgeriaClient(server_name={self.server_name}, platform_url={self.platform_url}, "
181
+ f"user_id={self.user_id}, page_size={self.page_size})")
182
+
183
+ async def _async_close_session(self) -> None:
184
+ """Close the session"""
185
+ await self.session.aclose()
186
+
187
+ def close_session(self) -> None:
188
+ """Close the session"""
189
+ loop = asyncio.get_event_loop()
190
+ loop.run_until_complete(self._async_close_session())
191
+ return
192
+
193
+ async def _async_create_egeria_bearer_token(
194
+ self, user_id: str = None, password: str = None
195
+ ) -> str:
196
+ """Create and set an Egeria Platform Bearer Token for the user. Async version
197
+ Parameters
198
+ ----------
199
+ user_id : str, optional
200
+ The user id to authenticate with. If None, then user_id from class instance used.
201
+ password : str, optional
202
+ The password for the user. If None, then user_pwd from class instance is used.
203
+
204
+ Returns
205
+ -------
206
+ token
207
+ The platform bearer token for the specified user.
208
+
209
+ Raises
210
+ ------
211
+ PyegeriaInvalidParameterException
212
+ If the client passes incorrect parameters on the request - such as bad URLs or invalid values
213
+ PyegeriaAPIException
214
+ Raised by the server when an issue arises in processing a valid request
215
+ NotAuthorizedException
216
+ The principle specified by the user_id does not have authorization for the requested action
217
+ Notes
218
+ -----
219
+ This routine creates a new bearer token for the user and updates the object with it.
220
+ It uses Egeria's mechanisms to create a token. This is useful if an Egeria token expires.
221
+ A bearer token from another source can be set with the set_bearer_token() method.
222
+
223
+ """
224
+ if user_id is None:
225
+ user_id = self.user_id
226
+ if password is None:
227
+ password = self.user_pwd
228
+
229
+ url = f"{self.platform_url}/api/token"
230
+ data = {"userId": user_id, "password": password}
231
+ async with AsyncClient(verify=enable_ssl_check) as client:
232
+ try:
233
+ response = await client.post(url, json=data, headers=self.headers)
234
+ token = response.text
235
+ except httpx.HTTPError as e:
236
+ print(e)
237
+ return "FAILED"
238
+
239
+ if token:
240
+ self.token_src = "Egeria"
241
+ self.headers["Authorization"] = f"Bearer {token}"
242
+ self.text_headers["Authorization"] = f"Bearer {token}"
243
+ return token
244
+ else:
245
+ additional_info = {"reason": "No token returned - request issue?"}
246
+ raise PyegeriaInvalidParameterException(None, None, additional_info)
247
+
248
+ def create_egeria_bearer_token(
249
+ self, user_id: str = None, password: str = None
250
+ ) -> str:
251
+ """Create and set an Egeria Platform Bearer Token for the user
252
+ Parameters
253
+ ----------
254
+ user_id : str
255
+ The user id to authenticate with.
256
+ password : str
257
+ The password for the user.
258
+
259
+ Returns
260
+ -------
261
+ token
262
+ The bearer token for the specified user.
263
+
264
+ Raises
265
+ ------
266
+ PyegeriaInvalidParameterException
267
+ If the client passes incorrect parameters on the request - such as bad URLs or invalid values
268
+ PyegeriaAPIException
269
+ Raised by the server when an issue arises in processing a valid request
270
+ NotAuthorizedException
271
+ The principle specified by the user_id does not have authorization for the requested action
272
+ Notes
273
+ -----
274
+ This routine creates a new bearer token for the user and updates the object with it.
275
+ It uses Egeria's mechanisms to create a token. This is useful if an Egeria token expires.
276
+ A bearer token from another source can be set with the set_bearer_token() method.
277
+
278
+ """
279
+ loop = asyncio.get_event_loop()
280
+ response = loop.run_until_complete(
281
+ self._async_create_egeria_bearer_token(user_id, password)
282
+ )
283
+ return response
284
+
285
+ async def _async_refresh_egeria_bearer_token(self) -> str:
286
+ """
287
+ Refreshes the Egeria bearer token. Async version.
288
+
289
+ This method is used to refresh the bearer token used for authentication with Egeria. It checks if the token
290
+ source is 'Egeria', and if the user ID and password are valid. If all conditions are met, it calls the
291
+ `create_egeria_bearer_token` method to create a new bearer token.
292
+
293
+ Returns
294
+ -------
295
+ str
296
+ The new platform bearer token.
297
+
298
+ Raises
299
+ ------
300
+ PyegeriaInvalidParameterException
301
+ If the token source is invalid or user credentials are missing.
302
+ """
303
+ if (
304
+ (self.token_src == "Egeria")
305
+ and validate_user_id(self.user_id)
306
+ and validate_name(self.user_pwd)
307
+ ):
308
+ token = await self._async_create_egeria_bearer_token(
309
+ self.user_id, self.user_pwd
310
+ )
311
+ return token
312
+ else:
313
+ additional_info = {"reason": "Invalid token source"}
314
+ raise PyegeriaInvalidParameterException(None, None, additional_info)
315
+
316
+ def refresh_egeria_bearer_token(self) -> str:
317
+ """
318
+ Refreshes the Egeria bearer token.
319
+
320
+ This method is used to refresh the bearer token used for authentication with Egeria. It checks if the token
321
+ source is 'Egeria', and if the user ID and password are valid. If all conditions are met, it calls the
322
+ `create_egeria_bearer_token` method to create a new bearer token.
323
+
324
+ Returns
325
+ -------
326
+ str
327
+ The new platform bearer token.
328
+
329
+ Raises
330
+ ------
331
+ PyegeriaInvalidParameterException
332
+ If the token source is invalid or user credentials are missing.
333
+ PyegeriaAPIException
334
+ Raised by the server when an issue arises in processing a valid request
335
+ PyegeriaNotAuthorizedException
336
+ The principle specified by the user_id does not have authorization for the requested action
337
+ """
338
+ loop = asyncio.get_event_loop()
339
+ token = loop.run_until_complete(self._async_refresh_egeria_bearer_token())
340
+ return token
341
+
342
+ def set_bearer_token(self, token: str) -> None:
343
+ """Set the Bearer Token for the client.
344
+
345
+ Parameters
346
+ ----------
347
+ token : str
348
+ A bearer token supplied to the method.
349
+
350
+ Raises
351
+ ------
352
+ PyegeriaInvalidParameterException
353
+ If the token is invalid.
354
+ """
355
+ validate_name(token)
356
+ self.headers["Authorization"] = f"Bearer {token}"
357
+ self.text_headers["Authorization"] = f"Bearer {token}"
358
+
359
+ def get_token(self) -> str:
360
+ """Retrieve and return the current bearer token.
361
+
362
+ Returns
363
+ -------
364
+ str
365
+ The current bearer token.
366
+ """
367
+ return self.text_headers["Authorization"]
368
+
369
+ async def async_get_platform_origin(self) -> str:
370
+ """Return the platform origin string if reachable. Async version.
371
+
372
+ Returns
373
+ -------
374
+ str
375
+ The platform origin string if reachable, otherwise an empty string.
376
+ """
377
+ origin_url = f"{self.platform_url}/open-metadata/platform-services/server-platform/origin"
378
+ response = await self._async_make_request("GET", origin_url, is_json=False)
379
+ if response.status_code == 200:
380
+ text = response.text.strip()
381
+ logger.debug(f"Got response from {origin_url}\n Response: {text}")
382
+ return text
383
+ else:
384
+ logger.debug(f"Got response from {origin_url}\n status_code: {response.status_code}")
385
+ return ""
386
+
387
+ def get_platform_origin(self) -> str:
388
+ """Return the platform origin string if reachable.
389
+
390
+ Returns
391
+ -------
392
+ str
393
+ The platform origin string if reachable, otherwise an empty string.
394
+ """
395
+ loop = asyncio.get_event_loop()
396
+ response = loop.run_until_complete(self.async_get_platform_origin())
397
+ return response
398
+
399
+ # @logger.catch
400
+ def make_request(
401
+ self,
402
+ request_type: str,
403
+ endpoint: str,
404
+ payload: str | dict = None,
405
+ time_out: int = 30,
406
+ is_json: bool = True,
407
+ params: dict | None = None
408
+ ) -> Response | str:
409
+ """Make a synchronous request to the Egeria API.
410
+
411
+ Parameters
412
+ ----------
413
+ request_type : str
414
+ The type of HTTP request (e.g., 'GET', 'POST').
415
+ endpoint : str
416
+ The API endpoint URL.
417
+ payload : str | dict, optional
418
+ The request payload.
419
+ time_out : int, optional
420
+ The timeout for the request in seconds (default is 30).
421
+ is_json : bool, optional
422
+ Whether the payload is in JSON format (default is True).
423
+ params : dict, optional
424
+ Query parameters for the request.
425
+
426
+ Returns
427
+ -------
428
+ Response | str
429
+ The response from the API.
430
+
431
+ Raises
432
+ ------
433
+ PyegeriaException
434
+ If the request fails.
435
+ """
436
+ try:
437
+ loop = asyncio.get_running_loop()
438
+ if loop.is_running():
439
+ coro = self._async_make_request(request_type, endpoint, payload, time_out, is_json, params)
440
+ return asyncio.run_coroutine_threadsafe(coro, loop).result()
441
+ else:
442
+ return loop.run_until_complete(
443
+ self._async_make_request(request_type, endpoint, payload, time_out, is_json, params))
444
+ except RuntimeError:
445
+ # No running loop exists; run the coroutine
446
+ return asyncio.run(self._async_make_request(request_type, endpoint, payload, time_out, is_json, params))
447
+
448
+
449
+ async def _async_make_request(
450
+ self,
451
+ request_type: str,
452
+ endpoint: str,
453
+ payload: str | dict = None,
454
+ time_out: int = 30,
455
+ is_json: bool = True,
456
+ params: dict | None = None
457
+ ) -> Response | str:
458
+ """Make an asynchronous request to the Egeria API.
459
+
460
+ Parameters
461
+ ----------
462
+ request_type : str
463
+ The type of HTTP request (e.g., 'GET', 'POST').
464
+ endpoint : str
465
+ The API endpoint URL.
466
+ payload : str | dict, optional
467
+ The request payload.
468
+ time_out : int, optional
469
+ The timeout for the request in seconds (default is 30).
470
+ is_json : bool, optional
471
+ Whether the payload is in JSON format (default is True).
472
+ params : dict, optional
473
+ Query parameters for the request.
474
+
475
+ Returns
476
+ -------
477
+ Response | str
478
+ The response from the API.
479
+
480
+ Raises
481
+ ------
482
+ PyegeriaAPIException
483
+ If the server returns an error.
484
+ PyegeriaConnectionException
485
+ If there is a connection issue.
486
+ PyegeriaInvalidParameterException
487
+ If the request parameters are invalid.
488
+ """
489
+ context: dict = {}
490
+ context['class name'] = __class__.__name__
491
+ context['caller method'] = inspect.currentframe().f_back.f_code.co_name
492
+ response: Response = None # Initialize to None to avoid UnboundLocalError
493
+
494
+ try:
495
+ if request_type == "GET":
496
+ response = await self.session.get(
497
+ endpoint, params=params, headers=self.headers, timeout=time_out,
498
+ )
499
+
500
+ elif request_type == "POST":
501
+ if payload is None:
502
+ response = await self.session.post(
503
+ endpoint, headers=self.headers, timeout=time_out, params = params
504
+ )
505
+ elif type(payload) is dict:
506
+ response = await self.session.post(
507
+ endpoint, json=payload, headers=self.headers, timeout=time_out
508
+ )
509
+ elif type(payload) is str:
510
+ response = await self.session.post(
511
+ endpoint,
512
+ headers=self.headers,
513
+ content=payload,
514
+ timeout=time_out,
515
+ params=params
516
+ )
517
+ else:
518
+ raise TypeError(f"Invalid payload type {type(payload)}")
519
+
520
+
521
+ elif request_type == "POST-DATA":
522
+ if True:
523
+ response = await self.session.post(
524
+ endpoint, headers=self.headers, data=payload, timeout=time_out
525
+ )
526
+ elif request_type == "DELETE":
527
+ if True:
528
+ response = await self.session.delete(
529
+ endpoint, headers=self.headers, timeout=time_out
530
+ )
531
+ response.raise_for_status()
532
+
533
+ status_code = response.status_code
534
+
535
+ except (httpx.TimeoutException, httpcore.ConnectError, httpx.ConnectError) as e:
536
+ additional_info = {"endpoint": endpoint, "error_kind": "connection"}
537
+ raise PyegeriaConnectionException(context, additional_info, e)
538
+
539
+ except (HTTPStatusError, httpx.HTTPStatusError, httpx.RequestError) as e:
540
+ additional_info = {"userid": self.user_id}
541
+ if response is not None:
542
+ additional_info["reason"] = response.text
543
+
544
+ raise PyegeriaClientException(response, context, additional_info, e)
545
+
546
+ except Exception as e:
547
+ additional_info = {"userid": self.user_id}
548
+ if response is not None:
549
+ logger.error(f"Response error with code {response.status_code}")
550
+ else:
551
+ logger.error("Response object not available due to error")
552
+ raise PyegeriaUnknownException(response, context, additional_info, e)
553
+
554
+ if status_code in (200, 201):
555
+ try:
556
+ if is_json:
557
+ json_response = response.json()
558
+ related_http_code = json_response.get("relatedHTTPCode", 0)
559
+ if related_http_code == 200:
560
+ return response
561
+ else:
562
+ raise PyegeriaAPIException(response, context, additional_info=None)
563
+
564
+ else: # Not JSON - Text?
565
+ return response
566
+
567
+
568
+ except json.JSONDecodeError as e:
569
+ logger.error("Failed to decode JSON response from %s: %s", endpoint, response.text,
570
+ exc_info=True)
571
+ context['caught_exception'] = e
572
+ raise PyegeriaInvalidParameterException(
573
+ response, context, e=e
574
+ )