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
@@ -11,18 +11,16 @@ import asyncio
11
11
 
12
12
  from loguru import logger
13
13
 
14
- from pyegeria import Client2
15
- from pyegeria._client import max_paging_size
16
- from pyegeria._output_formats import select_output_format_set, get_output_format_type_match
14
+ from pyegeria.core._server_client import max_paging_size, ServerClient
15
+ from pyegeria.view.base_report_formats import select_report_spec, get_report_spec_match
17
16
  from pyegeria.models import (SearchStringRequestBody, FilterRequestBody, GetRequestBody, NewElementRequestBody,
18
17
  TemplateRequestBody,
19
18
  UpdateElementRequestBody, NewRelationshipRequestBody,
20
- DeleteRequestBody)
21
- from pyegeria.output_formatter import (extract_mermaid_only, extract_basic_dict)
22
- from pyegeria.output_formatter import (generate_output,
23
- _extract_referenceable_properties)
24
- from pyegeria.utils import body_slimmer, dynamic_catch
25
-
19
+ DeleteElementRequestBody, DeleteRelationshipRequestBody)
20
+ from pyegeria.view.output_formatter import (extract_mermaid_only, extract_basic_dict, populate_common_columns)
21
+ from pyegeria.view.output_formatter import (generate_output)
22
+ from pyegeria.core.utils import dynamic_catch
23
+ from typing import Any, Optional
26
24
 
27
25
  def query_seperator(current_string):
28
26
  if current_string == "":
@@ -47,21 +45,21 @@ def base_path(client, view_server: str):
47
45
  return f"{client.platform_url}/servers/{view_server}/api/open-metadata/data-designer"
48
46
 
49
47
 
50
- class DataDesigner(Client2):
48
+ class DataDesigner(ServerClient):
51
49
  """DataDesigner is a class that extends the Client class. The Data Designer OMVS provides APIs for
52
50
  building specifications for data. This includes common data fields in a data dictionary, data specifications
53
51
  for a project and data classes for data quality validation.
54
52
  """
55
53
 
56
- def __init__(self, view_server_name: str, platform_url: str, user_id: str = None, user_pwd: str = None,
57
- token: str = None, ):
54
+ def __init__(self, view_server_name: str, platform_url: str, user_id: Optional[str] = None, user_pwd: Optional[str] = None,
55
+ token: Optional[str] = None, ):
58
56
  self.view_server = view_server_name
59
57
  self.platform_url = platform_url
60
58
  self.user_id = user_id
61
59
  self.user_pwd = user_pwd
62
60
  self.data_designer_root: str = (
63
61
  f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/data-designer")
64
- Client2.__init__(self, view_server_name, platform_url, user_id=user_id, user_pwd=user_pwd, token=token, )
62
+ ServerClient.__init__(self, view_server_name, platform_url, user_id=user_id, user_pwd=user_pwd, token=token, )
65
63
 
66
64
  #
67
65
  # Data Structures
@@ -83,11 +81,11 @@ class DataDesigner(Client2):
83
81
 
84
82
  Raises
85
83
  ------
86
- InvalidParameterException
84
+ PyegeriaInvalidParameterException
87
85
  one of the parameters is null or invalid or
88
- PropertyServerException
86
+ PyegeriaAPIException
89
87
  There is a problem adding the element properties to the metadata repository or
90
- UserNotAuthorizedException
88
+ PyegeriaUnauthorizedException
91
89
  the requesting user is not authorized to issue this request.
92
90
 
93
91
  Notes
@@ -154,11 +152,11 @@ class DataDesigner(Client2):
154
152
 
155
153
  Raises
156
154
  ------
157
- InvalidParameterException
155
+ PyegeriaInvalidParameterException
158
156
  one of the parameters is null or invalid or
159
- PropertyServerException
157
+ PyegeriaAPIException
160
158
  There is a problem adding the element properties to the metadata repository or
161
- UserNotAuthorizedException
159
+ PyegeriaUnauthorizedException
162
160
  the requesting user is not authorized to issue this request.
163
161
 
164
162
  Notes
@@ -299,11 +297,11 @@ class DataDesigner(Client2):
299
297
 
300
298
  Raises
301
299
  ------
302
- InvalidParameterException
300
+ PyegeriaInvalidParameterException
303
301
  one of the parameters is null or invalid or
304
- PropertyServerException
302
+ PyegeriaAPIException
305
303
  There is a problem adding the element properties to the metadata repository or
306
- UserNotAuthorizedException
304
+ PyegeriaUnauthorizedException
307
305
  the requesting user is not authorized to issue this request.
308
306
 
309
307
  Note
@@ -468,7 +466,7 @@ class DataDesigner(Client2):
468
466
 
469
467
  @dynamic_catch
470
468
  async def _async_link_member_data_field(self, parent_data_struct_guid: str, member_data_field_guid: str,
471
- body: dict | NewRelationshipRequestBody = None) -> None:
469
+ body: Optional[dict | NewRelationshipRequestBody] = None) -> None:
472
470
  """
473
471
  Connect a data structure to a data field. Async version.
474
472
 
@@ -487,11 +485,11 @@ class DataDesigner(Client2):
487
485
 
488
486
  Raises
489
487
  ------
490
- InvalidParameterException
488
+ PyegeriaInvalidParameterException
491
489
  one of the parameters is null or invalid or
492
- PropertyServerException
490
+ PyegeriaAPIException
493
491
  There is a problem adding the element properties to the metadata repository or
494
- UserNotAuthorizedException
492
+ PyegeriaUnauthorizedException
495
493
  the requesting user is not authorized to issue this request.
496
494
 
497
495
  Note
@@ -524,7 +522,7 @@ class DataDesigner(Client2):
524
522
 
525
523
  @dynamic_catch
526
524
  def link_member_data_field(self, parent_data_struct_guid: str, member_data_field_guid: str,
527
- body: dict | NewRelationshipRequestBody = None) -> None:
525
+ body: Optional[dict | NewRelationshipRequestBody] = None) -> None:
528
526
  """
529
527
  Connect a data structure to a data field.
530
528
 
@@ -543,11 +541,11 @@ class DataDesigner(Client2):
543
541
 
544
542
  Raises
545
543
  ------
546
- InvalidParameterException
544
+ PyegeriaInvalidParameterException
547
545
  one of the parameters is null or invalid or
548
- PropertyServerException
546
+ PyegeriaAPIException
549
547
  There is a problem adding the element properties to the metadata repository or
550
- UserNotAuthorizedException
548
+ PyegeriaUnauthorizedException
551
549
  the requesting user is not authorized to issue this request.
552
550
 
553
551
  Note
@@ -579,7 +577,7 @@ class DataDesigner(Client2):
579
577
 
580
578
  @dynamic_catch
581
579
  async def _async_detach_member_data_field(self, parent_data_struct_guid: str, member_data_field_guid: str,
582
- body: dict | DeleteRequestBody = None,
580
+ body: Optional[dict | DeleteRelationshipRequestBody] = None,
583
581
  cascade_delete: bool = False) -> None:
584
582
  """
585
583
  Detach a data class from a data structure. Request body is optional. Async version.
@@ -600,11 +598,11 @@ class DataDesigner(Client2):
600
598
 
601
599
  Raises
602
600
  ------
603
- InvalidParameterException
601
+ PyegeriaInvalidParameterException
604
602
  one of the parameters is null or invalid or
605
- PropertyServerException
603
+ PyegeriaAPIException
606
604
  There is a problem adding the element properties to the metadata repository or
607
- UserNotAuthorizedException
605
+ PyegeriaUnauthorizedException
608
606
  the requesting user is not authorized to issue this request.
609
607
 
610
608
  Note
@@ -612,7 +610,7 @@ class DataDesigner(Client2):
612
610
 
613
611
  Full sample body:
614
612
  {
615
- "class": "DeleteRequestBody",
613
+ "class": "DeleteRelationshipRequestBody",
616
614
  "cascadedDelete": false,
617
615
  "deleteMethod": "LOOK_FOR_LINEAGE",
618
616
  "externalSourceGUID": "add guid here",
@@ -628,12 +626,12 @@ class DataDesigner(Client2):
628
626
  url = (f"{self.data_designer_root}/data-structures/{parent_data_struct_guid}"
629
627
  f"/member-data-fields/{member_data_field_guid}/detach")
630
628
 
631
- await self._async_delete_request(url, body, cascade_delete)
629
+ await self._async_delete_relationship_request(url, body, cascade_delete)
632
630
  logger.info(f"Data field {member_data_field_guid} detached from data structure {parent_data_struct_guid}.")
633
631
 
634
632
  @dynamic_catch
635
633
  def detach_member_data_field(self, parent_data_struct_guid: str, member_data_field_guid: str,
636
- body: dict = None | DeleteRequestBody, cascade_delete: bool = False) -> None:
634
+ body: dict = None | DeleteRelationshipRequestBody, cascade_delete: bool = False) -> None:
637
635
  """
638
636
  Detach a data class from a data structure. Request body is optional.
639
637
 
@@ -652,11 +650,11 @@ class DataDesigner(Client2):
652
650
 
653
651
  Raises
654
652
  ------
655
- InvalidParameterException
653
+ PyegeriaInvalidParameterException
656
654
  one of the parameters is null or invalid or
657
- PropertyServerException
655
+ PyegeriaAPIException
658
656
  There is a problem adding the element properties to the metadata repository or
659
- UserNotAuthorizedException
657
+ PyegeriaUnauthorizedException
660
658
  the requesting user is not authorized to issue this request.
661
659
 
662
660
  Note
@@ -664,7 +662,7 @@ class DataDesigner(Client2):
664
662
 
665
663
  Full sample body:
666
664
  {
667
- "class": "DeleteRequestBody",
665
+ "class": "DeleteRelationshipRequestBody",
668
666
  "cascadedDelete": false,
669
667
  "deleteMethod": "LOOK_FOR_LINEAGE",
670
668
  "externalSourceGUID": "add guid here",
@@ -702,11 +700,11 @@ class DataDesigner(Client2):
702
700
 
703
701
  Raises
704
702
  ------
705
- InvalidParameterException
703
+ PyegeriaInvalidParameterException
706
704
  one of the parameters is null or invalid or
707
- PropertyServerException
705
+ PyegeriaAPIException
708
706
  There is a problem adding the element properties to the metadata repository or
709
- UserNotAuthorizedException
707
+ PyegeriaUnauthorizedException
710
708
  the requesting user is not authorized to issue this request.
711
709
 
712
710
  Note
@@ -715,7 +713,7 @@ class DataDesigner(Client2):
715
713
  Full sample body:
716
714
 
717
715
  {
718
- "class": "DeleteRequestBody",
716
+ "class": "DeleteRelationshipRequestBody",
719
717
  "cascadedDelete": false,
720
718
  "deleteMethod": "LOOK_FOR_LINEAGE",
721
719
  "externalSourceGUID": "add guid here",
@@ -729,7 +727,7 @@ class DataDesigner(Client2):
729
727
 
730
728
  url = f"{self.data_designer_root}/data-structures/{data_struct_guid}/delete"
731
729
 
732
- await self._async_delete_request(url, body, cascade_delete)
730
+ await self._async_delete_element_request(url, body, cascade_delete)
733
731
  logger.info(f"Data structure {data_struct_guid} deleted.")
734
732
 
735
733
  @dynamic_catch
@@ -752,11 +750,11 @@ class DataDesigner(Client2):
752
750
 
753
751
  Raises
754
752
  ------
755
- InvalidParameterException
753
+ PyegeriaInvalidParameterException
756
754
  one of the parameters is null or invalid or
757
- PropertyServerException
755
+ PyegeriaAPIException
758
756
  There is a problem adding the element properties to the metadata repository or
759
- UserNotAuthorizedException
757
+ PyegeriaUnauthorizedException
760
758
  the requesting user is not authorized to issue this request.
761
759
 
762
760
  Note
@@ -765,7 +763,7 @@ class DataDesigner(Client2):
765
763
  Full sample body:
766
764
 
767
765
  {
768
- "class": "DeleteRequestBody",
766
+ "class": "DeleteRelationshipRequestBody",
769
767
  "cascadedDelete": false,
770
768
  "deleteMethod": "LOOK_FOR_LINEAGE",
771
769
  "externalSourceGUID": "add guid here",
@@ -781,7 +779,7 @@ class DataDesigner(Client2):
781
779
  loop.run_until_complete(self._async_delete_data_field(data_struct_guid, body, cascade_delete))
782
780
 
783
781
  @dynamic_catch
784
- def find_all_data_structures(self, output_format: str = 'JSON', output_format_set: str | dict = None) -> list | str:
782
+ def find_all_data_structures(self, output_format: str = 'JSON', report_spec: str | dict = None) -> list | str:
785
783
  """Returns a list of all known data structures. Async version.
786
784
 
787
785
  Parameters
@@ -789,7 +787,7 @@ class DataDesigner(Client2):
789
787
 
790
788
  output_format: str, default = "DICT"
791
789
  - output format of the data structure. Possible values: "DICT", "JSON", "MERMAID".
792
- output_format_set: dict, optional, default = None
790
+ report_spec: dict, optional, default = None
793
791
  - The desired output columns/field options.
794
792
  Returns
795
793
  -------
@@ -798,24 +796,38 @@ class DataDesigner(Client2):
798
796
 
799
797
  Raises
800
798
  ------
801
- InvalidParameterException
799
+ PyegeriaInvalidParameterException
802
800
  one of the parameters is null or invalid or
803
- PropertyServerException
801
+ PyegeriaAPIException
804
802
  There is a problem adding the element properties to the metadata repository or
805
- UserNotAuthorizedException
803
+ PyegeriaUnauthorizedException
806
804
  the requesting user is not authorized to issue this request.
807
805
 
808
806
  """
809
807
 
810
808
  return self.find_data_structures(search_string="*", output_format=output_format,
811
- output_format_set=output_format_set)
809
+ report_spec=report_spec)
812
810
 
813
811
  @dynamic_catch
814
- async def _async_find_data_structures(self, search_string: str, start_from: int = 0, page_size: int = 0,
815
- starts_with: bool = True, ends_with: bool = False, ignore_case: bool = True,
816
- body: dict | SearchStringRequestBody = None,
817
- output_format: str = 'JSON',
818
- output_format_set: str | dict = None) -> list | str:
812
+ async def _async_find_data_structures(self, search_string: str,
813
+ starts_with: bool = True, ends_with: bool = False,
814
+ ignore_case: bool = False,
815
+ anchor_domain: Optional[str] = None,
816
+ metadata_element_type: Optional[str] = None,
817
+ metadata_element_subtypes: Optional[list[str]] = None,
818
+ skip_relationships: Optional[list[str]] = None,
819
+ include_only_relationships: Optional[list[str]] = None,
820
+ skip_classified_elements: Optional[list[str]] = None,
821
+ include_only_classified_elements: Optional[list[str]] = None,
822
+ graph_query_depth: int = 3,
823
+ governance_zone_filter: Optional[list[str]] = None, as_of_time: Optional[str] = None,
824
+ effective_time: Optional[str] = None, relationship_page_size: int = 0,
825
+ limit_results_by_status: Optional[list[str]] = None, sequencing_order: Optional[str] = None,
826
+ sequencing_property: Optional[str] = None,
827
+ output_format: str = "JSON", report_spec: str | dict = None,
828
+ start_from: int = 0, page_size: int = 100,
829
+ property_names: Optional[list[str]] = None,
830
+ body: Optional[dict | SearchStringRequestBody] = None) -> list | str:
819
831
  """ Find the list of data structure metadata elements that contain the search string.
820
832
  Async version.
821
833
 
@@ -823,20 +835,59 @@ class DataDesigner(Client2):
823
835
  ----------
824
836
  search_string: str
825
837
  - search string to filter on.
826
- start_from: int, default = 0
827
- - index of the list to start from (0 for start).
828
- page_size
829
- - maximum number of elements to return.
830
- starts_with: bool, default = True
831
- - if True, the search string filters from the beginning of the string.
832
- ends_with: bool, default = False
833
- - if True, the search string filters from the end of the string.
834
- ignore_case: bool, default = True
835
- - If True, the case of the search string is ignored.
836
- output_format: str, default = "DICT"
837
- - one of "DICT", "MERMAID" or "JSON"
838
- output_format_set: dict|str, optional, default = None
839
- - The desired output columns/field options.
838
+ starts_with : bool, [default=True], optional
839
+ Starts with the supplied string.
840
+ ends_with : bool, [default=False], optional
841
+ Ends with the supplied string
842
+ ignore_case : bool, [default=False], optional
843
+ Ignore case when searching
844
+ anchor_domain: str, optional
845
+ The anchor domain to search in.
846
+ metadata_element_type: str, optional
847
+ The type of metadata element to search for.
848
+ metadata_element_subtypes: list[str], optional
849
+ The subtypes of metadata element to search for.
850
+ skip_relationships: list[str], optional
851
+ The types of relationships to skip.
852
+ include_only_relationships: list[str], optional
853
+ The types of relationships to include.
854
+ skip_classified_elements: list[str], optional
855
+ The types of classified elements to skip.
856
+ include_only_classified_elements: list[str], optional
857
+ The types of classified elements to include.
858
+ graph_query_depth: int, [default=3], optional
859
+ The depth of the graph query.
860
+ governance_zone_filter: list[str], optional
861
+ The governance zones to search in.
862
+ as_of_time: str, optional
863
+ The time to search as of.
864
+ effective_time: str, optional
865
+ The effective time to search at.
866
+ relationship_page_size: int, [default=0], optional
867
+ The page size for relationships.
868
+ limit_results_by_status: list[str], optional
869
+ The statuses to limit results by.
870
+ sequencing_order: str, optional
871
+ The order to sequence results by.
872
+ sequencing_property: str, optional
873
+ The property to sequence results by.
874
+ output_format: str, default = 'JSON'
875
+ Type of output to produce:
876
+ JSON - output standard json
877
+ MD - output standard markdown with no preamble
878
+ FORM - output markdown with a preamble for a form
879
+ REPORT - output markdown with a preamble for a report
880
+ report_spec: str | dict, optional
881
+ The report specification to use.
882
+ start_from: int, [default=0], optional
883
+ The page number to start from.
884
+ page_size: int, [default=100], optional
885
+ The number of items to return in a single page.
886
+ property_names: list[str], optional
887
+ The names of properties to search for.
888
+ body: dict, optional, default = None
889
+ - additional optional specifications for the search.
890
+
840
891
  Returns
841
892
  -------
842
893
  [dict] | str
@@ -844,11 +895,11 @@ class DataDesigner(Client2):
844
895
 
845
896
  Raises
846
897
  ------
847
- InvalidParameterException
898
+ PyegeriaInvalidParameterException
848
899
  one of the parameters is null or invalid or
849
- PropertyServerException
900
+ PyegeriaAPIException
850
901
  There is a problem adding the element properties to the metadata repository or
851
- UserNotAuthorizedException
902
+ PyegeriaUnauthorizedException
852
903
  the requesting user is not authorized to issue this request.
853
904
 
854
905
  Notes:
@@ -874,37 +925,105 @@ class DataDesigner(Client2):
874
925
 
875
926
  url = f"{base_path(self, self.view_server)}/data-structures/by-search-string"
876
927
 
877
- return await self._async_find_request(url, "DataStructure", self._generate_data_structure_output,
878
- search_string, start_from=start_from, page_size=page_size,
928
+ return await self._async_find_request(url, "DataStructure", self._generate_data_structure_output, search_string,
879
929
  starts_with=starts_with, ends_with=ends_with, ignore_case=ignore_case,
880
- body=body, output_format=output_format,
881
- output_format_set=output_format_set)
930
+ anchor_domain=anchor_domain,
931
+ metadata_element_type=metadata_element_type,
932
+ metadata_element_subtypes=metadata_element_subtypes,
933
+ skip_relationships=skip_relationships,
934
+ include_only_relationships=include_only_relationships,
935
+ skip_classified_elements=skip_classified_elements,
936
+ include_only_classified_elements=include_only_classified_elements,
937
+ graph_query_depth=graph_query_depth,
938
+ governance_zone_filter=governance_zone_filter,
939
+ as_of_time=as_of_time, effective_time=effective_time,
940
+ relationship_page_size=relationship_page_size,
941
+ limit_results_by_status=limit_results_by_status,
942
+ sequencing_order=sequencing_order,
943
+ sequencing_property=sequencing_property,
944
+ output_format=output_format, report_spec=report_spec,
945
+ start_from=start_from, page_size=page_size,
946
+ property_names=property_names, body=body)
882
947
 
883
948
  @dynamic_catch
884
- def find_data_structures(self, search_string: str, start_from: int = 0, page_size: int = 0,
885
- starts_with: bool = True, ends_with: bool = False, ignore_case: bool = True,
886
- body: dict | SearchStringRequestBody = None,
887
- output_format: str = 'JSON', output_format_set: str | dict = None) -> list | str:
949
+ def find_data_structures(self, search_string: str,
950
+ starts_with: bool = True, ends_with: bool = False,
951
+ ignore_case: bool = False,
952
+ anchor_domain: Optional[str] = None,
953
+ metadata_element_type: Optional[str] = None,
954
+ metadata_element_subtypes: Optional[list[str]] = None,
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, as_of_time: Optional[str] = None,
961
+ effective_time: Optional[str] = None, relationship_page_size: int = 0,
962
+ limit_results_by_status: Optional[list[str]] = None, sequencing_order: Optional[str] = None,
963
+ sequencing_property: Optional[str] = None,
964
+ output_format: str = "JSON", report_spec: str | dict = None,
965
+ start_from: int = 0, page_size: int = 100,
966
+ property_names: Optional[list[str]] = None,
967
+ body: Optional[dict | SearchStringRequestBody] = None) -> list | str:
888
968
  """ Find the list of data structure metadata elements that contain the search string.
889
969
 
890
970
  Parameters
891
971
  ----------
892
972
  search_string: str
893
973
  - search string to filter on.
894
- start_from: int, default = 0
895
- - index of the list to start from (0 for start).
896
- page_size
897
- - maximum number of elements to return.
898
- starts_with: bool, default = True
899
- - if True, the search string filters from the beginning of the string.
900
- ends_with: bool, default = False
901
- - if True, the search string filters from the end of the string.
902
- ignore_case: bool, default = True
903
- - If True, the case of the search string is ignored.
904
- output_format: str, default = "DICT"
905
- - one of "DICT", "MERMAID" or "JSON"
906
- output_format_set: dict|str, optional, default = None
907
- - The desired output columns/field options.
974
+ starts_with : bool, [default=True], optional
975
+ Starts with the supplied string.
976
+ ends_with : bool, [default=False], optional
977
+ Ends with the supplied string
978
+ ignore_case : bool, [default=False], optional
979
+ Ignore case when searching
980
+ anchor_domain: str, optional
981
+ The anchor domain to search in.
982
+ metadata_element_type: str, optional
983
+ The type of metadata element to search for.
984
+ metadata_element_subtypes: list[str], optional
985
+ The subtypes of metadata element to search for.
986
+ skip_relationships: list[str], optional
987
+ The types of relationships to skip.
988
+ include_only_relationships: list[str], optional
989
+ The types of relationships to include.
990
+ skip_classified_elements: list[str], optional
991
+ The types of classified elements to skip.
992
+ include_only_classified_elements: list[str], optional
993
+ The types of classified elements to include.
994
+ graph_query_depth: int, [default=3], optional
995
+ The depth of the graph query.
996
+ governance_zone_filter: list[str], optional
997
+ The governance zones to search in.
998
+ as_of_time: str, optional
999
+ The time to search as of.
1000
+ effective_time: str, optional
1001
+ The effective time to search at.
1002
+ relationship_page_size: int, [default=0], optional
1003
+ The page size for relationships.
1004
+ limit_results_by_status: list[str], optional
1005
+ The statuses to limit results by.
1006
+ sequencing_order: str, optional
1007
+ The order to sequence results by.
1008
+ sequencing_property: str, optional
1009
+ The property to sequence results by.
1010
+ output_format: str, default = 'JSON'
1011
+ Type of output to produce:
1012
+ JSON - output standard json
1013
+ MD - output standard markdown with no preamble
1014
+ FORM - output markdown with a preamble for a form
1015
+ REPORT - output markdown with a preamble for a report
1016
+ report_spec: str | dict, optional
1017
+ The report specification to use.
1018
+ start_from: int, [default=0], optional
1019
+ The page number to start from.
1020
+ page_size: int, [default=100], optional
1021
+ The number of items to return in a single page.
1022
+ property_names: list[str], optional
1023
+ The names of properties to search for.
1024
+ body: dict, optional, default = None
1025
+ - additional optional specifications for the search.
1026
+
908
1027
  Returns
909
1028
  -------
910
1029
  [dict] | str
@@ -912,11 +1031,11 @@ class DataDesigner(Client2):
912
1031
 
913
1032
  Raises
914
1033
  ------
915
- InvalidParameterException
1034
+ PyegeriaInvalidParameterException
916
1035
  one of the parameters is null or invalid or
917
- PropertyServerException
1036
+ PyegeriaAPIException
918
1037
  There is a problem adding the element properties to the metadata repository or
919
- UserNotAuthorizedException
1038
+ PyegeriaUnauthorizedException
920
1039
  the requesting user is not authorized to issue this request.
921
1040
 
922
1041
  Notes:
@@ -942,22 +1061,39 @@ class DataDesigner(Client2):
942
1061
 
943
1062
  loop = asyncio.get_event_loop()
944
1063
  response = loop.run_until_complete(
945
- self._async_find_data_structures(search_string, start_from, page_size, starts_with, ends_with, ignore_case,
946
- body, output_format, output_format_set))
1064
+ self._async_find_data_structures(search_string,
1065
+ starts_with=starts_with, ends_with=ends_with, ignore_case=ignore_case,
1066
+ anchor_domain=anchor_domain,
1067
+ metadata_element_type=metadata_element_type,
1068
+ metadata_element_subtypes=metadata_element_subtypes,
1069
+ skip_relationships=skip_relationships,
1070
+ include_only_relationships=include_only_relationships,
1071
+ skip_classified_elements=skip_classified_elements,
1072
+ include_only_classified_elements=include_only_classified_elements,
1073
+ graph_query_depth=graph_query_depth,
1074
+ governance_zone_filter=governance_zone_filter,
1075
+ as_of_time=as_of_time, effective_time=effective_time,
1076
+ relationship_page_size=relationship_page_size,
1077
+ limit_results_by_status=limit_results_by_status,
1078
+ sequencing_order=sequencing_order,
1079
+ sequencing_property=sequencing_property,
1080
+ output_format=output_format, report_spec=report_spec,
1081
+ start_from=start_from, page_size=page_size,
1082
+ property_names=property_names, body=body))
947
1083
  return response
948
1084
 
949
1085
  @dynamic_catch
950
- async def _async_get_data_structures_by_name(self, filter_string: str, classification_names: list[str] = None,
951
- body: dict | FilterRequestBody = None, start_from: int = 0,
1086
+ async def _async_get_data_structures_by_name(self, filter_string: str, classification_names: Optional[list[str]] = None,
1087
+ body: Optional[dict | FilterRequestBody] = None, start_from: int = 0,
952
1088
  page_size: int = 0,
953
1089
  output_format: str = 'JSON',
954
- output_format_set: str | dict = None) -> list | str:
1090
+ report_spec: str | dict = None) -> list | str:
955
1091
  """ Get the list of data structure metadata elements with a matching name to the search string filter.
956
1092
  Async version.
957
1093
 
958
1094
  Parameters
959
1095
  ----------
960
- filter: str
1096
+ filter_string : str
961
1097
  - search string to filter on.
962
1098
  body: dict, optional
963
1099
  - a dictionary containing additional properties for the request.
@@ -967,7 +1103,7 @@ class DataDesigner(Client2):
967
1103
  - maximum number of elements to return.
968
1104
  output_format: str, default = "DICT"
969
1105
  - one of "DICT", "MERMAID" or "JSON"
970
- output_format_set: str | dict, optional, default = None
1106
+ report_spec: str | dict, optional, default = None
971
1107
  - The desired output columns/field options.
972
1108
 
973
1109
  Returns
@@ -977,11 +1113,11 @@ class DataDesigner(Client2):
977
1113
 
978
1114
  Raises
979
1115
  ------
980
- InvalidParameterException
1116
+ PyegeriaInvalidParameterException
981
1117
  one of the parameters is null or invalid or
982
- PropertyServerException
1118
+ PyegeriaAPIException
983
1119
  There is a problem adding the element properties to the metadata repository or
984
- UserNotAuthorizedException
1120
+ PyegeriaUnauthorizedException
985
1121
  the requesting user is not authorized to issue this request.
986
1122
 
987
1123
  Notes
@@ -1005,21 +1141,21 @@ class DataDesigner(Client2):
1005
1141
  filter_string=filter_string,
1006
1142
  classification_names=classification_names,
1007
1143
  start_from=start_from, page_size=page_size,
1008
- output_format=output_format, output_format_set=output_format_set,
1144
+ output_format=output_format, report_spec=report_spec,
1009
1145
  body=body)
1010
1146
 
1011
1147
  return response
1012
1148
 
1013
1149
  @dynamic_catch
1014
- def get_data_structures_by_name(self, filter: str, classification_names: list[str] = None,
1015
- body: dict | FilterRequestBody = None, start_from: int = 0,
1150
+ def get_data_structures_by_name(self, filter_string: str, classification_names: Optional[list[str]] = None,
1151
+ body: Optional[dict | FilterRequestBody] = None, start_from: int = 0,
1016
1152
  page_size: int = max_paging_size, output_format: str = 'JSON',
1017
- output_format_set: str | dict = None) -> list | str:
1153
+ report_spec: str | dict = None) -> list | str:
1018
1154
  """ Get the list of data structure metadata elements with a matching name to the search string filter.
1019
1155
 
1020
1156
  Parameters
1021
1157
  ----------
1022
- filter: str
1158
+ filter_string : str
1023
1159
  - search string to filter on.
1024
1160
  body: dict, optional
1025
1161
  - a dictionary containing additional properties for the request.
@@ -1029,7 +1165,7 @@ class DataDesigner(Client2):
1029
1165
  - maximum number of elements to return.
1030
1166
  output_format: str, default = "DICT"
1031
1167
  - one of "DICT", "MERMAID" or "JSON"
1032
- output_format_set: str | dict, optional, default = None
1168
+ report_spec: str | dict, optional, default = None
1033
1169
  - The desired output columns/field options.
1034
1170
 
1035
1171
  Returns
@@ -1039,11 +1175,11 @@ class DataDesigner(Client2):
1039
1175
 
1040
1176
  Raises
1041
1177
  ------
1042
- InvalidParameterException
1178
+ PyegeriaInvalidParameterException
1043
1179
  one of the parameters is null or invalid or
1044
- PropertyServerException
1180
+ PyegeriaAPIException
1045
1181
  There is a problem adding the element properties to the metadata repository or
1046
- UserNotAuthorizedException
1182
+ PyegeriaUnauthorizedException
1047
1183
  the requesting user is not authorized to issue this request.
1048
1184
 
1049
1185
 
@@ -1051,15 +1187,15 @@ class DataDesigner(Client2):
1051
1187
 
1052
1188
  loop = asyncio.get_event_loop()
1053
1189
  response = loop.run_until_complete(
1054
- self._async_get_data_structures_by_name(filter, classification_names, body, start_from, page_size,
1055
- output_format, output_format_set))
1190
+ self._async_get_data_structures_by_name(filter_string, classification_names, body, start_from, page_size,
1191
+ output_format, report_spec))
1056
1192
  return response
1057
1193
 
1058
1194
  @dynamic_catch
1059
- async def _async_get_data_structure_by_guid(self, guid: str, element_type: str = None,
1060
- body: dict | GetRequestBody = None,
1195
+ async def _async_get_data_structure_by_guid(self, guid: str, element_type: Optional[str] = None,
1196
+ body: Optional[dict | GetRequestBody] = None,
1061
1197
  output_format: str = 'JSON',
1062
- output_format_set: str | dict = None) -> list | str:
1198
+ report_spec: str | dict = None) -> list | str:
1063
1199
  """ Get the data structure metadata elements for the specified GUID.
1064
1200
  Async version.
1065
1201
 
@@ -1073,7 +1209,7 @@ class DataDesigner(Client2):
1073
1209
  - optional request body.
1074
1210
  output_format: str, default = "DICT"
1075
1211
  - one of "DICT", "MERMAID" or "JSON"
1076
- output_format_set: str | dict, optional, default = None
1212
+ report_spec: str | dict, optional, default = None
1077
1213
  - The desired output columns/field options.
1078
1214
 
1079
1215
  Returns
@@ -1083,11 +1219,11 @@ class DataDesigner(Client2):
1083
1219
 
1084
1220
  Raises
1085
1221
  ------
1086
- InvalidParameterException
1222
+ PyegeriaInvalidParameterException
1087
1223
  one of the parameters is null or invalid or
1088
- PropertyServerException
1224
+ PyegeriaAPIException
1089
1225
  There is a problem adding the element properties to the metadata repository or
1090
- UserNotAuthorizedException
1226
+ PyegeriaUnauthorizedException
1091
1227
  the requesting user is not authorized to issue this request.
1092
1228
 
1093
1229
  Notes
@@ -1110,14 +1246,14 @@ class DataDesigner(Client2):
1110
1246
 
1111
1247
  response = await self._async_get_guid_request(url, _type=type,
1112
1248
  _gen_output=self._generate_data_structure_output,
1113
- output_format=output_format, output_format_set=output_format_set,
1249
+ output_format=output_format, report_spec=report_spec,
1114
1250
  body=body)
1115
1251
 
1116
1252
  return response
1117
1253
 
1118
1254
  @dynamic_catch
1119
- def get_data_structure_by_guid(self, guid: str, element_type: str = None, body: str = None,
1120
- output_format: str = 'JSON', output_format_set: str | dict = None) -> list | str:
1255
+ def get_data_structure_by_guid(self, guid: str, element_type: Optional[str] = None, body: Optional[str] = None,
1256
+ output_format: str = 'JSON', report_spec: str | dict = None) -> list | str:
1121
1257
  """ Get the data structure metadata element with the specified unique identifier..
1122
1258
 
1123
1259
  Parameters
@@ -1130,7 +1266,7 @@ class DataDesigner(Client2):
1130
1266
  - optional request body.
1131
1267
  output_format: str, default = "DICT"
1132
1268
  - one of "DICT", "MERMAID" or "JSON"
1133
- output_format_set: str | dict, optional, default = None
1269
+ report_spec: str | dict, optional, default = None
1134
1270
  - The desired output columns/field options.
1135
1271
 
1136
1272
  Returns
@@ -1140,11 +1276,11 @@ class DataDesigner(Client2):
1140
1276
 
1141
1277
  Raises
1142
1278
  ------
1143
- InvalidParameterException
1279
+ PyegeriaInvalidParameterException
1144
1280
  one of the parameters is null or invalid or
1145
- PropertyServerException
1281
+ PyegeriaAPIException
1146
1282
  There is a problem adding the element properties to the metadata repository or
1147
- UserNotAuthorizedException
1283
+ PyegeriaUnauthorizedException
1148
1284
  the requesting user is not authorized to issue this request.
1149
1285
 
1150
1286
  Notes
@@ -1163,7 +1299,7 @@ class DataDesigner(Client2):
1163
1299
 
1164
1300
  loop = asyncio.get_event_loop()
1165
1301
  response = loop.run_until_complete(
1166
- self._async_get_data_structure_by_guid(guid, element_type, body, output_format, output_format_set))
1302
+ self._async_get_data_structure_by_guid(guid, element_type, body, output_format, report_spec))
1167
1303
  return response
1168
1304
 
1169
1305
  def get_data_memberships(self, data_get_fcn: callable, data_struct_guid: str) -> dict | None:
@@ -1276,33 +1412,29 @@ class DataDesigner(Client2):
1276
1412
  assigned_meanings_qnames.append(meaning['relatedElement']['properties']['qualifiedName'])
1277
1413
 
1278
1414
  # extract existing related data structure and data field elements
1279
- other_related_elements = el_struct.get("otherRelatedElements", None)
1280
- if other_related_elements:
1281
- for rel in other_related_elements:
1415
+ part_of_data_struct = el_struct.get("partOfDataStructures", None)
1416
+ if part_of_data_struct:
1417
+ for rel in part_of_data_struct:
1282
1418
  related_element = rel["relatedElement"]
1283
- type = related_element["elementHeader"]["type"]["typeName"]
1284
1419
  guid = related_element["elementHeader"]["guid"]
1285
1420
  qualified_name = related_element["properties"].get("qualifiedName", "") or ""
1286
1421
  display_name = related_element["properties"].get("displayName", "") or ""
1287
- if type == "DataStructure":
1288
- data_structure_guids.append(guid)
1289
- data_structure_names.append(display_name)
1290
- data_structure_qnames.append(qualified_name)
1291
-
1292
- elif type == "DataField":
1293
- parent_guids.append(guid)
1294
- parent_names.append(display_name)
1295
- parent_qnames.append(qualified_name)
1422
+ data_structure_guids.append(guid)
1423
+ data_structure_names.append(display_name)
1424
+ data_structure_qnames.append(qualified_name)
1425
+ # Todo - check the logic here
1426
+ # elif type == "DataField":
1427
+ # parent_guids.append(guid)
1428
+ # parent_names.append(display_name)
1429
+ # parent_qnames.append(qualified_name)
1296
1430
 
1297
1431
  member_of_collections = el_struct.get("memberOfCollections", {})
1298
1432
  for collection in member_of_collections:
1299
- c_type = collection["relatedElement"]["properties"].get("collectionType", "") or ""
1433
+ type_name = collection["relatedElement"]["elementHeader"]["type"].get("typeName", "") or ""
1300
1434
  guid = collection["relatedElement"]["elementHeader"]["guid"]
1301
- name = collection["relatedElement"]["properties"].get("name", "") or ""
1435
+ name = collection["relatedElement"]["properties"].get("displayName", "") or ""
1302
1436
  qualifiedName = collection['relatedElement']["properties"].get("qualifiedName", "") or ""
1303
- classifications = collection["relatedElement"]["elementHeader"]["classifications"]
1304
- for classification in classifications:
1305
- type_name = classification["type"]['typeName']
1437
+ if type_name:
1306
1438
  if type_name == "DataDictionary":
1307
1439
  member_of_data_dicts_guids.append(guid)
1308
1440
  member_of_data_dicts_names.append(name)
@@ -1312,11 +1444,12 @@ class DataDesigner(Client2):
1312
1444
  member_of_data_spec_names.append(name)
1313
1445
  member_of_data_spec_qnames.append(qualifiedName)
1314
1446
 
1315
- member_data_fields = el_struct.get("memberDataFields", {})
1447
+ member_data_fields = el_struct.get("containsDataFields", {})
1316
1448
  for data_field in member_data_fields:
1317
- member_data_field_guids.append(data_field["elementHeader"]["guid"])
1318
- member_data_field_names.append(data_field["properties"]["displayName"])
1319
- member_data_field_qnames.append(data_field["properties"]["qualifiedName"])
1449
+ rel_el = data_field.get("relatedElement",{})
1450
+ member_data_field_guids.append(rel_el["elementHeader"]["guid"])
1451
+ member_data_field_names.append(rel_el["properties"]["displayName"])
1452
+ member_data_field_qnames.append(rel_el["properties"]["qualifiedName"])
1320
1453
 
1321
1454
  data_classes = el_struct.get("assignedDataClasses", {})
1322
1455
  for data_class in data_classes:
@@ -1345,7 +1478,7 @@ class DataDesigner(Client2):
1345
1478
 
1346
1479
  "data_structure_guids": data_structure_guids,
1347
1480
  "data_structure_names": data_structure_names,
1348
- "data_structure_qnames": data_structure_qnames,
1481
+ "in_data_structure": data_structure_qnames,
1349
1482
 
1350
1483
  "assigned_meanings_guids": assigned_meanings_guids,
1351
1484
  "assigned_meanings_names": assigned_meanings_names,
@@ -1369,15 +1502,15 @@ class DataDesigner(Client2):
1369
1502
 
1370
1503
  "member_of_data_dicts_guids": member_of_data_dicts_guids,
1371
1504
  "member_of_data_dicts_names": member_of_data_dicts_names,
1372
- "member_of_data_dicts_qnames": member_of_data_dicts_qnames,
1505
+ "in_data_dictionary": member_of_data_dicts_qnames,
1373
1506
 
1374
1507
  "member_of_data_spec_guids": member_of_data_spec_guids,
1375
1508
  "member_of_data_spec_names": member_of_data_spec_names,
1376
- "member_of_data_spec_qnames": member_of_data_spec_qnames,
1509
+ "in_data_spec": member_of_data_spec_qnames,
1377
1510
 
1378
1511
  "member_data_field_guids": member_data_field_guids,
1379
1512
  "member_data_field_names": member_data_field_names,
1380
- "member_data_field_qnames": member_data_field_qnames,
1513
+ "member_data_fields": member_data_field_qnames,
1381
1514
 
1382
1515
  "mermaid": mermaid,
1383
1516
  }
@@ -1419,11 +1552,11 @@ class DataDesigner(Client2):
1419
1552
 
1420
1553
  Raises
1421
1554
  ------
1422
- InvalidParameterException
1555
+ PyegeriaInvalidParameterException
1423
1556
  one of the parameters is null or invalid or
1424
- PropertyServerException
1557
+ PyegeriaAPIException
1425
1558
  There is a problem adding the element properties to the metadata repository or
1426
- UserNotAuthorizedException
1559
+ PyegeriaUnauthorizedException
1427
1560
  the requesting user is not authorized to issue this request.
1428
1561
 
1429
1562
  Note
@@ -1531,11 +1664,11 @@ class DataDesigner(Client2):
1531
1664
 
1532
1665
  Raises
1533
1666
  ------
1534
- InvalidParameterException
1667
+ PyegeriaInvalidParameterException
1535
1668
  one of the parameters is null or invalid or
1536
- PropertyServerException
1669
+ PyegeriaAPIException
1537
1670
  There is a problem adding the element properties to the metadata repository or
1538
- UserNotAuthorizedException
1671
+ PyegeriaUnauthorizedException
1539
1672
  the requesting user is not authorized to issue this request.
1540
1673
 
1541
1674
  Note
@@ -1646,11 +1779,11 @@ class DataDesigner(Client2):
1646
1779
 
1647
1780
  Raises
1648
1781
  ------
1649
- InvalidParameterException
1782
+ PyegeriaInvalidParameterException
1650
1783
  one of the parameters is null or invalid or
1651
- PropertyServerException
1784
+ PyegeriaAPIException
1652
1785
  There is a problem adding the element properties to the metadata repository or
1653
- UserNotAuthorizedException
1786
+ PyegeriaUnauthorizedException
1654
1787
  the requesting user is not authorized to issue this request.
1655
1788
 
1656
1789
  Note
@@ -1719,11 +1852,11 @@ class DataDesigner(Client2):
1719
1852
 
1720
1853
  Raises
1721
1854
  ------
1722
- InvalidParameterException
1855
+ PyegeriaInvalidParameterException
1723
1856
  one of the parameters is null or invalid or
1724
- PropertyServerException
1857
+ PyegeriaAPIException
1725
1858
  There is a problem adding the element properties to the metadata repository or
1726
- UserNotAuthorizedException
1859
+ PyegeriaUnauthorizedException
1727
1860
  the requesting user is not authorized to issue this request.
1728
1861
 
1729
1862
  Note
@@ -1791,11 +1924,11 @@ class DataDesigner(Client2):
1791
1924
 
1792
1925
  Raises
1793
1926
  ------
1794
- InvalidParameterException
1927
+ PyegeriaInvalidParameterException
1795
1928
  one of the parameters is null or invalid or
1796
- PropertyServerException
1929
+ PyegeriaAPIException
1797
1930
  There is a problem adding the element properties to the metadata repository or
1798
- UserNotAuthorizedException
1931
+ PyegeriaUnauthorizedException
1799
1932
  the requesting user is not authorized to issue this request.
1800
1933
 
1801
1934
  Note
@@ -1864,11 +1997,11 @@ class DataDesigner(Client2):
1864
1997
 
1865
1998
  Raises
1866
1999
  ------
1867
- InvalidParameterException
2000
+ PyegeriaInvalidParameterException
1868
2001
  one of the parameters is null or invalid or
1869
- PropertyServerException
2002
+ PyegeriaAPIException
1870
2003
  There is a problem adding the element properties to the metadata repository or
1871
- UserNotAuthorizedException
2004
+ PyegeriaUnauthorizedException
1872
2005
  the requesting user is not authorized to issue this request.
1873
2006
 
1874
2007
  Note
@@ -1916,7 +2049,7 @@ class DataDesigner(Client2):
1916
2049
 
1917
2050
  @dynamic_catch
1918
2051
  async def _async_link_nested_data_field(self, parent_data_field_guid: str, nested_data_field_guid: str,
1919
- body: dict | NewRelationshipRequestBody = None) -> None:
2052
+ body: Optional[dict | NewRelationshipRequestBody] = None) -> None:
1920
2053
  """
1921
2054
  Connect a nested data field to a data field. Request body is optional. Async version.
1922
2055
 
@@ -1935,11 +2068,11 @@ class DataDesigner(Client2):
1935
2068
 
1936
2069
  Raises
1937
2070
  ------
1938
- InvalidParameterException
2071
+ PyegeriaInvalidParameterException
1939
2072
  one of the parameters is null or invalid or
1940
- PropertyServerException
2073
+ PyegeriaAPIException
1941
2074
  There is a problem adding the element properties to the metadata repository or
1942
- UserNotAuthorizedException
2075
+ PyegeriaUnauthorizedException
1943
2076
  the requesting user is not authorized to issue this request.
1944
2077
 
1945
2078
  Note
@@ -1974,7 +2107,7 @@ class DataDesigner(Client2):
1974
2107
 
1975
2108
  @dynamic_catch
1976
2109
  def link_nested_data_field(self, parent_data_field_guid: str, nested_data_field_guid: str,
1977
- body: dict | NewRelationshipRequestBody = None) -> None:
2110
+ body: Optional[dict | NewRelationshipRequestBody] = None) -> None:
1978
2111
  """
1979
2112
  Connect a nested data class to a data class. Request body is optional.
1980
2113
 
@@ -1993,11 +2126,11 @@ class DataDesigner(Client2):
1993
2126
 
1994
2127
  Raises
1995
2128
  ------
1996
- InvalidParameterException
2129
+ PyegeriaInvalidParameterException
1997
2130
  one of the parameters is null or invalid or
1998
- PropertyServerException
2131
+ PyegeriaAPIException
1999
2132
  There is a problem adding the element properties to the metadata repository or
2000
- UserNotAuthorizedException
2133
+ PyegeriaUnauthorizedException
2001
2134
  the requesting user is not authorized to issue this request.
2002
2135
 
2003
2136
  Note
@@ -2030,7 +2163,7 @@ class DataDesigner(Client2):
2030
2163
 
2031
2164
  @dynamic_catch
2032
2165
  async def _async_detach_nested_data_field(self, parent_data_field_guid: str, nested_data_field_guid: str,
2033
- body: dict | DeleteRequestBody = None) -> None:
2166
+ body: Optional[dict | DeleteRelationshipRequestBody] = None) -> None:
2034
2167
  """
2035
2168
  Detach a nested data class from a data class. Request body is optional. Async version.
2036
2169
 
@@ -2049,11 +2182,11 @@ class DataDesigner(Client2):
2049
2182
 
2050
2183
  Raises
2051
2184
  ------
2052
- InvalidParameterException
2185
+ PyegeriaInvalidParameterException
2053
2186
  one of the parameters is null or invalid or
2054
- PropertyServerException
2187
+ PyegeriaAPIException
2055
2188
  There is a problem adding the element properties to the metadata repository or
2056
- UserNotAuthorizedException
2189
+ PyegeriaUnauthorizedException
2057
2190
  the requesting user is not authorized to issue this request.
2058
2191
 
2059
2192
  Note
@@ -2076,12 +2209,12 @@ class DataDesigner(Client2):
2076
2209
  url = (f"{base_path(self, self.view_server)}/data-fields/{parent_data_field_guid}"
2077
2210
  f"/member-data-fields/{nested_data_field_guid}/detach")
2078
2211
 
2079
- await self._async_delete_request(url, body)
2212
+ await self._async_delete_relationship_request(url, body)
2080
2213
  logger.info(f"Data field {parent_data_field_guid} detached from data structure {nested_data_field_guid}.")
2081
2214
 
2082
2215
  @dynamic_catch
2083
2216
  def detach_nested_data_field(self, parent_data_field_guid: str, nested_data_field_guid: str,
2084
- body: dict | DeleteRequestBody = None) -> None:
2217
+ body: Optional[dict | DeleteRelationshipRequestBody] = None) -> None:
2085
2218
  """
2086
2219
  Detach a nested data class from a data class. Request body is optional.
2087
2220
 
@@ -2100,11 +2233,11 @@ class DataDesigner(Client2):
2100
2233
 
2101
2234
  Raises
2102
2235
  ------
2103
- InvalidParameterException
2236
+ PyegeriaInvalidParameterException
2104
2237
  one of the parameters is null or invalid or
2105
- PropertyServerException
2238
+ PyegeriaAPIException
2106
2239
  There is a problem adding the element properties to the metadata repository or
2107
- UserNotAuthorizedException
2240
+ PyegeriaUnauthorizedException
2108
2241
  the requesting user is not authorized to issue this request.
2109
2242
 
2110
2243
  Note
@@ -2128,7 +2261,7 @@ class DataDesigner(Client2):
2128
2261
  self._async_detach_nested_data_field(parent_data_field_guid, nested_data_field_guid, body))
2129
2262
 
2130
2263
  @dynamic_catch
2131
- async def _async_delete_data_field(self, data_field_guid: str, body: dict | DeleteRequestBody = None,
2264
+ async def _async_delete_data_field(self, data_field_guid: str, body: Optional[dict | DeleteElementRequestBody] = None,
2132
2265
  cascade_delete: bool = False) -> None:
2133
2266
  """
2134
2267
  Delete a data class. Request body is optional. Async version.
@@ -2137,7 +2270,7 @@ class DataDesigner(Client2):
2137
2270
  ----------
2138
2271
  data_field_guid: str
2139
2272
  - the GUID of the data class to delete.
2140
- body: dict, optional
2273
+ body: dict| DeleteElementRequestBody, optional
2141
2274
  - a dictionary containing additional properties.
2142
2275
  cascade: bool, optional
2143
2276
  - if True, then all child data fields will be deleted as well.
@@ -2149,11 +2282,11 @@ class DataDesigner(Client2):
2149
2282
 
2150
2283
  Raises
2151
2284
  ------
2152
- InvalidParameterException
2285
+ PyegeriaInvalidParameterException
2153
2286
  one of the parameters is null or invalid or
2154
- PropertyServerException
2287
+ PyegeriaAPIException
2155
2288
  There is a problem adding the element properties to the metadata repository or
2156
- UserNotAuthorizedException
2289
+ PyegeriaUnauthorizedException
2157
2290
  the requesting user is not authorized to issue this request.
2158
2291
 
2159
2292
  Note
@@ -2162,7 +2295,7 @@ class DataDesigner(Client2):
2162
2295
  Full sample body:
2163
2296
 
2164
2297
  {
2165
- "class": "MetadataSourceRequestBody",
2298
+ "class": "DeleteElementRequestBody",
2166
2299
  "externalSourceGUID": "add guid here",
2167
2300
  "externalSourceName": "add qualified name here",
2168
2301
  "effectiveTime": "{{$isoTimestamp}}",
@@ -2175,11 +2308,11 @@ class DataDesigner(Client2):
2175
2308
 
2176
2309
  url = f"{base_path(self, self.view_server)}/data-fields/{data_field_guid}/delete"
2177
2310
 
2178
- await self._async_delete_request(url, body, cascade_delete)
2311
+ await self._async_delete_element_request(url, body, cascade_delete)
2179
2312
  logger.info(f"Data Field {data_field_guid} deleted.")
2180
2313
 
2181
2314
  @dynamic_catch
2182
- def delete_data_field(self, data_field_guid: str, body: dict | DeleteRequestBody = None,
2315
+ def delete_data_field(self, data_field_guid: str, body: Optional[dict | DeleteElementRequestBody] = None,
2183
2316
  cascade_delete: bool = False) -> None:
2184
2317
  """
2185
2318
  Delete a data class. Request body is optional.
@@ -2188,7 +2321,7 @@ class DataDesigner(Client2):
2188
2321
  ----------
2189
2322
  data_field_guid: str
2190
2323
  - the GUID of the data class the data class to delete.
2191
- body: dict, optional
2324
+ body: dict | DeleteElementRequestBody, optional
2192
2325
  - a dictionary containing additional properties.
2193
2326
  cascade: bool, optional
2194
2327
  - if True, then all child data fields will be deleted as well.
@@ -2200,11 +2333,11 @@ class DataDesigner(Client2):
2200
2333
 
2201
2334
  Raises
2202
2335
  ------
2203
- InvalidParameterException
2336
+ PyegeriaInvalidParameterException
2204
2337
  one of the parameters is null or invalid or
2205
- PropertyServerException
2338
+ PyegeriaAPIException
2206
2339
  There is a problem adding the element properties to the metadata repository or
2207
- UserNotAuthorizedException
2340
+ PyegeriaUnauthorizedException
2208
2341
  the requesting user is not authorized to issue this request.
2209
2342
 
2210
2343
  Note
@@ -2228,7 +2361,7 @@ class DataDesigner(Client2):
2228
2361
 
2229
2362
  @dynamic_catch
2230
2363
  async def _async_find_all_data_fields(self, output_format: str = 'JSON',
2231
- output_format_set: str | dict = None) -> list | str:
2364
+ report_spec: str | dict = None) -> list | str:
2232
2365
  """Returns a list of all known data fields. Async version.
2233
2366
 
2234
2367
  Parameters
@@ -2239,7 +2372,7 @@ class DataDesigner(Client2):
2239
2372
  - maximum number of elements to return.
2240
2373
  output_format: str, default = "DICT"
2241
2374
  - output format of the data structure. Possible values: "DICT", "JSON", "MERMAID".
2242
- output_format_set: str|dict, optional, default = None
2375
+ report_spec: str|dict, optional, default = None
2243
2376
  - The desired output columns/field options.
2244
2377
 
2245
2378
  Returns
@@ -2249,20 +2382,20 @@ class DataDesigner(Client2):
2249
2382
 
2250
2383
  Raises
2251
2384
  ------
2252
- InvalidParameterException
2385
+ PyegeriaInvalidParameterException
2253
2386
  one of the parameters is null or invalid or
2254
- PropertyServerException
2387
+ PyegeriaAPIException
2255
2388
  There is a problem adding the element properties to the metadata repository or
2256
- UserNotAuthorizedException
2389
+ PyegeriaUnauthorizedException
2257
2390
  the requesting user is not authorized to issue this request.
2258
2391
 
2259
2392
  """
2260
2393
 
2261
2394
  return self.find_data_fields(search_string="*", output_format=output_format,
2262
- output_format_set=output_format_set)
2395
+ report_spec=report_spec)
2263
2396
 
2264
2397
  @dynamic_catch
2265
- def find_all_data_fields(self, output_format: str = 'JSON', output_format_set: str | dict = None) -> list | str:
2398
+ def find_all_data_fields(self, output_format: str = 'JSON', report_spec: str | dict = None) -> list | str:
2266
2399
  """ Returns a list of all known data fields.
2267
2400
 
2268
2401
  Parameters
@@ -2273,7 +2406,7 @@ class DataDesigner(Client2):
2273
2406
  - maximum number of elements to return.
2274
2407
  output_format: str, default = "DICT"
2275
2408
  - output format of the data structure. Possible values: "DICT", "JSON", "MERMAID".
2276
- output_format_set: str|dict, optional, default = None
2409
+ report_spec: str|dict, optional, default = None
2277
2410
  - The desired output columns/field options.
2278
2411
 
2279
2412
  Returns
@@ -2283,46 +2416,99 @@ class DataDesigner(Client2):
2283
2416
 
2284
2417
  Raises
2285
2418
  ------
2286
- InvalidParameterException
2419
+ PyegeriaInvalidParameterException
2287
2420
  one of the parameters is null or invalid or
2288
- PropertyServerException
2421
+ PyegeriaAPIException
2289
2422
  There is a problem adding the element properties to the metadata repository or
2290
- UserNotAuthorizedException
2423
+ PyegeriaUnauthorizedException
2291
2424
  the requesting user is not authorized to issue this request.
2292
2425
 
2293
2426
  """
2294
2427
 
2295
2428
  loop = asyncio.get_event_loop()
2296
2429
  response = loop.run_until_complete(
2297
- self._async_find_all_data_fields(output_format, output_format_set))
2430
+ self._async_find_all_data_fields(output_format, report_spec))
2298
2431
  return response
2299
2432
 
2300
2433
  @dynamic_catch
2301
- async def _async_find_data_fields(self, search_string: str, start_from: int = 0, page_size: int = 0,
2302
- starts_with: bool = True, ends_with: bool = False, ignore_case: bool = True,
2303
- body: dict | SearchStringRequestBody = None,
2304
- output_format: str = 'JSON', output_format_set: str | dict = None) -> list | str:
2434
+ async def _async_find_data_fields(self, search_string: str,
2435
+ starts_with: bool = True, ends_with: bool = False,
2436
+ ignore_case: bool = False,
2437
+ anchor_domain: Optional[str] = None,
2438
+ metadata_element_type: Optional[str] = None,
2439
+ metadata_element_subtypes: Optional[list[str]] = None,
2440
+ skip_relationships: Optional[list[str]] = None,
2441
+ include_only_relationships: Optional[list[str]] = None,
2442
+ skip_classified_elements: Optional[list[str]] = None,
2443
+ include_only_classified_elements: Optional[list[str]] = None,
2444
+ graph_query_depth: int = 3,
2445
+ governance_zone_filter: Optional[list[str]] = None, as_of_time: Optional[str] = None,
2446
+ effective_time: Optional[str] = None, relationship_page_size: int = 0,
2447
+ limit_results_by_status: Optional[list[str]] = None, sequencing_order: Optional[str] = None,
2448
+ sequencing_property: Optional[str] = None,
2449
+ output_format: str = "JSON", report_spec: str | dict = None,
2450
+ start_from: int = 0, page_size: int = 100,
2451
+ property_names: Optional[list[str]] = None,
2452
+ body: Optional[dict | SearchStringRequestBody] = None) -> list | str:
2305
2453
  """ Find the list of data class elements that contain the search string.
2306
2454
  Async version.
2307
2455
 
2308
2456
  Parameters
2309
2457
  ----------
2310
- filter: str
2458
+ search_string: str
2311
2459
  - search string to filter on.
2312
- start_from: int, default = 0
2313
- - index of the list to start from (0 for start).
2314
- page_size
2315
- - maximum number of elements to return.
2316
- starts_with: bool, default = True
2317
- - if True, the search string filters from the beginning of the string.
2318
- ends_with: bool, default = False
2319
- - if True, the search string filters from the end of the string.
2320
- ignore_case: bool, default = True
2321
- - If True, the case of the search string is ignored.
2322
- output_format: str, default = "DICT"
2323
- - output format of the data structure. Possible values: "DICT", "JSON", "MERMAID".
2324
- output_format_set: str|dict, optional, default = None
2325
- - The desired output columns/field options.
2460
+ starts_with : bool, [default=True], optional
2461
+ Starts with the supplied string.
2462
+ ends_with : bool, [default=False], optional
2463
+ Ends with the supplied string
2464
+ ignore_case : bool, [default=False], optional
2465
+ Ignore case when searching
2466
+ anchor_domain: str, optional
2467
+ The anchor domain to search in.
2468
+ metadata_element_type: str, optional
2469
+ The type of metadata element to search for.
2470
+ metadata_element_subtypes: list[str], optional
2471
+ The subtypes of metadata element to search for.
2472
+ skip_relationships: list[str], optional
2473
+ The types of relationships to skip.
2474
+ include_only_relationships: list[str], optional
2475
+ The types of relationships to include.
2476
+ skip_classified_elements: list[str], optional
2477
+ The types of classified elements to skip.
2478
+ include_only_classified_elements: list[str], optional
2479
+ The types of classified elements to include.
2480
+ graph_query_depth: int, [default=3], optional
2481
+ The depth of the graph query.
2482
+ governance_zone_filter: list[str], optional
2483
+ The governance zones to search in.
2484
+ as_of_time: str, optional
2485
+ The time to search as of.
2486
+ effective_time: str, optional
2487
+ The effective time to search at.
2488
+ relationship_page_size: int, [default=0], optional
2489
+ The page size for relationships.
2490
+ limit_results_by_status: list[str], optional
2491
+ The statuses to limit results by.
2492
+ sequencing_order: str, optional
2493
+ The order to sequence results by.
2494
+ sequencing_property: str, optional
2495
+ The property to sequence results by.
2496
+ output_format: str, default = 'JSON'
2497
+ Type of output to produce:
2498
+ JSON - output standard json
2499
+ MD - output standard markdown with no preamble
2500
+ FORM - output markdown with a preamble for a form
2501
+ REPORT - output markdown with a preamble for a report
2502
+ report_spec: str | dict, optional
2503
+ The report specification to use.
2504
+ start_from: int, [default=0], optional
2505
+ The page number to start from.
2506
+ page_size: int, [default=100], optional
2507
+ The number of items to return in a single page.
2508
+ property_names: list[str], optional
2509
+ The names of properties to search for.
2510
+ body: dict, optional, default = None
2511
+ - additional optional specifications for the search.
2326
2512
 
2327
2513
  Returns
2328
2514
  -------
@@ -2331,48 +2517,115 @@ class DataDesigner(Client2):
2331
2517
 
2332
2518
  Raises
2333
2519
  ------
2334
- InvalidParameterException
2520
+ PyegeriaInvalidParameterException
2335
2521
  one of the parameters is null or invalid or
2336
- PropertyServerException
2522
+ PyegeriaAPIException
2337
2523
  There is a problem adding the element properties to the metadata repository or
2338
- UserNotAuthorizedException
2524
+ PyegeriaUnauthorizedException
2339
2525
  the requesting user is not authorized to issue this request.
2340
2526
 
2341
2527
  """
2342
2528
 
2343
2529
  url = f"{base_path(self, self.view_server)}/data-fields/by-search-string"
2344
2530
 
2345
- return await self._async_find_request(url, "DataField", self._generate_data_field_output,
2346
- search_string, start_from=start_from, page_size=page_size,
2531
+ return await self._async_find_request(url, "DataField", self._generate_data_field_output, search_string,
2347
2532
  starts_with=starts_with, ends_with=ends_with, ignore_case=ignore_case,
2348
- body=body, output_format=output_format,
2349
- output_format_set=output_format_set)
2533
+ anchor_domain=anchor_domain,
2534
+ metadata_element_type=metadata_element_type,
2535
+ metadata_element_subtypes=metadata_element_subtypes,
2536
+ skip_relationships=skip_relationships,
2537
+ include_only_relationships=include_only_relationships,
2538
+ skip_classified_elements=skip_classified_elements,
2539
+ include_only_classified_elements=include_only_classified_elements,
2540
+ graph_query_depth=graph_query_depth,
2541
+ governance_zone_filter=governance_zone_filter,
2542
+ as_of_time=as_of_time, effective_time=effective_time,
2543
+ relationship_page_size=relationship_page_size,
2544
+ limit_results_by_status=limit_results_by_status,
2545
+ sequencing_order=sequencing_order,
2546
+ sequencing_property=sequencing_property,
2547
+ output_format=output_format, report_spec=report_spec,
2548
+ start_from=start_from, page_size=page_size,
2549
+ property_names=property_names, body=body)
2350
2550
 
2351
2551
  @dynamic_catch
2352
- def find_data_fields(self, search_string: str, start_from: int = 0, page_size: int = max_paging_size,
2353
- starts_with: bool = True, ends_with: bool = False, ignore_case: bool = True,
2354
- body: dict | SearchStringRequestBody = None,
2355
- output_format: str = 'JSON', output_format_set: str | dict = None) -> list | str:
2552
+ def find_data_fields(self, search_string: str,
2553
+ starts_with: bool = True, ends_with: bool = False,
2554
+ ignore_case: bool = False,
2555
+ anchor_domain: Optional[str] = None,
2556
+ metadata_element_type: Optional[str] = None,
2557
+ metadata_element_subtypes: Optional[list[str]] = None,
2558
+ skip_relationships: Optional[list[str]] = None,
2559
+ include_only_relationships: Optional[list[str]] = None,
2560
+ skip_classified_elements: Optional[list[str]] = None,
2561
+ include_only_classified_elements: Optional[list[str]] = None,
2562
+ graph_query_depth: int = 3,
2563
+ governance_zone_filter: Optional[list[str]] = None, as_of_time: Optional[str] = None,
2564
+ effective_time: Optional[str] = None, relationship_page_size: int = 0,
2565
+ limit_results_by_status: Optional[list[str]] = None, sequencing_order: Optional[str] = None,
2566
+ sequencing_property: Optional[str] = None,
2567
+ output_format: str = "JSON", report_spec: str | dict = None,
2568
+ start_from: int = 0, page_size: int = 100,
2569
+ property_names: Optional[list[str]] = None,
2570
+ body: Optional[dict | SearchStringRequestBody] = None) -> list | str:
2356
2571
  """ Retrieve the list of data fields elements that contain the search string filter.
2357
2572
 
2358
2573
  Parameters
2359
2574
  ----------
2360
- filter: str
2575
+ search_string: str
2361
2576
  - search string to filter on.
2362
- start_from: int, default = 0
2363
- - index of the list to start from (0 for start).
2364
- page_size
2365
- - maximum number of elements to return.
2366
- starts_with: bool, default = True
2367
- - if True, the search string filters from the beginning of the string.
2368
- ends_with: bool, default = False
2369
- - if True, the search string filters from the end of the string.
2370
- ignore_case: bool, default = True
2371
- - If True, the case of the search string is ignored.
2372
- output_format: str, default = "DICT"
2373
- - output format of the data structure. Possible values: "DICT", "JSON", "MERMAID".
2374
- output_format_set: str|dict, optional, default = None
2375
- - The desired output columns/field options.
2577
+ starts_with : bool, [default=True], optional
2578
+ Starts with the supplied string.
2579
+ ends_with : bool, [default=False], optional
2580
+ Ends with the supplied string
2581
+ ignore_case : bool, [default=False], optional
2582
+ Ignore case when searching
2583
+ anchor_domain: str, optional
2584
+ The anchor domain to search in.
2585
+ metadata_element_type: str, optional
2586
+ The type of metadata element to search for.
2587
+ metadata_element_subtypes: list[str], optional
2588
+ The subtypes of metadata element to search for.
2589
+ skip_relationships: list[str], optional
2590
+ The types of relationships to skip.
2591
+ include_only_relationships: list[str], optional
2592
+ The types of relationships to include.
2593
+ skip_classified_elements: list[str], optional
2594
+ The types of classified elements to skip.
2595
+ include_only_classified_elements: list[str], optional
2596
+ The types of classified elements to include.
2597
+ graph_query_depth: int, [default=3], optional
2598
+ The depth of the graph query.
2599
+ governance_zone_filter: list[str], optional
2600
+ The governance zones to search in.
2601
+ as_of_time: str, optional
2602
+ The time to search as of.
2603
+ effective_time: str, optional
2604
+ The effective time to search at.
2605
+ relationship_page_size: int, [default=0], optional
2606
+ The page size for relationships.
2607
+ limit_results_by_status: list[str], optional
2608
+ The statuses to limit results by.
2609
+ sequencing_order: str, optional
2610
+ The order to sequence results by.
2611
+ sequencing_property: str, optional
2612
+ The property to sequence results by.
2613
+ output_format: str, default = 'JSON'
2614
+ Type of output to produce:
2615
+ JSON - output standard json
2616
+ MD - output standard markdown with no preamble
2617
+ FORM - output markdown with a preamble for a form
2618
+ REPORT - output markdown with a preamble for a report
2619
+ report_spec: str | dict, optional
2620
+ The report specification to use.
2621
+ start_from: int, [default=0], optional
2622
+ The page number to start from.
2623
+ page_size: int, [default=100], optional
2624
+ The number of items to return in a single page.
2625
+ property_names: list[str], optional
2626
+ The names of properties to search for.
2627
+ body: dict, optional, default = None
2628
+ - additional optional specifications for the search.
2376
2629
 
2377
2630
  Returns
2378
2631
  -------
@@ -2381,11 +2634,11 @@ class DataDesigner(Client2):
2381
2634
 
2382
2635
  Raises
2383
2636
  ------
2384
- InvalidParameterException
2637
+ PyegeriaInvalidParameterException
2385
2638
  one of the parameters is null or invalid or
2386
- PropertyServerException
2639
+ PyegeriaAPIException
2387
2640
  There is a problem adding the element properties to the metadata repository or
2388
- UserNotAuthorizedException
2641
+ PyegeriaUnauthorizedException
2389
2642
  the requesting user is not authorized to issue this request.
2390
2643
 
2391
2644
 
@@ -2393,22 +2646,39 @@ class DataDesigner(Client2):
2393
2646
 
2394
2647
  loop = asyncio.get_event_loop()
2395
2648
  response = loop.run_until_complete(
2396
- self._async_find_data_fields(search_string, start_from, page_size, starts_with, ends_with, ignore_case,
2397
- body, output_format, output_format_set))
2649
+ self._async_find_data_fields(search_string,
2650
+ starts_with=starts_with, ends_with=ends_with, ignore_case=ignore_case,
2651
+ anchor_domain=anchor_domain,
2652
+ metadata_element_type=metadata_element_type,
2653
+ metadata_element_subtypes=metadata_element_subtypes,
2654
+ skip_relationships=skip_relationships,
2655
+ include_only_relationships=include_only_relationships,
2656
+ skip_classified_elements=skip_classified_elements,
2657
+ include_only_classified_elements=include_only_classified_elements,
2658
+ graph_query_depth=graph_query_depth,
2659
+ governance_zone_filter=governance_zone_filter,
2660
+ as_of_time=as_of_time, effective_time=effective_time,
2661
+ relationship_page_size=relationship_page_size,
2662
+ limit_results_by_status=limit_results_by_status,
2663
+ sequencing_order=sequencing_order,
2664
+ sequencing_property=sequencing_property,
2665
+ output_format=output_format, report_spec=report_spec,
2666
+ start_from=start_from, page_size=page_size,
2667
+ property_names=property_names, body=body))
2398
2668
  return response
2399
2669
 
2400
2670
  @dynamic_catch
2401
- async def _async_get_data_fields_by_name(self, filter_string: str, classification_names: list[str] = None,
2671
+ async def _async_get_data_fields_by_name(self, filter_string: str, classification_names: Optional[list[str]] = None,
2402
2672
  body: dict = None | FilterRequestBody, start_from: int = 0,
2403
2673
  page_size: int = 0,
2404
2674
  output_format: str = 'JSON',
2405
- output_format_set: str | dict = None) -> list | str:
2675
+ report_spec: str | dict = None) -> list | str:
2406
2676
  """ Get the list of data class metadata elements with a matching name to the search string filter.
2407
2677
  Async version.
2408
2678
 
2409
2679
  Parameters
2410
2680
  ----------
2411
- filter: str
2681
+ filter_string : str
2412
2682
  - search string to filter on.
2413
2683
  body: dict, optional
2414
2684
  - a dictionary containing additional properties to use in the request.
@@ -2418,7 +2688,7 @@ class DataDesigner(Client2):
2418
2688
  - maximum number of elements to return.
2419
2689
  output_format: str, default = "DICT"
2420
2690
  - output format of the data structure. Possible values: "DICT", "JSON", "MERMAID".
2421
- output_format_set: str|dict, optional, default = None
2691
+ report_spec: str|dict, optional, default = None
2422
2692
  - The desired output columns/field options.
2423
2693
 
2424
2694
  Returns
@@ -2428,11 +2698,11 @@ class DataDesigner(Client2):
2428
2698
 
2429
2699
  Raises
2430
2700
  ------
2431
- InvalidParameterException
2701
+ PyegeriaInvalidParameterException
2432
2702
  one of the parameters is null or invalid or
2433
- PropertyServerException
2703
+ PyegeriaAPIException
2434
2704
  There is a problem adding the element properties to the metadata repository or
2435
- UserNotAuthorizedException
2705
+ PyegeriaUnauthorizedException
2436
2706
  the requesting user is not authorized to issue this request.
2437
2707
  Notes
2438
2708
  -----
@@ -2457,21 +2727,21 @@ class DataDesigner(Client2):
2457
2727
  filter_string=filter_string,
2458
2728
  classification_names=classification_names,
2459
2729
  start_from=start_from, page_size=page_size,
2460
- output_format=output_format, output_format_set=output_format_set,
2730
+ output_format=output_format, report_spec=report_spec,
2461
2731
  body=body)
2462
2732
 
2463
2733
  return response
2464
2734
 
2465
2735
  @dynamic_catch
2466
- def get_data_fields_by_name(self, filter_string: str, classification_names: list[str] = None, body: dict = None,
2736
+ def get_data_fields_by_name(self, filter_string: str, classification_names: Optional[list[str]] = None, body: dict = None,
2467
2737
  start_from: int = 0,
2468
2738
  page_size: int = max_paging_size, output_format: str = 'JSON',
2469
- output_format_set: str | dict = None) -> list | str:
2739
+ report_spec: str | dict = None) -> list | str:
2470
2740
  """ Get the list of data class elements with a matching name to the search string filter.
2471
2741
 
2472
2742
  Parameters
2473
2743
  ----------
2474
- filter: str
2744
+ filter_string : str
2475
2745
  - search string to filter on.
2476
2746
  body: dict, optional
2477
2747
  - a dictionary containing additional properties to use in the request.
@@ -2481,7 +2751,7 @@ class DataDesigner(Client2):
2481
2751
  - maximum number of elements to return.
2482
2752
  output_format: str, default = "DICT"
2483
2753
  - output format of the data structure. Possible values: "DICT", "JSON", "MERMAID".
2484
- output_format_set: str|dict, optional, default = None
2754
+ report_spec: str|dict, optional, default = None
2485
2755
  - The desired output columns/field options.
2486
2756
 
2487
2757
  Returns
@@ -2491,11 +2761,11 @@ class DataDesigner(Client2):
2491
2761
 
2492
2762
  Raises
2493
2763
  ------
2494
- InvalidParameterException
2764
+ PyegeriaInvalidParameterException
2495
2765
  one of the parameters is null or invalid or
2496
- PropertyServerException
2766
+ PyegeriaAPIException
2497
2767
  There is a problem adding the element properties to the metadata repository or
2498
- UserNotAuthorizedException
2768
+ PyegeriaUnauthorizedException
2499
2769
  the requesting user is not authorized to issue this request.
2500
2770
 
2501
2771
  Notes
@@ -2517,15 +2787,15 @@ class DataDesigner(Client2):
2517
2787
 
2518
2788
  loop = asyncio.get_event_loop()
2519
2789
  response = loop.run_until_complete(
2520
- self._async_get_data_fields_by_name(filter, classification_names, body, start_from, page_size,
2521
- output_format, output_format_set))
2790
+ self._async_get_data_fields_by_name(filter_string, classification_names, body, start_from, page_size,
2791
+ output_format, report_spec))
2522
2792
  return response
2523
2793
 
2524
2794
  @dynamic_catch
2525
- async def _async_get_data_field_by_guid(self, guid: str, element_type: str = None,
2526
- body: dict | GetRequestBody = None,
2795
+ async def _async_get_data_field_by_guid(self, guid: str, element_type: Optional[str] = None,
2796
+ body: Optional[dict | GetRequestBody] = None,
2527
2797
  output_format: str = 'JSON',
2528
- output_format_set: str | dict = None) -> list | str:
2798
+ report_spec: str | dict = None) -> list | str:
2529
2799
  """ Get the data class elements for the specified GUID.
2530
2800
  Async version.
2531
2801
 
@@ -2537,7 +2807,7 @@ class DataDesigner(Client2):
2537
2807
  - optional request body.
2538
2808
  output_format: str, default = "DICT"
2539
2809
  - output format of the data structure. Possible values: "DICT", "JSON", "MERMAID".
2540
- output_format_set: str|dict, optional, default = None
2810
+ report_spec: str|dict, optional, default = None
2541
2811
  - The desired output columns/field options.
2542
2812
 
2543
2813
  Returns
@@ -2547,11 +2817,11 @@ class DataDesigner(Client2):
2547
2817
 
2548
2818
  Raises
2549
2819
  ------
2550
- InvalidParameterException
2820
+ PyegeriaInvalidParameterException
2551
2821
  one of the parameters is null or invalid or
2552
- PropertyServerException
2822
+ PyegeriaAPIException
2553
2823
  There is a problem adding the element properties to the metadata repository or
2554
- UserNotAuthorizedException
2824
+ PyegeriaUnauthorizedException
2555
2825
  the requesting user is not authorized to issue this request.
2556
2826
 
2557
2827
 
@@ -2573,14 +2843,14 @@ class DataDesigner(Client2):
2573
2843
  type = element_type if element_type else "DataField"
2574
2844
  response = await self._async_get_guid_request(url, _type=type,
2575
2845
  _gen_output=self._generate_data_field_output,
2576
- output_format=output_format, output_format_set=output_format_set,
2846
+ output_format=output_format, report_spec=report_spec,
2577
2847
  body=body)
2578
2848
 
2579
2849
  return response
2580
2850
 
2581
2851
  @dynamic_catch
2582
- def get_data_field_by_guid(self, guid: str, element_type: str = None, body: str | GetRequestBody = None,
2583
- output_format: str = 'JSON', output_format_set: str | dict = None) -> list | str:
2852
+ def get_data_field_by_guid(self, guid: str, element_type: Optional[str] = None, body: str | GetRequestBody = None,
2853
+ output_format: str = 'JSON', report_spec: str | dict = None) -> list | str:
2584
2854
  """ Get the data structure metadata element with the specified unique identifier..
2585
2855
 
2586
2856
  Parameters
@@ -2591,7 +2861,7 @@ class DataDesigner(Client2):
2591
2861
  - optional request body.
2592
2862
  output_format: str, default = "DICT"
2593
2863
  - output format of the data structure. Possible values: "DICT", "JSON", "MERMAID".
2594
- output_format_set: str|dict, optional, default = None
2864
+ report_spec: str|dict, optional, default = None
2595
2865
  - The desired output columns/field options.
2596
2866
 
2597
2867
  Returns
@@ -2601,11 +2871,11 @@ class DataDesigner(Client2):
2601
2871
 
2602
2872
  Raises
2603
2873
  ------
2604
- InvalidParameterException
2874
+ PyegeriaInvalidParameterException
2605
2875
  one of the parameters is null or invalid or
2606
- PropertyServerException
2876
+ PyegeriaAPIException
2607
2877
  There is a problem adding the element properties to the metadata repository or
2608
- UserNotAuthorizedException
2878
+ PyegeriaUnauthorizedException
2609
2879
  the requesting user is not authorized to issue this request.
2610
2880
 
2611
2881
  Notes
@@ -2624,7 +2894,7 @@ class DataDesigner(Client2):
2624
2894
 
2625
2895
  loop = asyncio.get_event_loop()
2626
2896
  response = loop.run_until_complete(self._async_get_data_field_by_guid(guid, element_type,
2627
- body, output_format, output_format_set))
2897
+ body, output_format, report_spec))
2628
2898
  return response
2629
2899
 
2630
2900
  ###
@@ -2650,11 +2920,11 @@ class DataDesigner(Client2):
2650
2920
 
2651
2921
  Raises
2652
2922
  ------
2653
- InvalidParameterException
2923
+ PyegeriaInvalidParameterException
2654
2924
  one of the parameters is null or invalid or
2655
- PropertyServerException
2925
+ PyegeriaAPIException
2656
2926
  There is a problem adding the element properties to the metadata repository or
2657
- UserNotAuthorizedException
2927
+ PyegeriaUnauthorizedException
2658
2928
  the requesting user is not authorized to issue this request.
2659
2929
 
2660
2930
  Note
@@ -2772,11 +3042,11 @@ class DataDesigner(Client2):
2772
3042
 
2773
3043
  Raises
2774
3044
  ------
2775
- InvalidParameterException
3045
+ PyegeriaInvalidParameterException
2776
3046
  one of the parameters is null or invalid or
2777
- PropertyServerException
3047
+ PyegeriaAPIException
2778
3048
  There is a problem adding the element properties to the metadata repository or
2779
- UserNotAuthorizedException
3049
+ PyegeriaUnauthorizedException
2780
3050
  the requesting user is not authorized to issue this request.
2781
3051
 
2782
3052
  Note
@@ -2896,11 +3166,11 @@ class DataDesigner(Client2):
2896
3166
 
2897
3167
  Raises
2898
3168
  ------
2899
- InvalidParameterException
3169
+ PyegeriaInvalidParameterException
2900
3170
  one of the parameters is null or invalid or
2901
- PropertyServerException
3171
+ PyegeriaAPIException
2902
3172
  There is a problem adding the element properties to the metadata repository or
2903
- UserNotAuthorizedException
3173
+ PyegeriaUnauthorizedException
2904
3174
  the requesting user is not authorized to issue this request.
2905
3175
 
2906
3176
  Note
@@ -2968,11 +3238,11 @@ class DataDesigner(Client2):
2968
3238
 
2969
3239
  Raises
2970
3240
  ------
2971
- InvalidParameterException
3241
+ PyegeriaInvalidParameterException
2972
3242
  one of the parameters is null or invalid or
2973
- PropertyServerException
3243
+ PyegeriaAPIException
2974
3244
  There is a problem adding the element properties to the metadata repository or
2975
- UserNotAuthorizedException
3245
+ PyegeriaUnauthorizedException
2976
3246
  the requesting user is not authorized to issue this request.
2977
3247
 
2978
3248
  Note
@@ -3040,11 +3310,11 @@ class DataDesigner(Client2):
3040
3310
 
3041
3311
  Raises
3042
3312
  ------
3043
- InvalidParameterException
3313
+ PyegeriaInvalidParameterException
3044
3314
  one of the parameters is null or invalid or
3045
- PropertyServerException
3315
+ PyegeriaAPIException
3046
3316
  There is a problem adding the element properties to the metadata repository or
3047
- UserNotAuthorizedException
3317
+ PyegeriaUnauthorizedException
3048
3318
  the requesting user is not authorized to issue this request.
3049
3319
 
3050
3320
  Note
@@ -3110,11 +3380,11 @@ class DataDesigner(Client2):
3110
3380
 
3111
3381
  Raises
3112
3382
  ------
3113
- InvalidParameterException
3383
+ PyegeriaInvalidParameterException
3114
3384
  one of the parameters is null or invalid or
3115
- PropertyServerException
3385
+ PyegeriaAPIException
3116
3386
  There is a problem adding the element properties to the metadata repository or
3117
- UserNotAuthorizedException
3387
+ PyegeriaUnauthorizedException
3118
3388
  the requesting user is not authorized to issue this request.
3119
3389
 
3120
3390
  Note
@@ -3163,7 +3433,7 @@ class DataDesigner(Client2):
3163
3433
 
3164
3434
  @dynamic_catch
3165
3435
  async def _async_link_nested_data_class(self, parent_data_class_guid: str, child_data_class_guid: str,
3166
- body: dict | NewRelationshipRequestBody = None) -> None:
3436
+ body: Optional[dict | NewRelationshipRequestBody] = None) -> None:
3167
3437
  """
3168
3438
  Connect two data classes to show that one is used by the other when it is validating (typically a complex
3169
3439
  data item). Request body is optional. Async version.
@@ -3183,11 +3453,11 @@ class DataDesigner(Client2):
3183
3453
 
3184
3454
  Raises
3185
3455
  ------
3186
- InvalidParameterException
3456
+ PyegeriaInvalidParameterException
3187
3457
  one of the parameters is null or invalid or
3188
- PropertyServerException
3458
+ PyegeriaAPIException
3189
3459
  There is a problem adding the element properties to the metadata repository or
3190
- UserNotAuthorizedException
3460
+ PyegeriaUnauthorizedException
3191
3461
  the requesting user is not authorized to issue this request.
3192
3462
 
3193
3463
  Note
@@ -3214,7 +3484,7 @@ class DataDesigner(Client2):
3214
3484
 
3215
3485
  @dynamic_catch
3216
3486
  def link_nested_data_class(self, parent_data_class_guid: str, child_data_class_guid: str,
3217
- body: dict | NewRelationshipRequestBody = None) -> None:
3487
+ body: Optional[dict | NewRelationshipRequestBody] = None) -> None:
3218
3488
  """
3219
3489
  Connect a nested data class to a data class. Request body is optional.
3220
3490
 
@@ -3233,11 +3503,11 @@ class DataDesigner(Client2):
3233
3503
 
3234
3504
  Raises
3235
3505
  ------
3236
- InvalidParameterException
3506
+ PyegeriaInvalidParameterException
3237
3507
  one of the parameters is null or invalid or
3238
- PropertyServerException
3508
+ PyegeriaAPIException
3239
3509
  There is a problem adding the element properties to the metadata repository or
3240
- UserNotAuthorizedException
3510
+ PyegeriaUnauthorizedException
3241
3511
  the requesting user is not authorized to issue this request.
3242
3512
 
3243
3513
  Note
@@ -3261,7 +3531,7 @@ class DataDesigner(Client2):
3261
3531
 
3262
3532
  @dynamic_catch
3263
3533
  async def _async_detach_nested_data_class(self, parent_data_class_guid: str, child_data_class_guid: str,
3264
- body: dict | DeleteRequestBody = None,
3534
+ body: Optional[dict | DeleteRelationshipRequestBody] = None,
3265
3535
  cascade_delete: bool = False) -> None:
3266
3536
  """
3267
3537
  Detach two nested data classes from each other. Request body is optional. Async version.
@@ -3281,11 +3551,11 @@ class DataDesigner(Client2):
3281
3551
 
3282
3552
  Raises
3283
3553
  ------
3284
- InvalidParameterException
3554
+ PyegeriaInvalidParameterException
3285
3555
  one of the parameters is null or invalid or
3286
- PropertyServerException
3556
+ PyegeriaAPIException
3287
3557
  There is a problem adding the element properties to the metadata repository or
3288
- UserNotAuthorizedException
3558
+ PyegeriaUnauthorizedException
3289
3559
  the requesting user is not authorized to issue this request.
3290
3560
 
3291
3561
  Note
@@ -3308,12 +3578,12 @@ class DataDesigner(Client2):
3308
3578
  url = (f"{base_path(self, self.view_server)}/data-classes/{parent_data_class_guid}"
3309
3579
  f"/nested-data-classes/{child_data_class_guid}/detach")
3310
3580
 
3311
- await self._async_delete_request(url, body, cascade_delete)
3581
+ await self._async_delete_relationship_request(url, body, cascade_delete)
3312
3582
  logger.info(f"Data Class {child_data_class_guid} detached from data structure {parent_data_class_guid}.")
3313
3583
 
3314
3584
  @dynamic_catch
3315
3585
  def detach_nested_data_class(self, parent_data_class_guid: str, child_data_class_guid: str,
3316
- body: dict | DeleteRequestBody = None, cascade_delete: bool = False) -> None:
3586
+ body: Optional[dict | DeleteRelationshipRequestBody] = None, cascade_delete: bool = False) -> None:
3317
3587
  """
3318
3588
  Detach two nested data classes from each other. Request body is optional.
3319
3589
 
@@ -3332,11 +3602,11 @@ class DataDesigner(Client2):
3332
3602
 
3333
3603
  Raises
3334
3604
  ------
3335
- InvalidParameterException
3605
+ PyegeriaInvalidParameterException
3336
3606
  one of the parameters is null or invalid or
3337
- PropertyServerException
3607
+ PyegeriaAPIException
3338
3608
  There is a problem adding the element properties to the metadata repository or
3339
- UserNotAuthorizedException
3609
+ PyegeriaUnauthorizedException
3340
3610
  the requesting user is not authorized to issue this request.
3341
3611
 
3342
3612
  Note
@@ -3361,7 +3631,7 @@ class DataDesigner(Client2):
3361
3631
 
3362
3632
  @dynamic_catch
3363
3633
  async def _async_link_specialized_data_class(self, parent_data_class_guid: str, child_data_class_guid: str,
3364
- body: dict | NewRelationshipRequestBody = None, ) -> None:
3634
+ body: Optional[dict | NewRelationshipRequestBody] = None, ) -> None:
3365
3635
  """
3366
3636
  Connect two data classes to show that one provides a more specialist evaluation. Request body is optional.
3367
3637
  Async version.
@@ -3381,11 +3651,11 @@ class DataDesigner(Client2):
3381
3651
 
3382
3652
  Raises
3383
3653
  ------
3384
- InvalidParameterException
3654
+ PyegeriaInvalidParameterException
3385
3655
  one of the parameters is null or invalid or
3386
- PropertyServerException
3656
+ PyegeriaAPIException
3387
3657
  There is a problem adding the element properties to the metadata repository or
3388
- UserNotAuthorizedException
3658
+ PyegeriaUnauthorizedException
3389
3659
  the requesting user is not authorized to issue this request.
3390
3660
 
3391
3661
  Note
@@ -3412,7 +3682,7 @@ class DataDesigner(Client2):
3412
3682
 
3413
3683
  @dynamic_catch
3414
3684
  def link_specialized_data_class(self, parent_data_class_guid: str, child_data_class_guid: str,
3415
- body: dict | NewRelationshipRequestBody = None) -> None:
3685
+ body: Optional[dict | NewRelationshipRequestBody] = None) -> None:
3416
3686
  """
3417
3687
  Connect two data classes to show that one provides a more specialist evaluation. Request body is optional.
3418
3688
 
@@ -3431,11 +3701,11 @@ class DataDesigner(Client2):
3431
3701
 
3432
3702
  Raises
3433
3703
  ------
3434
- InvalidParameterException
3704
+ PyegeriaInvalidParameterException
3435
3705
  one of the parameters is null or invalid or
3436
- PropertyServerException
3706
+ PyegeriaAPIException
3437
3707
  There is a problem adding the element properties to the metadata repository or
3438
- UserNotAuthorizedException
3708
+ PyegeriaUnauthorizedException
3439
3709
  the requesting user is not authorized to issue this request.
3440
3710
 
3441
3711
  Note
@@ -3460,7 +3730,7 @@ class DataDesigner(Client2):
3460
3730
 
3461
3731
  @dynamic_catch
3462
3732
  async def _async_detach_specialized_data_class(self, parent_data_class_guid: str, child_data_class_guid: str,
3463
- body: dict | DeleteRequestBody = None,
3733
+ body: Optional[dict | DeleteRelationshipRequestBody] = None,
3464
3734
  cascade_delete: bool = False) -> None:
3465
3735
  """
3466
3736
  Detach two data classes from each other. Request body is optional. Async version.
@@ -3480,11 +3750,11 @@ class DataDesigner(Client2):
3480
3750
 
3481
3751
  Raises
3482
3752
  ------
3483
- InvalidParameterException
3753
+ PyegeriaInvalidParameterException
3484
3754
  one of the parameters is null or invalid or
3485
- PropertyServerException
3755
+ PyegeriaAPIException
3486
3756
  There is a problem adding the element properties to the metadata repository or
3487
- UserNotAuthorizedException
3757
+ PyegeriaUnauthorizedException
3488
3758
  the requesting user is not authorized to issue this request.
3489
3759
 
3490
3760
  Note
@@ -3507,12 +3777,12 @@ class DataDesigner(Client2):
3507
3777
  url = (f"{base_path(self, self.view_server)}/data-classes/{parent_data_class_guid}"
3508
3778
  f"/specialized-data-classes/{child_data_class_guid}/detach")
3509
3779
 
3510
- await self._async_delete_request(url, body, cascade_delete)
3780
+ await self._async_delete_relationship_request(url, body, cascade_delete)
3511
3781
  logger.info(f"Data field {child_data_class_guid} detached from data structure {parent_data_class_guid}.")
3512
3782
 
3513
3783
  @dynamic_catch
3514
3784
  def detach_specialized_data_class(self, parent_data_class_guid: str, child_data_class_guid: str,
3515
- body: dict | DeleteRequestBody = None, cascade_delete: bool = False) -> None:
3785
+ body: Optional[dict | DeleteRelationshipRequestBody] = None, cascade_delete: bool = False) -> None:
3516
3786
  """
3517
3787
  Detach two data classes from each other. Request body is optional.
3518
3788
 
@@ -3531,11 +3801,11 @@ class DataDesigner(Client2):
3531
3801
 
3532
3802
  Raises
3533
3803
  ------
3534
- InvalidParameterException
3804
+ PyegeriaInvalidParameterException
3535
3805
  one of the parameters is null or invalid or
3536
- PropertyServerException
3806
+ PyegeriaAPIException
3537
3807
  There is a problem adding the element properties to the metadata repository or
3538
- UserNotAuthorizedException
3808
+ PyegeriaUnauthorizedException
3539
3809
  the requesting user is not authorized to issue this request.
3540
3810
 
3541
3811
  Note
@@ -3560,7 +3830,7 @@ class DataDesigner(Client2):
3560
3830
  cascade_delete))
3561
3831
 
3562
3832
  @dynamic_catch
3563
- async def _async_delete_data_class(self, data_class_guid: str, body: dict | DeleteRequestBody = None,
3833
+ async def _async_delete_data_class(self, data_class_guid: str, body: Optional[dict | DeleteElementRequestBody] = None,
3564
3834
  cascade_delete: bool = False) -> None:
3565
3835
  """
3566
3836
  Delete a data class. Request body is optional. Async version.
@@ -3581,11 +3851,11 @@ class DataDesigner(Client2):
3581
3851
 
3582
3852
  Raises
3583
3853
  ------
3584
- InvalidParameterException
3854
+ PyegeriaInvalidParameterException
3585
3855
  one of the parameters is null or invalid or
3586
- PropertyServerException
3856
+ PyegeriaAPIException
3587
3857
  There is a problem adding the element properties to the metadata repository or
3588
- UserNotAuthorizedException
3858
+ PyegeriaUnauthorizedException
3589
3859
  the requesting user is not authorized to issue this request.
3590
3860
 
3591
3861
  Note
@@ -3607,13 +3877,13 @@ class DataDesigner(Client2):
3607
3877
 
3608
3878
  url = f"{base_path(self, self.view_server)}/data-classes/{data_class_guid}/delete"
3609
3879
 
3610
- await self._async_delete_request(url, body, cascade_delete)
3880
+ await self._async_delete_element_request(url, body, cascade_delete)
3611
3881
  logger.info(f"Data structure {data_class_guid} deleted.")
3612
3882
 
3613
3883
  @dynamic_catch
3614
3884
  def delete_data_class(self,
3615
3885
  data_class_guid: str,
3616
- body: dict | DeleteRequestBody = None,
3886
+ body: Optional[dict | DeleteElementRequestBody] = None,
3617
3887
  cascade_delete: bool = False) -> None:
3618
3888
  """
3619
3889
  Delete a data class. Request body is optional.
@@ -3634,11 +3904,11 @@ class DataDesigner(Client2):
3634
3904
 
3635
3905
  Raises
3636
3906
  ------
3637
- InvalidParameterException
3907
+ PyegeriaInvalidParameterException
3638
3908
  one of the parameters is null or invalid or
3639
- PropertyServerException
3909
+ PyegeriaAPIException
3640
3910
  There is a problem adding the element properties to the metadata repository or
3641
- UserNotAuthorizedException
3911
+ PyegeriaUnauthorizedException
3642
3912
  the requesting user is not authorized to issue this request.
3643
3913
 
3644
3914
  Note
@@ -3663,7 +3933,7 @@ class DataDesigner(Client2):
3663
3933
  @dynamic_catch
3664
3934
  async def _async_find_all_data_classes(self,
3665
3935
  output_format: str = 'JSON',
3666
- output_format_set: str | dict = None) -> list | str:
3936
+ report_spec: str | dict = None) -> list | str:
3667
3937
  """ Returns a list of all data classes. Async version.
3668
3938
 
3669
3939
  Parameters
@@ -3674,7 +3944,7 @@ class DataDesigner(Client2):
3674
3944
  - maximum number of elements to return.
3675
3945
  output_format: str, default = "DICT"
3676
3946
  - output format of the data structure. Possible values: "DICT", "JSON", "MERMAID".
3677
- output_format_set: str|dict, optional, default = None
3947
+ report_spec: str|dict, optional, default = None
3678
3948
  - The desired output columns/field options.
3679
3949
 
3680
3950
 
@@ -3685,11 +3955,11 @@ class DataDesigner(Client2):
3685
3955
 
3686
3956
  Raises
3687
3957
  ------
3688
- InvalidParameterException
3958
+ PyegeriaInvalidParameterException
3689
3959
  one of the parameters is null or invalid or
3690
- PropertyServerException
3960
+ PyegeriaAPIException
3691
3961
  There is a problem adding the element properties to the metadata repository or
3692
- UserNotAuthorizedException
3962
+ PyegeriaUnauthorizedException
3693
3963
  the requesting user is not authorized to issue this request.
3694
3964
 
3695
3965
  """
@@ -3697,11 +3967,11 @@ class DataDesigner(Client2):
3697
3967
  url = f"{base_path(self, self.view_server)}/data-classes/by-search-string"
3698
3968
 
3699
3969
  return self.find_data_classes(search_string="*", output_format=output_format,
3700
- output_format_set=output_format_set)
3970
+ report_spec=report_spec)
3701
3971
 
3702
3972
  @dynamic_catch
3703
3973
  def find_all_data_classes(self,
3704
- output_format: str = 'JSON', output_format_set: str | dict = None) -> list | str:
3974
+ output_format: str = 'JSON', report_spec: str | dict = None) -> list | str:
3705
3975
  """ Returns a list of all data classes.
3706
3976
 
3707
3977
  Parameters
@@ -3712,7 +3982,7 @@ class DataDesigner(Client2):
3712
3982
  - maximum number of elements to return.
3713
3983
  output_format: str, default = "DICT"
3714
3984
  - output format of the data structure. Possible values: "DICT", "JSON", "MERMAID".
3715
- output_format_set: str|dict, optional, default = None
3985
+ report_spec: str|dict, optional, default = None
3716
3986
  - The desired output columns/field options.
3717
3987
 
3718
3988
  Returns
@@ -3722,47 +3992,99 @@ class DataDesigner(Client2):
3722
3992
 
3723
3993
  Raises
3724
3994
  ------
3725
- InvalidParameterException
3995
+ PyegeriaInvalidParameterException
3726
3996
  one of the parameters is null or invalid or
3727
- PropertyServerException
3997
+ PyegeriaAPIException
3728
3998
  There is a problem adding the element properties to the metadata repository or
3729
- UserNotAuthorizedException
3999
+ PyegeriaUnauthorizedException
3730
4000
  the requesting user is not authorized to issue this request.
3731
4001
 
3732
4002
  """
3733
4003
 
3734
4004
  loop = asyncio.get_event_loop()
3735
4005
  response = loop.run_until_complete(
3736
- self._async_find_all_data_classes(output_format, output_format_set))
4006
+ self._async_find_all_data_classes(output_format, report_spec))
3737
4007
  return response
3738
4008
 
3739
4009
  @dynamic_catch
3740
- async def _async_find_data_classes(self, search_string: str, start_from: int = 0, page_size: int = max_paging_size,
3741
- starts_with: bool = True, ends_with: bool = False, ignore_case: bool = True,
3742
- output_format: str = 'JSON', output_format_set: str | dict = None,
3743
- body: dict | SearchStringRequestBody = None) -> list | str:
4010
+ async def _async_find_data_classes(self, search_string: str,
4011
+ starts_with: bool = True, ends_with: bool = False,
4012
+ ignore_case: bool = False,
4013
+ anchor_domain: Optional[str] = None,
4014
+ metadata_element_type: Optional[str] = None,
4015
+ metadata_element_subtypes: Optional[list[str]] = None,
4016
+ skip_relationships: Optional[list[str]] = None,
4017
+ include_only_relationships: Optional[list[str]] = None,
4018
+ skip_classified_elements: Optional[list[str]] = None,
4019
+ include_only_classified_elements: Optional[list[str]] = None,
4020
+ graph_query_depth: int = 3,
4021
+ governance_zone_filter: Optional[list[str]] = None, as_of_time: Optional[str] = None,
4022
+ effective_time: Optional[str] = None, relationship_page_size: int = 0,
4023
+ limit_results_by_status: Optional[list[str]] = None, sequencing_order: Optional[str] = None,
4024
+ sequencing_property: Optional[str] = None,
4025
+ output_format: str = "JSON", report_spec: str | dict = None,
4026
+ start_from: int = 0, page_size: int = 100,
4027
+ property_names: Optional[list[str]] = None,
4028
+ body: Optional[dict | SearchStringRequestBody] = None) -> list | str:
3744
4029
  """ Find the list of data class elements that contain the search string.
3745
4030
  Async version.
3746
4031
 
3747
4032
  Parameters
3748
4033
  ----------
3749
- filter: str
4034
+ search_string: str
3750
4035
  - search string to filter on.
3751
- start_from: int, default = 0
3752
- - index of the list to start from (0 for start).
3753
- page_size
3754
- - maximum number of elements to return.
3755
- starts_with: bool, default = True
3756
- - if True, the search string filters from the beginning of the string.
3757
- ends_with: bool, default = False
3758
- - if True, the search string filters from the end of the string.
3759
- ignore_case: bool, default = True
3760
- - If True, the case of the search string is ignored.
3761
- output_format: str, default = "DICT"
3762
- - output format of the data structure. Possible values: "DICT", "JSON", "MERMAID".
3763
- output_format_set: str|dict, optional, default = None
3764
- - The desired output columns/field options.
3765
-
4036
+ starts_with : bool, [default=True], optional
4037
+ Starts with the supplied string.
4038
+ ends_with : bool, [default=False], optional
4039
+ Ends with the supplied string
4040
+ ignore_case : bool, [default=False], optional
4041
+ Ignore case when searching
4042
+ anchor_domain: str, optional
4043
+ The anchor domain to search in.
4044
+ metadata_element_type: str, optional
4045
+ The type of metadata element to search for.
4046
+ metadata_element_subtypes: list[str], optional
4047
+ The subtypes of metadata element to search for.
4048
+ skip_relationships: list[str], optional
4049
+ The types of relationships to skip.
4050
+ include_only_relationships: list[str], optional
4051
+ The types of relationships to include.
4052
+ skip_classified_elements: list[str], optional
4053
+ The types of classified elements to skip.
4054
+ include_only_classified_elements: list[str], optional
4055
+ The types of classified elements to include.
4056
+ graph_query_depth: int, [default=3], optional
4057
+ The depth of the graph query.
4058
+ governance_zone_filter: list[str], optional
4059
+ The governance zones to search in.
4060
+ as_of_time: str, optional
4061
+ The time to search as of.
4062
+ effective_time: str, optional
4063
+ The effective time to search at.
4064
+ relationship_page_size: int, [default=0], optional
4065
+ The page size for relationships.
4066
+ limit_results_by_status: list[str], optional
4067
+ The statuses to limit results by.
4068
+ sequencing_order: str, optional
4069
+ The order to sequence results by.
4070
+ sequencing_property: str, optional
4071
+ The property to sequence results by.
4072
+ output_format: str, default = 'JSON'
4073
+ Type of output to produce:
4074
+ JSON - output standard json
4075
+ MD - output standard markdown with no preamble
4076
+ FORM - output markdown with a preamble for a form
4077
+ REPORT - output markdown with a preamble for a report
4078
+ report_spec: str | dict, optional
4079
+ The report specification to use.
4080
+ start_from: int, [default=0], optional
4081
+ The page number to start from.
4082
+ page_size: int, [default=100], optional
4083
+ The number of items to return in a single page.
4084
+ property_names: list[str], optional
4085
+ The names of properties to search for.
4086
+ body: dict, optional, default = None
4087
+ - additional optional specifications for the search.
3766
4088
 
3767
4089
  Returns
3768
4090
  -------
@@ -3771,48 +4093,115 @@ class DataDesigner(Client2):
3771
4093
 
3772
4094
  Raises
3773
4095
  ------
3774
- InvalidParameterException
4096
+ PyegeriaInvalidParameterException
3775
4097
  one of the parameters is null or invalid or
3776
- PropertyServerException
4098
+ PyegeriaAPIException
3777
4099
  There is a problem adding the element properties to the metadata repository or
3778
- UserNotAuthorizedException
4100
+ PyegeriaUnauthorizedException
3779
4101
  the requesting user is not authorized to issue this request.
3780
4102
 
3781
4103
  """
3782
4104
 
3783
4105
  url = f"{base_path(self, self.view_server)}/data-classes/by-search-string"
3784
- return await self._async_find_request(url, "DataClass", self._generate_data_class_output,
3785
- search_string, start_from=start_from, page_size=page_size,
4106
+
4107
+ return await self._async_find_request(url, "DataClass", self._generate_data_class_output, search_string,
3786
4108
  starts_with=starts_with, ends_with=ends_with, ignore_case=ignore_case,
3787
- body=body, output_format=output_format,
3788
- output_format_set=output_format_set)
4109
+ anchor_domain=anchor_domain,
4110
+ metadata_element_type=metadata_element_type,
4111
+ metadata_element_subtypes=metadata_element_subtypes,
4112
+ skip_relationships=skip_relationships,
4113
+ include_only_relationships=include_only_relationships,
4114
+ skip_classified_elements=skip_classified_elements,
4115
+ include_only_classified_elements=include_only_classified_elements,
4116
+ graph_query_depth=graph_query_depth,
4117
+ governance_zone_filter=governance_zone_filter,
4118
+ as_of_time=as_of_time, effective_time=effective_time,
4119
+ relationship_page_size=relationship_page_size,
4120
+ limit_results_by_status=limit_results_by_status,
4121
+ sequencing_order=sequencing_order,
4122
+ sequencing_property=sequencing_property,
4123
+ output_format=output_format, report_spec=report_spec,
4124
+ start_from=start_from, page_size=page_size,
4125
+ property_names=property_names, body=body)
3789
4126
 
3790
4127
  @dynamic_catch
3791
- def find_data_classes(self, search_string: str, start_from: int = 0, page_size: int = max_paging_size,
3792
- starts_with: bool = True, ends_with: bool = False, ignore_case: bool = True,
3793
- output_format: str = 'JSON', output_format_set: str | dict = None,
3794
- body: dict | SearchStringRequestBody = None) -> list | str:
3795
- """ Retrieve the list of data fields elements that contain the search string filter.
4128
+ def find_data_classes(self, search_string: str,
4129
+ starts_with: bool = True, ends_with: bool = False,
4130
+ ignore_case: bool = False,
4131
+ anchor_domain: Optional[str] = None,
4132
+ metadata_element_type: Optional[str] = None,
4133
+ metadata_element_subtypes: Optional[list[str]] = None,
4134
+ skip_relationships: Optional[list[str]] = None,
4135
+ include_only_relationships: Optional[list[str]] = None,
4136
+ skip_classified_elements: Optional[list[str]] = None,
4137
+ include_only_classified_elements: Optional[list[str]] = None,
4138
+ graph_query_depth: int = 3,
4139
+ governance_zone_filter: Optional[list[str]] = None, as_of_time: Optional[str] = None,
4140
+ effective_time: Optional[str] = None, relationship_page_size: int = 0,
4141
+ limit_results_by_status: Optional[list[str]] = None, sequencing_order: Optional[str] = None,
4142
+ sequencing_property: Optional[str] = None,
4143
+ output_format: str = "JSON", report_spec: str | dict = None,
4144
+ start_from: int = 0, page_size: int = 100,
4145
+ property_names: Optional[list[str]] = None,
4146
+ body: Optional[dict | SearchStringRequestBody] = None) -> list | str:
4147
+ """ Retrieve the list of data classes elements that contain the search string filter.
3796
4148
 
3797
4149
  Parameters
3798
4150
  ----------
3799
- filter: str
4151
+ search_string: str
3800
4152
  - search string to filter on.
3801
- start_from: int, default = 0
3802
- - index of the list to start from (0 for start).
3803
- page_size
3804
- - maximum number of elements to return.
3805
- starts_with: bool, default = True
3806
- - if True, the search string filters from the beginning of the string.
3807
- ends_with: bool, default = False
3808
- - if True, the search string filters from the end of the string.
3809
- ignore_case: bool, default = True
3810
- - If True, the case of the search string is ignored.
3811
- output_format: str, default = "DICT"
3812
- - output format of the data structure. Possible values: "DICT", "JSON", "MERMAID".
3813
- output_format_set: str|dict, optional, default = None
3814
- - The desired output columns/field options.
3815
-
4153
+ starts_with : bool, [default=True], optional
4154
+ Starts with the supplied string.
4155
+ ends_with : bool, [default=False], optional
4156
+ Ends with the supplied string
4157
+ ignore_case : bool, [default=False], optional
4158
+ Ignore case when searching
4159
+ anchor_domain: str, optional
4160
+ The anchor domain to search in.
4161
+ metadata_element_type: str, optional
4162
+ The type of metadata element to search for.
4163
+ metadata_element_subtypes: list[str], optional
4164
+ The subtypes of metadata element to search for.
4165
+ skip_relationships: list[str], optional
4166
+ The types of relationships to skip.
4167
+ include_only_relationships: list[str], optional
4168
+ The types of relationships to include.
4169
+ skip_classified_elements: list[str], optional
4170
+ The types of classified elements to skip.
4171
+ include_only_classified_elements: list[str], optional
4172
+ The types of classified elements to include.
4173
+ graph_query_depth: int, [default=3], optional
4174
+ The depth of the graph query.
4175
+ governance_zone_filter: list[str], optional
4176
+ The governance zones to search in.
4177
+ as_of_time: str, optional
4178
+ The time to search as of.
4179
+ effective_time: str, optional
4180
+ The effective time to search at.
4181
+ relationship_page_size: int, [default=0], optional
4182
+ The page size for relationships.
4183
+ limit_results_by_status: list[str], optional
4184
+ The statuses to limit results by.
4185
+ sequencing_order: str, optional
4186
+ The order to sequence results by.
4187
+ sequencing_property: str, optional
4188
+ The property to sequence results by.
4189
+ output_format: str, default = 'JSON'
4190
+ Type of output to produce:
4191
+ JSON - output standard json
4192
+ MD - output standard markdown with no preamble
4193
+ FORM - output markdown with a preamble for a form
4194
+ REPORT - output markdown with a preamble for a report
4195
+ report_spec: str | dict, optional
4196
+ The report specification to use.
4197
+ start_from: int, [default=0], optional
4198
+ The page number to start from.
4199
+ page_size: int, [default=100], optional
4200
+ The number of items to return in a single page.
4201
+ property_names: list[str], optional
4202
+ The names of properties to search for.
4203
+ body: dict, optional, default = None
4204
+ - additional optional specifications for the search.
3816
4205
 
3817
4206
  Returns
3818
4207
  -------
@@ -3821,11 +4210,11 @@ class DataDesigner(Client2):
3821
4210
 
3822
4211
  Raises
3823
4212
  ------
3824
- InvalidParameterException
4213
+ PyegeriaInvalidParameterException
3825
4214
  one of the parameters is null or invalid or
3826
- PropertyServerException
4215
+ PyegeriaAPIException
3827
4216
  There is a problem adding the element properties to the metadata repository or
3828
- UserNotAuthorizedException
4217
+ PyegeriaUnauthorizedException
3829
4218
  the requesting user is not authorized to issue this request.
3830
4219
 
3831
4220
 
@@ -3833,22 +4222,39 @@ class DataDesigner(Client2):
3833
4222
 
3834
4223
  loop = asyncio.get_event_loop()
3835
4224
  response = loop.run_until_complete(
3836
- self._async_find_data_classes(search_string, start_from, page_size, starts_with, ends_with, ignore_case,
3837
- output_format, output_format_set, body))
4225
+ self._async_find_data_classes(search_string,
4226
+ starts_with=starts_with, ends_with=ends_with, ignore_case=ignore_case,
4227
+ anchor_domain=anchor_domain,
4228
+ metadata_element_type=metadata_element_type,
4229
+ metadata_element_subtypes=metadata_element_subtypes,
4230
+ skip_relationships=skip_relationships,
4231
+ include_only_relationships=include_only_relationships,
4232
+ skip_classified_elements=skip_classified_elements,
4233
+ include_only_classified_elements=include_only_classified_elements,
4234
+ graph_query_depth=graph_query_depth,
4235
+ governance_zone_filter=governance_zone_filter,
4236
+ as_of_time=as_of_time, effective_time=effective_time,
4237
+ relationship_page_size=relationship_page_size,
4238
+ limit_results_by_status=limit_results_by_status,
4239
+ sequencing_order=sequencing_order,
4240
+ sequencing_property=sequencing_property,
4241
+ output_format=output_format, report_spec=report_spec,
4242
+ start_from=start_from, page_size=page_size,
4243
+ property_names=property_names, body=body))
3838
4244
  return response
3839
4245
 
3840
4246
  @dynamic_catch
3841
4247
  async def _async_get_data_classes_by_name(self, filter_string: str, classification_names: list[str],
3842
- body: dict | FilterRequestBody = None, start_from: int = 0,
4248
+ body: Optional[dict | FilterRequestBody] = None, start_from: int = 0,
3843
4249
  page_size: int = 0,
3844
4250
  output_format: str = 'JSON',
3845
- output_format_set: str | dict = None) -> list | str:
4251
+ report_spec: str | dict = None) -> list | str:
3846
4252
  """ Get the list of data class metadata elements with a matching name to the search string filter.
3847
4253
  Async version.
3848
4254
 
3849
4255
  Parameters
3850
4256
  ----------
3851
- filter: str
4257
+ filter_string : str
3852
4258
  - search string to filter on.
3853
4259
  body: dict, optional
3854
4260
  - a dictionary containing additional properties to use in the request.
@@ -3858,7 +4264,7 @@ class DataDesigner(Client2):
3858
4264
  - maximum number of elements to return.
3859
4265
  output_format: str, default = "DICT"
3860
4266
  - output format of the data structure. Possible values: "DICT", "JSON", "MERMAID".
3861
- output_format_set: str|dict, optional, default = None
4267
+ report_spec: str|dict, optional, default = None
3862
4268
  - The desired output columns/field options.
3863
4269
 
3864
4270
  Returns
@@ -3868,11 +4274,11 @@ class DataDesigner(Client2):
3868
4274
 
3869
4275
  Raises
3870
4276
  ------
3871
- InvalidParameterException
4277
+ PyegeriaInvalidParameterException
3872
4278
  one of the parameters is null or invalid or
3873
- PropertyServerException
4279
+ PyegeriaAPIException
3874
4280
  There is a problem adding the element properties to the metadata repository or
3875
- UserNotAuthorizedException
4281
+ PyegeriaUnauthorizedException
3876
4282
  the requesting user is not authorized to issue this request.
3877
4283
  Notes
3878
4284
  -----
@@ -3897,21 +4303,21 @@ class DataDesigner(Client2):
3897
4303
  filter_string=filter_string,
3898
4304
  classification_names=classification_names,
3899
4305
  start_from=start_from, page_size=page_size,
3900
- output_format=output_format, output_format_set=output_format_set,
4306
+ output_format=output_format, report_spec=report_spec,
3901
4307
  body=body)
3902
4308
 
3903
4309
  return response
3904
4310
 
3905
4311
  @dynamic_catch
3906
- def get_data_classes_by_name(self, filter_string: str, classification_names: list[str] = None,
3907
- body: dict | FilterRequestBody = None, start_from: int = 0,
4312
+ def get_data_classes_by_name(self, filter_string: str, classification_names: Optional[list[str]] = None,
4313
+ body: Optional[dict | FilterRequestBody] = None, start_from: int = 0,
3908
4314
  page_size: int = max_paging_size, output_format: str = 'JSON',
3909
- output_format_set: str | dict = None) -> list | str:
4315
+ report_spec: str | dict = None) -> list | str:
3910
4316
  """ Get the list of data class elements with a matching name to the search string filter.
3911
4317
 
3912
4318
  Parameters
3913
4319
  ----------
3914
- filter: str
4320
+ filter_string : str
3915
4321
  - search string to filter on.
3916
4322
  body: dict, optional
3917
4323
  - a dictionary containing additional properties to use in the request.
@@ -3921,7 +4327,7 @@ class DataDesigner(Client2):
3921
4327
  - maximum number of elements to return.
3922
4328
  output_format: str, default = "DICT"
3923
4329
  - output format of the data structure. Possible values: "DICT", "JSON", "MERMAID".
3924
- output_format_set: str|dict, optional, default = None
4330
+ report_spec: str|dict, optional, default = None
3925
4331
  - The desired output columns/field options.
3926
4332
 
3927
4333
 
@@ -3932,11 +4338,11 @@ class DataDesigner(Client2):
3932
4338
 
3933
4339
  Raises
3934
4340
  ------
3935
- InvalidParameterException
4341
+ PyegeriaInvalidParameterException
3936
4342
  one of the parameters is null or invalid or
3937
- PropertyServerException
4343
+ PyegeriaAPIException
3938
4344
  There is a problem adding the element properties to the metadata repository or
3939
- UserNotAuthorizedException
4345
+ PyegeriaUnauthorizedException
3940
4346
  the requesting user is not authorized to issue this request.
3941
4347
 
3942
4348
  Notes
@@ -3958,15 +4364,15 @@ class DataDesigner(Client2):
3958
4364
  loop = asyncio.get_event_loop()
3959
4365
  response = loop.run_until_complete(
3960
4366
  self._async_get_data_classes_by_name(filter_string, classification_names, body,
3961
- start_from, page_size, output_format, output_format_set
4367
+ start_from, page_size, output_format, report_spec
3962
4368
  ))
3963
4369
  return response
3964
4370
 
3965
4371
  @dynamic_catch
3966
- async def _async_get_data_class_by_guid(self, guid: str, element_type: str = None,
3967
- body: dict | GetRequestBody = None,
4372
+ async def _async_get_data_class_by_guid(self, guid: str, element_type: Optional[str] = None,
4373
+ body: Optional[dict | GetRequestBody] = None,
3968
4374
  output_format: str = 'JSON',
3969
- output_format_set: str | dict = None) -> list | str:
4375
+ report_spec: str | dict = None) -> list | str:
3970
4376
  """ Get the data class elements for the specified GUID.
3971
4377
  Async version.
3972
4378
 
@@ -3978,7 +4384,7 @@ class DataDesigner(Client2):
3978
4384
  - optional request body.
3979
4385
  output_format: str, default = "DICT"
3980
4386
  - output format of the data structure. Possible values: "DICT", "JSON", "MERMAID".
3981
- output_format_set: str|dict, optional, default = None
4387
+ report_spec: str|dict, optional, default = None
3982
4388
  - The desired output columns/field options.
3983
4389
 
3984
4390
  Returns
@@ -3988,11 +4394,11 @@ class DataDesigner(Client2):
3988
4394
 
3989
4395
  Raises
3990
4396
  ------
3991
- InvalidParameterException
4397
+ PyegeriaInvalidParameterException
3992
4398
  one of the parameters is null or invalid or
3993
- PropertyServerException
4399
+ PyegeriaAPIException
3994
4400
  There is a problem adding the element properties to the metadata repository or
3995
- UserNotAuthorizedException
4401
+ PyegeriaUnauthorizedException
3996
4402
  the requesting user is not authorized to issue this request.
3997
4403
 
3998
4404
  Notes
@@ -4014,14 +4420,14 @@ class DataDesigner(Client2):
4014
4420
 
4015
4421
  response = await self._async_get_guid_request(url, _type=type,
4016
4422
  _gen_output=self._generate_data_class_output,
4017
- output_format=output_format, output_format_set=output_format_set,
4423
+ output_format=output_format, report_spec=report_spec,
4018
4424
  body=body)
4019
4425
  return response
4020
4426
 
4021
4427
  @dynamic_catch
4022
- def get_data_class_by_guid(self, guid: str, element_type: str = None, body: dict | FilterRequestBody = None,
4428
+ def get_data_class_by_guid(self, guid: str, element_type: Optional[str] = None, body: Optional[dict | FilterRequestBody] = None,
4023
4429
  output_format: str = 'JSON',
4024
- output_format_set: str | dict = None) -> list | str:
4430
+ report_spec: str | dict = None) -> list | str:
4025
4431
  """ Get the data structure metadata element with the specified unique identifier..
4026
4432
 
4027
4433
  Parameters
@@ -4032,7 +4438,7 @@ class DataDesigner(Client2):
4032
4438
  - optional request body.
4033
4439
  output_format: str, default = "DICT"
4034
4440
  - output format of the data structure. Possible values: "DICT", "JSON", "MERMAID".
4035
- output_format_set: str|dict, optional, default = None
4441
+ report_spec: str|dict, optional, default = None
4036
4442
  - The desired output columns/field options.
4037
4443
 
4038
4444
  Returns
@@ -4042,11 +4448,11 @@ class DataDesigner(Client2):
4042
4448
 
4043
4449
  Raises
4044
4450
  ------
4045
- InvalidParameterException
4451
+ PyegeriaInvalidParameterException
4046
4452
  one of the parameters is null or invalid or
4047
- PropertyServerException
4453
+ PyegeriaAPIException
4048
4454
  There is a problem adding the element properties to the metadata repository or
4049
- UserNotAuthorizedException
4455
+ PyegeriaUnauthorizedException
4050
4456
  the requesting user is not authorized to issue this request.
4051
4457
 
4052
4458
  Notes
@@ -4065,7 +4471,7 @@ class DataDesigner(Client2):
4065
4471
 
4066
4472
  loop = asyncio.get_event_loop()
4067
4473
  response = loop.run_until_complete(
4068
- self._async_get_data_class_by_guid(guid, element_type, body, output_format, output_format_set))
4474
+ self._async_get_data_class_by_guid(guid, element_type, body, output_format, report_spec))
4069
4475
  return response
4070
4476
 
4071
4477
  ###
@@ -4075,7 +4481,7 @@ class DataDesigner(Client2):
4075
4481
  #
4076
4482
  @dynamic_catch
4077
4483
  async def _async_link_data_class_definition(self, data_definition_guid: str, data_class_guid: str,
4078
- body: dict | NewRelationshipRequestBody = None) -> None:
4484
+ body: Optional[dict | NewRelationshipRequestBody] = None) -> None:
4079
4485
  """
4080
4486
  Connect an element that is part of a data design to a data class to show that the data class should be used as
4081
4487
  the specification for the data values when interpreting the data definition. Request body is optional.
@@ -4095,11 +4501,11 @@ class DataDesigner(Client2):
4095
4501
 
4096
4502
  Raises
4097
4503
  ------
4098
- InvalidParameterException
4504
+ PyegeriaInvalidParameterException
4099
4505
  one of the parameters is null or invalid or
4100
- PropertyServerException
4506
+ PyegeriaAPIException
4101
4507
  There is a problem adding the element properties to the metadata repository or
4102
- UserNotAuthorizedException
4508
+ PyegeriaUnauthorizedException
4103
4509
  the requesting user is not authorized to issue this request.
4104
4510
 
4105
4511
  Note
@@ -4126,7 +4532,7 @@ class DataDesigner(Client2):
4126
4532
 
4127
4533
  @dynamic_catch
4128
4534
  def link_data_class_definition(self, data_definition_guid: str, data_class_guid: str,
4129
- body: dict | NewRelationshipRequestBody = None) -> None:
4535
+ body: Optional[dict | NewRelationshipRequestBody] = None) -> None:
4130
4536
  """
4131
4537
  Connect an element that is part of a data design to a data class to show that the data class should be used as
4132
4538
  the specification for the data values when interpreting the data definition. Request body is optional.
@@ -4146,11 +4552,11 @@ class DataDesigner(Client2):
4146
4552
 
4147
4553
  Raises
4148
4554
  ------
4149
- InvalidParameterException
4555
+ PyegeriaInvalidParameterException
4150
4556
  one of the parameters is null or invalid or
4151
- PropertyServerException
4557
+ PyegeriaAPIException
4152
4558
  There is a problem adding the element properties to the metadata repository or
4153
- UserNotAuthorizedException
4559
+ PyegeriaUnauthorizedException
4154
4560
  the requesting user is not authorized to issue this request.
4155
4561
 
4156
4562
  Note
@@ -4174,7 +4580,7 @@ class DataDesigner(Client2):
4174
4580
 
4175
4581
  @dynamic_catch
4176
4582
  async def _async_detach_data_class_definition(self, data_definition_guid: str, data_class_guid: str,
4177
- body: dict | DeleteRequestBody = None,
4583
+ body: Optional[dict | DeleteRelationshipRequestBody] = None,
4178
4584
  cascade_delete: bool = False) -> None:
4179
4585
  """
4180
4586
  Detach a data definition from a data class. Request body is optional. Async version.
@@ -4194,11 +4600,11 @@ class DataDesigner(Client2):
4194
4600
 
4195
4601
  Raises
4196
4602
  ------
4197
- InvalidParameterException
4603
+ PyegeriaInvalidParameterException
4198
4604
  one of the parameters is null or invalid or
4199
- PropertyServerException
4605
+ PyegeriaAPIException
4200
4606
  There is a problem adding the element properties to the metadata repository or
4201
- UserNotAuthorizedException
4607
+ PyegeriaUnauthorizedException
4202
4608
  the requesting user is not authorized to issue this request.
4203
4609
 
4204
4610
  Note
@@ -4221,12 +4627,12 @@ class DataDesigner(Client2):
4221
4627
  url = (f"{base_path(self, self.view_server)}/data-definitions/{data_definition_guid}"
4222
4628
  f"/data-class-definition/{data_class_guid}/detach")
4223
4629
 
4224
- await self._async_delete_request(url, body, cascade_delete)
4630
+ await self._async_delete_relationship_request(url, body, cascade_delete)
4225
4631
  logger.info(f"Data class {data_class_guid} detached from data definition {data_definition_guid}.")
4226
4632
 
4227
4633
  @dynamic_catch
4228
4634
  def detach_data_class_definition(self, data_definition_guid: str, data_class_guid: str,
4229
- body: dict | DeleteRequestBody = None, cascade_delete: bool = False) -> None:
4635
+ body: Optional[dict | DeleteRelationshipRequestBody] = None, cascade_delete: bool = False) -> None:
4230
4636
  """
4231
4637
  Detach a data definition from a data class. Request body is optional.
4232
4638
 
@@ -4245,11 +4651,11 @@ class DataDesigner(Client2):
4245
4651
 
4246
4652
  Raises
4247
4653
  ------
4248
- InvalidParameterException
4654
+ PyegeriaInvalidParameterException
4249
4655
  one of the parameters is null or invalid or
4250
- PropertyServerException
4656
+ PyegeriaAPIException
4251
4657
  There is a problem adding the element properties to the metadata repository or
4252
- UserNotAuthorizedException
4658
+ PyegeriaUnauthorizedException
4253
4659
  the requesting user is not authorized to issue this request.
4254
4660
 
4255
4661
  Note
@@ -4275,7 +4681,7 @@ class DataDesigner(Client2):
4275
4681
 
4276
4682
  @dynamic_catch
4277
4683
  async def _async_link_semantic_definition(self, data_definition_guid: str, glossary_term_guid: str,
4278
- body: dict | NewRelationshipRequestBody = None) -> None:
4684
+ body: Optional[dict | NewRelationshipRequestBody] = None) -> None:
4279
4685
  """
4280
4686
  Connect an element that is part of a data design to a glossary term to show that the term should be used as
4281
4687
  the semantic definition for the data values when interpreting the data definition. Request body is optional.
@@ -4296,11 +4702,11 @@ class DataDesigner(Client2):
4296
4702
 
4297
4703
  Raises
4298
4704
  ------
4299
- InvalidParameterException
4705
+ PyegeriaInvalidParameterException
4300
4706
  one of the parameters is null or invalid or
4301
- PropertyServerException
4707
+ PyegeriaAPIException
4302
4708
  There is a problem adding the element properties to the metadata repository or
4303
- UserNotAuthorizedException
4709
+ PyegeriaUnauthorizedException
4304
4710
  the requesting user is not authorized to issue this request.
4305
4711
 
4306
4712
  Note
@@ -4327,7 +4733,7 @@ class DataDesigner(Client2):
4327
4733
 
4328
4734
  @dynamic_catch
4329
4735
  def link_semantic_definition(self, data_definition_guid: str, glossary_term_guid: str,
4330
- body: dict | NewRelationshipRequestBody = None) -> None:
4736
+ body: Optional[dict | NewRelationshipRequestBody] = None) -> None:
4331
4737
  """
4332
4738
  Connect an element that is part of a data design to a glossary term to show that the term should be used as
4333
4739
  the semantic definition for the data values when interpreting the data definition. Request body is optional.
@@ -4348,11 +4754,11 @@ class DataDesigner(Client2):
4348
4754
 
4349
4755
  Raises
4350
4756
  ------
4351
- InvalidParameterException
4757
+ PyegeriaInvalidParameterException
4352
4758
  one of the parameters is null or invalid or
4353
- PropertyServerException
4759
+ PyegeriaAPIException
4354
4760
  There is a problem adding the element properties to the metadata repository or
4355
- UserNotAuthorizedException
4761
+ PyegeriaUnauthorizedException
4356
4762
  the requesting user is not authorized to issue this request.
4357
4763
 
4358
4764
  Note
@@ -4376,7 +4782,7 @@ class DataDesigner(Client2):
4376
4782
 
4377
4783
  @dynamic_catch
4378
4784
  async def _async_detach_semantic_definition(self, data_definition_guid: str, glossary_term_guid: str,
4379
- body: dict | DeleteRequestBody = None,
4785
+ body: Optional[dict | DeleteRelationshipRequestBody] = None,
4380
4786
  cascade_delete: bool = False) -> None:
4381
4787
  """
4382
4788
  Detach a data definition from a glossary term. Request body is optional. Async version.
@@ -4396,11 +4802,11 @@ class DataDesigner(Client2):
4396
4802
 
4397
4803
  Raises
4398
4804
  ------
4399
- InvalidParameterException
4805
+ PyegeriaInvalidParameterException
4400
4806
  one of the parameters is null or invalid or
4401
- PropertyServerException
4807
+ PyegeriaAPIException
4402
4808
  There is a problem adding the element properties to the metadata repository or
4403
- UserNotAuthorizedException
4809
+ PyegeriaUnauthorizedException
4404
4810
  the requesting user is not authorized to issue this request.
4405
4811
 
4406
4812
  Note
@@ -4422,12 +4828,12 @@ class DataDesigner(Client2):
4422
4828
 
4423
4829
  url = (f"{base_path(self, self.view_server)}/data-definitions/{data_definition_guid}"
4424
4830
  f"/semantic-definition/{glossary_term_guid}/detach")
4425
- await self._async_delete_request(url, body, cascade_delete)
4831
+ await self._async_delete_relationship_request(url, body, cascade_delete)
4426
4832
  logger.info(f"Data definition {data_definition_guid} detached from term {glossary_term_guid}.")
4427
4833
 
4428
4834
  @dynamic_catch
4429
4835
  def detach_semantic_definition(self, data_definition_guid: str, glossary_term_guid: str,
4430
- body: dict | DeleteRequestBody = None, cascade_delete: bool = False) -> None:
4836
+ body: Optional[dict | DeleteRelationshipRequestBody] = None, cascade_delete: bool = False) -> None:
4431
4837
  """
4432
4838
  Detach a data definition from a glossary term. Request body is optional.
4433
4839
 
@@ -4446,11 +4852,11 @@ class DataDesigner(Client2):
4446
4852
 
4447
4853
  Raises
4448
4854
  ------
4449
- InvalidParameterException
4855
+ PyegeriaInvalidParameterException
4450
4856
  one of the parameters is null or invalid or
4451
- PropertyServerException
4857
+ PyegeriaAPIException
4452
4858
  There is a problem adding the element properties to the metadata repository or
4453
- UserNotAuthorizedException
4859
+ PyegeriaUnauthorizedException
4454
4860
  the requesting user is not authorized to issue this request.
4455
4861
 
4456
4862
  Note
@@ -4477,7 +4883,7 @@ class DataDesigner(Client2):
4477
4883
 
4478
4884
 
4479
4885
  async def _async_link_certification_type_to_data_structure(self, certification_type_guid: str,
4480
- data_structure_guid: str, body: dict | NewRelationshipRequestBody = None) -> None:
4886
+ data_structure_guid: str, body: Optional[dict | NewRelationshipRequestBody] = None) -> None:
4481
4887
  """
4482
4888
  Connect a certification type to a data structure to guide the survey action service (that checks the data
4483
4889
  quality of a data resource as part of certifying it with the supplied certification type) to the definition
@@ -4501,11 +4907,11 @@ class DataDesigner(Client2):
4501
4907
 
4502
4908
  Raises
4503
4909
  ------
4504
- InvalidParameterException
4910
+ PyegeriaInvalidParameterException
4505
4911
  one of the parameters is null or invalid or
4506
- PropertyServerException
4912
+ PyegeriaAPIException
4507
4913
  There is a problem adding the element properties to the metadata repository or
4508
- UserNotAuthorizedException
4914
+ PyegeriaUnauthorizedException
4509
4915
  the requesting user is not authorized to issue this request.
4510
4916
 
4511
4917
  Note
@@ -4554,11 +4960,11 @@ class DataDesigner(Client2):
4554
4960
 
4555
4961
  Raises
4556
4962
  ------
4557
- InvalidParameterException
4963
+ PyegeriaInvalidParameterException
4558
4964
  one of the parameters is null or invalid or
4559
- PropertyServerException
4965
+ PyegeriaAPIException
4560
4966
  There is a problem adding the element properties to the metadata repository or
4561
- UserNotAuthorizedException
4967
+ PyegeriaUnauthorizedException
4562
4968
  the requesting user is not authorized to issue this request.
4563
4969
 
4564
4970
  Note
@@ -4582,7 +4988,7 @@ class DataDesigner(Client2):
4582
4988
  self._async_link_certification_type_to_data_structure(certification_type_guid, data_structure_guid, body))
4583
4989
 
4584
4990
  async def _async_detach_certification_type_from_data_structure(self, certification_type_guid: str,
4585
- data_structure_guid: str, body: dict | DeleteRequestBody = None, cascade_delete: bool = False) -> None:
4991
+ data_structure_guid: str, body: Optional[dict | DeleteRelationshipRequestBody] = None, cascade_delete: bool = False) -> None:
4586
4992
  """
4587
4993
  Detach a data structure from a certification type. Request body is optional. Async version.
4588
4994
 
@@ -4601,11 +5007,11 @@ class DataDesigner(Client2):
4601
5007
 
4602
5008
  Raises
4603
5009
  ------
4604
- InvalidParameterException
5010
+ PyegeriaInvalidParameterException
4605
5011
  one of the parameters is null or invalid or
4606
- PropertyServerException
5012
+ PyegeriaAPIException
4607
5013
  There is a problem adding the element properties to the metadata repository or
4608
- UserNotAuthorizedException
5014
+ PyegeriaUnauthorizedException
4609
5015
  the requesting user is not authorized to issue this request.
4610
5016
 
4611
5017
  Note
@@ -4627,12 +5033,12 @@ class DataDesigner(Client2):
4627
5033
  url = (f"{base_path(self, self.view_server)}/certification-stypes/{certification_type_guid}"
4628
5034
  f"/data-structure-definition/{data_structure_guid}/detach")
4629
5035
 
4630
- await self._async_delete_request(url, body, cascade_delete)
5036
+ await self._async_delete_relationship_request(url, body, cascade_delete)
4631
5037
  logger.info(f"Certification type {certification_type_guid} detached from data structure {data_structure_guid}.")
4632
5038
 
4633
5039
 
4634
5040
  def detach_certification_type_from_data_structure(self, certification_type_guid: str, data_structure_guid: str,
4635
- body: dict | DeleteRequestBody= None, cascade_delete: bool = False) -> None:
5041
+ body: dict | DeleteRelationshipRequestBody= None, cascade_delete: bool = False) -> None:
4636
5042
  """
4637
5043
  Detach a data structure from a certification type. Request body is optional.
4638
5044
 
@@ -4651,11 +5057,11 @@ class DataDesigner(Client2):
4651
5057
 
4652
5058
  Raises
4653
5059
  ------
4654
- InvalidParameterException
5060
+ PyegeriaInvalidParameterException
4655
5061
  one of the parameters is null or invalid or
4656
- PropertyServerException
5062
+ PyegeriaAPIException
4657
5063
  There is a problem adding the element properties to the metadata repository or
4658
- UserNotAuthorizedException
5064
+ PyegeriaUnauthorizedException
4659
5065
  the requesting user is not authorized to issue this request.
4660
5066
 
4661
5067
  Note
@@ -4682,120 +5088,163 @@ class DataDesigner(Client2):
4682
5088
 
4683
5089
 
4684
5090
 
4685
- def _extract_data_structure_properties(self, element: dict) -> dict:
4686
- """
4687
- Extract common properties from a data structure element.
4688
-
4689
- Args:
4690
- element (dict): The data structure element
4691
-
4692
- Returns:
4693
- dict: Dictionary of extracted properties
4694
- """
4695
- props = _extract_referenceable_properties(element)
4696
-
4697
- props['properties'] = element.get('properties', {})
4698
-
4699
- props['namespace'] = props['properties'].get("namespace", "") or ""
4700
-
4701
- classification_names = []
4702
- for c in props['classifications']:
4703
- classification_names.append(c.get("classificationName", None))
4704
- props['classifications'] = classification_names
4705
-
4706
- # Now lets get the related elements
4707
- associated_elements = self.get_data_rel_elements_dict(element)
4708
- props['data_specs'] = associated_elements.get("member_of_data_spec_qnames", [])
4709
-
4710
- # data_structures = associated_elements.get("member_of_data_struct_qnames", [])
4711
- props['assigned_meanings'] = associated_elements.get("assigned_meanings_qnames", [])
4712
- props['parent_names'] = associated_elements.get("parent_qnames", [])
4713
- props['member_data_fields'] = associated_elements.get("member_data_field_qnames", [])
4714
-
4715
- props['mermaid'] = element.get('mermaidGraph', "") or ""
4716
-
4717
- return props
4718
-
4719
- def _extract_data_class_properties(self, element: dict) -> dict:
4720
- """
4721
- Extract common properties from a data class element.
4722
-
4723
- Args:
4724
- element (dict): The data class element
4725
-
4726
- Returns:
4727
- dict: Dictionary of extracted properties
4728
- """
4729
- props = _extract_referenceable_properties(element)
4730
- properties = element.get('properties', {})
4731
- props['properties'] = properties
4732
-
4733
- classification_names = []
4734
- for c in props['classifications']:
4735
- classification_names.append(c.get("classificationName", None))
4736
- props['classifications'] = classification_names
4737
-
4738
- props['namespace'] = props['properties'].get("namespace", "") or ""
4739
-
4740
- props['data_type'] = properties.get('dataType', "") or ""
4741
- props['match_property_names'] = properties.get('matchPropertyNames', []) or []
4742
- props['match_threshold'] = properties.get('matchThreshold', 0)
4743
- props['allow_duplicate_values'] = properties.get('allowDuplicateValues', False)
4744
- props['is_case_sensitive'] = properties.get('isCaseSensitive', False)
4745
- props['is_nullable'] = properties.get('isNullable', False)
4746
-
4747
- # Now lets get the related elements
4748
- associated_elements = self.get_data_rel_elements_dict(element)
4749
- props['data_dictionaries'] = associated_elements.get("member_of_data_dicts_qnames", [])
4750
- props['assigned_meanings'] = associated_elements.get("assigned_meanings_qnames", [])
4751
- props['parent_names'] = associated_elements.get("parent_qnames", [])
4752
- props['nested_data_classes'] = associated_elements.get("nested_data_class_qnames", [])
4753
- props['specialized_data_classes'] = associated_elements.get("specialized_data_class_qnames", [])
4754
- props['mermaid'] = element.get('mermaidGraph', "") or ""
4755
-
4756
- return props
4757
-
4758
- def _extract_data_field_properties(self, element: dict) -> dict:
4759
- """
4760
- Extract common properties from a data field element.
4761
-
4762
- Args:
4763
- element (dict): The data field element
4764
-
4765
- Returns:
4766
- dict: Dictionary of extracted properties
4767
- """
4768
- props = _extract_referenceable_properties(element)
4769
-
4770
- props['properties'] = element.get('properties', {})
4771
- props['namespace'] = props['properties'].get("namespace", "") or ""
4772
- properties = element.get('properties', {})
4773
-
4774
- classification_names = []
4775
- for c in props['classifications']:
4776
- classification_names.append(c.get("classificationName", None))
4777
- props['classifications'] = classification_names
4778
-
4779
- props['is_nullable'] = properties.get('isNullable', False)
4780
- props['data_type'] = properties.get('dataType', "") or ""
4781
- props['minimum_length'] = properties.get('minimumLength', 0)
4782
- props['length'] = properties.get('length', 0)
4783
- props['precision'] = properties.get('precision', 0)
4784
- props['ordered_values'] = properties.get('orderedValues', False)
4785
- props['sort_order'] = properties.get('sortOrder', "") or ""
4786
-
4787
- # Now lets get the related elements
4788
- associated_elements = self.get_data_rel_elements_dict(element)
4789
- props['data_dictionaries'] = associated_elements.get("member_of_data_dicts_qnames", [])
4790
- props['data_structures'] = associated_elements.get("data_structure_qnames", [])
4791
- props['assigned_meanings'] = associated_elements.get("assigned_meanings_qnames", [])
4792
- props['parent_names'] = associated_elements.get("parent_qnames", [])
4793
- props['data_class'] = associated_elements.get("data_class_qnames", [])
4794
- props['mermaid'] = element.get('mermaidGraph', "") or ""
4795
-
4796
- return props
4797
-
4798
- def _generate_basic_structured_output(self, elements: dict, filter: str, output_format: str,
5091
+ def _extract_data_structure_properties(self, element: dict, columns_struct: dict) -> dict:
5092
+ """Extractor for Data Structure elements with related overlay.
5093
+
5094
+ Pattern:
5095
+ - Populate common columns via populate_common_columns.
5096
+ - Derive related properties using get_data_rel_elements_dict from the element body.
5097
+ - Overlay values into matching columns' 'value' fields, handling formats as list or dict.
5098
+ - Return the enriched columns_struct.
5099
+ """
5100
+ col_data = populate_common_columns(element, columns_struct)
5101
+
5102
+ try:
5103
+ related_map = self.get_data_rel_elements_dict(element)
5104
+ except Exception:
5105
+ related_map = {}
5106
+
5107
+ if isinstance(related_map, dict) and related_map:
5108
+ try:
5109
+ formats = col_data.get("formats") if isinstance(col_data, dict) else None
5110
+ if isinstance(formats, list):
5111
+ targets = formats
5112
+ elif isinstance(formats, dict):
5113
+ inner = formats.get("formats") if isinstance(formats.get("formats"), (dict, list)) else None
5114
+ if isinstance(inner, list):
5115
+ targets = inner
5116
+ elif isinstance(inner, dict):
5117
+ targets = [inner]
5118
+ else:
5119
+ targets = [formats]
5120
+ else:
5121
+ targets = []
5122
+
5123
+ if targets:
5124
+ for fmt in targets:
5125
+ cols = fmt.get("attributes", []) if isinstance(fmt, dict) else []
5126
+ for col in cols:
5127
+ key = col.get("key") if isinstance(col, dict) else None
5128
+ if key and key in related_map:
5129
+ col["value"] = related_map.get(key)
5130
+ else:
5131
+ cols = col_data.get("attributes", []) if isinstance(col_data, dict) else []
5132
+ for col in cols:
5133
+ key = col.get("key") if isinstance(col, dict) else None
5134
+ if key and key in related_map:
5135
+ col["value"] = related_map.get(key)
5136
+ except Exception:
5137
+ pass
5138
+
5139
+ return col_data
5140
+
5141
+
5142
+ def _extract_data_class_properties(self, element: dict,columns_struct: dict) -> dict:
5143
+ """Extractor for Data Class elements with related overlay, mirroring Data Field pattern."""
5144
+ col_data = populate_common_columns(element, columns_struct)
5145
+
5146
+ try:
5147
+ related_map = self.get_data_rel_elements_dict(element)
5148
+ except Exception:
5149
+ related_map = {}
5150
+
5151
+ if isinstance(related_map, dict) and related_map:
5152
+ try:
5153
+ formats = col_data.get("formats") if isinstance(col_data, dict) else None
5154
+ if isinstance(formats, list):
5155
+ targets = formats
5156
+ elif isinstance(formats, dict):
5157
+ inner = formats.get("formats") if isinstance(formats.get("formats"), (dict, list)) else None
5158
+ if isinstance(inner, list):
5159
+ targets = inner
5160
+ elif isinstance(inner, dict):
5161
+ targets = [inner]
5162
+ else:
5163
+ targets = [formats]
5164
+ else:
5165
+ targets = []
5166
+
5167
+ if targets:
5168
+ for fmt in targets:
5169
+ cols = fmt.get("attributes", []) if isinstance(fmt, dict) else []
5170
+ for col in cols:
5171
+ key = col.get("key") if isinstance(col, dict) else None
5172
+ if key and key in related_map:
5173
+ col["value"] = related_map.get(key)
5174
+ else:
5175
+ cols = col_data.get("attributes", []) if isinstance(col_data, dict) else []
5176
+ for col in cols:
5177
+ key = col.get("key") if isinstance(col, dict) else None
5178
+ if key and key in related_map:
5179
+ col["value"] = related_map.get(key)
5180
+ except Exception:
5181
+ pass
5182
+
5183
+ return col_data
5184
+
5185
+ def _extract_data_field_properties(self, element: dict, columns_struct: dict) -> dict:
5186
+ """Extractor for Data Field elements.
5187
+
5188
+ Steps:
5189
+ - Populate base/referenceable/common properties into columns_struct via populate_common_columns.
5190
+ - Derive related properties using get_data_rel_elements_dict from the element body.
5191
+ - For each column in columns_struct, if its 'key' matches a key from the related dict, set its 'value'.
5192
+ - Return the enriched columns_struct.
5193
+ """
5194
+ # 1) Populate common columns first (header, properties, basic relationships, mermaid)
5195
+ col_data = populate_common_columns(element, columns_struct)
5196
+
5197
+ # 2) Build a map of related properties/elements from the body. The Data Designer methods
5198
+ # return a body that may include keys like assignedMeanings, otherRelatedElements,
5199
+ # memberOfCollections, memberDataFields, assignedDataClasses, nestedDataClasses, etc.
5200
+ try:
5201
+ related_map = self.get_data_rel_elements_dict(element)
5202
+ except Exception:
5203
+ related_map = {}
5204
+
5205
+ if isinstance(related_map, dict) and related_map:
5206
+ # 3) Walk the configured columns and overlay values when the key matches an entry from related_map
5207
+ try:
5208
+ formats = col_data.get("formats") if isinstance(col_data, dict) else None
5209
+ if isinstance(formats, list):
5210
+ targets = formats
5211
+ elif isinstance(formats, dict):
5212
+ # Handle dict variant. It may be a single format dict or a wrapper containing 'formats'.
5213
+ # Examples seen:
5214
+ # { 'attributes': [...] }
5215
+ # { 'types': 'ALL', 'attributes': [...] }
5216
+ # { 'formats': { 'attributes': [...] } }
5217
+ inner = formats.get("formats") if isinstance(formats.get("formats"), dict | list) else None
5218
+ if isinstance(inner, list):
5219
+ targets = inner
5220
+ elif isinstance(inner, dict):
5221
+ targets = [inner]
5222
+ else:
5223
+ targets = [formats]
5224
+ else:
5225
+ targets = []
5226
+
5227
+ if targets:
5228
+ for fmt in targets:
5229
+ cols = fmt.get("attributes", []) if isinstance(fmt, dict) else []
5230
+ for col in cols:
5231
+ key = col.get("key") if isinstance(col, dict) else None
5232
+ if key and key in related_map:
5233
+ col["value"] = related_map.get(key)
5234
+ else:
5235
+ # If attributes are on the top-level (non-standard), attempt to handle gracefully
5236
+ cols = col_data.get("attributes", []) if isinstance(col_data, dict) else []
5237
+ for col in cols:
5238
+ key = col.get("key") if isinstance(col, dict) else None
5239
+ if key and key in related_map:
5240
+ col["value"] = related_map.get(key)
5241
+ except Exception:
5242
+ # Do not fail rendering due to overlay issues; keep the base columns
5243
+ pass
5244
+
5245
+ return col_data
5246
+
5247
+ def _generate_basic_structured_output(self, elements: dict, filter_string: str, type_name: str = None ,output_format: str = 'DICT',
4799
5248
  columns_struct: dict = None) -> str | list:
4800
5249
  """
4801
5250
  Generate output in the specified format for the given elements.
@@ -4837,9 +5286,9 @@ class DataDesigner(Client2):
4837
5286
  columns_struct,
4838
5287
  )
4839
5288
 
4840
- def _generate_data_structure_output(self, elements: dict | list[dict], filter: str = None,
5289
+ def _generate_data_structure_output(self, elements: dict | list[dict], filter_string: Optional[str] = None, type: Optional[str] = None,
4841
5290
  output_format: str = "DICT",
4842
- output_format_set: str | dict = None) -> str | list:
5291
+ report_spec: str | dict = None) -> str | list:
4843
5292
  """
4844
5293
  Generate output for data structures in the specified format.
4845
5294
 
@@ -4852,14 +5301,14 @@ class DataDesigner(Client2):
4852
5301
  Formatted output as string or list of dictionaries
4853
5302
  """
4854
5303
  entity_type = "Data Structure"
4855
- if output_format_set is None:
4856
- output_format_set = select_output_format_set(entity_type, output_format)
4857
-
4858
- if output_format_set:
4859
- if isinstance(output_format_set, str):
4860
- output_formats = select_output_format_set(output_format_set, output_format)
4861
- if isinstance(output_format_set, dict):
4862
- output_formats = get_output_format_type_match(output_format_set, output_format)
5304
+ if report_spec is None:
5305
+ report_spec = select_report_spec(entity_type, output_format)
5306
+
5307
+ if report_spec:
5308
+ if isinstance(report_spec, str):
5309
+ output_formats = select_report_spec(report_spec, output_format)
5310
+ elif isinstance(report_spec, dict):
5311
+ output_formats = get_report_spec_match(report_spec, output_format)
4863
5312
  else:
4864
5313
  output_formats = None
4865
5314
  logger.trace(f"Executing _generate_data_structure_output for {entity_type}: {output_formats}")
@@ -4872,8 +5321,8 @@ class DataDesigner(Client2):
4872
5321
  output_formats,
4873
5322
  )
4874
5323
 
4875
- def _generate_data_class_output(self, elements: dict | list[dict], filter: str = None, output_format: str = "DICT",
4876
- output_format_set: str | dict = None) -> str | list:
5324
+ def _generate_data_class_output(self, elements: dict | list[dict], filter_string: Optional[str] = None, type: Optional[str] = None, output_format: str = "DICT",
5325
+ report_spec: str | dict = None) -> str | list:
4877
5326
  """
4878
5327
  Generate output for data classes in the specified format.
4879
5328
 
@@ -4881,20 +5330,20 @@ class DataDesigner(Client2):
4881
5330
  elements: Dictionary or list of dictionaries containing data class elements
4882
5331
  filter: The search string used to find the elements
4883
5332
  output_format: The desired output format (MD, FORM, REPORT, LIST, DICT, MERMAID, HTML)
4884
- output_format_set: Optional output format set
5333
+ report_spec: Optional output format set
4885
5334
  - Option column/attribute selection and definition.
4886
5335
  Returns:
4887
5336
  Formatted output as either a string or list of dictionaries
4888
5337
  """
4889
5338
  entity_type = "Data Class"
4890
- if output_format_set is None:
4891
- output_format_set = select_output_format_set(entity_type, output_format)
4892
-
4893
- if output_format_set:
4894
- if isinstance(output_format_set, str):
4895
- output_formats = select_output_format_set(output_format_set, output_format)
4896
- if isinstance(output_format_set, dict):
4897
- output_formats = get_output_format_type_match(output_format_set, output_format)
5339
+ if report_spec is None:
5340
+ report_spec = select_report_spec(entity_type, output_format)
5341
+
5342
+ if report_spec:
5343
+ if isinstance(report_spec, str):
5344
+ output_formats = select_report_spec(report_spec, output_format)
5345
+ if isinstance(report_spec, dict):
5346
+ output_formats = get_report_spec_match(report_spec, output_format)
4898
5347
  else:
4899
5348
  output_formats = None
4900
5349
  logger.trace(f"Executing _generate_data_class_output for {entity_type}: {output_formats}")
@@ -4907,8 +5356,8 @@ class DataDesigner(Client2):
4907
5356
  output_formats,
4908
5357
  )
4909
5358
 
4910
- def _generate_data_field_output(self, elements: dict | list[dict], filter: str = None, output_format: str = "DICT",
4911
- output_format_set: str | dict = None) -> str | list:
5359
+ def _generate_data_field_output(self, elements: dict | list[dict], filter_string: Optional[str] = None, type: Optional[str] = None, output_format: str = "DICT",
5360
+ report_spec: str | dict = None) -> str | list:
4912
5361
  """
4913
5362
  Generate output for data fields in the specified format.
4914
5363
 
@@ -4916,21 +5365,21 @@ class DataDesigner(Client2):
4916
5365
  elements: Dictionary or list of dictionaries containing data field elements
4917
5366
  filter: The search string used to find the elements
4918
5367
  output_format: The desired output format (MD, FORM, REPORT, LIST, DICT, MERMAID, HTML)
4919
- output_format_set: str|dict, Optional, default = None
5368
+ report_spec: str|dict, Optional, default = None
4920
5369
  - Option column/attribute selection and definition.
4921
5370
 
4922
5371
  Returns:
4923
5372
  Formatted output as a string or list of dictionaries
4924
5373
  """
4925
- entity_type = "Data Field"
4926
- if output_format_set is None:
4927
- output_format_set = select_output_format_set(entity_type, output_format)
5374
+ entity_type = "Data-Fields"
5375
+ if report_spec is None:
5376
+ report_spec = select_report_spec(entity_type, output_format)
4928
5377
 
4929
- if output_format_set:
4930
- if isinstance(output_format_set, str):
4931
- output_formats = select_output_format_set(output_format_set, output_format)
4932
- if isinstance(output_format_set, dict):
4933
- output_formats = get_output_format_type_match(output_format_set, output_format)
5378
+ if report_spec:
5379
+ if isinstance(report_spec, str):
5380
+ output_formats = select_report_spec(report_spec, output_format)
5381
+ if isinstance(report_spec, dict):
5382
+ output_formats = get_report_spec_match(report_spec, output_format)
4934
5383
  else:
4935
5384
  output_formats = None
4936
5385
  logger.trace(f"Executing _generate_data_field_output for {entity_type}: {output_formats}")
@@ -4943,6 +5392,12 @@ class DataDesigner(Client2):
4943
5392
  output_formats,
4944
5393
  )
4945
5394
 
5395
+ def _extract_additional_data_struct_properties(self, element, columns_struct):
5396
+ return None
5397
+ def _extract_additional_data_field_properties(self, element, columns_struct):
5398
+ return None
5399
+ def _extract_additional_data_class_properties(self, element, columns_struct):
5400
+ return None
4946
5401
 
4947
5402
  if __name__ == "__main__":
4948
5403
  print("Data Designer")