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 MyProfile class and its methods.
6
+
7
+ """
8
+ import json
9
+
10
+ from loguru import logger
11
+ from typing import Any, Optional
12
+ from pyegeria.core._server_client import ServerClient
13
+ from pyegeria.core._validators import validate_name, validate_search_string
14
+ from pyegeria.core.utils import dynamic_catch, body_slimmer
15
+ from pyegeria.models import NewElementRequestBody, SearchStringRequestBody
16
+ import asyncio
17
+
18
+
19
+ class MyProfile(ServerClient):
20
+ """A class representing the profile of a user.
21
+
22
+ This class provides methods for retrieving and managing the profile details
23
+ of a user associated with a token.
24
+
25
+ Parameters
26
+ ----------
27
+ view_server : str
28
+ The name of the view server to configure.
29
+ platform_url : str
30
+ The URL of the platform.
31
+ token : str, optional
32
+ The token associated with the user. Default is None.
33
+ user_id : str, optional
34
+ The user ID. Default is None.
35
+ user_pwd : str, optional
36
+ The user password. Default is None.
37
+ """
38
+
39
+ def __init__(self, view_server: str, platform_url: str, user_id: str | None = None, user_pwd: str|None = None,
40
+ token: str|None = None):
41
+ self.view_server = view_server
42
+ self.platform_url = platform_url
43
+ self.user_id = user_id
44
+ self.user_pwd = user_pwd
45
+ ServerClient.__init__(
46
+ self,
47
+ view_server,
48
+ platform_url,
49
+ user_id=user_id,
50
+ user_pwd=user_pwd,
51
+ token=token,
52
+ )
53
+ self.my_profile_command_root: str = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/my-profile"
54
+
55
+ @dynamic_catch
56
+ async def _async_get_my_profile(
57
+ self, output_format: str = "JSON", report_spec: str | dict = None
58
+ ) -> dict | str:
59
+ """Retrieve the profile details of the user associated with the token. Async version.
60
+
61
+ Parameters
62
+ ----------
63
+ output_format: str, default = "JSON"
64
+ - one of "DICT", "JSON"
65
+ report_spec: str | dict, optional, default = None
66
+ - The desired output columns/field options.
67
+
68
+ Returns
69
+ -------
70
+ dict | str
71
+ A dictionary containing the profile details or formatted output.
72
+
73
+ Raises
74
+ ------
75
+ PyegeriaException
76
+ One of the pyegeria exceptions will be raised if there are issues in communications, message format, or
77
+ Egeria errors.
78
+ """
79
+ url = self.my_profile_command_root
80
+ response = await self._async_make_request("GET",url)
81
+ if type(response) == str:
82
+ return "No Profile Found"
83
+
84
+ elements = response.json().get("element", "No Profile Found")
85
+ if output_format != 'JSON': # return a simplified markdown representation
86
+ logger.info(f"Found elements, output format: {output_format} and report_spec: {report_spec}")
87
+ return super()._generate_referenceable_output(elements, self.user_id, "Person",
88
+ output_format, report_spec)
89
+ return elements
90
+
91
+ @dynamic_catch
92
+ def get_my_profile(
93
+ self, output_format: str = "JSON", report_spec: str | dict = None
94
+ ) -> dict | str:
95
+ """Retrieve the profile details of the user associated with the token.
96
+
97
+ Parameters
98
+ ----------
99
+ output_format: str, default = "JSON"
100
+ - one of "DICT", "JSON"
101
+ report_spec: str | dict, optional, default = None
102
+ - The desired output columns/field options.
103
+
104
+ Returns
105
+ -------
106
+ dict | str
107
+ A dictionary containing the profile details or formatted output.
108
+
109
+ Raises
110
+ ------
111
+ PyegeriaException
112
+ One of the pyegeria exceptions will be raised if there are issues in communications, message format, or
113
+ Egeria errors.
114
+ """
115
+ return asyncio.get_event_loop().run_until_complete(
116
+ self._async_get_my_profile(output_format, report_spec)
117
+ )
118
+
119
+ @dynamic_catch
120
+ async def _async_create_my_profile(self, body: dict | NewElementRequestBody) -> str:
121
+ """ Create a new profile for the user. Async version.
122
+
123
+ Parameters
124
+ ----------
125
+ body : dict | NewElementRequestBody
126
+ A dictionary or NewElementRequestBody containing the profile properties.
127
+
128
+ Returns
129
+ -------
130
+ str
131
+ The GUID of the created profile.
132
+
133
+ Raises
134
+ ------
135
+ PyegeriaException
136
+ One of the pyegeria exceptions will be raised if there are issues in communications, message format, or
137
+ Egeria errors.
138
+
139
+ Notes
140
+ -----
141
+ Example body:
142
+ {
143
+ "class" : "NewElementRequestBody",
144
+ "isOwnAnchor": true,
145
+ "properties": {
146
+ "class" : "PersonProperties",
147
+ "qualifiedName": "add unique name here",
148
+ "displayName": "add preferred name here",
149
+ "courtesyTitle" : "",
150
+ "initials" : "",
151
+ "givenNames" : "",
152
+ "surname" : "",
153
+ "fullName" : "",
154
+ "pronouns" : "",
155
+ "jobTitle" : "",
156
+ "employeeNumber" : "",
157
+ "employeeType" : "",
158
+ "preferredLanguage" : "",
159
+ "residentCountry" : "",
160
+ "timeZone" : "",
161
+ "description": "add description here",
162
+ "additionalProperties": {
163
+ "property1" : "propertyValue1",
164
+ "property2" : "propertyValue2"
165
+ }
166
+ },
167
+ "externalSourceGUID": "add guid here",
168
+ "externalSourceName": "add qualified name here",
169
+ "effectiveTime" : "{{$isoTimestamp}}",
170
+ "forLineage" : false,
171
+ "forDuplicateProcessing" : false
172
+ }
173
+ """
174
+ url = self.my_profile_command_root
175
+ return await self._async_create_element_body_request(url, ["PersonProperties"], body)
176
+
177
+ @dynamic_catch
178
+ def create_my_profile(self, body: dict | NewElementRequestBody) -> str:
179
+ """ Create a new profile for the user.
180
+
181
+ Parameters
182
+ ----------
183
+ body : dict | NewElementRequestBody
184
+ A dictionary or NewElementRequestBody containing the profile properties.
185
+
186
+ Returns
187
+ -------
188
+ str
189
+ The GUID of the created profile.
190
+
191
+ Raises
192
+ ------
193
+ PyegeriaException
194
+ One of the pyegeria exceptions will be raised if there are issues in communications, message format, or
195
+ Egeria errors.
196
+
197
+ Notes
198
+ -----
199
+ Example body:
200
+ {
201
+ "class" : "NewElementRequestBody",
202
+ "isOwnAnchor": true,
203
+ "properties": {
204
+ "class" : "PersonProperties",
205
+ "qualifiedName": "add unique name here",
206
+ "displayName": "add preferred name here",
207
+ "courtesyTitle" : "",
208
+ "initials" : "",
209
+ "givenNames" : "",
210
+ "surname" : "",
211
+ "fullName" : "",
212
+ "pronouns" : "",
213
+ "jobTitle" : "",
214
+ "employeeNumber" : "",
215
+ "employeeType" : "",
216
+ "preferredLanguage" : "",
217
+ "residentCountry" : "",
218
+ "timeZone" : "",
219
+ "description": "add description here",
220
+ "additionalProperties": {
221
+ "property1" : "propertyValue1",
222
+ "property2" : "propertyValue2"
223
+ }
224
+ },
225
+ "externalSourceGUID": "add guid here",
226
+ "externalSourceName": "add qualified name here",
227
+ "effectiveTime" : "{{$isoTimestamp}}",
228
+ "forLineage" : false,
229
+ "forDuplicateProcessing" : false
230
+ }
231
+ """
232
+ return asyncio.get_event_loop().run_until_complete(self._async_create_my_profile(body))
233
+
234
+
235
+ async def _async_get_assigned_actions(
236
+ self,
237
+ actor_guid: str,
238
+ status: str = "OPEN",
239
+ start_from: int = 0,
240
+ page_size: int = 100,
241
+ ) -> list | str:
242
+ """Get assigned actions for the actor. Async version.
243
+
244
+ Parameters
245
+ ----------
246
+ actor_guid: str
247
+ The GUID of the actor whose assigned actions are to be retrieved.
248
+ status: str
249
+ The status of teh action to filter on. Default value is "OPEN".
250
+
251
+ start_from: int, optional
252
+ The index from which to start retrieving the assigned actions. Default is 0.
253
+ page_size: int, optional
254
+ The number of assigned actions to retrieve per page. Default is 100.
255
+
256
+ Returns
257
+ -------
258
+ list or str
259
+ A list of assigned actions is returned. If there aren't any, a string is returned indicating that.
260
+
261
+ Raises
262
+ ------
263
+ PyegeriaInvalidParameterException
264
+ If the client passes incorrect parameters on the request - such as bad URLs or invalid values
265
+ PyegeriaAPIException
266
+ Raised by the server when an issue arises in processing a valid request
267
+ NotAuthorizedException
268
+ The principle specified by the user_id does not have authorization for the requested action
269
+ """
270
+
271
+ if page_size is None:
272
+ page_size = self.page_size
273
+
274
+ body = {"status": status}
275
+
276
+ url = (
277
+ f"{self.my_profile_command_root}/{self.view_server}/api/open-metadata/my-profile/actors/{actor_guid}"
278
+ f"/assigned/to-dos?startFrom={start_from}&pageSize={page_size}&"
279
+ )
280
+
281
+ response = await self._async_make_request("POST", url, body)
282
+
283
+ return response.json().get("elements", "No entries found")
284
+
285
+ def get_assigned_actions(
286
+ self,
287
+ actor_guid: str,
288
+ status: str = "OPEN",
289
+ start_from: int = 0,
290
+ page_size: int = 100,
291
+ ) -> list | str:
292
+ """Get assigned actions for the actor.
293
+ Parameters
294
+ ----------
295
+ actor_guid: str
296
+ The GUID of the actor whose assigned actions are to be retrieved.
297
+ status: str
298
+ The status of teh action to filter on. Default value is "OPEN".
299
+
300
+ start_from: int, optional
301
+ The index from which to start retrieving the assigned actions. Default is 0.
302
+ page_size: int, optional
303
+ The number of assigned actions to retrieve per page. Default is 100.
304
+
305
+ Returns
306
+ -------
307
+ list or str
308
+ A list of assigned actions is returned. If there aren't any, a string is returned indicating that.
309
+
310
+ Raises
311
+ ------
312
+ PyegeriaInvalidParameterException
313
+ If the client passes incorrect parameters on the request - such as bad URLs or invalid values
314
+ PyegeriaAPIException
315
+ Raised by the server when an issue arises in processing a valid request
316
+ NotAuthorizedException
317
+ The principle specified by the user_id does not have authorization for the requested action
318
+ """
319
+ loop = asyncio.get_event_loop()
320
+ response = loop.run_until_complete(
321
+ self._async_get_assigned_actions(actor_guid, status, start_from, page_size)
322
+ )
323
+
324
+ return response
325
+
326
+ async def _async_get_actions_for_action_target(
327
+ self,
328
+ element_guid: str,
329
+ status: str = "OPEN",
330
+ start_from: int = 0,
331
+ page_size: int = 100,
332
+ ) -> list | str:
333
+ """Get actions assigned to the action target. Async version.
334
+
335
+ Parameters
336
+ ----------
337
+ element_guid: str
338
+ The GUID of the target whose assigned actions are to be retrieved.
339
+ status: str
340
+ The status of teh action to filter on. Default value is "OPEN".
341
+
342
+ start_from: int, optional
343
+ The index from which to start retrieving the assigned actions. Default is 0.
344
+ page_size: int, optional
345
+ The number of assigned actions to retrieve per page. Default is 100.
346
+
347
+ Returns
348
+ -------
349
+ list or str
350
+ A list of assigned actions is returned. If there aren't any, a string is returned indicating that.
351
+
352
+ Raises
353
+ ------
354
+ PyegeriaInvalidParameterException
355
+ If the client passes incorrect parameters on the request - such as bad URLs or invalid values
356
+ PyegeriaAPIException
357
+ Raised by the server when an issue arises in processing a valid request
358
+ NotAuthorizedException
359
+ The principle specified by the user_id does not have authorization for the requested action
360
+ """
361
+
362
+ validate_name(element_guid)
363
+
364
+ body = {"status": status}
365
+
366
+ url = (
367
+ f"{self.my_profile_command_root}/{self.view_server}/api/open-metadata/my-profile/elements/{element_guid}"
368
+ f"/action-targets/to-dos?start-from={start_from}&page-size={page_size}"
369
+ )
370
+
371
+ response = await self._async_make_request("POST", url, body)
372
+ return response.json() if response is not None else "No Results"
373
+
374
+ def get_actions_for_action_target(
375
+ self,
376
+ element_guid: str,
377
+ status: str = "OPEN",
378
+ start_from: int = 0,
379
+ page_size: int = 100,
380
+ ) -> list | str:
381
+ """Get actions assigned to the action target.
382
+
383
+ Parameters
384
+ ----------
385
+ element_guid: str
386
+ The GUID of the target whose assigned actions are to be retrieved.
387
+ status: str
388
+ The status of teh action to filter on. Default value is "OPEN"
389
+
390
+ start_from: int, optional
391
+ The index from which to start retrieving the assigned actions. Default is 0.
392
+ page_size: int, optional
393
+ The number of assigned actions to retrieve per page. Default is 100.
394
+
395
+ Returns
396
+ -------
397
+ list or str
398
+ A list of assigned actions is returned. If there aren't any, a string is returned indicating that.
399
+
400
+ Raises
401
+ ------
402
+ PyegeriaInvalidParameterException
403
+ If the client passes incorrect parameters on the request - such as bad URLs or invalid values
404
+ PyegeriaAPIException
405
+ Raised by the server when an issue arises in processing a valid request
406
+ NotAuthorizedException
407
+ The principle specified by the user_id does not have authorization for the requested action
408
+ """
409
+ loop = asyncio.get_event_loop()
410
+ response = loop.run_until_complete(
411
+ self._async_get_actions_for_action_target(
412
+ element_guid, status, start_from, page_size
413
+ )
414
+ )
415
+
416
+ return response
417
+
418
+ #
419
+ # Lifecycle
420
+ #
421
+ async def _async_create_person_action(self, body: dict) -> str:
422
+ """Create a person action (Meeting, ToDo, Notification, Review). Async version.
423
+
424
+ Parameters
425
+ ----------
426
+ body : dict
427
+ The dictionary containing the details of the action.
428
+
429
+ Returns
430
+ -------
431
+ GUID
432
+ GUID of the person action
433
+
434
+ Raises
435
+ ------
436
+ PyegeriaException
437
+
438
+ ValidationError
439
+
440
+ Notes
441
+ _____
442
+
443
+ This method can be used to create a person action. The type of person action depends on the "Class" element
444
+ in the body. Here are brief examples of bodies:
445
+
446
+ {
447
+ "class" : "NewElementRequestBody",
448
+ "isOwnAnchor": true,
449
+ "properties": {
450
+ "class" : "Meeting",
451
+ "qualifiedName": "add unique name here",
452
+ "displayName": "add short name here",
453
+ "description": "add description here",
454
+ "situation": "add situation here",
455
+ "objective": "add objective here",
456
+ "minutes": "add minutes here",
457
+ "decisions": "add decisions here"
458
+ }
459
+ }
460
+
461
+ {
462
+ "class" : "NewElementRequestBody",
463
+ "isOwnAnchor": true,
464
+ "properties": {
465
+ "class" : "ToDo",
466
+ "qualifiedName": "add unique name here",
467
+ "displayName": "add short name here",
468
+ "description": "add description here",
469
+ "situation": "add situation here"
470
+ }
471
+ }
472
+
473
+ {
474
+ "class" : "NewElementRequestBody",
475
+ "isOwnAnchor": true,
476
+ "properties": {
477
+ "class" : "Notification",
478
+ "qualifiedName": "add unique name here",
479
+ "displayName": "add short name here",
480
+ "description": "add description here",
481
+ "situation": "add situation here"
482
+ }
483
+ }
484
+
485
+ {
486
+ "class" : "NewElementRequestBody",
487
+ "isOwnAnchor": true,
488
+ "properties": {
489
+ "class" : "Review",
490
+ "qualifiedName": "add unique name here",
491
+ "displayName": "add short name here",
492
+ "description": "add description here",
493
+ "situation": "add situation here",
494
+ "reviewDate": "add date here",
495
+ "comment": "add comment here"
496
+ }
497
+ }
498
+ """
499
+
500
+ response = await super().create_asset(["Meeting","Todo","Notification","Review"], body)
501
+ return response.json().get("guid", "No guid returned")
502
+
503
+ def create_person_action(self, body: dict) -> str:
504
+ """Create a person action (Meeting, ToDo, Notification, Review).
505
+ Parameters
506
+ ----------
507
+ body : dict
508
+ The dictionary containing the details of the to-do item.
509
+
510
+ Returns
511
+ -------
512
+ None
513
+ This method does not return any value.
514
+
515
+ Raises
516
+ ------
517
+ PyegeriaInvalidParameterException
518
+ If the client passes incorrect parameters on the request - such as bad URLs or invalid values
519
+ PyegeriaAPIException
520
+ Raised by the server when an issue arises in processing a valid request
521
+ NotAuthorizedException
522
+ The principle specified by the user_id does not have authorization for the requested action
523
+
524
+ Notes
525
+ -----
526
+
527
+ {
528
+ "class" : "NewElementRequestBody",
529
+ "isOwnAnchor": true,
530
+ "properties": {
531
+ "class" : "Meeting",
532
+ "qualifiedName": "add unique name here",
533
+ "displayName": "add short name here",
534
+ "description": "add description here",
535
+ "situation": "add situation here",
536
+ "objective": "add objective here",
537
+ "minutes": "add minutes here",
538
+ "decisions": "add decisions here"
539
+ }
540
+ }
541
+
542
+ {
543
+ "class" : "NewElementRequestBody",
544
+ "isOwnAnchor": true,
545
+ "properties": {
546
+ "class" : "ToDo",
547
+ "qualifiedName": "add unique name here",
548
+ "displayName": "add short name here",
549
+ "description": "add description here",
550
+ "situation": "add situation here"
551
+ }
552
+ }
553
+
554
+ {
555
+ "class" : "NewElementRequestBody",
556
+ "isOwnAnchor": true,
557
+ "properties": {
558
+ "class" : "Notification",
559
+ "qualifiedName": "add unique name here",
560
+ "displayName": "add short name here",
561
+ "description": "add description here",
562
+ "situation": "add situation here"
563
+ }
564
+ }
565
+
566
+ {
567
+ "class" : "NewElementRequestBody",
568
+ "isOwnAnchor": true,
569
+ "properties": {
570
+ "class" : "Review",
571
+ "qualifiedName": "add unique name here",
572
+ "displayName": "add short name here",
573
+ "description": "add description here",
574
+ "situation": "add situation here",
575
+ "reviewDate": "add date here",
576
+ "comment": "add comment here"
577
+ }
578
+ }
579
+ """
580
+ loop = asyncio.get_event_loop()
581
+ response = loop.run_until_complete(self._async_create_person_action(body))
582
+ return response
583
+
584
+
585
+
586
+ # async def _async_get_to_do(self, todo_guid: str) -> dict | str:
587
+ # """Get a To-Do item. Async version.
588
+ # Parameters
589
+ # ----------
590
+ # todo_guid: str
591
+ # Identifier of the To-Do item.
592
+ #
593
+ #
594
+ # Returns
595
+ # -------
596
+ # None
597
+ # This method does not return any value.
598
+ #
599
+ # Raises
600
+ # ------
601
+ # PyegeriaInvalidParameterException
602
+ # If the client passes incorrect parameters on the request - such as bad URLs or invalid values
603
+ # PyegeriaAPIException
604
+ # Raised by the server when an issue arises in processing a valid request
605
+ # NotAuthorizedException
606
+ # The principle specified by the user_id does not have authorization for the requested action
607
+ # """
608
+ #
609
+ # validate_name(todo_guid)
610
+ #
611
+ # url = f"{self.my_profile_command_root}/{self.view_server}/api/open-metadata/my-profile/to-dos/{todo_guid}"
612
+ #
613
+ # response = await self._async_make_request("GET", url)
614
+ # # return response.text if response is not None else "No Results"
615
+ # return json.loads(response.text).get("elements", "No TODO returned")
616
+ #
617
+ # def get_to_do(self, todo_guid: str) -> dict | str:
618
+ # """Get a To-Do item. Async version.
619
+ # Parameters
620
+ # ----------
621
+ # todo_guid: str
622
+ # Identifier of the To-Do item.
623
+ #
624
+ #
625
+ # Returns
626
+ # -------
627
+ # None
628
+ # This method does not return any value.
629
+ #
630
+ # Raises
631
+ # ------
632
+ # PyegeriaInvalidParameterException
633
+ # If the client passes incorrect parameters on the request - such as bad URLs or invalid values
634
+ # PyegeriaAPIException
635
+ # Raised by the server when an issue arises in processing a valid request
636
+ # NotAuthorizedException
637
+ # The principle specified by the user_id does not have authorization for the requested action
638
+ # """
639
+ # loop = asyncio.get_event_loop()
640
+ # response = loop.run_until_complete(self._async_get_to_do(todo_guid))
641
+ #
642
+ # return response
643
+
644
+ async def _async_update_to_do(
645
+ self,
646
+ todo_guid: str,
647
+ body: dict,
648
+ is_merge_update: bool = True,
649
+ ) -> None:
650
+ """Update a To-Do item. Async version.
651
+ Parameters
652
+ ----------
653
+ todo_guid: str
654
+ Identifier of the To-Do item.
655
+ body: str
656
+ The details to update the to-do item with.
657
+
658
+
659
+ Returns
660
+ -------
661
+ None
662
+ This method does not return any value.
663
+
664
+ Raises
665
+ ------
666
+ PyegeriaInvalidParameterException
667
+ One of the parameters is null or invalid (for example, bad URL or invalid values).
668
+ PyegeriaAPIException
669
+ The server reported an error while processing a valid request.
670
+ PyegeriaUnauthorizedException
671
+ The requesting user is not authorized to issue this request.
672
+ """
673
+
674
+ is_merge_update_t = str(is_merge_update).lower()
675
+
676
+ validate_name(todo_guid)
677
+
678
+ url = (
679
+ f"{self.my_profile_command_root}/{self.view_server}/api/open-metadata/my-profile/to-dos/"
680
+ f"{todo_guid}?isMergeUpdate={is_merge_update_t}"
681
+ )
682
+
683
+ await self._async_make_request("POST", url, body)
684
+ return
685
+
686
+ def update_to_do(
687
+ self,
688
+ todo_guid: str,
689
+ body: dict,
690
+ is_merge_update: bool = True,
691
+ ) -> None:
692
+ """Update a To-Do item.
693
+ Parameters
694
+ ----------
695
+ todo_guid: str
696
+ Identifier of the To-Do item.
697
+ body: str
698
+ The details to update the to-do item with.
699
+ is_merge_update: bool [default: True]
700
+ If true then merges the updated information, otherwise replace the existing information.
701
+
702
+
703
+ Returns
704
+ -------
705
+ None
706
+ This method does not return any value.
707
+
708
+ Raises
709
+ ------
710
+ PyegeriaInvalidParameterException
711
+ If the client passes incorrect parameters on the request - such as bad URLs or invalid values
712
+ PyegeriaAPIException
713
+ Raised by the server when an issue arises in processing a valid request
714
+ NotAuthorizedException
715
+ The principle specified by the user_id does not have authorization for the requested action
716
+ """
717
+
718
+ loop = asyncio.get_event_loop()
719
+ loop.run_until_complete(
720
+ self._async_update_to_do(todo_guid, body, is_merge_update)
721
+ )
722
+ return
723
+
724
+ async def _async_delete_to_do(self, todo_guid: str) -> None:
725
+ """Delete a To-Do item. Async version.
726
+ Parameters
727
+ ----------
728
+ todo_guid: str
729
+ Identifier of the To-Do item.
730
+
731
+
732
+ Returns
733
+ -------
734
+ None
735
+ This method does not return any value.
736
+
737
+ Raises
738
+ ------
739
+ PyegeriaInvalidParameterException
740
+ If the client passes incorrect parameters on the request - such as bad URLs or invalid values
741
+ PyegeriaAPIException
742
+ Raised by the server when an issue arises in processing a valid request
743
+ NotAuthorizedException
744
+ The principle specified by the user_id does not have authorization for the requested action
745
+ """
746
+
747
+ validate_name(todo_guid)
748
+
749
+ url = f"{self.my_profile_command_root}/{self.view_server}/api/open-metadata/my-profile/to-dos/{todo_guid}/delete"
750
+
751
+ await self._async_make_request("POST", url)
752
+ return
753
+
754
+ def delete_to_do(self, todo_guid: str) -> None:
755
+ """Delete a To-Do item.
756
+ Parameters
757
+ ----------
758
+ todo_guid: str
759
+ Identifier of the To-Do item.
760
+
761
+
762
+ Returns
763
+ -------
764
+ None
765
+ This method does not return any value.
766
+
767
+ Raises
768
+ ------
769
+ PyegeriaInvalidParameterException
770
+ If the client passes incorrect parameters on the request - such as bad URLs or invalid values
771
+ PyegeriaAPIException
772
+ Raised by the server when an issue arises in processing a valid request
773
+ NotAuthorizedException
774
+ The principle specified by the user_id does not have authorization for the requested action
775
+ """
776
+ loop = asyncio.get_event_loop()
777
+ loop.run_until_complete(self._async_delete_to_do(todo_guid))
778
+ return
779
+
780
+ async def _async_reassign_to_do(
781
+ self,
782
+ todo_guid: str,
783
+ actor_guid: str,
784
+ status: str = "OPEN",
785
+ ) -> None:
786
+ """Reassign a To-Do item. Async version.
787
+ Parameters
788
+ ----------
789
+ todo_guid: str
790
+ Identifier of the To-Do item.
791
+ actor_guid: str
792
+ The actor to receive the reassigned to-do item.
793
+ status: str [default = "OPEN"]
794
+ Filter items to match this status.
795
+
796
+ Returns
797
+ -------
798
+ None
799
+ This method does not return any value.
800
+
801
+ Raises
802
+ ------
803
+ PyegeriaInvalidParameterException
804
+ If the client passes incorrect parameters on the request - such as bad URLs or invalid values
805
+ PyegeriaAPIException
806
+ Raised by the server when an issue arises in processing a valid request
807
+ NotAuthorizedException
808
+ The principle specified by the user_id does not have authorization for the requested action
809
+ """
810
+
811
+ validate_name(todo_guid)
812
+ validate_name(actor_guid)
813
+ body = {"status": status}
814
+
815
+ url = (
816
+ f"{self.my_profile_command_root}/{self.view_server}/api/open-metadata/my-profile/to-dos/"
817
+ f"{todo_guid}/reassign/{actor_guid}"
818
+ )
819
+
820
+ await self._async_make_request("POST", url, body)
821
+ return
822
+
823
+ def reassign_to_do(
824
+ self,
825
+ todo_guid: str,
826
+ actor_guid: str,
827
+ status: str = "OPEN",
828
+ ) -> None:
829
+ """Reassign a To-Do item.
830
+ Parameters
831
+ ----------
832
+ todo_guid: str
833
+ Identifier of the To-Do item.
834
+ actor_guid: str
835
+ The actor to receive the reassigned to-do item.
836
+ status: str [default = "OPEN"]
837
+ Filter items to match this status.
838
+
839
+ Returns
840
+ -------
841
+ None
842
+ This method does not return any value.
843
+
844
+ Raises
845
+ ------
846
+ PyegeriaInvalidParameterException
847
+ If the client passes incorrect parameters on the request - such as bad URLs or invalid values
848
+ PyegeriaAPIException
849
+ Raised by the server when an issue arises in processing a valid request
850
+ NotAuthorizedException
851
+ The principle specified by the user_id does not have authorization for the requested action
852
+ """
853
+ loop = asyncio.get_event_loop()
854
+ loop.run_until_complete(
855
+ self._async_reassign_to_do(todo_guid, actor_guid, status)
856
+ )
857
+ return
858
+
859
+ async def _async_find_to_do(
860
+ self,
861
+ search_string: str = "*",
862
+ starts_with: bool = False,
863
+ ends_with: bool = False,
864
+ ignore_case: bool = True,
865
+ anchor_domain: Optional[str] = None,
866
+ metadata_element_type: Optional[str] = None,
867
+ metadata_element_subtypes: list[str] = ["ToDo", "Notification", "Review", "Meeting"],
868
+ skip_relationships: Optional[list[str]] = None,
869
+ include_only_relationships: Optional[list[str]] = None,
870
+ skip_classified_elements: Optional[list[str]] = None,
871
+ include_only_classified_elements: Optional[list[str]] = None,
872
+ graph_query_depth: int = 3,
873
+ governance_zone_filter: Optional[list[str]] = None,
874
+ as_of_time: Optional[str] = None,
875
+ effective_time: Optional[str] = None,
876
+ relationship_page_size: int = 0,
877
+ limit_results_by_status: Optional[list[str]] = None,
878
+ sequencing_order: Optional[str] = None,
879
+ sequencing_property: Optional[str] = None,
880
+ output_format: str = "JSON",
881
+ report_spec: str | dict = None,
882
+ start_from: int = 0,
883
+ page_size: int = 100,
884
+ property_names: Optional[list[str]] = None,
885
+ body: Optional[dict | SearchStringRequestBody] = None,
886
+ ) -> list | str:
887
+ """find To-Do items. Async version.
888
+ Parameters
889
+ ----------
890
+ search_string: str
891
+ String to search against. If '*' then all to-do items will match.
892
+ starts_with : bool, [default=False], optional
893
+ Starts with the supplied string.
894
+ ends_with : bool, [default=False], optional
895
+ Ends with the supplied string
896
+ ignore_case : bool, [default=False], optional
897
+ Ignore case when searching
898
+ Returns
899
+ -------
900
+ None
901
+ List of To-Do items that match the criteria
902
+
903
+ Raises
904
+ ------
905
+ PyegeriaInvalidParameterException
906
+ If the client passes incorrect parameters on the request - such as bad URLs or invalid values
907
+ PyegeriaAPIException
908
+ Raised by the server when an issue arises in processing a valid request
909
+ NotAuthorizedException
910
+ The principle specified by the user_id does not have authorization for the requested action
911
+ """
912
+
913
+ url = f"{self.my_profile_command_root}/to-dos/find-by-search-string"
914
+
915
+ return await self._async_find_request(
916
+ url,
917
+ _type="ToDo",
918
+ _gen_output=self._generate_referenceable_output,
919
+ search_string=search_string,
920
+ starts_with=starts_with,
921
+ ends_with=ends_with,
922
+ ignore_case=ignore_case,
923
+ anchor_domain=anchor_domain,
924
+ metadata_element_type=metadata_element_type,
925
+ metadata_element_subtypes=metadata_element_subtypes,
926
+ skip_relationships=skip_relationships,
927
+ include_only_relationships=include_only_relationships,
928
+ skip_classified_elements=skip_classified_elements,
929
+ include_only_classified_elements=include_only_classified_elements,
930
+ graph_query_depth=graph_query_depth,
931
+ governance_zone_filter=governance_zone_filter,
932
+ as_of_time=as_of_time,
933
+ effective_time=effective_time,
934
+ relationship_page_size=relationship_page_size,
935
+ limit_results_by_status=limit_results_by_status,
936
+ sequencing_order=sequencing_order,
937
+ sequencing_property=sequencing_property,
938
+ output_format=output_format,
939
+ report_spec=report_spec,
940
+ start_from=start_from,
941
+ page_size=page_size,
942
+ property_names=property_names,
943
+ body=body,
944
+ )
945
+
946
+ def find_to_do(
947
+ self,
948
+ search_string: str = "*",
949
+ starts_with: bool = False,
950
+ ends_with: bool = False,
951
+ ignore_case: bool = True,
952
+ anchor_domain: Optional[str] = None,
953
+ metadata_element_type: Optional[str] = None,
954
+ metadata_element_subtypes: list[str] = ["ToDo", "Notification", "Review", "Meeting"],
955
+ skip_relationships: Optional[list[str]] = None,
956
+ include_only_relationships: Optional[list[str]] = None,
957
+ skip_classified_elements: Optional[list[str]] = None,
958
+ include_only_classified_elements: Optional[list[str]] = None,
959
+ graph_query_depth: int = 3,
960
+ governance_zone_filter: Optional[list[str]] = None,
961
+ as_of_time: Optional[str] = None,
962
+ effective_time: Optional[str] = None,
963
+ relationship_page_size: int = 0,
964
+ limit_results_by_status: Optional[list[str]] = None,
965
+ sequencing_order: Optional[str] = None,
966
+ sequencing_property: Optional[str] = None,
967
+ output_format: str = "JSON",
968
+ report_spec: str | dict = None,
969
+ start_from: int = 0,
970
+ page_size: int = 100,
971
+ property_names: Optional[list[str]] = None,
972
+ body: Optional[dict | SearchStringRequestBody] = None,
973
+ ) -> list | str:
974
+ """find To-Do items.
975
+ Parameters
976
+ ----------
977
+ search_string: str
978
+ String to search against. If '*' then all to-do items will match.
979
+ starts_with : bool, [default=False], optional
980
+ Starts with the supplied string.
981
+ ends_with : bool, [default=False], optional
982
+ Ends with the supplied string
983
+ ignore_case : bool, [default=False], optional
984
+ Ignore case when searching
985
+ start_from: int, [default=0], optional
986
+ When multiple pages of results are available, the page number to start from.
987
+ page_size: int, [default=100]
988
+ The number of items to return in a single page.
989
+ Returns
990
+ -------
991
+ None
992
+ List of To-Do items that match the criteria
993
+
994
+ Raises
995
+ ------
996
+ PyegeriaInvalidParameterException
997
+ If the client passes incorrect parameters on the request - such as bad URLs or invalid values
998
+ PyegeriaAPIException
999
+ Raised by the server when an issue arises in processing a valid request
1000
+ NotAuthorizedException
1001
+ The principle specified by the user_id does not have authorization for the requested action
1002
+ """
1003
+ loop = asyncio.get_event_loop()
1004
+ response = loop.run_until_complete(
1005
+ self._async_find_to_do(
1006
+ search_string=search_string,
1007
+ starts_with=starts_with,
1008
+ ends_with=ends_with,
1009
+ ignore_case=ignore_case,
1010
+ anchor_domain=anchor_domain,
1011
+ metadata_element_type=metadata_element_type,
1012
+ metadata_element_subtypes=metadata_element_subtypes,
1013
+ skip_relationships=skip_relationships,
1014
+ include_only_relationships=include_only_relationships,
1015
+ skip_classified_elements=skip_classified_elements,
1016
+ include_only_classified_elements=include_only_classified_elements,
1017
+ graph_query_depth=graph_query_depth,
1018
+ governance_zone_filter=governance_zone_filter,
1019
+ as_of_time=as_of_time,
1020
+ effective_time=effective_time,
1021
+ relationship_page_size=relationship_page_size,
1022
+ limit_results_by_status=limit_results_by_status,
1023
+ sequencing_order=sequencing_order,
1024
+ sequencing_property=sequencing_property,
1025
+ output_format=output_format,
1026
+ report_spec=report_spec,
1027
+ start_from=start_from,
1028
+ page_size=page_size,
1029
+ property_names=property_names,
1030
+ body=body,
1031
+ )
1032
+ )
1033
+ return response
1034
+
1035
+
1036
+
1037
+
1038
+
1039
+
1040
+
1041
+ if __name__ == "__main__":
1042
+ print("Main-My Profile")