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,1042 @@
1
+ """
2
+ PDX-License-Identifier: Apache-2.0
3
+ Copyright Contributors to the ODPi Egeria project.
4
+
5
+ This module contains the Subject Area View Service client.
6
+ """
7
+
8
+ import asyncio
9
+ from typing import Annotated, Literal, Optional
10
+
11
+ from pydantic import Field
12
+
13
+ from pyegeria.core._server_client import ServerClient
14
+ from pyegeria.models import (
15
+ NewElementRequestBody,
16
+ DeleteElementRequestBody,
17
+ UpdateElementRequestBody,
18
+ TemplateRequestBody,
19
+ FilterRequestBody,
20
+ SearchStringRequestBody,
21
+ GetRequestBody,
22
+ NewRelationshipRequestBody,
23
+ DeleteRelationshipRequestBody,
24
+ ReferenceableProperties,
25
+ RelationshipBeanProperties,
26
+ )
27
+ from pyegeria.view.output_formatter import (
28
+ generate_output,
29
+ populate_common_columns,
30
+ overlay_additional_values,
31
+ )
32
+ from pyegeria.core.utils import dynamic_catch
33
+
34
+
35
+ class SubjectAreaProperties(ReferenceableProperties):
36
+ class_: Annotated[Literal["SubjectAreaProperties"], Field(alias="class")]
37
+ usage: Optional[str] = None
38
+ scope: Optional[str] = None
39
+ domain_identifier: Optional[int] = None
40
+
41
+
42
+ class SubjectAreaHierarchyProperties(RelationshipBeanProperties):
43
+ class_: Annotated[Literal["SubjectAreaHierarchyProperties"], Field(alias="class")]
44
+
45
+
46
+ class SubjectArea(ServerClient):
47
+ """
48
+ Client for the Subject Area View Service.
49
+
50
+ The Subject Area View Service provides methods to manage subject areas and their hierarchies.
51
+
52
+ Attributes
53
+ ----------
54
+ view_server : str
55
+ The name of the View Server to use.
56
+ platform_url : str
57
+ URL of the server platform to connect to.
58
+ user_id : str
59
+ The identity of the user calling the method.
60
+ user_pwd : str
61
+ The password associated with the user_id. Defaults to None.
62
+ """
63
+
64
+ def __init__(
65
+ self,
66
+ view_server: str,
67
+ platform_url: str,
68
+ user_id: str,
69
+ user_pwd: Optional[str] = None,
70
+ token: Optional[str] = None,
71
+ ):
72
+ super().__init__(view_server, platform_url, user_id, user_pwd, token)
73
+ self.view_server = view_server
74
+ self.platform_url = platform_url
75
+ self.user_id = user_id
76
+ self.user_pwd = user_pwd
77
+ self.url_marker = "subject-area"
78
+
79
+ def _extract_subject_area_properties(self, element: dict, columns_struct: dict) -> dict:
80
+ col_data = populate_common_columns(element, columns_struct)
81
+ props = element.get("properties", {})
82
+ overlay_additional_values(col_data, props)
83
+ return col_data
84
+
85
+ def _generate_subject_area_output(
86
+ self,
87
+ elements: dict | list[dict],
88
+ filter: Optional[str],
89
+ element_type_name: Optional[str],
90
+ output_format: str = "DICT",
91
+ report_spec: dict | str = None,
92
+ ) -> str | list[dict]:
93
+ return generate_output(
94
+ elements,
95
+ filter,
96
+ element_type_name,
97
+ output_format,
98
+ self._extract_subject_area_properties,
99
+ None,
100
+ report_spec,
101
+ )
102
+
103
+ @dynamic_catch
104
+ async def _async_create_subject_area(self, body: dict | NewElementRequestBody) -> str:
105
+ """Create a subject area. Async version.
106
+
107
+ Parameters
108
+ ----------
109
+ body : dict | NewElementRequestBody
110
+ The properties for the subject area.
111
+
112
+ Returns
113
+ -------
114
+ str
115
+ The unique identifier of the newly created subject area.
116
+
117
+ Raises
118
+ ------
119
+ PyegeriaException
120
+ If there are issues in communications, message format, or Egeria errors.
121
+
122
+ Notes
123
+ -----
124
+ Sample JSON body:
125
+ ```json
126
+ {
127
+ "class" : "NewElementRequestBody",
128
+ "properties": {
129
+ "class" : "SubjectAreaProperties",
130
+ "qualifiedName": "add unique name here",
131
+ "displayName": "add short name here",
132
+ "subjectAreaName": "add short name here",
133
+ "description": "add description here",
134
+ "usage": "add usage of this subject area",
135
+ "scope": "add scope of this subject area"
136
+ }
137
+ }
138
+ ```
139
+ """
140
+ url = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/subject-area/governance-definitions"
141
+ return await self._async_create_element_body_request(url, "SubjectAreaProperties", body)
142
+
143
+ def create_subject_area(self, body: dict | NewElementRequestBody) -> str:
144
+ """Create a subject area.
145
+
146
+ Parameters
147
+ ----------
148
+ body : dict | NewElementRequestBody
149
+ The properties for the subject area.
150
+
151
+ Returns
152
+ -------
153
+ str
154
+ The unique identifier of the newly created subject area.
155
+
156
+ Raises
157
+ ------
158
+ PyegeriaException
159
+ If there are issues in communications, message format, or Egeria errors.
160
+
161
+ Notes
162
+ -----
163
+ Sample JSON body:
164
+ ```json
165
+ {
166
+ "class" : "NewElementRequestBody",
167
+ "properties": {
168
+ "class" : "SubjectAreaProperties",
169
+ "qualifiedName": "add unique name here",
170
+ "displayName": "add short name here",
171
+ "subjectAreaName": "add short name here",
172
+ "description": "add description here",
173
+ "usage": "add usage of this subject area",
174
+ "scope": "add scope of this subject area"
175
+ }
176
+ }
177
+ ```
178
+ """
179
+ loop = asyncio.get_event_loop()
180
+ return loop.run_until_complete(self._async_create_subject_area(body))
181
+
182
+ @dynamic_catch
183
+ async def _async_create_subject_area_from_template(self, body: dict | TemplateRequestBody) -> str:
184
+ """Create a subject area from a template. Async version.
185
+
186
+ Parameters
187
+ ----------
188
+ body : dict | TemplateRequestBody
189
+ The properties for the new subject area, including the template GUID.
190
+
191
+ Returns
192
+ -------
193
+ str
194
+ The unique identifier of the newly created subject area.
195
+
196
+ Raises
197
+ ------
198
+ PyegeriaException
199
+ If there are issues in communications, message format, or Egeria errors.
200
+
201
+ Notes
202
+ -----
203
+ Sample JSON body:
204
+ ```json
205
+ {
206
+ "class" : "TemplateRequestBody",
207
+ "templateGUID": "add guid here",
208
+ "replacementProperties": {
209
+ "class": "ElementProperties",
210
+ "propertyValueMap" : {
211
+ "description" : {
212
+ "class": "PrimitiveTypePropertyValue",
213
+ "typeName": "string",
214
+ "primitiveValue" : "New description"
215
+ }
216
+ }
217
+ }
218
+ }
219
+ ```
220
+ """
221
+ url = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/subject-area/governance-definitions/from-template"
222
+ return await self._async_create_element_body_request(url, "SubjectAreaProperties", body)
223
+
224
+ def create_subject_area_from_template(self, body: dict | TemplateRequestBody) -> str:
225
+ """Create a subject area from a template.
226
+
227
+ Parameters
228
+ ----------
229
+ body : dict | TemplateRequestBody
230
+ The properties for the new subject area, including the template GUID.
231
+
232
+ Returns
233
+ -------
234
+ str
235
+ The unique identifier of the newly created subject area.
236
+
237
+ Raises
238
+ ------
239
+ PyegeriaException
240
+ If there are issues in communications, message format, or Egeria errors.
241
+
242
+ Notes
243
+ -----
244
+ Sample JSON body:
245
+ ```json
246
+ {
247
+ "class" : "TemplateRequestBody",
248
+ "templateGUID": "add guid here",
249
+ "replacementProperties": {
250
+ "class": "ElementProperties",
251
+ "propertyValueMap" : {
252
+ "description" : {
253
+ "class": "PrimitiveTypePropertyValue",
254
+ "typeName": "string",
255
+ "primitiveValue" : "New description"
256
+ }
257
+ }
258
+ }
259
+ }
260
+ ```
261
+ """
262
+ loop = asyncio.get_event_loop()
263
+ return loop.run_until_complete(self._async_create_subject_area_from_template(body))
264
+
265
+ @dynamic_catch
266
+ async def _async_update_subject_area(
267
+ self, subject_area_guid: str, body: dict | UpdateElementRequestBody
268
+ ) -> None:
269
+ """Update a subject area. Async version.
270
+
271
+ Parameters
272
+ ----------
273
+ subject_area_guid : str
274
+ The unique identifier of the subject area.
275
+ body : dict | UpdateElementRequestBody
276
+ The properties to update.
277
+
278
+ Returns
279
+ -------
280
+ None
281
+
282
+ Raises
283
+ ------
284
+ PyegeriaException
285
+ If there are issues in communications, message format, or Egeria errors.
286
+
287
+ Notes
288
+ -----
289
+ Sample JSON body:
290
+ ```json
291
+ {
292
+ "class" : "UpdateElementRequestBody",
293
+ "mergeUpdate" : true,
294
+ "properties": {
295
+ "class" : "SubjectAreaProperties",
296
+ "displayName": "Updated Name"
297
+ }
298
+ }
299
+ ```
300
+ """
301
+ url = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/subject-area/governance-definitions/{subject_area_guid}/update"
302
+ await self._async_update_element_body_request(url, body)
303
+
304
+ def update_subject_area(self, subject_area_guid: str, body: dict | UpdateElementRequestBody) -> None:
305
+ """Update a subject area.
306
+
307
+ Parameters
308
+ ----------
309
+ subject_area_guid : str
310
+ The unique identifier of the subject area.
311
+ body : dict | UpdateElementRequestBody
312
+ The properties to update.
313
+
314
+ Returns
315
+ -------
316
+ None
317
+
318
+ Raises
319
+ ------
320
+ PyegeriaException
321
+ If there are issues in communications, message format, or Egeria errors.
322
+
323
+ Notes
324
+ -----
325
+ Sample JSON body:
326
+ ```json
327
+ {
328
+ "class" : "UpdateElementRequestBody",
329
+ "mergeUpdate" : true,
330
+ "properties": {
331
+ "class" : "SubjectAreaProperties",
332
+ "displayName": "Updated Name"
333
+ }
334
+ }
335
+ ```
336
+ """
337
+ loop = asyncio.get_event_loop()
338
+ loop.run_until_complete(self._async_update_subject_area(subject_area_guid, body))
339
+
340
+ @dynamic_catch
341
+ async def _async_delete_subject_area(
342
+ self, subject_area_guid: str, body: dict | DeleteElementRequestBody
343
+ ) -> None:
344
+ """Delete a subject area. Async version.
345
+
346
+ Parameters
347
+ ----------
348
+ subject_area_guid : str
349
+ The unique identifier of the subject area.
350
+ body : dict | DeleteElementRequestBody
351
+ The request body for the delete operation.
352
+
353
+ Returns
354
+ -------
355
+ None
356
+
357
+ Raises
358
+ ------
359
+ PyegeriaException
360
+ If there are issues in communications, message format, or Egeria errors.
361
+
362
+ Notes
363
+ -----
364
+ Sample JSON body:
365
+ ```json
366
+ {
367
+ "class" : "DeleteElementRequestBody",
368
+ "externalSourceName": "add qualified name here"
369
+ }
370
+ ```
371
+ """
372
+ url = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/subject-area/governance-definitions/{subject_area_guid}/delete"
373
+ await self._async_delete_element_body_request(url, body)
374
+
375
+ def delete_subject_area(self, subject_area_guid: str, body: dict | DeleteElementRequestBody) -> None:
376
+ """Delete a subject area.
377
+
378
+ Parameters
379
+ ----------
380
+ subject_area_guid : str
381
+ The unique identifier of the subject area.
382
+ body : dict | DeleteElementRequestBody
383
+ The request body for the delete operation.
384
+
385
+ Returns
386
+ -------
387
+ None
388
+
389
+ Raises
390
+ ------
391
+ PyegeriaException
392
+ If there are issues in communications, message format, or Egeria errors.
393
+
394
+ Notes
395
+ -----
396
+ Sample JSON body:
397
+ ```json
398
+ {
399
+ "class" : "DeleteElementRequestBody",
400
+ "externalSourceName": "add qualified name here"
401
+ }
402
+ ```
403
+ """
404
+ loop = asyncio.get_event_loop()
405
+ loop.run_until_complete(self._async_delete_subject_area(subject_area_guid, body))
406
+
407
+ @dynamic_catch
408
+ async def _async_link_subject_area_hierarchy(
409
+ self,
410
+ parent_subject_area_guid: str,
411
+ nested_subject_area_guid: str,
412
+ body: dict | NewRelationshipRequestBody,
413
+ ) -> None:
414
+ """Link subject areas in a hierarchy. Async version.
415
+
416
+ Parameters
417
+ ----------
418
+ parent_subject_area_guid : str
419
+ The unique identifier of the parent subject area.
420
+ nested_subject_area_guid : str
421
+ The unique identifier of the nested subject area.
422
+ body : dict | NewRelationshipRequestBody
423
+ The properties for the relationship.
424
+
425
+ Returns
426
+ -------
427
+ None
428
+
429
+ Raises
430
+ ------
431
+ PyegeriaException
432
+ If there are issues in communications, message format, or Egeria errors.
433
+
434
+ Notes
435
+ -----
436
+ Sample JSON body:
437
+ ```json
438
+ {
439
+ "class" : "NewRelationshipRequestBody",
440
+ "properties": {
441
+ "class": "SubjectAreaHierarchyProperties"
442
+ }
443
+ }
444
+ ```
445
+ """
446
+ url = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/subject-area/subject-areas/{parent_subject_area_guid}/subject-area-hierarchies/{nested_subject_area_guid}/attach"
447
+ await self._async_new_relationship_request(url, ["SubjectAreaHierarchyProperties"], body)
448
+
449
+ def link_subject_area_hierarchy(
450
+ self,
451
+ parent_subject_area_guid: str,
452
+ nested_subject_area_guid: str,
453
+ body: dict | NewRelationshipRequestBody,
454
+ ) -> None:
455
+ """Link subject areas in a hierarchy.
456
+
457
+ Parameters
458
+ ----------
459
+ parent_subject_area_guid : str
460
+ The unique identifier of the parent subject area.
461
+ nested_subject_area_guid : str
462
+ The unique identifier of the nested subject area.
463
+ body : dict | NewRelationshipRequestBody
464
+ The properties for the relationship.
465
+
466
+ Returns
467
+ -------
468
+ None
469
+
470
+ Raises
471
+ ------
472
+ PyegeriaException
473
+ If there are issues in communications, message format, or Egeria errors.
474
+
475
+ Notes
476
+ -----
477
+ Sample JSON body:
478
+ ```json
479
+ {
480
+ "class" : "NewRelationshipRequestBody",
481
+ "properties": {
482
+ "class": "SubjectAreaHierarchyProperties"
483
+ }
484
+ }
485
+ ```
486
+ """
487
+ loop = asyncio.get_event_loop()
488
+ loop.run_until_complete(
489
+ self._async_link_subject_area_hierarchy(
490
+ parent_subject_area_guid, nested_subject_area_guid, body
491
+ )
492
+ )
493
+
494
+ @dynamic_catch
495
+ async def _async_detach_subject_area_hierarchy(
496
+ self,
497
+ parent_subject_area_guid: str,
498
+ nested_subject_area_guid: str,
499
+ body: dict | DeleteRelationshipRequestBody,
500
+ ) -> None:
501
+ """Detach subject areas from a hierarchy. Async version.
502
+
503
+ Parameters
504
+ ----------
505
+ parent_subject_area_guid : str
506
+ The unique identifier of the parent subject area.
507
+ nested_subject_area_guid : str
508
+ The unique identifier of the nested subject area.
509
+ body : dict | DeleteRelationshipRequestBody
510
+ The request body for the detach operation.
511
+
512
+ Returns
513
+ -------
514
+ None
515
+
516
+ Raises
517
+ ------
518
+ PyegeriaException
519
+ If there are issues in communications, message format, or Egeria errors.
520
+
521
+ Notes
522
+ -----
523
+ Sample JSON body:
524
+ ```json
525
+ {
526
+ "class" : "DeleteRelationshipRequestBody"
527
+ }
528
+ ```
529
+ """
530
+ url = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/subject-area/subject-areas/{parent_subject_area_guid}/subject-area-hierarchies/{nested_subject_area_guid}/detach"
531
+ await self._async_delete_relationship_request(url, body)
532
+
533
+ def detach_subject_area_hierarchy(
534
+ self,
535
+ parent_subject_area_guid: str,
536
+ nested_subject_area_guid: str,
537
+ body: dict | DeleteRelationshipRequestBody,
538
+ ) -> None:
539
+ """Detach subject areas from a hierarchy.
540
+
541
+ Parameters
542
+ ----------
543
+ parent_subject_area_guid : str
544
+ The unique identifier of the parent subject area.
545
+ nested_subject_area_guid : str
546
+ The unique identifier of the nested subject area.
547
+ body : dict | DeleteRelationshipRequestBody
548
+ The request body for the detach operation.
549
+
550
+ Returns
551
+ -------
552
+ None
553
+
554
+ Raises
555
+ ------
556
+ PyegeriaException
557
+ If there are issues in communications, message format, or Egeria errors.
558
+
559
+ Notes
560
+ -----
561
+ Sample JSON body:
562
+ ```json
563
+ {
564
+ "class" : "DeleteRelationshipRequestBody"
565
+ }
566
+ ```
567
+ """
568
+ loop = asyncio.get_event_loop()
569
+ loop.run_until_complete(
570
+ self._async_detach_subject_area_hierarchy(
571
+ parent_subject_area_guid, nested_subject_area_guid, body
572
+ )
573
+ )
574
+
575
+ @dynamic_catch
576
+ async def _async_get_subject_areas_by_name(
577
+ self,
578
+ filter_string: Optional[str] = None,
579
+ classification_names: Optional[list[str]] = None,
580
+ body: Optional[dict | FilterRequestBody] = None,
581
+ start_from: int = 0,
582
+ page_size: int = 0,
583
+ output_format: str = "JSON",
584
+ report_spec: str | dict = "SubjectAreas",
585
+ ) -> list | str:
586
+ """Get subject areas by name. Async version.
587
+
588
+ Parameters
589
+ ----------
590
+ filter_string : str, optional
591
+ The string to find in the properties.
592
+ classification_names : list[str], optional
593
+ The list of classification names to filter by.
594
+ body : dict | FilterRequestBody, optional
595
+ The request body for the search.
596
+ start_from : int, optional
597
+ The starting index for paged results.
598
+ page_size : int, optional
599
+ The maximum number of results to return.
600
+ output_format : str, optional
601
+ The desired output format.
602
+ report_spec : str | dict, optional
603
+ The desired output columns/fields to include.
604
+
605
+ Returns
606
+ -------
607
+ list | str
608
+ The list of matching subject areas or a message if none found.
609
+
610
+ Raises
611
+ ------
612
+ PyegeriaException
613
+ If there are issues in communications, message format, or Egeria errors.
614
+
615
+ Notes
616
+ -----
617
+ Sample JSON body:
618
+ ```json
619
+ {
620
+ "class" : "FilterRequestBody",
621
+ "filter" : "AreaName",
622
+ "metadataElementTypeName": "SubjectAreaDefinition"
623
+ }
624
+ ```
625
+ """
626
+ url = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/subject-area/governance-definitions/by-name"
627
+ return await self._async_get_name_request(
628
+ url,
629
+ _type="SubjectArea",
630
+ _gen_output=self._generate_subject_area_output,
631
+ filter_string=filter_string,
632
+ classification_names=classification_names,
633
+ start_from=start_from,
634
+ page_size=page_size,
635
+ output_format=output_format,
636
+ report_spec=report_spec,
637
+ body=body,
638
+ )
639
+
640
+ def get_subject_areas_by_name(
641
+ self,
642
+ filter_string: Optional[str] = None,
643
+ classification_names: Optional[list[str]] = None,
644
+ body: Optional[dict | FilterRequestBody] = None,
645
+ start_from: int = 0,
646
+ page_size: int = 0,
647
+ output_format: str = "JSON",
648
+ report_spec: str | dict = "SubjectAreas",
649
+ ) -> list | str:
650
+ """Get subject areas by name.
651
+
652
+ Parameters
653
+ ----------
654
+ filter_string : str, optional
655
+ The string to find in the properties.
656
+ classification_names : list[str], optional
657
+ The list of classification names to filter by.
658
+ body : dict | FilterRequestBody, optional
659
+ The request body for the search.
660
+ start_from : int, optional
661
+ The starting index for paged results.
662
+ page_size : int, optional
663
+ The maximum number of results to return.
664
+ output_format : str, optional
665
+ The desired output format.
666
+ report_spec : str | dict, optional
667
+ The desired output columns/fields to include.
668
+
669
+ Returns
670
+ -------
671
+ list | str
672
+ The list of matching subject areas or a message if none found.
673
+
674
+ Raises
675
+ ------
676
+ PyegeriaException
677
+ If there are issues in communications, message format, or Egeria errors.
678
+
679
+ Notes
680
+ -----
681
+ Sample JSON body:
682
+ ```json
683
+ {
684
+ "class" : "FilterRequestBody",
685
+ "filter" : "AreaName",
686
+ "metadataElementTypeName": "SubjectAreaDefinition"
687
+ }
688
+ ```
689
+ """
690
+ loop = asyncio.get_event_loop()
691
+ return loop.run_until_complete(
692
+ self._async_get_subject_areas_by_name(
693
+ filter_string,
694
+ classification_names,
695
+ body,
696
+ start_from,
697
+ page_size,
698
+ output_format,
699
+ report_spec,
700
+ )
701
+ )
702
+
703
+ @dynamic_catch
704
+ async def _async_find_subject_areas(self, search_string: str = "*",
705
+ starts_with: bool = True, ends_with: bool = False,
706
+ ignore_case: bool = False,
707
+ anchor_domain: Optional[str] = None,
708
+ metadata_element_type: Optional[str] = None,
709
+ metadata_element_subtypes: Optional[list[str]] = None,
710
+ skip_relationships: Optional[list[str]] = None,
711
+ include_only_relationships: Optional[list[str]] = None,
712
+ skip_classified_elements: Optional[list[str]] = None,
713
+ include_only_classified_elements: Optional[list[str]] = None,
714
+ graph_query_depth: int = 3,
715
+ governance_zone_filter: Optional[list[str]] = None, as_of_time: Optional[str] = None,
716
+ effective_time: Optional[str] = None, relationship_page_size: int = 0,
717
+ limit_results_by_status: Optional[list[str]] = None, sequencing_order: Optional[str] = None,
718
+ sequencing_property: Optional[str] = None,
719
+ output_format: str = "JSON",
720
+ report_spec: str | dict = "Referenceable",
721
+ start_from: int = 0, page_size: int = 100,
722
+ property_names: Optional[list[str]] = None,
723
+ body: Optional[dict | SearchStringRequestBody] = None) -> list | str:
724
+ """ Retrieve the list of subject area metadata elements that contain the search string. Async Version.
725
+
726
+ Parameters
727
+ ----------
728
+ search_string: str
729
+ Search string to match against - None or '*' indicate match against all subject areas.
730
+ starts_with : bool, [default=True], optional
731
+ Starts with the supplied string.
732
+ ends_with : bool, [default=False], optional
733
+ Ends with the supplied string
734
+ ignore_case : bool, [default=False], optional
735
+ Ignore case when searching
736
+ anchor_domain: str, optional
737
+ The anchor domain to search in.
738
+ metadata_element_type: str, optional
739
+ The type of metadata element to search for.
740
+ metadata_element_subtypes: list[str], optional
741
+ The subtypes of metadata element to search for.
742
+ skip_relationships: list[str], optional
743
+ The types of relationships to skip.
744
+ include_only_relationships: list[str], optional
745
+ The types of relationships to include.
746
+ skip_classified_elements: list[str], optional
747
+ The types of classified elements to skip.
748
+ include_only_classified_elements: list[str], optional
749
+ The types of classified elements to include.
750
+ graph_query_depth: int, [default=3], optional
751
+ The depth of the graph query.
752
+ governance_zone_filter: list[str], optional
753
+ The governance zones to search in.
754
+ as_of_time: str, optional
755
+ The time to search as of.
756
+ effective_time: str, optional
757
+ The effective time to search at.
758
+ relationship_page_size: int, [default=0], optional
759
+ The page size for relationships.
760
+ limit_results_by_status: list[str], optional
761
+ The statuses to limit results by.
762
+ sequencing_order: str, optional
763
+ The order to sequence results by.
764
+ sequencing_property: str, optional
765
+ The property to sequence results by.
766
+ output_format: str, default = "JSON"
767
+ - one of "MD", "LIST", "FORM", "REPORT", "DICT", "MERMAID" or "JSON"
768
+ report_spec: str | dict , optional, default = "Referenceable"
769
+ - The desired output columns/fields to include.
770
+ start_from: int, [default=0], optional
771
+ When multiple pages of results are available, the page number to start from.
772
+ page_size: int, [default=100]
773
+ The number of items to return in a single page.
774
+ property_names: list[str], optional
775
+ The names of properties to search for.
776
+ body: dict | SearchStringRequestBody, optional, default = None
777
+ - if provided, the search parameters in the body will supercede other attributes, such as "search_string"
778
+
779
+ Returns
780
+ -------
781
+ List | str
782
+
783
+ Output depends on the output format specified.
784
+
785
+ Raises
786
+ -------
787
+
788
+ ValidationError
789
+ If the client passes incorrect parameters on the request that don't conform to the data model.
790
+ PyegeriaException
791
+ Issues raised in communicating or server side processing.
792
+ NotAuthorizedException
793
+ The principle specified by the user_id does not have authorization for the requested action
794
+
795
+ """
796
+ url = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/subject-area/subject-areas/by-search-string"
797
+ response = await self._async_find_request(url, _type="SubjectArea", _gen_output=self._generate_subject_area_output,
798
+ search_string=search_string, starts_with=starts_with,
799
+ ends_with=ends_with, ignore_case=ignore_case,
800
+ anchor_domain=anchor_domain,
801
+ metadata_element_type=metadata_element_type,
802
+ metadata_element_subtypes=metadata_element_subtypes,
803
+ skip_relationships=skip_relationships,
804
+ include_only_relationships=include_only_relationships,
805
+ skip_classified_elements=skip_classified_elements,
806
+ include_only_classified_elements=include_only_classified_elements,
807
+ graph_query_depth=graph_query_depth,
808
+ governance_zone_filter=governance_zone_filter,
809
+ as_of_time=as_of_time, effective_time=effective_time,
810
+ relationship_page_size=relationship_page_size,
811
+ limit_results_by_status=limit_results_by_status,
812
+ sequencing_order=sequencing_order,
813
+ sequencing_property=sequencing_property,
814
+ output_format=output_format, report_spec=report_spec,
815
+ start_from=start_from, page_size=page_size,
816
+ property_names=property_names, body=body)
817
+
818
+ return response
819
+
820
+ @dynamic_catch
821
+ def find_subject_areas(self, search_string: str = "*",
822
+ starts_with: bool = True, ends_with: bool = False,
823
+ ignore_case: bool = False,
824
+ anchor_domain: Optional[str] = None,
825
+ metadata_element_type: Optional[str] = None,
826
+ metadata_element_subtypes: Optional[list[str]] = None,
827
+ skip_relationships: Optional[list[str]] = None,
828
+ include_only_relationships: Optional[list[str]] = None,
829
+ skip_classified_elements: Optional[list[str]] = None,
830
+ include_only_classified_elements: Optional[list[str]] = None,
831
+ graph_query_depth: int = 3,
832
+ governance_zone_filter: Optional[list[str]] = None, as_of_time: Optional[str] = None,
833
+ effective_time: Optional[str] = None, relationship_page_size: int = 0,
834
+ limit_results_by_status: Optional[list[str]] = None, sequencing_order: Optional[str] = None,
835
+ sequencing_property: Optional[str] = None,
836
+ output_format: str = "JSON",
837
+ report_spec: str | dict = "Referenceable",
838
+ start_from: int = 0, page_size: int = 100,
839
+ property_names: Optional[list[str]] = None,
840
+ body: Optional[dict | SearchStringRequestBody] = None) -> list | str:
841
+ """ Retrieve the list of subject area metadata elements that contain the search string.
842
+
843
+ Parameters
844
+ ----------
845
+ search_string: str
846
+ Search string to match against - None or '*' indicate match against all subject areas.
847
+ starts_with : bool, [default=True], optional
848
+ Starts with the supplied string.
849
+ ends_with : bool, [default=False], optional
850
+ Ends with the supplied string
851
+ ignore_case : bool, [default=False], optional
852
+ Ignore case when searching
853
+ anchor_domain: str, optional
854
+ The anchor domain to search in.
855
+ metadata_element_type: str, optional
856
+ The type of metadata element to search for.
857
+ metadata_element_subtypes: list[str], optional
858
+ The subtypes of metadata element to search for.
859
+ skip_relationships: list[str], optional
860
+ The types of relationships to skip.
861
+ include_only_relationships: list[str], optional
862
+ The types of relationships to include.
863
+ skip_classified_elements: list[str], optional
864
+ The types of classified elements to skip.
865
+ include_only_classified_elements: list[str], optional
866
+ The types of classified elements to include.
867
+ graph_query_depth: int, [default=3], optional
868
+ The depth of the graph query.
869
+ governance_zone_filter: list[str], optional
870
+ The governance zones to search in.
871
+ as_of_time: str, optional
872
+ The time to search as of.
873
+ effective_time: str, optional
874
+ The effective time to search at.
875
+ relationship_page_size: int, [default=0], optional
876
+ The page size for relationships.
877
+ limit_results_by_status: list[str], optional
878
+ The statuses to limit results by.
879
+ sequencing_order: str, optional
880
+ The order to sequence results by.
881
+ sequencing_property: str, optional
882
+ The property to sequence results by.
883
+ output_format: str, default = "JSON"
884
+ - one of "MD", "LIST", "FORM", "REPORT", "DICT", "MERMAID" or "JSON"
885
+ report_spec: str | dict , optional, default = "Referenceable"
886
+ - The desired output columns/fields to include.
887
+ start_from: int, [default=0], optional
888
+ When multiple pages of results are available, the page number to start from.
889
+ page_size: int, [default=100]
890
+ The number of items to return in a single page.
891
+ property_names: list[str], optional
892
+ The names of properties to search for.
893
+ body: dict | SearchStringRequestBody, optional, default = None
894
+ - if provided, the search parameters in the body will supercede other attributes, such as "search_string"
895
+
896
+ Returns
897
+ -------
898
+ List | str
899
+
900
+ Output depends on the output format specified.
901
+
902
+ Raises
903
+ -------
904
+
905
+ ValidationError
906
+ If the client passes incorrect parameters on the request that don't conform to the data model.
907
+ PyegeriaException
908
+ Issues raised in communicating or server side processing.
909
+ NotAuthorizedException
910
+ The principle specified by the user_id does not have authorization for the requested action
911
+
912
+ """
913
+ loop = asyncio.get_event_loop()
914
+ return loop.run_until_complete(self._async_find_subject_areas(search_string=search_string,
915
+ starts_with=starts_with,
916
+ ends_with=ends_with,
917
+ ignore_case=ignore_case,
918
+ anchor_domain=anchor_domain,
919
+ metadata_element_type=metadata_element_type,
920
+ metadata_element_subtypes=metadata_element_subtypes,
921
+ skip_relationships=skip_relationships,
922
+ include_only_relationships=include_only_relationships,
923
+ skip_classified_elements=skip_classified_elements,
924
+ include_only_classified_elements=include_only_classified_elements,
925
+ graph_query_depth=graph_query_depth,
926
+ governance_zone_filter=governance_zone_filter,
927
+ as_of_time=as_of_time,
928
+ effective_time=effective_time,
929
+ relationship_page_size=relationship_page_size,
930
+ limit_results_by_status=limit_results_by_status,
931
+ sequencing_order=sequencing_order,
932
+ sequencing_property=sequencing_property,
933
+ output_format=output_format,
934
+ report_spec=report_spec,
935
+ start_from=start_from,
936
+ page_size=page_size,
937
+ property_names=property_names,
938
+ body=body))
939
+
940
+ @dynamic_catch
941
+ async def _async_get_subject_area_by_guid(
942
+ self,
943
+ subject_area_guid: str,
944
+ element_type: str = "SubjectArea",
945
+ body: Optional[dict | GetRequestBody] = None,
946
+ output_format: str = "JSON",
947
+ report_spec: str | dict = "SubjectAreas",
948
+ ) -> dict | str:
949
+ """Get subject area by GUID. Async version.
950
+
951
+ Parameters
952
+ ----------
953
+ subject_area_guid : str
954
+ The unique identifier of the subject area.
955
+ element_type : str, optional
956
+ The type of metadata element.
957
+ body : dict | GetRequestBody, optional
958
+ The request body for the search.
959
+ output_format : str, optional
960
+ The desired output format.
961
+ report_spec : str | dict, optional
962
+ The desired output columns/fields to include.
963
+
964
+ Returns
965
+ -------
966
+ dict | str
967
+ The requested subject area or a message if not found.
968
+
969
+ Raises
970
+ ------
971
+ PyegeriaException
972
+ If there are issues in communications, message format, or Egeria errors.
973
+
974
+ Notes
975
+ -----
976
+ Sample JSON body:
977
+ ```json
978
+ {
979
+ "class" : "GetRequestBody",
980
+ "forLineage" : false
981
+ }
982
+ ```
983
+ """
984
+ url = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/subject-area/governance-definitions/{subject_area_guid}/retrieve"
985
+ return await self._async_get_guid_request(
986
+ url,
987
+ _type=element_type,
988
+ _gen_output=self._generate_subject_area_output,
989
+ output_format=output_format,
990
+ report_spec=report_spec,
991
+ body=body,
992
+ )
993
+
994
+ def get_subject_area_by_guid(
995
+ self,
996
+ subject_area_guid: str,
997
+ element_type: str = "SubjectArea",
998
+ body: Optional[dict | GetRequestBody] = None,
999
+ output_format: str = "JSON",
1000
+ report_spec: str | dict = "SubjectAreas",
1001
+ ) -> dict | str:
1002
+ """Get subject area by GUID.
1003
+
1004
+ Parameters
1005
+ ----------
1006
+ subject_area_guid : str
1007
+ The unique identifier of the subject area.
1008
+ element_type : str, optional
1009
+ The type of metadata element.
1010
+ body : dict | GetRequestBody, optional
1011
+ The request body for the search.
1012
+ output_format : str, optional
1013
+ The desired output format.
1014
+ report_spec : str | dict, optional
1015
+ The desired output columns/fields to include.
1016
+
1017
+ Returns
1018
+ -------
1019
+ dict | str
1020
+ The requested subject area or a message if not found.
1021
+
1022
+ Raises
1023
+ ------
1024
+ PyegeriaException
1025
+ If there are issues in communications, message format, or Egeria errors.
1026
+
1027
+ Notes
1028
+ -----
1029
+ Sample JSON body:
1030
+ ```json
1031
+ {
1032
+ "class" : "GetRequestBody",
1033
+ "forLineage" : false
1034
+ }
1035
+ ```
1036
+ """
1037
+ loop = asyncio.get_event_loop()
1038
+ return loop.run_until_complete(
1039
+ self._async_get_subject_area_by_guid(
1040
+ subject_area_guid, element_type, body, output_format, report_spec
1041
+ )
1042
+ )