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.
- commands/__init__.py +24 -0
- commands/cat/Dr-Egeria_md-orig.py +2 -2
- commands/cat/collection_actions.py +197 -0
- commands/cat/dr_egeria_command_help.py +137 -38
- commands/cat/dr_egeria_jupyter.py +7 -7
- commands/cat/dr_egeria_md.py +10 -267
- commands/cat/exp_list_glossaries.py +11 -14
- commands/cat/get_asset_graph.py +37 -267
- commands/cat/{get_collection.py → get_collection_tree.py} +10 -18
- commands/cat/get_project_dependencies.py +14 -14
- commands/cat/get_project_structure.py +15 -14
- commands/cat/get_tech_type_elements.py +16 -116
- commands/cat/glossary_actions.py +145 -298
- commands/cat/list_assets.py +3 -11
- commands/cat/list_cert_types.py +17 -63
- commands/cat/list_collections.py +17 -139
- commands/cat/list_deployed_catalogs.py +15 -27
- commands/cat/list_deployed_database_schemas.py +27 -43
- commands/cat/list_deployed_databases.py +16 -31
- commands/cat/list_deployed_servers.py +35 -54
- commands/cat/list_glossaries.py +18 -17
- commands/cat/list_projects.py +10 -12
- commands/cat/list_tech_type_elements.py +21 -37
- commands/cat/list_tech_types.py +13 -25
- commands/cat/list_terms.py +38 -79
- commands/cat/list_todos.py +4 -11
- commands/cat/list_user_ids.py +3 -10
- commands/cat/my_reports.py +559 -0
- commands/cat/run_report.py +394 -0
- commands/cat/{list_format_set.py → run_report_orig.py} +136 -44
- commands/cli/egeria.py +182 -219
- commands/cli/egeria_cat.py +32 -59
- commands/cli/egeria_my.py +13 -0
- commands/cli/egeria_ops.py +69 -74
- commands/cli/egeria_tech.py +17 -93
- commands/{cat → deprecated}/list_data_designer.py +2 -4
- commands/{cat → deprecated}/list_data_structures_full.py +3 -6
- commands/deprecated/old_get_asset_graph.py +315 -0
- commands/my/__init__.py +0 -2
- commands/my/list_my_profile.py +27 -34
- commands/my/list_my_roles.py +1 -7
- commands/my/monitor_my_todos.py +1 -7
- commands/my/monitor_open_todos.py +6 -7
- commands/my/todo_actions.py +4 -5
- commands/ops/__init__.py +0 -2
- commands/ops/gov_server_actions.py +17 -21
- commands/ops/list_archives.py +17 -38
- commands/ops/list_catalog_targets.py +33 -40
- commands/ops/load_archive.py +14 -11
- commands/ops/{monitor_engine_activity_c.py → monitor_active_engine_activity.py} +51 -82
- commands/ops/{monitor_integ_daemon_status.py → monitor_daemon_status.py} +35 -55
- commands/ops/monitor_engine_activity.py +79 -77
- commands/ops/{monitor_gov_eng_status.py → monitor_engine_status.py} +10 -7
- commands/ops/monitor_platform_status.py +38 -50
- commands/ops/monitor_server_startup.py +6 -11
- commands/ops/monitor_server_status.py +7 -11
- commands/ops/orig_monitor_server_list.py +8 -8
- commands/ops/orig_monitor_server_status.py +1 -5
- commands/ops/refresh_integration_daemon.py +5 -5
- commands/ops/restart_integration_daemon.py +5 -5
- commands/ops/table_integ_daemon_status.py +6 -6
- commands/ops/x_engine_actions.py +7 -7
- commands/tech/__init__.py +0 -2
- commands/tech/{generic_actions.py → element_actions.py} +6 -11
- commands/tech/get_element_info.py +20 -29
- commands/tech/get_guid_info.py +23 -42
- commands/tech/get_tech_details.py +20 -35
- commands/tech/get_tech_type_template.py +28 -39
- commands/tech/list_all_om_type_elements.py +24 -30
- commands/tech/list_all_om_type_elements_x.py +22 -28
- commands/tech/list_all_related_elements.py +19 -28
- commands/tech/list_anchored_elements.py +22 -30
- commands/tech/list_asset_types.py +19 -24
- commands/tech/list_elements_by_classification_by_property_value.py +26 -32
- commands/tech/list_elements_by_property_value.py +19 -25
- commands/tech/list_elements_by_property_value_x.py +20 -28
- commands/tech/list_elements_for_classification.py +28 -41
- commands/tech/list_gov_action_processes.py +16 -27
- commands/tech/list_information_supply_chains.py +22 -30
- commands/tech/list_registered_services.py +14 -26
- commands/tech/list_related_elements_with_prop_value.py +15 -25
- commands/tech/list_related_specification.py +1 -4
- commands/tech/list_relationship_types.py +15 -25
- commands/tech/list_relationships.py +20 -36
- commands/tech/list_solution_blueprints.py +28 -33
- commands/tech/list_solution_components.py +23 -29
- commands/tech/list_solution_roles.py +21 -32
- commands/tech/list_tech_templates.py +51 -54
- commands/tech/list_valid_metadata_values.py +5 -9
- commands/tech/table_tech_templates.py +2 -6
- commands/tech/x_list_related_elements.py +1 -4
- examples/GeoSpatial Products Example.py +524 -0
- examples/Jupyter Notebooks/P-egeria-server-config.ipynb +2137 -0
- examples/Jupyter Notebooks/README.md +2 -0
- examples/Jupyter Notebooks/common/P-environment-check.ipynb +115 -0
- examples/Jupyter Notebooks/common/__init__.py +14 -0
- examples/Jupyter Notebooks/common/common-functions.ipynb +4694 -0
- examples/Jupyter Notebooks/common/environment-check.ipynb +52 -0
- examples/Jupyter Notebooks/common/globals.ipynb +184 -0
- examples/Jupyter Notebooks/common/globals.py +154 -0
- examples/Jupyter Notebooks/common/orig_globals.py +152 -0
- examples/format_sets/all_format_sets.json +910 -0
- examples/format_sets/custom_format_sets.json +268 -0
- examples/format_sets/subset_format_sets.json +187 -0
- examples/format_sets_save_load_example.py +291 -0
- examples/jacquard_data_sets.py +129 -0
- examples/output_formats_example.py +193 -0
- examples/test_jacquard_data_sets.py +54 -0
- examples/test_jacquard_data_sets_scenarios.py +94 -0
- md_processing/__init__.py +33 -24
- md_processing/command_dispatcher.py +33 -0
- md_processing/command_mapping.py +221 -0
- md_processing/data/commands/commands_data_designer.json +537 -0
- md_processing/data/commands/commands_external_reference.json +733 -0
- md_processing/data/commands/commands_feedback.json +155 -0
- md_processing/data/commands/commands_general.json +204 -0
- md_processing/data/commands/commands_glossary.json +218 -0
- md_processing/data/commands/commands_governance.json +3678 -0
- md_processing/data/commands/commands_product_manager.json +865 -0
- md_processing/data/commands/commands_project.json +642 -0
- md_processing/data/commands/commands_solution_architect.json +366 -0
- md_processing/data/commands.json +6489 -30060
- md_processing/data/{commands-working.json → commands_working.json} +9304 -13513
- md_processing/data/gened_report_specs.py +6584 -0
- md_processing/data/generated_format_sets.json +6533 -0
- md_processing/data/generated_format_sets_old.json +4137 -0
- md_processing/data/generated_format_sets_old.py +45 -0
- md_processing/dr_egeria.py +182 -0
- md_processing/md_commands/data_designer_commands.py +195 -583
- md_processing/md_commands/ext_ref_commands.py +530 -0
- md_processing/md_commands/feedback_commands.py +726 -0
- md_processing/md_commands/glossary_commands.py +106 -490
- md_processing/md_commands/governance_officer_commands.py +129 -18
- md_processing/md_commands/product_manager_commands.py +362 -115
- md_processing/md_commands/project_commands.py +351 -134
- md_processing/md_commands/solution_architect_commands.py +276 -232
- md_processing/md_commands/view_commands.py +295 -0
- md_processing/md_processing_utils/common_md_proc_utils.py +258 -166
- md_processing/md_processing_utils/common_md_utils.py +138 -43
- md_processing/md_processing_utils/determine_width.py +103 -0
- md_processing/md_processing_utils/extraction_utils.py +100 -39
- md_processing/md_processing_utils/gen_report_specs.py +643 -0
- md_processing/md_processing_utils/generate_dr_help.py +61 -33
- md_processing/md_processing_utils/generate_md_cmd_templates.py +20 -19
- md_processing/md_processing_utils/generate_md_templates.py +3 -12
- md_processing/md_processing_utils/md_processing_constants.py +1053 -72
- pyegeria/__init__.py +203 -158
- pyegeria/core/__init__.py +40 -0
- pyegeria/core/_base_platform_client.py +574 -0
- pyegeria/core/_base_server_client.py +573 -0
- pyegeria/{_exceptions_new.py → core/_exceptions.py} +62 -30
- pyegeria/{_globals.py → core/_globals.py} +14 -3
- pyegeria/core/_server_client.py +6073 -0
- pyegeria/{_validators.py → core/_validators.py} +7 -8
- pyegeria/core/config.py +654 -0
- pyegeria/{create_tech_guid_lists.py → core/create_tech_guid_lists.py} +0 -1
- pyegeria/core/load_config.py +37 -0
- pyegeria/{logging_configuration.py → core/logging_configuration.py} +1 -1
- pyegeria/core/mcp_adapter.py +144 -0
- pyegeria/core/mcp_server.py +212 -0
- pyegeria/core/utils.py +405 -0
- pyegeria/{_client.py → deprecated/_client.py} +24 -25
- pyegeria/{_deprecated_gov_engine.py → deprecated/_deprecated_gov_engine.py} +16 -16
- pyegeria/{classification_manager_omvs.py → deprecated/classification_manager_omvs.py} +1987 -1877
- pyegeria/{output_formatter.py → deprecated/output_formatter_with_machine_keys.py} +298 -45
- pyegeria/{runtime_manager_omvs.py → deprecated/runtime_manager_omvs.py} +155 -171
- pyegeria/{valid_metadata_omvs.py → deprecated/valid_metadata_omvs.py} +93 -93
- pyegeria/{x_action_author_omvs.py → deprecated/x_action_author_omvs.py} +2 -3
- pyegeria/egeria_cat_client.py +26 -70
- pyegeria/egeria_client.py +130 -93
- pyegeria/egeria_config_client.py +40 -46
- pyegeria/egeria_tech_client.py +141 -54
- pyegeria/models/__init__.py +150 -0
- pyegeria/{models.py → models/models.py} +156 -20
- pyegeria/omvs/__init__.py +84 -0
- pyegeria/omvs/action_author.py +342 -0
- pyegeria/omvs/actor_manager.py +5980 -0
- pyegeria/omvs/asset_catalog.py +842 -0
- pyegeria/omvs/asset_maker.py +2736 -0
- pyegeria/omvs/automated_curation.py +4403 -0
- pyegeria/omvs/classification_manager.py +11213 -0
- pyegeria/{collection_manager.py → omvs/collection_manager.py} +1334 -1160
- pyegeria/omvs/community_matters_omvs.py +468 -0
- pyegeria/{core_omag_server_config.py → omvs/core_omag_server_config.py} +157 -157
- pyegeria/{data_designer.py → omvs/data_designer.py} +1115 -660
- pyegeria/omvs/data_discovery.py +869 -0
- pyegeria/omvs/data_engineer.py +372 -0
- pyegeria/omvs/digital_business.py +1133 -0
- pyegeria/omvs/external_links.py +1752 -0
- pyegeria/omvs/feedback_manager.py +834 -0
- pyegeria/{full_omag_server_config.py → omvs/full_omag_server_config.py} +73 -69
- pyegeria/{glossary_manager.py → omvs/glossary_manager.py} +857 -519
- pyegeria/{governance_officer.py → omvs/governance_officer.py} +964 -468
- pyegeria/omvs/lineage_linker.py +314 -0
- pyegeria/omvs/location_arena.py +1525 -0
- pyegeria/omvs/metadata_expert.py +668 -0
- pyegeria/omvs/metadata_explorer_omvs.py +2943 -0
- pyegeria/omvs/my_profile.py +1042 -0
- pyegeria/omvs/notification_manager.py +358 -0
- pyegeria/omvs/people_organizer.py +394 -0
- pyegeria/{platform_services.py → omvs/platform_services.py} +113 -193
- pyegeria/omvs/product_manager.py +1825 -0
- pyegeria/omvs/project_manager.py +1907 -0
- pyegeria/omvs/reference_data.py +1140 -0
- pyegeria/omvs/registered_info.py +334 -0
- pyegeria/omvs/runtime_manager.py +2817 -0
- pyegeria/omvs/schema_maker.py +446 -0
- pyegeria/{server_operations.py → omvs/server_operations.py} +27 -26
- pyegeria/{solution_architect_omvs.py → omvs/solution_architect.py} +1886 -1505
- pyegeria/omvs/specification_properties.py +37 -0
- pyegeria/omvs/subject_area.py +1042 -0
- pyegeria/omvs/template_manager_omvs.py +236 -0
- pyegeria/omvs/time_keeper.py +1761 -0
- pyegeria/omvs/valid_metadata.py +3221 -0
- pyegeria/omvs/valid_metadata_lists.py +37 -0
- pyegeria/omvs/valid_type_lists.py +37 -0
- pyegeria/view/__init__.py +28 -0
- pyegeria/{_output_format_models.py → view/_output_format_models.py} +160 -24
- pyegeria/view/_output_formats.py +14 -0
- pyegeria/view/base_report_formats.py +2719 -0
- pyegeria/view/dr_egeria_reports.py +56 -0
- pyegeria/view/format_set_executor.py +397 -0
- pyegeria/{md_processing_utils.py → view/md_processing_utils.py} +5 -5
- pyegeria/{mermaid_utilities.py → view/mermaid_utilities.py} +2 -154
- pyegeria/view/output_formatter.py +1297 -0
- pyegeria-5.5.3.3.dist-info/METADATA +218 -0
- pyegeria-5.5.3.3.dist-info/RECORD +241 -0
- {pyegeria-5.4.0.28.dist-info → pyegeria-5.5.3.3.dist-info}/WHEEL +2 -1
- pyegeria-5.5.3.3.dist-info/entry_points.txt +103 -0
- pyegeria-5.5.3.3.dist-info/top_level.txt +4 -0
- commands/cat/.DS_Store +0 -0
- commands/cat/.env +0 -8
- commands/cat/README.md +0 -16
- commands/cat/debug_log +0 -1126
- commands/cat/debug_log.2025-08-18_11-34-38_088636.zip +0 -0
- commands/cat/list_categories.py +0 -192
- commands/cat/logs/pyegeria.log +0 -4
- commands/cli/debug_log +0 -0
- commands/cli/debug_log.log +0 -0
- commands/cli/txt_custom_v2.tcss +0 -19
- commands/my/README.md +0 -17
- commands/ops/README.md +0 -24
- commands/ops/logs/pyegeria.log +0 -0
- commands/ops/monitor_asset_events.py +0 -108
- commands/tech/README.md +0 -24
- md_processing/.DS_Store +0 -0
- md_processing/dr-egeria-outbox/Collections-2025-08-12-13-30-37.md +0 -163
- md_processing/dr-egeria-outbox/Collections-2025-08-12-13-35-58.md +0 -474
- md_processing/dr_egeria_inbox/Derive-Dr-Gov-Defs.md +0 -8
- md_processing/dr_egeria_inbox/Dr.Egeria Templates.md +0 -873
- md_processing/dr_egeria_inbox/arch_test.md +0 -57
- md_processing/dr_egeria_inbox/archive/dr_egeria_intro.md +0 -254
- md_processing/dr_egeria_inbox/archive/dr_egeria_intro_more_terms.md +0 -696
- md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part1.md +0 -254
- md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part2.md +0 -298
- md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part3.md +0 -608
- md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part4.md +0 -94
- md_processing/dr_egeria_inbox/archive/freddie_intro.md +0 -284
- md_processing/dr_egeria_inbox/archive/freddie_intro_orig.md +0 -275
- md_processing/dr_egeria_inbox/archive/test-term.md +0 -110
- md_processing/dr_egeria_inbox/cat_test.md +0 -100
- md_processing/dr_egeria_inbox/collections.md +0 -39
- md_processing/dr_egeria_inbox/data_designer_debug.log +0 -6
- md_processing/dr_egeria_inbox/data_designer_out.md +0 -60
- md_processing/dr_egeria_inbox/data_designer_search_test.md +0 -11
- md_processing/dr_egeria_inbox/data_field.md +0 -54
- md_processing/dr_egeria_inbox/data_spec.md +0 -77
- md_processing/dr_egeria_inbox/data_spec_test.md +0 -2406
- md_processing/dr_egeria_inbox/data_test.md +0 -179
- md_processing/dr_egeria_inbox/data_test2.md +0 -429
- md_processing/dr_egeria_inbox/data_test3.md +0 -462
- md_processing/dr_egeria_inbox/dr_egeria_data_designer_1.md +0 -124
- md_processing/dr_egeria_inbox/dr_egeria_intro_categories.md +0 -168
- md_processing/dr_egeria_inbox/dr_egeria_intro_part1.md +0 -280
- md_processing/dr_egeria_inbox/dr_egeria_intro_part2.md +0 -318
- md_processing/dr_egeria_inbox/dr_egeria_intro_part3.md +0 -1073
- md_processing/dr_egeria_inbox/dr_egeria_isc1.md +0 -44
- md_processing/dr_egeria_inbox/generated_help_report.md +0 -9
- md_processing/dr_egeria_inbox/glossary_creation_experiment.ipynb +0 -341
- md_processing/dr_egeria_inbox/glossary_list.md +0 -5
- md_processing/dr_egeria_inbox/glossary_search_test.md +0 -40
- md_processing/dr_egeria_inbox/glossary_test1.md +0 -324
- md_processing/dr_egeria_inbox/gov_def.md +0 -482
- md_processing/dr_egeria_inbox/gov_def2.md +0 -447
- md_processing/dr_egeria_inbox/img.png +0 -0
- md_processing/dr_egeria_inbox/product.md +0 -211
- md_processing/dr_egeria_inbox/rel.md +0 -8
- md_processing/dr_egeria_inbox/sb.md +0 -119
- md_processing/dr_egeria_inbox/solution-components.md +0 -136
- md_processing/dr_egeria_inbox/solution_blueprints.md +0 -118
- md_processing/dr_egeria_inbox/synonym_test.md +0 -42
- md_processing/dr_egeria_inbox/t2.md +0 -268
- md_processing/dr_egeria_outbox/.obsidian/app.json +0 -1
- md_processing/dr_egeria_outbox/.obsidian/appearance.json +0 -1
- md_processing/dr_egeria_outbox/.obsidian/community-plugins.json +0 -6
- md_processing/dr_egeria_outbox/.obsidian/core-plugins.json +0 -31
- md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/data.json +0 -10
- md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/main.js +0 -4459
- md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/manifest.json +0 -10
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/data.json +0 -3
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/main.js +0 -153
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/manifest.json +0 -11
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/styles.css +0 -1
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/main.js +0 -500
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/manifest.json +0 -12
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/styles.css +0 -1
- md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/main.js +0 -37
- md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/manifest.json +0 -11
- md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/styles.css +0 -220
- md_processing/dr_egeria_outbox/.obsidian/types.json +0 -28
- md_processing/dr_egeria_outbox/.obsidian/workspace.json +0 -220
- md_processing/dr_egeria_outbox/Untitled.canvas +0 -1
- md_processing/dr_egeria_outbox/friday/processed-2025-08-22 21:22-dr_egeria_intro_part1.md +0 -312
- md_processing/dr_egeria_outbox/friday/processed-2025-08-22 21:23-dr_egeria_intro_part1.md +0 -265
- md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:06-dr_egeria_intro_part1.md +0 -230
- md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:30-dr_egeria_intro_part1.md +0 -296
- md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:31-dr_egeria_intro_part1.md +0 -253
- md_processing/dr_egeria_outbox/friday/processed-2025-08-23 16:08-dr_egeria_intro_part2.md +0 -343
- md_processing/dr_egeria_outbox/friday/processed-2025-08-23 16:12-dr_egeria_intro_part2.md +0 -343
- md_processing/dr_egeria_outbox/monday/processed-2025-08-19 07:05-product.md +0 -426
- md_processing/dr_egeria_outbox/monday/processed-2025-08-19 07:56-product.md +0 -212
- md_processing/dr_egeria_outbox/monday/processed-2025-08-19 09:43-product.md +0 -201
- md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 14:55-product.md +0 -77
- md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 15:05-product.md +0 -75
- md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 15:11-product.md +0 -74
- md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 20:40-collections.md +0 -49
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 15:00-Derive-Dr-Gov-Defs.md +0 -719
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:13-Derive-Dr-Gov-Defs.md +0 -41
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:14-Derive-Dr-Gov-Defs.md +0 -33
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:50-Derive-Dr-Gov-Defs.md +0 -192
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 22:08-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 22:10-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 08:53-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 08:54-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:03-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:06-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:10-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/tuesday/processed-2025-07-16 19:15-gov_def2.md +0 -527
- md_processing/dr_egeria_outbox/tuesday/processed-2025-07-17 12:08-gov_def2.md +0 -527
- md_processing/dr_egeria_outbox/tuesday/processed-2025-07-17 14:27-gov_def2.md +0 -485
- md_processing/dr_egeria_outbox/tuesday/processed-2025-08-19 10:55-product.md +0 -209
- md_processing/family_docs/Data Designer/Create_Data_Class.md +0 -164
- md_processing/family_docs/Data Designer/Create_Data_Dictionary.md +0 -30
- md_processing/family_docs/Data Designer/Create_Data_Field.md +0 -162
- md_processing/family_docs/Data Designer/Create_Data_Specification.md +0 -36
- md_processing/family_docs/Data Designer/Create_Data_Structure.md +0 -38
- md_processing/family_docs/Data Designer/View_Data_Classes.md +0 -78
- md_processing/family_docs/Data Designer/View_Data_Dictionaries.md +0 -78
- md_processing/family_docs/Data Designer/View_Data_Fields.md +0 -78
- md_processing/family_docs/Data Designer/View_Data_Specifications.md +0 -78
- md_processing/family_docs/Data Designer/View_Data_Structures.md +0 -78
- md_processing/family_docs/Data Designer.md +0 -842
- md_processing/family_docs/Digital Product Manager/Add_Member->Collection.md +0 -42
- md_processing/family_docs/Digital Product Manager/Attach_Collection->Resource.md +0 -36
- md_processing/family_docs/Digital Product Manager/Create_Agreement.md +0 -96
- md_processing/family_docs/Digital Product Manager/Create_Data_Sharing_Agreement.md +0 -72
- md_processing/family_docs/Digital Product Manager/Create_DigitalSubscription.md +0 -102
- md_processing/family_docs/Digital Product Manager/Create_Digital_Product.md +0 -134
- md_processing/family_docs/Digital Product Manager/Link_Agreement_Items.md +0 -60
- md_processing/family_docs/Digital Product Manager/Link_Contracts.md +0 -26
- md_processing/family_docs/Digital Product Manager/Link_Digital_Product_-_Digital_Product.md +0 -30
- md_processing/family_docs/Digital Product Manager/Link_Subscribers.md +0 -48
- md_processing/family_docs/Digital Product Manager.md +0 -668
- md_processing/family_docs/Glossary/Attach_Category_Parent.md +0 -18
- md_processing/family_docs/Glossary/Attach_Term-Term_Relationship.md +0 -26
- md_processing/family_docs/Glossary/Create_Category.md +0 -38
- md_processing/family_docs/Glossary/Create_Glossary.md +0 -42
- md_processing/family_docs/Glossary/Create_Term.md +0 -70
- md_processing/family_docs/Glossary.md +0 -206
- md_processing/family_docs/Governance Officer/Create_Business_Imperative.md +0 -106
- md_processing/family_docs/Governance Officer/Create_Certification_Type.md +0 -112
- md_processing/family_docs/Governance Officer/Create_Governance_Approach.md +0 -114
- md_processing/family_docs/Governance Officer/Create_Governance_Obligation.md +0 -114
- md_processing/family_docs/Governance Officer/Create_Governance_Principle.md +0 -114
- md_processing/family_docs/Governance Officer/Create_Governance_Procedure.md +0 -128
- md_processing/family_docs/Governance Officer/Create_Governance_Process.md +0 -122
- md_processing/family_docs/Governance Officer/Create_Governance_Processing_Purpose.md +0 -106
- md_processing/family_docs/Governance Officer/Create_Governance_Responsibility.md +0 -122
- md_processing/family_docs/Governance Officer/Create_Governance_Rule.md +0 -122
- md_processing/family_docs/Governance Officer/Create_Governance_Strategy.md +0 -106
- md_processing/family_docs/Governance Officer/Create_License_Type.md +0 -112
- md_processing/family_docs/Governance Officer/Create_Naming_Standard_Rule.md +0 -122
- md_processing/family_docs/Governance Officer/Create_Regulation_Article.md +0 -106
- md_processing/family_docs/Governance Officer/Create_Regulation_Definition.md +0 -118
- md_processing/family_docs/Governance Officer/Create_Security_Access_Control.md +0 -114
- md_processing/family_docs/Governance Officer/Create_Security_Group.md +0 -120
- md_processing/family_docs/Governance Officer/Create_Service_Level_Objectives.md +0 -122
- md_processing/family_docs/Governance Officer/Create_Threat_Definition.md +0 -106
- md_processing/family_docs/Governance Officer/Link_Governance_Controls.md +0 -32
- md_processing/family_docs/Governance Officer/Link_Governance_Drivers.md +0 -32
- md_processing/family_docs/Governance Officer/Link_Governance_Policies.md +0 -32
- md_processing/family_docs/Governance Officer/View_Governance_Definitions.md +0 -82
- md_processing/family_docs/Governance Officer.md +0 -2412
- md_processing/family_docs/Solution Architect/Create_Information_Supply_Chain.md +0 -70
- md_processing/family_docs/Solution Architect/Create_Solution_Blueprint.md +0 -44
- md_processing/family_docs/Solution Architect/Create_Solution_Component.md +0 -96
- md_processing/family_docs/Solution Architect/Create_Solution_Role.md +0 -66
- md_processing/family_docs/Solution Architect/Link_Information_Supply_Chain_Peers.md +0 -32
- md_processing/family_docs/Solution Architect/Link_Solution_Component_Peers.md +0 -32
- md_processing/family_docs/Solution Architect/View_Information_Supply_Chains.md +0 -32
- md_processing/family_docs/Solution Architect/View_Solution_Blueprints.md +0 -32
- md_processing/family_docs/Solution Architect/View_Solution_Components.md +0 -32
- md_processing/family_docs/Solution Architect/View_Solution_Roles.md +0 -32
- md_processing/family_docs/Solution Architect.md +0 -490
- md_processing/md_processing_utils/debug_log +0 -574
- md_processing/md_processing_utils/debug_log.log +0 -0
- md_processing/md_processing_utils/dr-egeria-help-2025-07-17T17:22:09.md +0 -2065
- md_processing/md_processing_utils/generated_help_terms.md +0 -842
- pyegeria/.DS_Store +0 -0
- pyegeria/README.md +0 -35
- pyegeria/_client_new.py +0 -1102
- pyegeria/_output_formats.py +0 -730
- pyegeria/asset_catalog_omvs.py +0 -864
- pyegeria/automated_curation_omvs.py +0 -3765
- pyegeria/config.py +0 -523
- pyegeria/egeria_my_client.py +0 -91
- pyegeria/feedback_manager_omvs.py +0 -4573
- pyegeria/load_config_orig.py +0 -218
- pyegeria/md_processing_helpers.py +0 -58
- pyegeria/md_processing_utils_orig.py +0 -1103
- pyegeria/metadata_explorer_omvs.py +0 -2326
- pyegeria/my_profile_omvs.py +0 -1022
- pyegeria/project_manager.py +0 -1591
- pyegeria/registered_info.py +0 -167
- pyegeria/template_manager_omvs.py +0 -1414
- pyegeria/utils.py +0 -256
- pyegeria-5.4.0.28.dist-info/METADATA +0 -77
- pyegeria-5.4.0.28.dist-info/RECORD +0 -343
- pyegeria-5.4.0.28.dist-info/entry_points.txt +0 -105
- /commands/cat/debug_log.log → /pyegeria/deprecated/__init__.py +0 -0
- /pyegeria/{_exceptions.py → deprecated/_exceptions.py} +0 -0
- /pyegeria/{collection_models.py → models/collection_models.py} +0 -0
- {pyegeria-5.4.0.28.dist-info → pyegeria-5.5.3.3.dist-info/licenses}/LICENSE +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"""
|
|
2
|
-
|
|
2
|
+
SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
Copyright Contributors to the ODPi Egeria project.
|
|
4
4
|
|
|
5
5
|
Maintain and explore the contents of nested collections.
|
|
@@ -7,27 +7,26 @@ Copyright Contributors to the ODPi Egeria project.
|
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
import asyncio
|
|
10
|
-
import inspect
|
|
11
10
|
from datetime import datetime
|
|
12
11
|
from typing import Optional, Annotated, Literal, Union
|
|
13
12
|
|
|
14
13
|
from loguru import logger
|
|
15
|
-
from pydantic import
|
|
14
|
+
from pydantic import Field, HttpUrl
|
|
16
15
|
|
|
17
|
-
from pyegeria.
|
|
18
|
-
from pyegeria._globals import NO_ELEMENTS_FOUND, NO_GUID_RETURNED
|
|
19
|
-
from pyegeria.
|
|
20
|
-
from pyegeria.config import settings
|
|
16
|
+
from pyegeria.core._exceptions import PyegeriaInvalidParameterException
|
|
17
|
+
from pyegeria.core._globals import NO_ELEMENTS_FOUND, NO_GUID_RETURNED
|
|
18
|
+
from pyegeria.view.base_report_formats import select_report_spec, get_report_spec_match
|
|
19
|
+
from pyegeria.core.config import settings
|
|
21
20
|
from pyegeria.models import (SearchStringRequestBody, FilterRequestBody, GetRequestBody, NewElementRequestBody,
|
|
22
21
|
ReferenceableProperties, InitialClassifications, TemplateRequestBody,
|
|
23
|
-
UpdateElementRequestBody,
|
|
24
|
-
|
|
22
|
+
UpdateElementRequestBody, NewRelationshipRequestBody,
|
|
23
|
+
DeleteElementRequestBody, DeleteRelationshipRequestBody, UpdateRelationshipRequestBody,
|
|
24
|
+
ResultsRequestBody,
|
|
25
|
+
DeploymentStatusSearchString, DeploymentStatusFilterRequestBody,
|
|
25
26
|
get_defined_field_values, PyegeriaModel)
|
|
26
|
-
from pyegeria.output_formatter import (generate_output,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
from pyegeria.utils import body_slimmer, dynamic_catch
|
|
30
|
-
|
|
27
|
+
from pyegeria.view.output_formatter import (generate_output,
|
|
28
|
+
populate_common_columns)
|
|
29
|
+
from pyegeria.core.utils import body_slimmer, dynamic_catch
|
|
31
30
|
|
|
32
31
|
app_settings = settings
|
|
33
32
|
EGERIA_LOCAL_QUALIFIER = app_settings.User_Profile.egeria_local_qualifier
|
|
@@ -57,7 +56,7 @@ def query_string(params):
|
|
|
57
56
|
result = f"{result}{query_seperator(result)}{params[i][0]}={params[i][1]}"
|
|
58
57
|
return result
|
|
59
58
|
|
|
60
|
-
from pyegeria.
|
|
59
|
+
from pyegeria.core._server_client import ServerClient
|
|
61
60
|
|
|
62
61
|
class CollectionProperties(ReferenceableProperties):
|
|
63
62
|
class_: Annotated[Literal["CollectionProperties"], Field(alias="class")]
|
|
@@ -93,12 +92,24 @@ class DigitalProductProperties(CollectionProperties):
|
|
|
93
92
|
next_version_date: datetime | None = None
|
|
94
93
|
withdrawal_date: datetime | None = None
|
|
95
94
|
|
|
95
|
+
class DigitalProductFamilyProperties(CollectionProperties):
|
|
96
|
+
class_: Annotated[Literal["DigitalProductFamilyProperties"], Field(alias="class")]
|
|
97
|
+
user_defined_status: str | None = None
|
|
98
|
+
product_name: str | None = None
|
|
99
|
+
identifier: str | None = None
|
|
100
|
+
introduction_date: datetime | None = None
|
|
101
|
+
maturity: str | None = None
|
|
102
|
+
service_life: str | None = None
|
|
103
|
+
next_version_date: datetime | None = None
|
|
104
|
+
withdrawal_date: datetime | None = None
|
|
105
|
+
|
|
106
|
+
|
|
96
107
|
class Collections(PyegeriaModel):
|
|
97
|
-
collection: Union[CollectionProperties, DigitalSubscriptionProperties, DigitalProductProperties, AgreementProperties,
|
|
108
|
+
collection: Union[CollectionProperties, DigitalSubscriptionProperties, DigitalProductProperties, DigitalProductFamilyProperties,AgreementProperties,
|
|
98
109
|
DataSpecProperties, DataDictionaryProperties] = Field(desciminator="class_")
|
|
99
110
|
|
|
100
111
|
|
|
101
|
-
class CollectionManager(
|
|
112
|
+
class CollectionManager(ServerClient):
|
|
102
113
|
"""
|
|
103
114
|
Maintain and explore the contents of nested collections. These collections can be used to represent digital
|
|
104
115
|
products, or collections of resources for a particular project or team. They can be used to organize assets and
|
|
@@ -121,16 +132,16 @@ class CollectionManager(Client2):
|
|
|
121
132
|
"""
|
|
122
133
|
|
|
123
134
|
|
|
124
|
-
def __init__(self, view_server: str, platform_url: str, user_id: str, user_pwd: str = None, token: str = None, ):
|
|
135
|
+
def __init__(self, view_server: str, platform_url: str, user_id: str, user_pwd: Optional[str] = None, token: Optional[str] = None, ):
|
|
125
136
|
self.view_server = view_server
|
|
126
137
|
self.platform_url = platform_url
|
|
127
138
|
self.user_id = user_id
|
|
128
139
|
self.user_pwd = user_pwd
|
|
129
140
|
|
|
130
141
|
|
|
131
|
-
|
|
132
|
-
result = self.get_platform_origin()
|
|
133
|
-
logger.info(f"CollectionManager initialized, platform origin is: {result}")
|
|
142
|
+
ServerClient.__init__(self, view_server, platform_url, user_id, user_pwd, token)
|
|
143
|
+
# result = self.get_platform_origin()
|
|
144
|
+
# logger.info(f"CollectionManager initialized, platform origin is: {result}")
|
|
134
145
|
self.collection_command_root: str = (
|
|
135
146
|
f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/collection-manager/collections")
|
|
136
147
|
#
|
|
@@ -140,9 +151,9 @@ class CollectionManager(Client2):
|
|
|
140
151
|
|
|
141
152
|
@dynamic_catch
|
|
142
153
|
async def _async_get_attached_collections(self, parent_guid: str, start_from: int = 0, page_size: int = 0,
|
|
143
|
-
category: str = None, classification_names: list[str]= None,
|
|
144
|
-
body: dict | FilterRequestBody = None, output_format: str = "JSON",
|
|
145
|
-
|
|
154
|
+
category: Optional[str] = None, classification_names: list[str]= None,
|
|
155
|
+
body: Optional[dict | FilterRequestBody] = None, output_format: str = "JSON",
|
|
156
|
+
report_spec: str | dict = None) -> list | str:
|
|
146
157
|
"""Returns the list of collections that are linked off of the supplied element using the ResourceList
|
|
147
158
|
relationship. Async version.
|
|
148
159
|
|
|
@@ -159,7 +170,7 @@ class CollectionManager(Client2):
|
|
|
159
170
|
If supplied, adds addition request details - for instance, to filter the results on collectionType
|
|
160
171
|
output_format: str, default = "JSON"
|
|
161
172
|
- one of "MD", "LIST", "FORM", "REPORT", "DICT", "MERMAID" or "JSON"
|
|
162
|
-
|
|
173
|
+
report_spec: str | dict = None), optional, default = None
|
|
163
174
|
The desired output columns/fields to include.
|
|
164
175
|
|
|
165
176
|
Returns
|
|
@@ -171,9 +182,9 @@ class CollectionManager(Client2):
|
|
|
171
182
|
Raises
|
|
172
183
|
------
|
|
173
184
|
|
|
174
|
-
|
|
185
|
+
PyegeriaInvalidParameterException
|
|
175
186
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
176
|
-
|
|
187
|
+
PyegeriaAPIException
|
|
177
188
|
Raised by the server when an issue arises in processing a valid request
|
|
178
189
|
NotAuthorizedException
|
|
179
190
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -197,7 +208,7 @@ class CollectionManager(Client2):
|
|
|
197
208
|
|
|
198
209
|
url = (f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/collection-manager/"
|
|
199
210
|
f"metadata-elements/{parent_guid}/collections")
|
|
200
|
-
|
|
211
|
+
|
|
201
212
|
response = await self._async_make_request("POST", url, body_slimmer(body))
|
|
202
213
|
elements = response.json().get("elements", NO_ELEMENTS_FOUND)
|
|
203
214
|
if type(elements) is str:
|
|
@@ -205,14 +216,14 @@ class CollectionManager(Client2):
|
|
|
205
216
|
return NO_ELEMENTS_FOUND
|
|
206
217
|
|
|
207
218
|
if output_format != 'JSON': # return a simplified markdown representation
|
|
208
|
-
logger.info(f"Found elements, output format: {output_format},
|
|
219
|
+
logger.info(f"Found elements, output format: {output_format}, report_spec: {report_spec}")
|
|
209
220
|
return self._generate_collection_output(elements, None, None, output_format,
|
|
210
|
-
|
|
221
|
+
report_spec=report_spec)
|
|
211
222
|
return elements
|
|
212
223
|
|
|
213
224
|
|
|
214
225
|
def get_attached_collections(self, parent_guid: str, start_from: int = 0, page_size: int = 0, body: dict = None,
|
|
215
|
-
output_format: str = "JSON",
|
|
226
|
+
output_format: str = "JSON", report_spec: str | dict = None) -> list:
|
|
216
227
|
"""Returns the list of collections that are linked off of the supplied element using the ResourceList
|
|
217
228
|
relationship. Async version.
|
|
218
229
|
|
|
@@ -229,7 +240,7 @@ class CollectionManager(Client2):
|
|
|
229
240
|
If supplied, adds addition request details - for instance, to filter the results on collectionType
|
|
230
241
|
output_format: str, default = "JSON"
|
|
231
242
|
- one of "MD", "LIST", "FORM", "REPORT", "DICT", "MERMAID" or "JSON"
|
|
232
|
-
|
|
243
|
+
report_spec: str | dict = None), optional, default = None
|
|
233
244
|
The desired output columns/fields to include.
|
|
234
245
|
|
|
235
246
|
|
|
@@ -242,9 +253,9 @@ class CollectionManager(Client2):
|
|
|
242
253
|
Raises
|
|
243
254
|
------
|
|
244
255
|
|
|
245
|
-
|
|
256
|
+
PyegeriaInvalidParameterException
|
|
246
257
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
247
|
-
|
|
258
|
+
PyegeriaAPIException
|
|
248
259
|
Raised by the server when an issue arises in processing a valid request
|
|
249
260
|
NotAuthorizedException
|
|
250
261
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -267,47 +278,87 @@ class CollectionManager(Client2):
|
|
|
267
278
|
"""
|
|
268
279
|
return asyncio.get_event_loop().run_until_complete(
|
|
269
280
|
self._async_get_attached_collections(parent_guid, start_from, page_size,
|
|
270
|
-
body, output_format,
|
|
281
|
+
body, output_format, report_spec))
|
|
271
282
|
|
|
272
283
|
|
|
273
284
|
@dynamic_catch
|
|
274
|
-
async def _async_find_collections(self, search_string: str = "*",
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
285
|
+
async def _async_find_collections(self, search_string: str = "*",
|
|
286
|
+
starts_with: bool = True, ends_with: bool = False,
|
|
287
|
+
ignore_case: bool = False,
|
|
288
|
+
anchor_domain: Optional[str] = None,
|
|
289
|
+
metadata_element_type: Optional[str] = None,
|
|
290
|
+
metadata_element_subtypes: Optional[list[str]] = None,
|
|
291
|
+
skip_relationships: Optional[list[str]] = None,
|
|
292
|
+
include_only_relationships: Optional[list[str]] = None,
|
|
293
|
+
skip_classified_elements: Optional[list[str]] = None,
|
|
294
|
+
include_only_classified_elements: Optional[list[str]] = None,
|
|
295
|
+
graph_query_depth: int = 3,
|
|
296
|
+
governance_zone_filter: Optional[list[str]] = None, as_of_time: Optional[str] = None,
|
|
297
|
+
effective_time: Optional[str] = None, relationship_page_size: int = 0,
|
|
298
|
+
limit_results_by_status: Optional[list[str]] = None, sequencing_order: Optional[str] = None,
|
|
299
|
+
sequencing_property: Optional[str] = None,
|
|
300
|
+
output_format: str = "JSON",
|
|
301
|
+
report_spec: str | dict = None,
|
|
302
|
+
start_from: int = 0, page_size: int = 100,
|
|
303
|
+
property_names: Optional[list[str]] = None,
|
|
304
|
+
body: Optional[dict | SearchStringRequestBody] = None,
|
|
305
|
+
_type: str = "Collection") -> list | str:
|
|
306
|
+
""" Retrieve the list of collection metadata elements that contain the search string. Async Version.
|
|
283
307
|
|
|
284
308
|
Parameters
|
|
285
309
|
----------
|
|
286
310
|
search_string: str
|
|
287
|
-
Search string to match against - None or '*' indicate match against all collections
|
|
288
|
-
|
|
289
|
-
classification_names: list[str], optional, default=None
|
|
290
|
-
A list of classification names to filter on - for example, ["DataSpec"], for data specifications. If none,
|
|
291
|
-
then all classifications are returned.
|
|
292
|
-
metadata_element_types: list[str], optional, default=None
|
|
293
|
-
A list of metadata element types to filter on - for example, ["DataSpec"], for data specifications. If none,
|
|
294
|
-
starts_with : bool, [default=False], optional
|
|
311
|
+
Search string to match against - None or '*' indicate match against all collections.
|
|
312
|
+
starts_with : bool, [default=True], optional
|
|
295
313
|
Starts with the supplied string.
|
|
296
314
|
ends_with : bool, [default=False], optional
|
|
297
315
|
Ends with the supplied string
|
|
298
316
|
ignore_case : bool, [default=False], optional
|
|
299
317
|
Ignore case when searching
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
The
|
|
304
|
-
|
|
318
|
+
anchor_domain: str, optional
|
|
319
|
+
The anchor domain to search in.
|
|
320
|
+
metadata_element_type: str, optional
|
|
321
|
+
The type of metadata element to search for.
|
|
322
|
+
metadata_element_subtypes: list[str], optional
|
|
323
|
+
The subtypes of metadata element to search for.
|
|
324
|
+
skip_relationships: list[str], optional
|
|
325
|
+
The types of relationships to skip.
|
|
326
|
+
include_only_relationships: list[str], optional
|
|
327
|
+
The types of relationships to include.
|
|
328
|
+
skip_classified_elements: list[str], optional
|
|
329
|
+
The types of classified elements to skip.
|
|
330
|
+
include_only_classified_elements: list[str], optional
|
|
331
|
+
The types of classified elements to include.
|
|
332
|
+
graph_query_depth: int, [default=3], optional
|
|
333
|
+
The depth of the graph query.
|
|
334
|
+
governance_zone_filter: list[str], optional
|
|
335
|
+
The governance zones to search in.
|
|
336
|
+
as_of_time: str, optional
|
|
337
|
+
The time to search as of.
|
|
338
|
+
effective_time: str, optional
|
|
339
|
+
The effective time to search at.
|
|
340
|
+
relationship_page_size: int, [default=0], optional
|
|
341
|
+
The page size for relationships.
|
|
342
|
+
limit_results_by_status: list[str], optional
|
|
343
|
+
The statuses to limit results by.
|
|
344
|
+
sequencing_order: str, optional
|
|
345
|
+
The order to sequence results by.
|
|
346
|
+
sequencing_property: str, optional
|
|
347
|
+
The property to sequence results by.
|
|
305
348
|
output_format: str, default = "JSON"
|
|
306
349
|
- one of "MD", "LIST", "FORM", "REPORT", "DICT", "MERMAID" or "JSON"
|
|
307
|
-
|
|
350
|
+
report_spec: str | dict , optional, default = None
|
|
308
351
|
- The desired output columns/fields to include.
|
|
352
|
+
start_from: int, [default=0], optional
|
|
353
|
+
When multiple pages of results are available, the page number to start from.
|
|
354
|
+
page_size: int, [default=100]
|
|
355
|
+
The number of items to return in a single page.
|
|
356
|
+
property_names: list[str], optional
|
|
357
|
+
The names of properties to search for.
|
|
309
358
|
body: dict | SearchStringRequestBody, optional, default = None
|
|
310
359
|
- if provided, the search parameters in the body will supercede other attributes, such as "search_string"
|
|
360
|
+
_type: str, [default="Collection"], optional
|
|
361
|
+
- The type of element to search for.
|
|
311
362
|
|
|
312
363
|
Returns
|
|
313
364
|
-------
|
|
@@ -327,56 +378,107 @@ class CollectionManager(Client2):
|
|
|
327
378
|
|
|
328
379
|
"""
|
|
329
380
|
url = str(HttpUrl(f"{self.collection_command_root}/by-search-string"))
|
|
330
|
-
response = await self._async_find_request(url, _type=
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
381
|
+
response = await self._async_find_request(url, _type=_type, _gen_output=self._generate_collection_output,
|
|
382
|
+
search_string=search_string, starts_with=starts_with,
|
|
383
|
+
ends_with=ends_with, ignore_case=ignore_case,
|
|
384
|
+
anchor_domain=anchor_domain,
|
|
385
|
+
metadata_element_type=metadata_element_type,
|
|
386
|
+
metadata_element_subtypes=metadata_element_subtypes,
|
|
387
|
+
skip_relationships=skip_relationships,
|
|
388
|
+
include_only_relationships=include_only_relationships,
|
|
389
|
+
skip_classified_elements=skip_classified_elements,
|
|
390
|
+
include_only_classified_elements=include_only_classified_elements,
|
|
391
|
+
graph_query_depth=graph_query_depth,
|
|
392
|
+
governance_zone_filter=governance_zone_filter,
|
|
393
|
+
as_of_time=as_of_time, effective_time=effective_time,
|
|
394
|
+
relationship_page_size=relationship_page_size,
|
|
395
|
+
limit_results_by_status=limit_results_by_status,
|
|
396
|
+
sequencing_order=sequencing_order,
|
|
397
|
+
sequencing_property=sequencing_property,
|
|
398
|
+
output_format=output_format, report_spec=report_spec,
|
|
399
|
+
start_from=start_from, page_size=page_size,
|
|
400
|
+
property_names=property_names, body=body)
|
|
338
401
|
|
|
339
402
|
return response
|
|
340
403
|
|
|
341
404
|
@dynamic_catch
|
|
342
|
-
def find_collections(self, search_string: str =
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
405
|
+
def find_collections(self, search_string: str = "*",
|
|
406
|
+
starts_with: bool = True, ends_with: bool = False,
|
|
407
|
+
ignore_case: bool = False,
|
|
408
|
+
anchor_domain: Optional[str] = None,
|
|
409
|
+
metadata_element_type: Optional[str] = None,
|
|
410
|
+
metadata_element_subtypes: Optional[list[str]] = None,
|
|
411
|
+
skip_relationships: Optional[list[str]] = None,
|
|
412
|
+
include_only_relationships: Optional[list[str]] = None,
|
|
413
|
+
skip_classified_elements: Optional[list[str]] = None,
|
|
414
|
+
include_only_classified_elements: Optional[list[str]] = None,
|
|
415
|
+
graph_query_depth: int = 3,
|
|
416
|
+
governance_zone_filter: Optional[list[str]] = None, as_of_time: Optional[str] = None,
|
|
417
|
+
effective_time: Optional[str] = None, relationship_page_size: int = 0,
|
|
418
|
+
limit_results_by_status: Optional[list[str]] = None, sequencing_order: Optional[str] = None,
|
|
419
|
+
sequencing_property: Optional[str] = None,
|
|
420
|
+
output_format: str = "JSON",
|
|
421
|
+
report_spec: str | dict = None,
|
|
422
|
+
start_from: int = 0, page_size: int = 100,
|
|
423
|
+
property_names: Optional[list[str]] = None,
|
|
424
|
+
body: Optional[dict | SearchStringRequestBody] = None,
|
|
425
|
+
_type: str = "Collection") -> list | str:
|
|
426
|
+
""" Retrieve the list of collection metadata elements that contain the search string.
|
|
351
427
|
|
|
352
428
|
Parameters
|
|
353
429
|
----------
|
|
354
430
|
search_string: str
|
|
355
|
-
Search string to match against - None or '*' indicate match against all collections
|
|
356
|
-
|
|
357
|
-
classification_names: list[str], optional, default=None
|
|
358
|
-
A list of classification names to filter on - for example, ["DataSpec"], for data specifications. If none,
|
|
359
|
-
then all classifications are returned.
|
|
360
|
-
metadata_element_types: list[str], optional, default=None
|
|
361
|
-
A list of metadata element types to filter on - for example, ["DataSpec"], for data specifications. If none,
|
|
362
|
-
then all metadata element types are returned.
|
|
363
|
-
starts_with : bool, [default=False], optional
|
|
431
|
+
Search string to match against - None or '*' indicate match against all collections.
|
|
432
|
+
starts_with : bool, [default=True], optional
|
|
364
433
|
Starts with the supplied string.
|
|
365
434
|
ends_with : bool, [default=False], optional
|
|
366
435
|
Ends with the supplied string
|
|
367
436
|
ignore_case : bool, [default=False], optional
|
|
368
437
|
Ignore case when searching
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
The
|
|
373
|
-
|
|
438
|
+
anchor_domain: str, optional
|
|
439
|
+
The anchor domain to search in.
|
|
440
|
+
metadata_element_type: str, optional
|
|
441
|
+
The type of metadata element to search for.
|
|
442
|
+
metadata_element_subtypes: list[str], optional
|
|
443
|
+
The subtypes of metadata element to search for.
|
|
444
|
+
skip_relationships: list[str], optional
|
|
445
|
+
The types of relationships to skip.
|
|
446
|
+
include_only_relationships: list[str], optional
|
|
447
|
+
The types of relationships to include.
|
|
448
|
+
skip_classified_elements: list[str], optional
|
|
449
|
+
The types of classified elements to skip.
|
|
450
|
+
include_only_classified_elements: list[str], optional
|
|
451
|
+
The types of classified elements to include.
|
|
452
|
+
graph_query_depth: int, [default=3], optional
|
|
453
|
+
The depth of the graph query.
|
|
454
|
+
governance_zone_filter: list[str], optional
|
|
455
|
+
The governance zones to search in.
|
|
456
|
+
as_of_time: str, optional
|
|
457
|
+
The time to search as of.
|
|
458
|
+
effective_time: str, optional
|
|
459
|
+
The effective time to search at.
|
|
460
|
+
relationship_page_size: int, [default=0], optional
|
|
461
|
+
The page size for relationships.
|
|
462
|
+
limit_results_by_status: list[str], optional
|
|
463
|
+
The statuses to limit results by.
|
|
464
|
+
sequencing_order: str, optional
|
|
465
|
+
The order to sequence results by.
|
|
466
|
+
sequencing_property: str, optional
|
|
467
|
+
The property to sequence results by.
|
|
374
468
|
output_format: str, default = "JSON"
|
|
375
469
|
- one of "MD", "LIST", "FORM", "REPORT", "DICT", "MERMAID" or "JSON"
|
|
376
|
-
|
|
470
|
+
report_spec: str | dict , optional, default = None
|
|
377
471
|
- The desired output columns/fields to include.
|
|
472
|
+
start_from: int, [default=0], optional
|
|
473
|
+
When multiple pages of results are available, the page number to start from.
|
|
474
|
+
page_size: int, [default=100]
|
|
475
|
+
The number of items to return in a single page.
|
|
476
|
+
property_names: list[str], optional
|
|
477
|
+
The names of properties to search for.
|
|
378
478
|
body: dict | SearchStringRequestBody, optional, default = None
|
|
379
479
|
- if provided, the search parameters in the body will supercede other attributes, such as "search_string"
|
|
480
|
+
_type: str, [default="Collection"], optional
|
|
481
|
+
- The type of element to search for.
|
|
380
482
|
|
|
381
483
|
Returns
|
|
382
484
|
-------
|
|
@@ -394,24 +496,278 @@ class CollectionManager(Client2):
|
|
|
394
496
|
NotAuthorizedException
|
|
395
497
|
The principle specified by the user_id does not have authorization for the requested action
|
|
396
498
|
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
499
|
+
"""
|
|
500
|
+
loop = asyncio.get_event_loop()
|
|
501
|
+
return loop.run_until_complete(self._async_find_collections(search_string=search_string,
|
|
502
|
+
starts_with=starts_with,
|
|
503
|
+
ends_with=ends_with,
|
|
504
|
+
ignore_case=ignore_case,
|
|
505
|
+
anchor_domain=anchor_domain,
|
|
506
|
+
metadata_element_type=metadata_element_type,
|
|
507
|
+
metadata_element_subtypes=metadata_element_subtypes,
|
|
508
|
+
skip_relationships=skip_relationships,
|
|
509
|
+
include_only_relationships=include_only_relationships,
|
|
510
|
+
skip_classified_elements=skip_classified_elements,
|
|
511
|
+
include_only_classified_elements=include_only_classified_elements,
|
|
512
|
+
graph_query_depth=graph_query_depth,
|
|
513
|
+
governance_zone_filter=governance_zone_filter,
|
|
514
|
+
as_of_time=as_of_time,
|
|
515
|
+
effective_time=effective_time,
|
|
516
|
+
relationship_page_size=relationship_page_size,
|
|
517
|
+
limit_results_by_status=limit_results_by_status,
|
|
518
|
+
sequencing_order=sequencing_order,
|
|
519
|
+
sequencing_property=sequencing_property,
|
|
520
|
+
output_format=output_format,
|
|
521
|
+
report_spec=report_spec,
|
|
522
|
+
start_from=start_from,
|
|
523
|
+
page_size=page_size,
|
|
524
|
+
property_names=property_names,
|
|
525
|
+
body=body,
|
|
526
|
+
_type=_type))
|
|
527
|
+
|
|
528
|
+
|
|
529
|
+
@dynamic_catch
|
|
530
|
+
async def _async_find_digital_products(
|
|
531
|
+
self,
|
|
532
|
+
search_string: str = "*",
|
|
533
|
+
deployment_status: Optional[str] = None,
|
|
534
|
+
starts_with: bool = True,
|
|
535
|
+
ends_with: bool = False,
|
|
536
|
+
ignore_case: bool = False,
|
|
537
|
+
start_from: int = 0,
|
|
538
|
+
page_size: int = 100,
|
|
539
|
+
output_format: str = "JSON",
|
|
540
|
+
report_spec: str | dict = None,
|
|
541
|
+
body: Optional[dict | DeploymentStatusSearchString] = None,
|
|
542
|
+
) -> list | str:
|
|
543
|
+
"""
|
|
544
|
+
Returns the list of digital products matching the search string and optional deployment status.
|
|
545
|
+
|
|
546
|
+
Parameters
|
|
547
|
+
----------
|
|
548
|
+
search_string: str, default = "*"
|
|
549
|
+
- the search string to use to find matching digital products
|
|
550
|
+
deployment_status: str, optional
|
|
551
|
+
- optional deployment status to filter by (e.g., ACTIVE)
|
|
552
|
+
starts_with: bool, default = True
|
|
553
|
+
- if True, the search string must match the start of the property value
|
|
554
|
+
ends_with: bool, default = False
|
|
555
|
+
- if True, the search string must match the end of the property value
|
|
556
|
+
ignore_case: bool, default = False
|
|
557
|
+
- if True, the search is case-insensitive
|
|
558
|
+
start_from: int, default = 0
|
|
559
|
+
- the starting point in the results list
|
|
560
|
+
page_size: int, default = 100
|
|
561
|
+
- the maximum number of results to return
|
|
562
|
+
output_format: str, default = "JSON"
|
|
563
|
+
- the format of the output (JSON, DICT, etc.)
|
|
564
|
+
report_spec: str | dict, optional
|
|
565
|
+
- the report specification to use for the output
|
|
566
|
+
body: dict | DeploymentStatusSearchString, optional
|
|
567
|
+
- the request body to use for the request. If specified, this takes precedence over other parameters.
|
|
568
|
+
|
|
569
|
+
Returns
|
|
570
|
+
-------
|
|
571
|
+
list | str
|
|
572
|
+
- a list of digital products or a string message if no products are found
|
|
573
|
+
|
|
574
|
+
Note:
|
|
575
|
+
-----
|
|
576
|
+
Sample body:
|
|
577
|
+
{
|
|
578
|
+
"class": "DeploymentStatusSearchString",
|
|
579
|
+
"searchString" : "add search string here",
|
|
580
|
+
"deploymentStatus" : "ACTIVE",
|
|
581
|
+
"startsWith" : false,
|
|
582
|
+
"endsWith" : false,
|
|
583
|
+
"ignoreCase" : true,
|
|
584
|
+
"startFrom" : 0,
|
|
585
|
+
"pageSize": 0
|
|
586
|
+
}
|
|
587
|
+
"""
|
|
588
|
+
url = (
|
|
589
|
+
f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/collection-manager"
|
|
590
|
+
f"/digital-products/by-search-string"
|
|
591
|
+
)
|
|
592
|
+
|
|
593
|
+
if isinstance(body, DeploymentStatusSearchString):
|
|
594
|
+
validated_body = body
|
|
595
|
+
elif isinstance(body, dict):
|
|
596
|
+
validated_body = self._deployment_status_search_request_adapter.validate_python(body)
|
|
597
|
+
else:
|
|
598
|
+
search_string = None if search_string == "*" else search_string
|
|
599
|
+
body_dict = {
|
|
600
|
+
"class": "DeploymentStatusSearchString",
|
|
601
|
+
"searchString": search_string,
|
|
602
|
+
"deploymentStatus": deployment_status,
|
|
603
|
+
"startsWith": starts_with,
|
|
604
|
+
"endsWith": ends_with,
|
|
605
|
+
"ignoreCase": ignore_case,
|
|
606
|
+
"startFrom": start_from,
|
|
607
|
+
"pageSize": page_size,
|
|
608
|
+
}
|
|
609
|
+
validated_body = DeploymentStatusSearchString.model_validate(body_dict)
|
|
610
|
+
|
|
611
|
+
json_body = validated_body.model_dump_json(indent=2, exclude_none=True)
|
|
612
|
+
response = await self._async_make_request("POST", url, json_body)
|
|
613
|
+
elements = response.json().get("elements", NO_ELEMENTS_FOUND)
|
|
614
|
+
|
|
615
|
+
if type(elements) is str or len(elements) == 0:
|
|
616
|
+
logger.info(NO_ELEMENTS_FOUND)
|
|
617
|
+
return NO_ELEMENTS_FOUND
|
|
618
|
+
|
|
619
|
+
if output_format.upper() != "JSON":
|
|
620
|
+
return self._generate_collection_output(
|
|
621
|
+
elements, search_string, "DigitalProduct", output_format, report_spec
|
|
622
|
+
)
|
|
623
|
+
return elements
|
|
624
|
+
|
|
625
|
+
def find_digital_products(
|
|
626
|
+
self,
|
|
627
|
+
search_string: str = "*",
|
|
628
|
+
deployment_status: Optional[str] = None,
|
|
629
|
+
starts_with: bool = True,
|
|
630
|
+
ends_with: bool = False,
|
|
631
|
+
ignore_case: bool = False,
|
|
632
|
+
start_from: int = 0,
|
|
633
|
+
page_size: int = 100,
|
|
634
|
+
output_format: str = "JSON",
|
|
635
|
+
report_spec: str | dict = None,
|
|
636
|
+
body: Optional[dict | DeploymentStatusSearchString] = None,
|
|
637
|
+
) -> list | str:
|
|
638
|
+
"""
|
|
639
|
+
Returns the list of digital products matching the search string and optional deployment status. Sync version.
|
|
400
640
|
|
|
641
|
+
See _async_find_digital_products for more details.
|
|
401
642
|
"""
|
|
402
643
|
return asyncio.get_event_loop().run_until_complete(
|
|
403
|
-
self.
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
644
|
+
self._async_find_digital_products(
|
|
645
|
+
search_string,
|
|
646
|
+
deployment_status,
|
|
647
|
+
starts_with,
|
|
648
|
+
ends_with,
|
|
649
|
+
ignore_case,
|
|
650
|
+
start_from,
|
|
651
|
+
page_size,
|
|
652
|
+
output_format,
|
|
653
|
+
report_spec,
|
|
654
|
+
body,
|
|
655
|
+
)
|
|
656
|
+
)
|
|
657
|
+
|
|
658
|
+
@dynamic_catch
|
|
659
|
+
async def _async_get_digital_products_by_category(
|
|
660
|
+
self,
|
|
661
|
+
category: str,
|
|
662
|
+
deployment_status: Optional[str] = None,
|
|
663
|
+
start_from: int = 0,
|
|
664
|
+
page_size: int = 100,
|
|
665
|
+
output_format: str = "JSON",
|
|
666
|
+
report_spec: str | dict = None,
|
|
667
|
+
body: Optional[dict | DeploymentStatusFilterRequestBody] = None,
|
|
668
|
+
) -> list | str:
|
|
669
|
+
"""
|
|
670
|
+
Returns the list of digital products matching the category and optional deployment status.
|
|
671
|
+
|
|
672
|
+
Parameters
|
|
673
|
+
----------
|
|
674
|
+
category: str
|
|
675
|
+
- the category to use to find matching digital products
|
|
676
|
+
deployment_status: str, optional
|
|
677
|
+
- optional deployment status to filter by (e.g., ACTIVE)
|
|
678
|
+
start_from: int, default = 0
|
|
679
|
+
- the starting point in the results list
|
|
680
|
+
page_size: int, default = 100
|
|
681
|
+
- the maximum number of results to return
|
|
682
|
+
output_format: str, default = "JSON"
|
|
683
|
+
- the format of the output (JSON, DICT, etc.)
|
|
684
|
+
report_spec: str | dict, optional
|
|
685
|
+
- the report specification to use for the output
|
|
686
|
+
body: dict | DeploymentStatusFilterRequestBody, optional
|
|
687
|
+
- the request body to use for the request. If specified, this takes precedence over other parameters.
|
|
688
|
+
|
|
689
|
+
Returns
|
|
690
|
+
-------
|
|
691
|
+
list | str
|
|
692
|
+
- a list of digital products or a string message if no products are found
|
|
693
|
+
|
|
694
|
+
Note:
|
|
695
|
+
-----
|
|
696
|
+
Sample body:
|
|
697
|
+
{
|
|
698
|
+
"class" : "DeploymentStatusFilterRequestBody",
|
|
699
|
+
"filter" : "xxx",
|
|
700
|
+
"deploymentStatus" : "ACTIVE",
|
|
701
|
+
"startFrom" : 0,
|
|
702
|
+
"pageSize": 0
|
|
703
|
+
}
|
|
704
|
+
"""
|
|
705
|
+
url = (
|
|
706
|
+
f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/collection-manager"
|
|
707
|
+
f"/digital-products/by-category"
|
|
708
|
+
)
|
|
709
|
+
|
|
710
|
+
if isinstance(body, DeploymentStatusFilterRequestBody):
|
|
711
|
+
validated_body = body
|
|
712
|
+
elif isinstance(body, dict):
|
|
713
|
+
validated_body = self._deployment_status_filter_request_adapter.validate_python(body)
|
|
714
|
+
else:
|
|
715
|
+
body_dict = {
|
|
716
|
+
"class": "DeploymentStatusFilterRequestBody",
|
|
717
|
+
"filter": category,
|
|
718
|
+
"deploymentStatus": deployment_status,
|
|
719
|
+
"startFrom": start_from,
|
|
720
|
+
"pageSize": page_size,
|
|
721
|
+
}
|
|
722
|
+
validated_body = DeploymentStatusFilterRequestBody.model_validate(body_dict)
|
|
723
|
+
|
|
724
|
+
json_body = validated_body.model_dump_json(indent=2, exclude_none=True)
|
|
725
|
+
response = await self._async_make_request("POST", url, json_body)
|
|
726
|
+
elements = response.json().get("elements", NO_ELEMENTS_FOUND)
|
|
727
|
+
|
|
728
|
+
if type(elements) is str or len(elements) == 0:
|
|
729
|
+
logger.info(NO_ELEMENTS_FOUND)
|
|
730
|
+
return NO_ELEMENTS_FOUND
|
|
731
|
+
|
|
732
|
+
if output_format.upper() != "JSON":
|
|
733
|
+
return self._generate_collection_output(
|
|
734
|
+
elements, category, "DigitalProduct", output_format, report_spec
|
|
735
|
+
)
|
|
736
|
+
return elements
|
|
407
737
|
|
|
738
|
+
def get_digital_products_by_category(
|
|
739
|
+
self,
|
|
740
|
+
category: str,
|
|
741
|
+
deployment_status: Optional[str] = None,
|
|
742
|
+
start_from: int = 0,
|
|
743
|
+
page_size: int = 100,
|
|
744
|
+
output_format: str = "JSON",
|
|
745
|
+
report_spec: str | dict = None,
|
|
746
|
+
body: Optional[dict | DeploymentStatusFilterRequestBody] = None,
|
|
747
|
+
) -> list | str:
|
|
748
|
+
"""
|
|
749
|
+
Returns the list of digital products matching the category and optional deployment status. Sync version.
|
|
750
|
+
|
|
751
|
+
See _async_get_digital_products_by_category for more details.
|
|
752
|
+
"""
|
|
753
|
+
return asyncio.get_event_loop().run_until_complete(
|
|
754
|
+
self._async_get_digital_products_by_category(
|
|
755
|
+
category,
|
|
756
|
+
deployment_status,
|
|
757
|
+
start_from,
|
|
758
|
+
page_size,
|
|
759
|
+
output_format,
|
|
760
|
+
report_spec,
|
|
761
|
+
body,
|
|
762
|
+
)
|
|
763
|
+
)
|
|
408
764
|
|
|
409
765
|
@dynamic_catch
|
|
410
|
-
async def _async_get_collections_by_name(self, filter_string: str = None, classification_names: list[str] = None,
|
|
411
|
-
body: dict | FilterRequestBody = None,
|
|
766
|
+
async def _async_get_collections_by_name(self, filter_string: Optional[str] = None, classification_names: Optional[list[str]] = None,
|
|
767
|
+
body: Optional[dict | FilterRequestBody] = None,
|
|
412
768
|
start_from: int = 0, page_size: int = 0,
|
|
413
769
|
output_format: str = 'JSON',
|
|
414
|
-
|
|
770
|
+
report_spec: str | dict = None) -> list | str:
|
|
415
771
|
""" Returns the list of collections with a particular name.
|
|
416
772
|
|
|
417
773
|
Parameters
|
|
@@ -429,7 +785,7 @@ class CollectionManager(Client2):
|
|
|
429
785
|
the class instance.
|
|
430
786
|
output_format: str, default = "JSON"
|
|
431
787
|
- one of "DICT", "MERMAID" or "JSON"
|
|
432
|
-
|
|
788
|
+
report_spec: dict , optional, default = None
|
|
433
789
|
The desired output columns/fields to include.
|
|
434
790
|
|
|
435
791
|
Returns
|
|
@@ -441,9 +797,9 @@ class CollectionManager(Client2):
|
|
|
441
797
|
Raises
|
|
442
798
|
------
|
|
443
799
|
|
|
444
|
-
|
|
800
|
+
PyegeriaInvalidParameterException
|
|
445
801
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
446
|
-
|
|
802
|
+
PyegeriaAPIException
|
|
447
803
|
Raised by the server when an issue arises in processing a valid request
|
|
448
804
|
NotAuthorizedException
|
|
449
805
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -453,23 +809,23 @@ class CollectionManager(Client2):
|
|
|
453
809
|
_gen_output=self._generate_collection_output,
|
|
454
810
|
filter_string = filter_string, classification_names = classification_names,
|
|
455
811
|
start_from = start_from, page_size = page_size,
|
|
456
|
-
output_format=output_format,
|
|
812
|
+
output_format=output_format, report_spec=report_spec,
|
|
457
813
|
body=body)
|
|
458
814
|
|
|
459
815
|
return response
|
|
460
816
|
|
|
461
817
|
|
|
462
|
-
def get_collections_by_name(self,
|
|
463
|
-
body: dict | FilterRequestBody = None,
|
|
818
|
+
def get_collections_by_name(self, filter_string: Optional[str] = None, classification_names: Optional[list[str]] = None,
|
|
819
|
+
body: Optional[dict | FilterRequestBody] = None,
|
|
464
820
|
start_from: int = 0, page_size: int = 0, output_format: str = 'JSON',
|
|
465
|
-
|
|
821
|
+
report_spec: str | dict = None) -> list | str:
|
|
466
822
|
"""Returns the list of collections matching the search string. Async version.
|
|
467
823
|
The search string is located in the request body and is interpreted as a plain string.
|
|
468
824
|
The request parameters, startsWith, endsWith and ignoreCase can be used to allow a fuzzy search.
|
|
469
825
|
|
|
470
826
|
Parameters
|
|
471
827
|
----------
|
|
472
|
-
|
|
828
|
+
filter_string: str,
|
|
473
829
|
name to use to find matching collections.
|
|
474
830
|
classification_names: list[str], optional, default = None
|
|
475
831
|
type of collection to filter by - e.g., DataDict, Folder, Root
|
|
@@ -482,7 +838,7 @@ class CollectionManager(Client2):
|
|
|
482
838
|
the class instance.
|
|
483
839
|
output_format: str, default = "JSON"
|
|
484
840
|
- one of "DICT", "MERMAID" or "JSON"
|
|
485
|
-
|
|
841
|
+
report_spec: str | dict, optional, default = None
|
|
486
842
|
The desired output columns/fields to include.
|
|
487
843
|
|
|
488
844
|
Returns
|
|
@@ -497,15 +853,15 @@ class CollectionManager(Client2):
|
|
|
497
853
|
|
|
498
854
|
"""
|
|
499
855
|
return asyncio.get_event_loop().run_until_complete(
|
|
500
|
-
self._async_get_collections_by_name(
|
|
501
|
-
output_format,
|
|
856
|
+
self._async_get_collections_by_name(filter_string, classification_names, body, start_from, page_size,
|
|
857
|
+
output_format, report_spec))
|
|
502
858
|
|
|
503
859
|
|
|
504
860
|
@dynamic_catch
|
|
505
|
-
async def _async_get_collections_by_category(self, category: str, classification_names: list[str] = None,
|
|
506
|
-
body: dict | FilterRequestBody = None, start_from: int = 0, page_size: int = 0,
|
|
861
|
+
async def _async_get_collections_by_category(self, category: str, classification_names: Optional[list[str]] = None,
|
|
862
|
+
body: Optional[dict | FilterRequestBody] = None, start_from: int = 0, page_size: int = 0,
|
|
507
863
|
output_format: str = 'JSON',
|
|
508
|
-
|
|
864
|
+
report_spec: str | dict = None) -> list | str:
|
|
509
865
|
"""Returns the list of collections with a particular category. This is an optional text field in the
|
|
510
866
|
collection element.
|
|
511
867
|
|
|
@@ -525,7 +881,7 @@ class CollectionManager(Client2):
|
|
|
525
881
|
the class instance.
|
|
526
882
|
output_format: str, default = "JSON"
|
|
527
883
|
- one of "DICT", "MERMAID" or "JSON"
|
|
528
|
-
|
|
884
|
+
report_spec: str | dict , optional, default = None
|
|
529
885
|
The desired output columns/fields to include.
|
|
530
886
|
|
|
531
887
|
Returns
|
|
@@ -560,17 +916,17 @@ class CollectionManager(Client2):
|
|
|
560
916
|
_gen_output=self._generate_collection_output,
|
|
561
917
|
filter_string = category, classification_names = classification_names,
|
|
562
918
|
start_from = start_from, page_size = page_size,
|
|
563
|
-
output_format=output_format,
|
|
919
|
+
output_format=output_format, report_spec=report_spec,
|
|
564
920
|
body=body)
|
|
565
921
|
|
|
566
922
|
return response
|
|
567
923
|
|
|
568
924
|
|
|
569
925
|
|
|
570
|
-
def get_collections_by_category(self, category: str, classification_names: list[str] = None,
|
|
571
|
-
body: dict | FilterRequestBody = None,
|
|
926
|
+
def get_collections_by_category(self, category: str, classification_names: Optional[list[str]] = None,
|
|
927
|
+
body: Optional[dict | FilterRequestBody] = None,
|
|
572
928
|
start_from: int = 0, page_size: int = 0, output_format: str = 'JSON',
|
|
573
|
-
|
|
929
|
+
report_spec: str | dict = None) -> list | str:
|
|
574
930
|
"""Returns the list of collections with a particular collectionType. This is an optional text field in the
|
|
575
931
|
collection element.
|
|
576
932
|
|
|
@@ -590,7 +946,7 @@ class CollectionManager(Client2):
|
|
|
590
946
|
the class instance.
|
|
591
947
|
output_format: str, default = "JSON"
|
|
592
948
|
- one of "DICT", "MERMAID" or "JSON"
|
|
593
|
-
|
|
949
|
+
report_spec: str | dict, optional, default = None
|
|
594
950
|
The desired output columns/fields to include.
|
|
595
951
|
|
|
596
952
|
Returns
|
|
@@ -602,9 +958,9 @@ class CollectionManager(Client2):
|
|
|
602
958
|
Raises
|
|
603
959
|
------
|
|
604
960
|
|
|
605
|
-
|
|
961
|
+
PyegeriaInvalidParameterException
|
|
606
962
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
607
|
-
|
|
963
|
+
PyegeriaAPIException
|
|
608
964
|
Raised by the server when an issue arises in processing a valid request
|
|
609
965
|
NotAuthorizedException
|
|
610
966
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -629,14 +985,14 @@ class CollectionManager(Client2):
|
|
|
629
985
|
|
|
630
986
|
return asyncio.get_event_loop().run_until_complete(
|
|
631
987
|
self._async_get_collections_by_category(category, classification_names, body, start_from, page_size,
|
|
632
|
-
output_format,
|
|
988
|
+
output_format, report_spec))
|
|
633
989
|
|
|
634
990
|
|
|
635
991
|
@dynamic_catch
|
|
636
|
-
async def _async_get_collection_by_guid(self, collection_guid: str, element_type: str = None,
|
|
637
|
-
body: dict | GetRequestBody = None,
|
|
992
|
+
async def _async_get_collection_by_guid(self, collection_guid: str, element_type: Optional[str] = None,
|
|
993
|
+
body: Optional[dict | GetRequestBody] = None,
|
|
638
994
|
output_format: str = 'JSON',
|
|
639
|
-
|
|
995
|
+
report_spec: str | dict = None) -> dict | str:
|
|
640
996
|
"""Return the properties of a specific collection. Async version.
|
|
641
997
|
|
|
642
998
|
Parameters
|
|
@@ -649,7 +1005,7 @@ class CollectionManager(Client2):
|
|
|
649
1005
|
full request body.
|
|
650
1006
|
output_format: str, default = "JSON"
|
|
651
1007
|
- one of "DICT", "MERMAID" or "JSON"
|
|
652
|
-
|
|
1008
|
+
report_spec: str | dict, optional, default = None
|
|
653
1009
|
The desired output columns/fields to include.
|
|
654
1010
|
|
|
655
1011
|
Returns
|
|
@@ -661,9 +1017,9 @@ class CollectionManager(Client2):
|
|
|
661
1017
|
Raises
|
|
662
1018
|
------
|
|
663
1019
|
|
|
664
|
-
|
|
1020
|
+
PyegeriaInvalidParameterException
|
|
665
1021
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
666
|
-
|
|
1022
|
+
PyegeriaAPIException
|
|
667
1023
|
Raised by the server when an issue arises in processing a valid request
|
|
668
1024
|
NotAuthorizedException
|
|
669
1025
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -685,7 +1041,7 @@ class CollectionManager(Client2):
|
|
|
685
1041
|
|
|
686
1042
|
response = await self._async_get_guid_request(url, _type=type,
|
|
687
1043
|
_gen_output=self._generate_collection_output,
|
|
688
|
-
output_format=output_format,
|
|
1044
|
+
output_format=output_format, report_spec=report_spec,
|
|
689
1045
|
body=body)
|
|
690
1046
|
|
|
691
1047
|
return response
|
|
@@ -693,8 +1049,8 @@ class CollectionManager(Client2):
|
|
|
693
1049
|
|
|
694
1050
|
|
|
695
1051
|
|
|
696
|
-
def get_collection_by_guid(self, collection_guid: str, element_type: str = None, body: dict | GetRequestBody= None,
|
|
697
|
-
output_format: str = 'JSON',
|
|
1052
|
+
def get_collection_by_guid(self, collection_guid: str, element_type: Optional[str] = None, body: dict | GetRequestBody= None,
|
|
1053
|
+
output_format: str = 'JSON', report_spec: str | dict = None) -> dict | str:
|
|
698
1054
|
""" Return the properties of a specific collection. Async version.
|
|
699
1055
|
|
|
700
1056
|
Parameters
|
|
@@ -707,7 +1063,7 @@ class CollectionManager(Client2):
|
|
|
707
1063
|
full request body.
|
|
708
1064
|
output_format: str, default = "JSON"
|
|
709
1065
|
- one of "DICT", "MERMAID" or "JSON"
|
|
710
|
-
|
|
1066
|
+
report_spec: dict , optional, default = None
|
|
711
1067
|
The desired output columns/fields to include.
|
|
712
1068
|
|
|
713
1069
|
|
|
@@ -720,9 +1076,9 @@ class CollectionManager(Client2):
|
|
|
720
1076
|
Raises
|
|
721
1077
|
------
|
|
722
1078
|
|
|
723
|
-
|
|
1079
|
+
PyegeriaInvalidParameterException
|
|
724
1080
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
725
|
-
|
|
1081
|
+
PyegeriaAPIException
|
|
726
1082
|
Raised by the server when an issue arises in processing a valid request
|
|
727
1083
|
NotAuthorizedException
|
|
728
1084
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -740,14 +1096,14 @@ class CollectionManager(Client2):
|
|
|
740
1096
|
"""
|
|
741
1097
|
return asyncio.get_event_loop().run_until_complete(
|
|
742
1098
|
self._async_get_collection_by_guid(collection_guid, element_type, body,
|
|
743
|
-
output_format,
|
|
1099
|
+
output_format, report_spec))
|
|
744
1100
|
|
|
745
1101
|
|
|
746
1102
|
@dynamic_catch
|
|
747
|
-
async def _async_get_collection_members(self, collection_guid: str = None, collection_name: str = None,
|
|
748
|
-
collection_qname: str = None, body: dict | ResultsRequestBody = None, start_from: int = 0,
|
|
1103
|
+
async def _async_get_collection_members(self, collection_guid: Optional[str] = None, collection_name: Optional[str] = None,
|
|
1104
|
+
collection_qname: Optional[str] = None, body: Optional[dict | ResultsRequestBody] = None, start_from: int = 0,
|
|
749
1105
|
page_size: int = 0, output_format: str = "JSON",
|
|
750
|
-
|
|
1106
|
+
report_spec: str | dict = None) -> list | str:
|
|
751
1107
|
"""Return a list of elements that are a member of a collection. Async version.
|
|
752
1108
|
|
|
753
1109
|
Parameters
|
|
@@ -770,7 +1126,7 @@ class CollectionManager(Client2):
|
|
|
770
1126
|
the class instance.
|
|
771
1127
|
output_format: str, default = "JSON"
|
|
772
1128
|
- one of "MD", "LIST", "FORM", "REPORT", "DICT", "MERMAID" or "JSON"
|
|
773
|
-
|
|
1129
|
+
report_spec: str | dict , optional, default = None
|
|
774
1130
|
The desired output columns/fields to include.
|
|
775
1131
|
|
|
776
1132
|
Returns
|
|
@@ -782,9 +1138,9 @@ class CollectionManager(Client2):
|
|
|
782
1138
|
Raises
|
|
783
1139
|
------
|
|
784
1140
|
|
|
785
|
-
|
|
1141
|
+
PyegeriaInvalidParameterException
|
|
786
1142
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
787
|
-
|
|
1143
|
+
PyegeriaAPIException
|
|
788
1144
|
Raised by the server when an issue arises in processing a valid request
|
|
789
1145
|
NotAuthorizedException
|
|
790
1146
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -812,16 +1168,16 @@ class CollectionManager(Client2):
|
|
|
812
1168
|
|
|
813
1169
|
response = await self._async_get_results_body_request(url, _type="Collection",
|
|
814
1170
|
_gen_output=self._generate_collection_output,
|
|
815
|
-
output_format=output_format,
|
|
1171
|
+
output_format=output_format, report_spec=report_spec,
|
|
816
1172
|
body=body)
|
|
817
1173
|
|
|
818
1174
|
return response
|
|
819
1175
|
|
|
820
1176
|
|
|
821
|
-
def get_collection_members(self, collection_guid: str = None, collection_name: str = None,
|
|
822
|
-
collection_qname: str = None, body: dict = None, start_from: int = 0,
|
|
1177
|
+
def get_collection_members(self, collection_guid: Optional[str] = None, collection_name: Optional[str] = None,
|
|
1178
|
+
collection_qname: Optional[str] = None, body: dict = None, start_from: int = 0,
|
|
823
1179
|
page_size: int = 0,
|
|
824
|
-
output_format: str = "JSON",
|
|
1180
|
+
output_format: str = "JSON", report_spec: str | dict = None) -> list | str:
|
|
825
1181
|
"""Return a list of elements that are a member of a collection.
|
|
826
1182
|
Parameters
|
|
827
1183
|
----------
|
|
@@ -843,7 +1199,7 @@ class CollectionManager(Client2):
|
|
|
843
1199
|
the class instance.
|
|
844
1200
|
output_format: str, default = "JSON"
|
|
845
1201
|
- one of "MD", "LIST", "FORM", "REPORT", "DICT", "MERMAID" or "JSON"
|
|
846
|
-
|
|
1202
|
+
report_spec: str | dict , optional, default = None
|
|
847
1203
|
The desired output columns/fields to include.
|
|
848
1204
|
|
|
849
1205
|
Returns
|
|
@@ -855,9 +1211,9 @@ class CollectionManager(Client2):
|
|
|
855
1211
|
Raises
|
|
856
1212
|
------
|
|
857
1213
|
|
|
858
|
-
|
|
1214
|
+
PyegeriaInvalidParameterException
|
|
859
1215
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
860
|
-
|
|
1216
|
+
PyegeriaAPIException
|
|
861
1217
|
Raised by the server when an issue arises in processing a valid request
|
|
862
1218
|
NotAuthorizedException
|
|
863
1219
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -878,15 +1234,15 @@ class CollectionManager(Client2):
|
|
|
878
1234
|
loop = asyncio.get_event_loop()
|
|
879
1235
|
resp = loop.run_until_complete(
|
|
880
1236
|
self._async_get_collection_members(collection_guid, collection_name, collection_qname, body, start_from,
|
|
881
|
-
page_size, output_format,
|
|
1237
|
+
page_size, output_format, report_spec))
|
|
882
1238
|
|
|
883
1239
|
return resp
|
|
884
1240
|
|
|
885
1241
|
|
|
886
1242
|
@dynamic_catch
|
|
887
|
-
async def _async_get_collection_hierarchy(self, collection_guid: str, body: dict | ResultsRequestBody = None, start_from: int = 0,
|
|
1243
|
+
async def _async_get_collection_hierarchy(self, collection_guid: str, body: Optional[dict | ResultsRequestBody] = None, start_from: int = 0,
|
|
888
1244
|
page_size: int = 0, output_format: str = "JSON",
|
|
889
|
-
|
|
1245
|
+
report_spec: str | dict = None) -> list | str:
|
|
890
1246
|
""" Return a hierarchy of nested collections. Request body is optional Async version.
|
|
891
1247
|
|
|
892
1248
|
Parameters
|
|
@@ -903,7 +1259,7 @@ class CollectionManager(Client2):
|
|
|
903
1259
|
the class instance.
|
|
904
1260
|
output_format: str, default = "JSON"
|
|
905
1261
|
- one of "MD", "LIST", "FORM", "REPORT", "DICT", "MERMAID" or "JSON"
|
|
906
|
-
|
|
1262
|
+
report_spec: dict , optional, default = None
|
|
907
1263
|
The desired output columns/fields to include.
|
|
908
1264
|
|
|
909
1265
|
Returns
|
|
@@ -915,9 +1271,9 @@ class CollectionManager(Client2):
|
|
|
915
1271
|
Raises
|
|
916
1272
|
------
|
|
917
1273
|
|
|
918
|
-
|
|
1274
|
+
PyegeriaInvalidParameterException
|
|
919
1275
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
920
|
-
|
|
1276
|
+
PyegeriaAPIException
|
|
921
1277
|
Raised by the server when an issue arises in processing a valid request
|
|
922
1278
|
NotAuthorizedException
|
|
923
1279
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -942,14 +1298,14 @@ class CollectionManager(Client2):
|
|
|
942
1298
|
_gen_output=self._generate_collection_output,
|
|
943
1299
|
start_from=start_from, page_size=page_size,
|
|
944
1300
|
output_format=output_format,
|
|
945
|
-
|
|
1301
|
+
report_spec=report_spec,
|
|
946
1302
|
body=body)
|
|
947
1303
|
|
|
948
1304
|
return response
|
|
949
1305
|
|
|
950
|
-
def get_collection_hierarchy(self, collection_guid: str = None, body: dict| ResultsRequestBody = None, start_from: int = 0,
|
|
1306
|
+
def get_collection_hierarchy(self, collection_guid: Optional[str] = None, body: dict| ResultsRequestBody = None, start_from: int = 0,
|
|
951
1307
|
page_size: int = 0, output_format: str = "JSON",
|
|
952
|
-
|
|
1308
|
+
report_spec: str | dict = None) -> list | str:
|
|
953
1309
|
""" Return a graph of elements that are the nested members of a collection along
|
|
954
1310
|
with elements immediately connected to the starting collection. The result
|
|
955
1311
|
includes a mermaid graph of the returned elements.
|
|
@@ -968,7 +1324,7 @@ class CollectionManager(Client2):
|
|
|
968
1324
|
the class instance.
|
|
969
1325
|
output_format: str, default = "JSON"
|
|
970
1326
|
- one of "MD", "LIST", "FORM", "REPORT", "DICT", "MERMAID" or "JSON"
|
|
971
|
-
|
|
1327
|
+
report_spec: str | dict , optional, default = None
|
|
972
1328
|
The desired output columns/fields to include.
|
|
973
1329
|
|
|
974
1330
|
Returns
|
|
@@ -980,9 +1336,9 @@ class CollectionManager(Client2):
|
|
|
980
1336
|
Raises
|
|
981
1337
|
------
|
|
982
1338
|
|
|
983
|
-
|
|
1339
|
+
PyegeriaInvalidParameterException
|
|
984
1340
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
985
|
-
|
|
1341
|
+
PyegeriaAPIException
|
|
986
1342
|
Raised by the server when an issue arises in processing a valid request
|
|
987
1343
|
NotAuthorizedException
|
|
988
1344
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -1001,13 +1357,13 @@ class CollectionManager(Client2):
|
|
|
1001
1357
|
"""
|
|
1002
1358
|
return asyncio.get_event_loop().run_until_complete(
|
|
1003
1359
|
self._async_get_collection_hierarchy(collection_guid, body, start_from, page_size,
|
|
1004
|
-
output_format,
|
|
1360
|
+
output_format, report_spec))
|
|
1005
1361
|
|
|
1006
1362
|
|
|
1007
1363
|
@dynamic_catch
|
|
1008
|
-
async def _async_create_collection(self, display_name: str = None, description: str = None,
|
|
1009
|
-
category: str = None, initial_classifications: list[str] = None,
|
|
1010
|
-
body: dict | NewElementRequestBody = None) -> str:
|
|
1364
|
+
async def _async_create_collection(self, display_name: Optional[str] = None, description: Optional[str] = None,
|
|
1365
|
+
category: Optional[str] = None, initial_classifications: Optional[list[str]] = None, prop: list[str] = ["Collection"],
|
|
1366
|
+
body: Optional[dict | NewElementRequestBody] = None) -> str:
|
|
1011
1367
|
""" Create a new generic collection. If the body is not present, the display_name, description, category
|
|
1012
1368
|
and classification will be used to create a simple, self-anchored collection.
|
|
1013
1369
|
Collections: https://egeria-project.org/concepts/collection
|
|
@@ -1025,7 +1381,8 @@ class CollectionManager(Client2):
|
|
|
1025
1381
|
initial_classifications: list[str], optional
|
|
1026
1382
|
An initial list of classifications for the collection. This can be used to distinguish, for instance, Folders
|
|
1027
1383
|
from Root Collections.
|
|
1028
|
-
|
|
1384
|
+
prop: list[str], optional
|
|
1385
|
+
The kind of collection property to use.
|
|
1029
1386
|
body: dict | NewElementRequestBody, optional
|
|
1030
1387
|
A dict or NewElementRequestBody representing the details of the collection to create. If supplied, this
|
|
1031
1388
|
information will be used to create the collection and the other attributes will be ignored. The body is
|
|
@@ -1054,7 +1411,7 @@ class CollectionManager(Client2):
|
|
|
1054
1411
|
"properties": {
|
|
1055
1412
|
"class": "CollectionProperties",
|
|
1056
1413
|
"qualifiedName": "Must provide a unique name here",
|
|
1057
|
-
"
|
|
1414
|
+
"displayName": "Add display name here",
|
|
1058
1415
|
"description": "Add description of the collection here",
|
|
1059
1416
|
"category": "Add appropriate valid value for type"
|
|
1060
1417
|
}
|
|
@@ -1072,7 +1429,7 @@ class CollectionManager(Client2):
|
|
|
1072
1429
|
"properties": {
|
|
1073
1430
|
"class": "CollectionProperties",
|
|
1074
1431
|
"qualifiedName": "Must provide a unique name here",
|
|
1075
|
-
"
|
|
1432
|
+
"displayName": "Add display name here",
|
|
1076
1433
|
"description": "Add description of the collection here",
|
|
1077
1434
|
"category": "Add appropriate valid value for type"
|
|
1078
1435
|
},
|
|
@@ -1098,7 +1455,7 @@ class CollectionManager(Client2):
|
|
|
1098
1455
|
"properties": {
|
|
1099
1456
|
"class": "CollectionProperties",
|
|
1100
1457
|
"qualifiedName": "Must provide a unique name here",
|
|
1101
|
-
"
|
|
1458
|
+
"displayName": "Add display name here",
|
|
1102
1459
|
"description": "Add description of the collection here",
|
|
1103
1460
|
"category": "Add appropriate valid value for type"
|
|
1104
1461
|
},
|
|
@@ -1113,7 +1470,11 @@ class CollectionManager(Client2):
|
|
|
1113
1470
|
if body:
|
|
1114
1471
|
validated_body = self.validate_new_element_request(body,"CollectionProperties")
|
|
1115
1472
|
elif (body is None) and (display_name is not None):
|
|
1116
|
-
|
|
1473
|
+
if initial_classifications:
|
|
1474
|
+
pre = initial_classifications[0]
|
|
1475
|
+
else:
|
|
1476
|
+
pre = prop[0]
|
|
1477
|
+
|
|
1117
1478
|
qualified_name = self.__create_qualified_name__(pre, display_name, EGERIA_LOCAL_QUALIFIER)
|
|
1118
1479
|
if initial_classifications:
|
|
1119
1480
|
initial_classifications_dict = {}
|
|
@@ -1127,7 +1488,8 @@ class CollectionManager(Client2):
|
|
|
1127
1488
|
qualified_name = qualified_name,
|
|
1128
1489
|
display_name = display_name,
|
|
1129
1490
|
description = description,
|
|
1130
|
-
category = category
|
|
1491
|
+
category = category,
|
|
1492
|
+
typeName = prop[0]
|
|
1131
1493
|
)
|
|
1132
1494
|
body = {
|
|
1133
1495
|
"class" :"NewElementRequestBody",
|
|
@@ -1140,16 +1502,23 @@ class CollectionManager(Client2):
|
|
|
1140
1502
|
raise PyegeriaInvalidParameterException(additional_info={"reason": "Invalid input parameters"})
|
|
1141
1503
|
|
|
1142
1504
|
url = f"{self.collection_command_root}"
|
|
1143
|
-
json_body = validated_body.model_dump_json(indent=2, exclude_none=True)
|
|
1144
|
-
logger.info(json_body)
|
|
1145
|
-
resp = await self._async_make_request("POST", url, json_body, is_json=True)
|
|
1146
|
-
logger.info(f"Create collection with GUID: {resp.json().get('guid')}")
|
|
1147
|
-
return resp.json().get("guid", NO_GUID_RETURNED)
|
|
1148
1505
|
|
|
1506
|
+
prop = validated_body.properties['class']
|
|
1507
|
+
prop = prop.replace('Properties','')
|
|
1508
|
+
|
|
1509
|
+
# json_body = validated_body.model_dump_json(indent=2, exclude_none=True)
|
|
1510
|
+
#
|
|
1511
|
+
# logger.info(json_body)
|
|
1512
|
+
# resp = await self._async_make_request("POST", url, json_body, is_json=True)
|
|
1513
|
+
# logger.info(f"Create collection with GUID: {resp.json().get('guid')}")
|
|
1514
|
+
# return resp.json().get("guid", NO_GUID_RETURNED)
|
|
1515
|
+
response = await self._async_create_element_body_request(url, [prop], validated_body)
|
|
1516
|
+
return response
|
|
1149
1517
|
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1518
|
+
|
|
1519
|
+
def create_collection(self, display_name: Optional[str] = None, description: Optional[str] = None,
|
|
1520
|
+
category: Optional[str] = None, initial_classifications: Optional[list[str]] = None, prop:list[str]=["Collection"],
|
|
1521
|
+
body: Optional[dict | NewElementRequestBody] = None) -> str:
|
|
1153
1522
|
""" Create a new generic collection. If the body is not present, the display_name, description, category
|
|
1154
1523
|
and classification will be used to create a simple, self-anchored collection.
|
|
1155
1524
|
Collections: https://egeria-project.org/concepts/collection
|
|
@@ -1166,7 +1535,8 @@ class CollectionManager(Client2):
|
|
|
1166
1535
|
initial_classifications: str, optional
|
|
1167
1536
|
An initial classification for the collection. This can be used to distinguish, for instance, Folders
|
|
1168
1537
|
from Root Collections.
|
|
1169
|
-
|
|
1538
|
+
prop: str, optional
|
|
1539
|
+
The types of the collection.
|
|
1170
1540
|
body: dict | NewElementRequestBody, optional
|
|
1171
1541
|
A dict or NewElementRequestBody representing the details of the collection to create. If supplied, this
|
|
1172
1542
|
information will be used to create the collection and the other attributes will be ignored. The body is
|
|
@@ -1195,7 +1565,7 @@ class CollectionManager(Client2):
|
|
|
1195
1565
|
"properties": {
|
|
1196
1566
|
"class": "CollectionProperties",
|
|
1197
1567
|
"qualifiedName": "Must provide a unique name here",
|
|
1198
|
-
"
|
|
1568
|
+
"displayName": "Add display name here",
|
|
1199
1569
|
"description": "Add description of the collection here",
|
|
1200
1570
|
"category": "Add appropriate valid value for type"
|
|
1201
1571
|
}
|
|
@@ -1213,7 +1583,7 @@ class CollectionManager(Client2):
|
|
|
1213
1583
|
"properties": {
|
|
1214
1584
|
"class": "CollectionProperties",
|
|
1215
1585
|
"qualifiedName": "Must provide a unique name here",
|
|
1216
|
-
"
|
|
1586
|
+
"displayName": "Add display name here",
|
|
1217
1587
|
"description": "Add description of the collection here",
|
|
1218
1588
|
"category": "Add appropriate valid value for type"
|
|
1219
1589
|
},
|
|
@@ -1239,7 +1609,7 @@ class CollectionManager(Client2):
|
|
|
1239
1609
|
"properties": {
|
|
1240
1610
|
"class": "CollectionProperties",
|
|
1241
1611
|
"qualifiedName": "Must provide a unique name here",
|
|
1242
|
-
"
|
|
1612
|
+
"displayName": "Add display name here",
|
|
1243
1613
|
"description": "Add description of the collection here",
|
|
1244
1614
|
"category": "Add appropriate valid value for type"
|
|
1245
1615
|
},
|
|
@@ -1255,12 +1625,12 @@ class CollectionManager(Client2):
|
|
|
1255
1625
|
|
|
1256
1626
|
return asyncio.get_event_loop().run_until_complete(
|
|
1257
1627
|
self._async_create_collection(display_name, description,category,
|
|
1258
|
-
initial_classifications,
|
|
1628
|
+
initial_classifications, prop, body))
|
|
1259
1629
|
|
|
1260
1630
|
|
|
1261
1631
|
@dynamic_catch
|
|
1262
|
-
def create_root_collection(self, display_name: str = None, description: str = None,
|
|
1263
|
-
category: str = None, body: dict | NewElementRequestBody = None) -> str:
|
|
1632
|
+
def create_root_collection(self, display_name: Optional[str] = None, description: Optional[str] = None,
|
|
1633
|
+
category: Optional[str] = None, body: Optional[dict | NewElementRequestBody] = None) -> str:
|
|
1264
1634
|
""" Create a new collection with the RootCollection classification. Used to identify the top of a
|
|
1265
1635
|
collection hierarchy.
|
|
1266
1636
|
Create Collections: https://egeria-project.org/concepts/collection
|
|
@@ -1291,15 +1661,15 @@ class CollectionManager(Client2):
|
|
|
1291
1661
|
The principle specified by the user_id does not have authorization for the requested action
|
|
1292
1662
|
|
|
1293
1663
|
"""
|
|
1664
|
+
prop = "RootCollection"
|
|
1294
1665
|
|
|
1295
1666
|
return asyncio.get_event_loop().run_until_complete(
|
|
1296
1667
|
self._async_create_collection(display_name=display_name, description=description, category=category,
|
|
1297
|
-
initial_classifications = [
|
|
1298
|
-
|
|
1668
|
+
initial_classifications = [], prop = [prop], body=body))
|
|
1299
1669
|
|
|
1300
1670
|
@dynamic_catch
|
|
1301
|
-
def create_folder_collection(self, display_name: str = None, description: str = None,
|
|
1302
|
-
category: str = None, body: dict | NewElementRequestBody = None) -> str:
|
|
1671
|
+
def create_folder_collection(self, display_name: Optional[str] = None, description: Optional[str] = None,
|
|
1672
|
+
category: Optional[str] = None, body: Optional[dict | NewElementRequestBody] = None) -> str:
|
|
1303
1673
|
""" Create a new collection with the RootCollection classification. Used to identify the top of a
|
|
1304
1674
|
collection hierarchy.
|
|
1305
1675
|
Create Collections: https://egeria-project.org/concepts/collection
|
|
@@ -1330,17 +1700,15 @@ class CollectionManager(Client2):
|
|
|
1330
1700
|
The principle specified by the user_id does not have authorization for the requested action
|
|
1331
1701
|
|
|
1332
1702
|
"""
|
|
1703
|
+
prop = "CollectionFolder"
|
|
1333
1704
|
|
|
1334
1705
|
return asyncio.get_event_loop().run_until_complete(
|
|
1335
|
-
self._async_create_collection(display_name, description, category,
|
|
1336
|
-
[
|
|
1337
|
-
|
|
1338
|
-
|
|
1706
|
+
self._async_create_collection(display_name=display_name, description=description, category=category,
|
|
1707
|
+
initial_classifications=[], prop=[prop], body=body))
|
|
1339
1708
|
|
|
1340
|
-
return resp
|
|
1341
1709
|
@dynamic_catch
|
|
1342
|
-
def create_reference_list_collection(self, display_name: str = None, description: str = None,
|
|
1343
|
-
category: str = None, body: dict | NewElementRequestBody = None) -> str:
|
|
1710
|
+
def create_reference_list_collection(self, display_name: Optional[str] = None, description: Optional[str] = None,
|
|
1711
|
+
category: Optional[str] = None, body: Optional[dict | NewElementRequestBody] = None) -> str:
|
|
1344
1712
|
""" Create a new collection with the RootCollection classification. Used to identify the top of a
|
|
1345
1713
|
collection hierarchy.
|
|
1346
1714
|
Create Collections: https://egeria-project.org/concepts/collection
|
|
@@ -1377,8 +1745,8 @@ class CollectionManager(Client2):
|
|
|
1377
1745
|
["ReferenceList"], body))
|
|
1378
1746
|
|
|
1379
1747
|
@dynamic_catch
|
|
1380
|
-
def create_context_event_collection(self, display_name: str = None, description: str = None,
|
|
1381
|
-
category: str = None, body: dict | NewElementRequestBody = None) -> str:
|
|
1748
|
+
def create_context_event_collection(self, display_name: Optional[str] = None, description: Optional[str] = None,
|
|
1749
|
+
category: Optional[str] = None, body: Optional[dict | NewElementRequestBody] = None) -> str:
|
|
1382
1750
|
""" Create a new collection with the RootCollection classification. Used to identify the top of a
|
|
1383
1751
|
collection hierarchy.
|
|
1384
1752
|
Create Collections: https://egeria-project.org/concepts/collection
|
|
@@ -1415,8 +1783,8 @@ class CollectionManager(Client2):
|
|
|
1415
1783
|
["ContextEvent"], body))
|
|
1416
1784
|
|
|
1417
1785
|
# @dynamic_catch
|
|
1418
|
-
# def create_glossary(self, display_name: str, description: str = None, language: str = "English", usage: str = None,
|
|
1419
|
-
# category: str = None, body: dict | NewElementRequestBody = None) -> str:
|
|
1786
|
+
# def create_glossary(self, display_name: str, description: Optional[str] = None, language: str = "English", usage: Optional[str] = None,
|
|
1787
|
+
# category: Optional[str] = None, body: Optional[dict | NewElementRequestBody] = None) -> str:
|
|
1420
1788
|
# """Create a new glossary with optional classification. """
|
|
1421
1789
|
# if body is None:
|
|
1422
1790
|
#
|
|
@@ -1438,9 +1806,9 @@ class CollectionManager(Client2):
|
|
|
1438
1806
|
# return response
|
|
1439
1807
|
|
|
1440
1808
|
@dynamic_catch
|
|
1441
|
-
async def _async_create_data_spec_collection(self, display_name: str = None, description: str = None,
|
|
1442
|
-
category: str = None, classification_name: str = None,
|
|
1443
|
-
body: dict | NewElementRequestBody = None) -> str:
|
|
1809
|
+
async def _async_create_data_spec_collection(self, display_name: Optional[str] = None, description: Optional[str] = None,
|
|
1810
|
+
category: Optional[str] = None, classification_name: Optional[str] = None,
|
|
1811
|
+
body: Optional[dict | NewElementRequestBody] = None) -> str:
|
|
1444
1812
|
""" Create a new generic collection. If the body is not present, the display_name, description, category
|
|
1445
1813
|
and classification will be used to create a simple, self-anchored collection.
|
|
1446
1814
|
Collections: https://egeria-project.org/concepts/collection
|
|
@@ -1487,7 +1855,7 @@ class CollectionManager(Client2):
|
|
|
1487
1855
|
"properties": {
|
|
1488
1856
|
"class": "CollectionProperties",
|
|
1489
1857
|
"qualifiedName": "Must provide a unique name here",
|
|
1490
|
-
"
|
|
1858
|
+
"displayName": "Add display name here",
|
|
1491
1859
|
"description": "Add description of the collection here",
|
|
1492
1860
|
"category": "Add appropriate valid value for type"
|
|
1493
1861
|
}
|
|
@@ -1505,7 +1873,7 @@ class CollectionManager(Client2):
|
|
|
1505
1873
|
"properties": {
|
|
1506
1874
|
"class": "CollectionProperties",
|
|
1507
1875
|
"qualifiedName": "Must provide a unique name here",
|
|
1508
|
-
"
|
|
1876
|
+
"displayName": "Add display name here",
|
|
1509
1877
|
"description": "Add description of the collection here",
|
|
1510
1878
|
"category": "Add appropriate valid value for type"
|
|
1511
1879
|
},
|
|
@@ -1531,7 +1899,7 @@ class CollectionManager(Client2):
|
|
|
1531
1899
|
"properties": {
|
|
1532
1900
|
"class": "CollectionProperties",
|
|
1533
1901
|
"qualifiedName": "Must provide a unique name here",
|
|
1534
|
-
"
|
|
1902
|
+
"displayName": "Add display name here",
|
|
1535
1903
|
"description": "Add description of the collection here",
|
|
1536
1904
|
"category": "Add appropriate valid value for type"
|
|
1537
1905
|
},
|
|
@@ -1583,9 +1951,9 @@ class CollectionManager(Client2):
|
|
|
1583
1951
|
return resp.json().get("guid", NO_GUID_RETURNED)
|
|
1584
1952
|
|
|
1585
1953
|
@dynamic_catch
|
|
1586
|
-
def create_data_spec_collection(self, display_name: str = None, description: str = None,
|
|
1587
|
-
category: str = None, classification_name: str = None,
|
|
1588
|
-
body: dict | NewElementRequestBody = None) -> str:
|
|
1954
|
+
def create_data_spec_collection(self, display_name: Optional[str] = None, description: Optional[str] = None,
|
|
1955
|
+
category: Optional[str] = None, classification_name: Optional[str] = None,
|
|
1956
|
+
body: Optional[dict | NewElementRequestBody] = None) -> str:
|
|
1589
1957
|
""" Create a new generic collection. If the body is not present, the display_name, description, category
|
|
1590
1958
|
and classification will be used to create a simple, self-anchored collection.
|
|
1591
1959
|
Collections: https://egeria-project.org/concepts/collection
|
|
@@ -1631,7 +1999,7 @@ class CollectionManager(Client2):
|
|
|
1631
1999
|
"properties": {
|
|
1632
2000
|
"class": "CollectionProperties",
|
|
1633
2001
|
"qualifiedName": "Must provide a unique name here",
|
|
1634
|
-
"
|
|
2002
|
+
"displayName": "Add display name here",
|
|
1635
2003
|
"description": "Add description of the collection here",
|
|
1636
2004
|
"category": "Add appropriate valid value for type"
|
|
1637
2005
|
}
|
|
@@ -1649,7 +2017,7 @@ class CollectionManager(Client2):
|
|
|
1649
2017
|
"properties": {
|
|
1650
2018
|
"class": "CollectionProperties",
|
|
1651
2019
|
"qualifiedName": "Must provide a unique name here",
|
|
1652
|
-
"
|
|
2020
|
+
"displayName": "Add display name here",
|
|
1653
2021
|
"description": "Add description of the collection here",
|
|
1654
2022
|
"category": "Add appropriate valid value for type"
|
|
1655
2023
|
},
|
|
@@ -1675,7 +2043,7 @@ class CollectionManager(Client2):
|
|
|
1675
2043
|
"properties": {
|
|
1676
2044
|
"class": "CollectionProperties",
|
|
1677
2045
|
"qualifiedName": "Must provide a unique name here",
|
|
1678
|
-
"
|
|
2046
|
+
"displayName": "Add display name here",
|
|
1679
2047
|
"description": "Add description of the collection here",
|
|
1680
2048
|
"category": "Add appropriate valid value for type"
|
|
1681
2049
|
},
|
|
@@ -1695,9 +2063,9 @@ class CollectionManager(Client2):
|
|
|
1695
2063
|
|
|
1696
2064
|
|
|
1697
2065
|
@dynamic_catch
|
|
1698
|
-
async def _async_create_data_dictionary_collection(self, display_name: str = None, description: str = None,
|
|
1699
|
-
category: str = None, classification_name: str = None,
|
|
1700
|
-
body: dict | NewElementRequestBody = None) -> str:
|
|
2066
|
+
async def _async_create_data_dictionary_collection(self, display_name: Optional[str] = None, description: Optional[str] = None,
|
|
2067
|
+
category: Optional[str] = None, classification_name: Optional[str] = None,
|
|
2068
|
+
body: Optional[dict | NewElementRequestBody] = None) -> str:
|
|
1701
2069
|
""" Create a new generic collection. If the body is not present, the display_name, description, category
|
|
1702
2070
|
and classification will be used to create a simple, self-anchored collection.
|
|
1703
2071
|
Collections: https://egeria-project.org/concepts/collection
|
|
@@ -1744,7 +2112,7 @@ class CollectionManager(Client2):
|
|
|
1744
2112
|
"properties": {
|
|
1745
2113
|
"class": "CollectionProperties",
|
|
1746
2114
|
"qualifiedName": "Must provide a unique name here",
|
|
1747
|
-
"
|
|
2115
|
+
"displayName": "Add display name here",
|
|
1748
2116
|
"description": "Add description of the collection here",
|
|
1749
2117
|
"category": "Add appropriate valid value for type"
|
|
1750
2118
|
}
|
|
@@ -1762,7 +2130,7 @@ class CollectionManager(Client2):
|
|
|
1762
2130
|
"properties": {
|
|
1763
2131
|
"class": "CollectionProperties",
|
|
1764
2132
|
"qualifiedName": "Must provide a unique name here",
|
|
1765
|
-
"
|
|
2133
|
+
"displayName": "Add display name here",
|
|
1766
2134
|
"description": "Add description of the collection here",
|
|
1767
2135
|
"category": "Add appropriate valid value for type"
|
|
1768
2136
|
},
|
|
@@ -1788,7 +2156,7 @@ class CollectionManager(Client2):
|
|
|
1788
2156
|
"properties": {
|
|
1789
2157
|
"class": "CollectionProperties",
|
|
1790
2158
|
"qualifiedName": "Must provide a unique name here",
|
|
1791
|
-
"
|
|
2159
|
+
"displayName": "Add display name here",
|
|
1792
2160
|
"description": "Add description of the collection here",
|
|
1793
2161
|
"category": "Add appropriate valid value for type"
|
|
1794
2162
|
},
|
|
@@ -1838,9 +2206,9 @@ class CollectionManager(Client2):
|
|
|
1838
2206
|
return resp.json().get("guid", NO_GUID_RETURNED)
|
|
1839
2207
|
|
|
1840
2208
|
@dynamic_catch
|
|
1841
|
-
def create_data_dictionary_collection(self, display_name: str = None, description: str = None,
|
|
1842
|
-
category: str = None, classification_name: str = None,
|
|
1843
|
-
body: dict | NewElementRequestBody = None) -> str:
|
|
2209
|
+
def create_data_dictionary_collection(self, display_name: Optional[str] = None, description: Optional[str] = None,
|
|
2210
|
+
category: Optional[str] = None, classification_name: Optional[str] = None,
|
|
2211
|
+
body: Optional[dict | NewElementRequestBody] = None) -> str:
|
|
1844
2212
|
""" Create a new generic collection. If the body is not present, the display_name, description, category
|
|
1845
2213
|
and classification will be used to create a simple, self-anchored collection.
|
|
1846
2214
|
Collections: https://egeria-project.org/concepts/collection
|
|
@@ -1886,7 +2254,7 @@ class CollectionManager(Client2):
|
|
|
1886
2254
|
"properties": {
|
|
1887
2255
|
"class": "CollectionProperties",
|
|
1888
2256
|
"qualifiedName": "Must provide a unique name here",
|
|
1889
|
-
"
|
|
2257
|
+
"displayName": "Add display name here",
|
|
1890
2258
|
"description": "Add description of the collection here",
|
|
1891
2259
|
"category": "Add appropriate valid value for type"
|
|
1892
2260
|
}
|
|
@@ -1904,7 +2272,7 @@ class CollectionManager(Client2):
|
|
|
1904
2272
|
"properties": {
|
|
1905
2273
|
"class": "CollectionProperties",
|
|
1906
2274
|
"qualifiedName": "Must provide a unique name here",
|
|
1907
|
-
"
|
|
2275
|
+
"displayName": "Add display name here",
|
|
1908
2276
|
"description": "Add description of the collection here",
|
|
1909
2277
|
"category": "Add appropriate valid value for type"
|
|
1910
2278
|
},
|
|
@@ -1930,7 +2298,7 @@ class CollectionManager(Client2):
|
|
|
1930
2298
|
"properties": {
|
|
1931
2299
|
"class": "CollectionProperties",
|
|
1932
2300
|
"qualifiedName": "Must provide a unique name here",
|
|
1933
|
-
"
|
|
2301
|
+
"displayName": "Add display name here",
|
|
1934
2302
|
"description": "Add description of the collection here",
|
|
1935
2303
|
"category": "Add appropriate valid value for type"
|
|
1936
2304
|
},
|
|
@@ -1957,7 +2325,7 @@ class CollectionManager(Client2):
|
|
|
1957
2325
|
|
|
1958
2326
|
|
|
1959
2327
|
@dynamic_catch
|
|
1960
|
-
async def _async_create_collection_from_template(self, body:
|
|
2328
|
+
async def _async_create_collection_from_template(self, body: Optional[dict | TemplateRequestBody] = None) -> str:
|
|
1961
2329
|
"""Create a new metadata element to represent a collection using an existing metadata element as a template.
|
|
1962
2330
|
The template defines additional classifications and relationships that are added to the new collection.
|
|
1963
2331
|
Async version.
|
|
@@ -1974,12 +2342,13 @@ class CollectionManager(Client2):
|
|
|
1974
2342
|
|
|
1975
2343
|
Raises
|
|
1976
2344
|
------
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
2345
|
+
PyegeriaException
|
|
2346
|
+
One of the pyegeria exceptions will be raised if there are issues in communications, message format, or
|
|
2347
|
+
Egeria errors.
|
|
2348
|
+
ValidationError
|
|
2349
|
+
Pydantic validation errors are raised if the body does not conform to the DeleteElementRequestBody.
|
|
2350
|
+
PyegeriaNotAuthorizedException
|
|
2351
|
+
The principle specified by the user_id does not have authorization for the requested action
|
|
1983
2352
|
|
|
1984
2353
|
Notes
|
|
1985
2354
|
-----
|
|
@@ -2030,7 +2399,7 @@ class CollectionManager(Client2):
|
|
|
2030
2399
|
return resp.json().get("guid", NO_GUID_RETURNED)
|
|
2031
2400
|
|
|
2032
2401
|
|
|
2033
|
-
def create_collection_from_template(self, body: dict) -> str:
|
|
2402
|
+
def create_collection_from_template(self, body: Optional[dict | TemplateRequestBody] = None) -> str:
|
|
2034
2403
|
"""Create a new metadata element to represent a collection using an existing metadata element as a template.
|
|
2035
2404
|
The template defines additional classifications and relationships that are added to the new collection.
|
|
2036
2405
|
|
|
@@ -2045,9 +2414,9 @@ class CollectionManager(Client2):
|
|
|
2045
2414
|
|
|
2046
2415
|
Raises
|
|
2047
2416
|
------
|
|
2048
|
-
|
|
2417
|
+
PyegeriaInvalidParameterException
|
|
2049
2418
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
2050
|
-
|
|
2419
|
+
PyegeriaAPIException
|
|
2051
2420
|
Raised by the server when an issue arises in processing a valid request
|
|
2052
2421
|
NotAuthorizedException
|
|
2053
2422
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -2107,9 +2476,7 @@ class CollectionManager(Client2):
|
|
|
2107
2476
|
A dict or NewElementRequestBody representing the details of the collection to create. If supplied, this
|
|
2108
2477
|
information will be used to create the collection and the other attributes will be ignored. The body is
|
|
2109
2478
|
validated before being used.
|
|
2110
|
-
|
|
2111
|
-
If true then property changes will be overlaid on top of existing properties. If false, existing
|
|
2112
|
-
properties will all be replaced by the set provided in the update request.
|
|
2479
|
+
|
|
2113
2480
|
|
|
2114
2481
|
Returns
|
|
2115
2482
|
-------
|
|
@@ -2132,8 +2499,9 @@ class CollectionManager(Client2):
|
|
|
2132
2499
|
"class" : "UpdateElementRequestBody",
|
|
2133
2500
|
"properties": {
|
|
2134
2501
|
"class" : "CollectionProperties",
|
|
2502
|
+
"contentStatus": "Add appropriate valid value for type",
|
|
2135
2503
|
"qualifiedName": "Must provide a unique name here",
|
|
2136
|
-
"
|
|
2504
|
+
"displayName" : "Add display name here",
|
|
2137
2505
|
"description" : "Add description of the collection here",
|
|
2138
2506
|
"category": "Add appropriate valid value for type"
|
|
2139
2507
|
},
|
|
@@ -2151,10 +2519,6 @@ class CollectionManager(Client2):
|
|
|
2151
2519
|
await self._async_update_element_body_request(url, COLLECTION_PROPERTIES_LIST,body)
|
|
2152
2520
|
|
|
2153
2521
|
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
2522
|
@dynamic_catch
|
|
2159
2523
|
def update_collection(self, collection_guid: str, body: dict | NewElementRequestBody) -> None:
|
|
2160
2524
|
""" Update the properties of a collection. Use the correct properties object (CollectionProperties,
|
|
@@ -2170,9 +2534,7 @@ class CollectionManager(Client2):
|
|
|
2170
2534
|
A dict or NewElementRequestBody representing the details of the collection to create. If supplied, this
|
|
2171
2535
|
information will be used to create the collection and the other attributes will be ignored. The body is
|
|
2172
2536
|
validated before being used.
|
|
2173
|
-
|
|
2174
|
-
If true then property changes will be overlaid on top of existing properties. If false, existing
|
|
2175
|
-
properties will all be replaced by the set provided in the update request.
|
|
2537
|
+
|
|
2176
2538
|
|
|
2177
2539
|
Returns
|
|
2178
2540
|
-------
|
|
@@ -2196,8 +2558,9 @@ class CollectionManager(Client2):
|
|
|
2196
2558
|
"properties": {
|
|
2197
2559
|
"class" : "CollectionProperties",
|
|
2198
2560
|
"qualifiedName": "Must provide a unique name here",
|
|
2199
|
-
"
|
|
2561
|
+
"displayName" : "Add display name here",
|
|
2200
2562
|
"description" : "Add description of the collection here",
|
|
2563
|
+
"contentStatus": "Add appropriate valid value for type",
|
|
2201
2564
|
"category": "Add appropriate valid value for type"
|
|
2202
2565
|
},
|
|
2203
2566
|
"externalSourceGUID": "add guid here",
|
|
@@ -2251,7 +2614,7 @@ class CollectionManager(Client2):
|
|
|
2251
2614
|
"properties": {
|
|
2252
2615
|
"class" : "DigitalProductProperties",
|
|
2253
2616
|
"qualifiedName": "DigitalProduct::Add product name here",
|
|
2254
|
-
"
|
|
2617
|
+
"displayName" : "Product contents",
|
|
2255
2618
|
"description" : "Add description of product and its expected usage here",
|
|
2256
2619
|
"identifier" : "Add product identifier here",
|
|
2257
2620
|
"productName" : "Add product name here",
|
|
@@ -2281,11 +2644,11 @@ class CollectionManager(Client2):
|
|
|
2281
2644
|
default to ACTIVE.
|
|
2282
2645
|
"""
|
|
2283
2646
|
url = f"{self.collection_command_root}"
|
|
2284
|
-
return await self._async_create_element_body_request(url, "DigitalProductProperties", body)
|
|
2647
|
+
return await self._async_create_element_body_request(url, ["DigitalProductProperties"], body)
|
|
2285
2648
|
|
|
2286
2649
|
|
|
2287
2650
|
@dynamic_catch
|
|
2288
|
-
def create_digital_product(self, body: dict | NewElementRequestBody = None) -> str:
|
|
2651
|
+
def create_digital_product(self, body: Optional[dict | NewElementRequestBody] = None) -> str:
|
|
2289
2652
|
""" Create a new collection that represents a digital product.
|
|
2290
2653
|
|
|
2291
2654
|
Parameters
|
|
@@ -2322,7 +2685,7 @@ class CollectionManager(Client2):
|
|
|
2322
2685
|
"properties": {
|
|
2323
2686
|
"class" : "DigitalProductProperties",
|
|
2324
2687
|
"qualifiedName": "DigitalProduct::Add product name here",
|
|
2325
|
-
"
|
|
2688
|
+
"displayName" : "Product contents",
|
|
2326
2689
|
"description" : "Add description of product and its expected usage here",
|
|
2327
2690
|
"identifier" : "Add product identifier here",
|
|
2328
2691
|
"productName" : "Add product name here",
|
|
@@ -2343,10 +2706,9 @@ class CollectionManager(Client2):
|
|
|
2343
2706
|
"effectiveTime" : "{{$isoTimestamp}}",
|
|
2344
2707
|
"forLineage" : false,
|
|
2345
2708
|
"forDuplicateProcessing" : false,
|
|
2346
|
-
"initialStatus" : "ACTIVE"
|
|
2347
2709
|
}
|
|
2348
2710
|
|
|
2349
|
-
The valid values for
|
|
2711
|
+
The valid values for Status are: DRAFT, PREPARED, PROPOSED, APPROVED, REJECTED, APPROVED_CONCEPT,
|
|
2350
2712
|
UNDER_DEVELOPMENT, DEVELOPMENT_COMPLETE, APPROVED_FOR_DEPLOYMENT, ACTIVE, DISABLED, DEPRECATED,
|
|
2351
2713
|
OTHER. If using OTHER, set the userDefinedStatus with the status value you want. If not specified, will
|
|
2352
2714
|
default to ACTIVE.
|
|
@@ -2356,6 +2718,108 @@ class CollectionManager(Client2):
|
|
|
2356
2718
|
self._async_create_digital_product(body))
|
|
2357
2719
|
|
|
2358
2720
|
|
|
2721
|
+
@dynamic_catch
|
|
2722
|
+
async def _async_create_digital_product_catalog(self, body: dict | NewElementRequestBody) -> str:
|
|
2723
|
+
""" Create a new collection that represents a digital product.
|
|
2724
|
+
Async version.
|
|
2725
|
+
|
|
2726
|
+
Parameters
|
|
2727
|
+
----------
|
|
2728
|
+
body: dict | NewElementRequestBody
|
|
2729
|
+
A structure representing the details of the digital product to create.
|
|
2730
|
+
|
|
2731
|
+
Returns
|
|
2732
|
+
-------
|
|
2733
|
+
str - the guid of the created collection
|
|
2734
|
+
|
|
2735
|
+
Raises
|
|
2736
|
+
------
|
|
2737
|
+
PyegeriaException
|
|
2738
|
+
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
2739
|
+
ValidationError
|
|
2740
|
+
Raised by the pydantic validator if the body does not conform to the NewElementRequestBody.
|
|
2741
|
+
NotAuthorizedException
|
|
2742
|
+
The principle specified by the user_id does not have authorization for the requested action
|
|
2743
|
+
|
|
2744
|
+
Notes
|
|
2745
|
+
-----
|
|
2746
|
+
Note: the three dates: introductionDate, nextVersionDate and withdrawDate must
|
|
2747
|
+
be valid dates if specified, otherwise you will get a 400 error response.
|
|
2748
|
+
|
|
2749
|
+
simple body version:
|
|
2750
|
+
{
|
|
2751
|
+
"class": "NewElementRequestBody",
|
|
2752
|
+
"isOwnAnchor": true,
|
|
2753
|
+
"properties": {
|
|
2754
|
+
"class": "DigitalProductCatalogProperties",
|
|
2755
|
+
"qualifiedName": "Must provide a unique name here",
|
|
2756
|
+
"displayName": "Add display name here",
|
|
2757
|
+
"description": "Add description of the collection here",
|
|
2758
|
+
"category": "Add appropriate valid value for type"
|
|
2759
|
+
}
|
|
2760
|
+
}
|
|
2761
|
+
|
|
2762
|
+
The valid values for initialStatus are: DRAFT, PREPARED, PROPOSED, APPROVED, REJECTED, APPROVED_CONCEPT,
|
|
2763
|
+
UNDER_DEVELOPMENT, DEVELOPMENT_COMPLETE, APPROVED_FOR_DEPLOYMENT, ACTIVE, DISABLED, DEPRECATED,
|
|
2764
|
+
OTHER. If using OTHER, set the userDefinedStatus with the status value you want. If not specified, will
|
|
2765
|
+
default to ACTIVE.
|
|
2766
|
+
"""
|
|
2767
|
+
url = f"{self.collection_command_root}"
|
|
2768
|
+
return await self._async_create_element_body_request(url, "DigitalProductCatalogProperties", body)
|
|
2769
|
+
|
|
2770
|
+
|
|
2771
|
+
@dynamic_catch
|
|
2772
|
+
def create_digital_product_catalog(self, body: Optional[dict | NewElementRequestBody] = None) -> str:
|
|
2773
|
+
""" Create a new collection that represents a digital product.
|
|
2774
|
+
|
|
2775
|
+
Parameters
|
|
2776
|
+
----------
|
|
2777
|
+
body: dict | NewElementRequestBody
|
|
2778
|
+
A structure representing the details of the digital product to create.
|
|
2779
|
+
|
|
2780
|
+
Returns
|
|
2781
|
+
-------
|
|
2782
|
+
str - the guid of the created collection
|
|
2783
|
+
|
|
2784
|
+
Raises
|
|
2785
|
+
------
|
|
2786
|
+
PyegeriaException
|
|
2787
|
+
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
2788
|
+
ValidationError
|
|
2789
|
+
Raised by the pydantic validator if the body does not conform to the NewElementRequestBody.
|
|
2790
|
+
NotAuthorizedException
|
|
2791
|
+
The principle specified by the user_id does not have authorization for the requested action
|
|
2792
|
+
|
|
2793
|
+
Notes
|
|
2794
|
+
-----
|
|
2795
|
+
Note: the three dates: introductionDate, nextVersionDate and withdrawDate must
|
|
2796
|
+
be valid dates if specified, otherwise you will get a 400 error response.
|
|
2797
|
+
|
|
2798
|
+
simple body version:
|
|
2799
|
+
{
|
|
2800
|
+
"class": "NewElementRequestBody",
|
|
2801
|
+
"isOwnAnchor": true,
|
|
2802
|
+
"properties": {
|
|
2803
|
+
"class": "DigitalProductCatalogProperties",
|
|
2804
|
+
"qualifiedName": "Must provide a unique name here",
|
|
2805
|
+
"displayName": "Add display name here",
|
|
2806
|
+
"description": "Add description of the collection here",
|
|
2807
|
+
"category": "Add appropriate valid value for type"
|
|
2808
|
+
}
|
|
2809
|
+
}
|
|
2810
|
+
|
|
2811
|
+
The valid values for initialStatus are: DRAFT, PREPARED, PROPOSED, APPROVED, REJECTED, APPROVED_CONCEPT,
|
|
2812
|
+
UNDER_DEVELOPMENT, DEVELOPMENT_COMPLETE, APPROVED_FOR_DEPLOYMENT, ACTIVE, DISABLED, DEPRECATED,
|
|
2813
|
+
OTHER. If using OTHER, set the userDefinedStatus with the status value you want. If not specified, will
|
|
2814
|
+
default to ACTIVE.
|
|
2815
|
+
"""
|
|
2816
|
+
|
|
2817
|
+
return asyncio.get_event_loop().run_until_complete(
|
|
2818
|
+
self._async_create_digital_product_catalog(body))
|
|
2819
|
+
|
|
2820
|
+
|
|
2821
|
+
|
|
2822
|
+
|
|
2359
2823
|
@dynamic_catch
|
|
2360
2824
|
async def _async_update_digital_product(self, collection_guid: str, body: dict | UpdateElementRequestBody) -> None:
|
|
2361
2825
|
""" Update the properties of a digital product.
|
|
@@ -2371,9 +2835,7 @@ class CollectionManager(Client2):
|
|
|
2371
2835
|
A dict or NewElementRequestBody representing the details of the collection to create. If supplied, this
|
|
2372
2836
|
information will be used to create the collection and the other attributes will be ignored. The body is
|
|
2373
2837
|
validated before being used.
|
|
2374
|
-
|
|
2375
|
-
If true then property changes will be overlaid on top of existing properties. If false, existing
|
|
2376
|
-
properties will all be replaced by the set provided in the update request.
|
|
2838
|
+
|
|
2377
2839
|
|
|
2378
2840
|
Returns
|
|
2379
2841
|
-------
|
|
@@ -2396,7 +2858,7 @@ class CollectionManager(Client2):
|
|
|
2396
2858
|
"properties": {
|
|
2397
2859
|
"class" : "DigitalProductProperties",
|
|
2398
2860
|
"qualifiedName": "DigitalProduct::Add product name here",
|
|
2399
|
-
"
|
|
2861
|
+
"displayName" : "Product contents",
|
|
2400
2862
|
"description" : "Add description of product and its expected usage here",
|
|
2401
2863
|
"userDefinedStatus" : "OBSOLETE",
|
|
2402
2864
|
"identifier" : "Add product identifier here",
|
|
@@ -2439,9 +2901,7 @@ class CollectionManager(Client2):
|
|
|
2439
2901
|
A dict or NewElementRequestBody representing the details of the collection to create. If supplied, this
|
|
2440
2902
|
information will be used to create the collection and the other attributes will be ignored. The body is
|
|
2441
2903
|
validated before being used.
|
|
2442
|
-
|
|
2443
|
-
If true then property changes will be overlaid on top of existing properties. If false, existing
|
|
2444
|
-
properties will all be replaced by the set provided in the update request.
|
|
2904
|
+
|
|
2445
2905
|
|
|
2446
2906
|
Returns
|
|
2447
2907
|
-------
|
|
@@ -2464,7 +2924,7 @@ class CollectionManager(Client2):
|
|
|
2464
2924
|
"properties": {
|
|
2465
2925
|
"class" : "DigitalProductProperties",
|
|
2466
2926
|
"qualifiedName": "DigitalProduct::Add product name here",
|
|
2467
|
-
"
|
|
2927
|
+
"displayName" : "Product contents",
|
|
2468
2928
|
"description" : "Add description of product and its expected usage here",
|
|
2469
2929
|
"userDefinedStatus" : "OBSOLETE",
|
|
2470
2930
|
"identifier" : "Add product identifier here",
|
|
@@ -2493,545 +2953,410 @@ class CollectionManager(Client2):
|
|
|
2493
2953
|
self._async_update_digital_product(collection_guid, body))
|
|
2494
2954
|
|
|
2495
2955
|
|
|
2496
|
-
@dynamic_catch
|
|
2497
|
-
async def
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
|
|
2539
|
-
|
|
2540
|
-
|
|
2541
|
-
|
|
2542
|
-
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
|
|
2573
|
-
|
|
2574
|
-
|
|
2575
|
-
|
|
2576
|
-
|
|
2577
|
-
|
|
2578
|
-
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
|
|
2658
|
-
|
|
2659
|
-
|
|
2660
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
|
|
2671
|
-
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
2675
|
-
|
|
2676
|
-
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2687
|
-
|
|
2688
|
-
|
|
2689
|
-
|
|
2690
|
-
|
|
2691
|
-
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
|
|
2695
|
-
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
Returns
|
|
2702
|
-
-------
|
|
2703
|
-
Nothing
|
|
2704
|
-
|
|
2705
|
-
Raises
|
|
2706
|
-
------
|
|
2707
|
-
InvalidParameterException
|
|
2708
|
-
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
2709
|
-
PropertyServerException
|
|
2710
|
-
Raised by the server when an issue arises in processing a valid request
|
|
2711
|
-
NotAuthorizedException
|
|
2712
|
-
The principle specified by the user_id does not have authorization for the requested action
|
|
2713
|
-
|
|
2714
|
-
Notes
|
|
2715
|
-
-----
|
|
2716
|
-
JSON Structure looks like:
|
|
2717
|
-
JSON Structure looks like:
|
|
2718
|
-
{
|
|
2719
|
-
"class" : "NewRelationshipRequestBody",
|
|
2720
|
-
"externalSourceGUID": "add guid here",
|
|
2721
|
-
"externalSourceName": "add qualified name here",
|
|
2722
|
-
"effectiveTime" : "{{$isoTimestamp}}",
|
|
2723
|
-
"forLineage" : false,
|
|
2724
|
-
"forDuplicateProcessing" : false,
|
|
2725
|
-
"properties": {
|
|
2726
|
-
"class": "InformationSupplyChainLinkProperties",
|
|
2727
|
-
"label": "add label here",
|
|
2728
|
-
"description": "add description here",
|
|
2729
|
-
"effectiveFrom": "{{$isoTimestamp}}",
|
|
2730
|
-
"effectiveTo": "{{$isoTimestamp}}"
|
|
2731
|
-
}
|
|
2732
|
-
}
|
|
2733
|
-
"""
|
|
2734
|
-
loop = asyncio.get_event_loop()
|
|
2735
|
-
loop.run_until_complete(
|
|
2736
|
-
self._async_link_digital_product_dependency(upstream_digital_prod_guid, downstream_digital_prod_guid,
|
|
2737
|
-
body))
|
|
2738
|
-
|
|
2739
|
-
|
|
2740
|
-
@dynamic_catch
|
|
2741
|
-
async def _async_detach_digital_product_dependency(self, upstream_digital_prod_guid: str,
|
|
2742
|
-
downstream_digital_prod_guid: str,
|
|
2743
|
-
body: dict | DeleteRequestBody = None)-> None:
|
|
2744
|
-
""" Unlink two dependent digital products. The linked elements are of type DigitalProduct.
|
|
2745
|
-
Request body is optional. Async version.
|
|
2746
|
-
|
|
2747
|
-
Parameters
|
|
2748
|
-
----------
|
|
2749
|
-
upstream_digital_prod_guid: str
|
|
2750
|
-
The guid of the first digital product
|
|
2751
|
-
downstream_digital_prod_guid: str
|
|
2752
|
-
The guid of the downstream digital product
|
|
2753
|
-
body: dict | DeleteRequestBody, optional, default = None
|
|
2754
|
-
A structure representing the details of the relationship.
|
|
2755
|
-
|
|
2756
|
-
Returns
|
|
2757
|
-
-------
|
|
2758
|
-
Nothing
|
|
2759
|
-
|
|
2760
|
-
Raises
|
|
2761
|
-
------
|
|
2762
|
-
InvalidParameterException
|
|
2763
|
-
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
2764
|
-
PropertyServerException
|
|
2765
|
-
Raised by the server when an issue arises in processing a valid request
|
|
2766
|
-
NotAuthorizedException
|
|
2767
|
-
The principle specified by the user_id does not have authorization for the requested action
|
|
2768
|
-
|
|
2769
|
-
Notes
|
|
2770
|
-
-----
|
|
2771
|
-
JSON Structure looks like:
|
|
2772
|
-
{
|
|
2773
|
-
"class": "DeleteRequestBody",
|
|
2774
|
-
"externalSourceGUID": "add guid here",
|
|
2775
|
-
"externalSourceName": "add qualified name here",
|
|
2776
|
-
"effectiveTime": "{{$isoTimestamp}}",
|
|
2777
|
-
"forLineage": false,
|
|
2778
|
-
"forDuplicateProcessing": false
|
|
2779
|
-
}
|
|
2780
|
-
|
|
2781
|
-
"""
|
|
2782
|
-
|
|
2783
|
-
url = (
|
|
2784
|
-
f"{self.platform_url}/servers/"
|
|
2785
|
-
f"{self.view_server}/api/open-metadata/collection-manager/collections/digital-products/"
|
|
2786
|
-
f"{upstream_digital_prod_guid}/product-dependencies/{downstream_digital_prod_guid}/detach")
|
|
2787
|
-
await self._async_delete_request(url, body)
|
|
2788
|
-
logger.info(f"Detached digital product dependency {upstream_digital_prod_guid} -> {downstream_digital_prod_guid}")
|
|
2789
|
-
|
|
2790
|
-
|
|
2791
|
-
def detach_digital_product_dependency(self, upstream_digital_prod_guid: str, downstream_digital_prod_guid: str,
|
|
2792
|
-
body: dict | DeleteRequestBody= None):
|
|
2793
|
-
""" Unlink two dependent digital products. The linked elements are of type DigitalProduct.
|
|
2794
|
-
Request body is optional.
|
|
2795
|
-
|
|
2796
|
-
Parameters
|
|
2797
|
-
----------
|
|
2798
|
-
upstream_digital_prod_guid: str
|
|
2799
|
-
The guid of the first digital product
|
|
2800
|
-
downstream_digital_prod_guid: str
|
|
2801
|
-
The guid of the downstream digital product
|
|
2802
|
-
body: dict | DeleteRequestBody, optional, default = None
|
|
2803
|
-
A structure representing the details of the relationship.
|
|
2804
|
-
|
|
2805
|
-
Returns
|
|
2806
|
-
-------
|
|
2807
|
-
Nothing
|
|
2808
|
-
|
|
2809
|
-
Raises
|
|
2810
|
-
------
|
|
2811
|
-
InvalidParameterException
|
|
2812
|
-
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
2813
|
-
PropertyServerException
|
|
2814
|
-
Raised by the server when an issue arises in processing a valid request
|
|
2815
|
-
NotAuthorizedException
|
|
2816
|
-
The principle specified by the user_id does not have authorization for the requested action
|
|
2817
|
-
|
|
2818
|
-
Notes
|
|
2819
|
-
-----
|
|
2820
|
-
JSON Structure looks like:
|
|
2821
|
-
{
|
|
2822
|
-
"class": "DeleteRequestBody",
|
|
2823
|
-
"externalSourceGUID": "add guid here",
|
|
2824
|
-
"externalSourceName": "add qualified name here",
|
|
2825
|
-
"effectiveTime": "{{$isoTimestamp}}",
|
|
2826
|
-
"forLineage": false,
|
|
2827
|
-
"forDuplicateProcessing": false
|
|
2828
|
-
}
|
|
2829
|
-
"""
|
|
2830
|
-
loop = asyncio.get_event_loop()
|
|
2831
|
-
loop.run_until_complete(
|
|
2832
|
-
self._async_detach_digital_product_dependency(upstream_digital_prod_guid, downstream_digital_prod_guid,
|
|
2833
|
-
body))
|
|
2834
|
-
|
|
2835
|
-
|
|
2836
|
-
|
|
2837
|
-
|
|
2838
|
-
|
|
2839
|
-
@dynamic_catch
|
|
2840
|
-
async def _async_link_product_manager(self, digital_prod_guid: str, digital_prod_manager_guid: str,
|
|
2841
|
-
body: dict | NewRelationshipRequestBody = None) -> None:
|
|
2842
|
-
""" Attach a product manager to a digital product. Request body is optional.
|
|
2843
|
-
Request body is optional. Async version.
|
|
2844
|
-
|
|
2845
|
-
Parameters
|
|
2846
|
-
----------
|
|
2847
|
-
digital_prod_guid: str
|
|
2848
|
-
The guid of the digital product
|
|
2849
|
-
digital_prod_manager_guid: str
|
|
2850
|
-
The guid of the digital_product_manager
|
|
2851
|
-
body: dict | NewRelationshipRequestBody, optional, default = None
|
|
2852
|
-
A structure representing the details of the relationship.
|
|
2853
|
-
|
|
2854
|
-
Returns
|
|
2855
|
-
-------
|
|
2856
|
-
Nothing
|
|
2857
|
-
|
|
2858
|
-
Raises
|
|
2859
|
-
------
|
|
2860
|
-
InvalidParameterException
|
|
2861
|
-
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
2862
|
-
PropertyServerException
|
|
2863
|
-
Raised by the server when an issue arises in processing a valid request
|
|
2864
|
-
NotAuthorizedException
|
|
2865
|
-
The principle specified by the user_id does not have authorization for the requested action
|
|
2866
|
-
|
|
2867
|
-
Notes
|
|
2868
|
-
-----
|
|
2869
|
-
JSON Structure looks like:
|
|
2870
|
-
{
|
|
2871
|
-
"class": "NewRelationshipRequestBody",
|
|
2872
|
-
"properties": {
|
|
2873
|
-
"assignmentType": "Add type here",
|
|
2874
|
-
"description": "Add assignment description here"
|
|
2875
|
-
},
|
|
2876
|
-
"externalSourceGUID": "add guid here",
|
|
2877
|
-
"externalSourceName": "add qualified name here",
|
|
2878
|
-
"effectiveTime": "{{$isoTimestamp}}",
|
|
2879
|
-
"forLineage": false,
|
|
2880
|
-
"forDuplicateProcessing": false
|
|
2881
|
-
}
|
|
2882
|
-
|
|
2883
|
-
"""
|
|
2884
|
-
url = (
|
|
2885
|
-
f"{self.platform_url}/servers/"
|
|
2886
|
-
f"{self.view_server}/api/open-metadata/collection-manager/collections/digital"
|
|
2887
|
-
f"-products/"
|
|
2888
|
-
f"{digital_prod_guid}/product-managers/{digital_prod_manager_guid}/attach")
|
|
2889
|
-
await self._async_new_relationship_request(url, "AssignmentScopeProperties",body)
|
|
2890
|
-
logger.info(f"Attached digital product manager {digital_prod_guid} -> {digital_prod_manager_guid}")
|
|
2891
|
-
|
|
2892
|
-
|
|
2893
|
-
def link_product_manager(self, digital_prod_guid: str, digital_prod_manager_guid: str, body: dict | NewRelationshipRequestBody = None):
|
|
2894
|
-
""" Attach a product manager to a digital product. Request body is optional.
|
|
2895
|
-
Request body is optional.
|
|
2896
|
-
|
|
2897
|
-
Parameters
|
|
2898
|
-
----------
|
|
2899
|
-
digital_prod_guid: str
|
|
2900
|
-
The guid of the digital product
|
|
2901
|
-
digital_prod_manager_guid: str
|
|
2902
|
-
The guid of the digital_product_manager
|
|
2903
|
-
body: dict | NewRelationshipRequestBody, optional, default = None
|
|
2904
|
-
A structure representing the details of the relationship.
|
|
2905
|
-
|
|
2906
|
-
Returns
|
|
2907
|
-
-------
|
|
2908
|
-
Nothing
|
|
2909
|
-
|
|
2910
|
-
Raises
|
|
2911
|
-
------
|
|
2912
|
-
InvalidParameterException
|
|
2913
|
-
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
2914
|
-
PropertyServerException
|
|
2915
|
-
Raised by the server when an issue arises in processing a valid request
|
|
2916
|
-
NotAuthorizedException
|
|
2917
|
-
The principle specified by the user_id does not have authorization for the requested action
|
|
2918
|
-
|
|
2919
|
-
Notes
|
|
2920
|
-
-----
|
|
2921
|
-
JSON Structure looks like:
|
|
2922
|
-
{
|
|
2923
|
-
"class": "NewRelationshipRequestBody",
|
|
2924
|
-
"properties": {
|
|
2925
|
-
"assignmentType": "Add type here",
|
|
2926
|
-
"description": "Add assignment description here"
|
|
2927
|
-
},
|
|
2928
|
-
"externalSourceGUID": "add guid here",
|
|
2929
|
-
"externalSourceName": "add qualified name here",
|
|
2930
|
-
"effectiveTime": "{{$isoTimestamp}}",
|
|
2931
|
-
"forLineage": false,
|
|
2932
|
-
"forDuplicateProcessing": false
|
|
2933
|
-
}
|
|
2934
|
-
|
|
2935
|
-
"""
|
|
2936
|
-
loop = asyncio.get_event_loop()
|
|
2937
|
-
loop.run_until_complete(
|
|
2938
|
-
self._async_link_product_manager(digital_prod_guid, digital_prod_manager_guid, body))
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
@dynamic_catch
|
|
2942
|
-
async def _async_detach_product_manager(self, digital_prod_guid: str,
|
|
2943
|
-
digital_prod_manager_guid: str,
|
|
2944
|
-
body: dict | DeleteRequestBody = None)-> None:
|
|
2945
|
-
""" Detach a digital product manager from a digital product.
|
|
2946
|
-
Request body is optional. Async version.
|
|
2947
|
-
|
|
2948
|
-
Parameters
|
|
2949
|
-
----------
|
|
2950
|
-
digital_prod_guid: str
|
|
2951
|
-
The guid of the digital product.
|
|
2952
|
-
prod_manager: str
|
|
2953
|
-
The guid of the digital product manager.
|
|
2954
|
-
body: dict | DeleteRequestBody, optional, default = None
|
|
2955
|
-
A structure representing the details of the relationship.
|
|
2956
|
-
|
|
2957
|
-
Returns
|
|
2958
|
-
-------
|
|
2959
|
-
Nothing
|
|
2960
|
-
|
|
2961
|
-
Raises
|
|
2962
|
-
------
|
|
2963
|
-
InvalidParameterException
|
|
2964
|
-
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
2965
|
-
PropertyServerException
|
|
2966
|
-
Raised by the server when an issue arises in processing a valid request
|
|
2967
|
-
NotAuthorizedException
|
|
2968
|
-
The principle specified by the user_id does not have authorization for the requested action
|
|
2969
|
-
|
|
2970
|
-
Notes
|
|
2971
|
-
-----
|
|
2972
|
-
JSON Structure looks like:
|
|
2973
|
-
{
|
|
2974
|
-
"class": "DeleteRequestBody",
|
|
2975
|
-
"externalSourceGUID": "add guid here",
|
|
2976
|
-
"externalSourceName": "add qualified name here",
|
|
2977
|
-
"effectiveTime": "{{$isoTimestamp}}",
|
|
2978
|
-
"forLineage": false,
|
|
2979
|
-
"forDuplicateProcessing": false
|
|
2980
|
-
}
|
|
2981
|
-
|
|
2982
|
-
"""
|
|
2983
|
-
url = (
|
|
2984
|
-
f"{self.platform_url}/servers/"
|
|
2985
|
-
f"{self.view_server}/api/open-metadata/collection-manager/collections/digital-products/"
|
|
2986
|
-
f"{digital_prod_guid}/product-dependencies/{digital_prod_manager_guid}/detach")
|
|
2987
|
-
await self._async_delete_request(url, body)
|
|
2988
|
-
logger.info(f"Detached digital product manager {digital_prod_guid} -> {digital_prod_manager_guid}")
|
|
2989
|
-
|
|
2990
|
-
@dynamic_catch
|
|
2991
|
-
def detach_product_manager(self, digital_prod_guid: str, digital_prod_manager_guid: str,
|
|
2992
|
-
body: dict | DeleteRequestBody= None):
|
|
2993
|
-
""" Detach a digital product manager from a digital product.
|
|
2994
|
-
Request body is optional. Async version.
|
|
2995
|
-
|
|
2996
|
-
Parameters
|
|
2997
|
-
----------
|
|
2998
|
-
digital_prod_guid: str
|
|
2999
|
-
The guid of the digital product.
|
|
3000
|
-
digital_prod_manager_guid: str
|
|
3001
|
-
The guid of the digital product manager.
|
|
3002
|
-
body: dict | DeleteRequestBody, optional, default = None
|
|
3003
|
-
A structure representing the details of the relationship.
|
|
3004
|
-
|
|
3005
|
-
Returns
|
|
3006
|
-
-------
|
|
3007
|
-
Nothing
|
|
2956
|
+
# @dynamic_catch
|
|
2957
|
+
# async def _async_link_digital_product_dependency(self, upstream_digital_prod_guid: str,
|
|
2958
|
+
# downstream_digital_prod_guid: str,
|
|
2959
|
+
# body: Optional[dict | NewRelationshipRequestBody] = None):
|
|
2960
|
+
# """ Link two dependent digital products. The linked elements are of type DigitalProduct.
|
|
2961
|
+
# Request body is optional. Async version.
|
|
2962
|
+
#
|
|
2963
|
+
# Parameters
|
|
2964
|
+
# ----------
|
|
2965
|
+
# upstream_digital_prod_guid: str
|
|
2966
|
+
# The guid of the first digital product
|
|
2967
|
+
# downstream_digital_prod_guid: str
|
|
2968
|
+
# The guid of the downstream digital product
|
|
2969
|
+
# body: dict | NewRelationshipRequestBody, optional, default = None
|
|
2970
|
+
# A dict representing the details of the relationship.
|
|
2971
|
+
#
|
|
2972
|
+
# Returns
|
|
2973
|
+
# -------
|
|
2974
|
+
# Nothing
|
|
2975
|
+
#
|
|
2976
|
+
# Raises
|
|
2977
|
+
# ------
|
|
2978
|
+
# PyegeriaInvalidParameterException
|
|
2979
|
+
# If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
2980
|
+
# PyegeriaAPIException
|
|
2981
|
+
# Raised by the server when an issue arises in processing a valid request
|
|
2982
|
+
# NotAuthorizedException
|
|
2983
|
+
# The principle specified by the user_id does not have authorization for the requested action
|
|
2984
|
+
#
|
|
2985
|
+
# Notes
|
|
2986
|
+
# -----
|
|
2987
|
+
# JSON Structure looks like:
|
|
2988
|
+
# {
|
|
2989
|
+
# "class" : "NewRelationshipRequestBody",
|
|
2990
|
+
# "externalSourceGUID": "add guid here",
|
|
2991
|
+
# "externalSourceName": "add qualified name here",
|
|
2992
|
+
# "effectiveTime" : "{{$isoTimestamp}}",
|
|
2993
|
+
# "forLineage" : false,
|
|
2994
|
+
# "forDuplicateProcessing" : false,
|
|
2995
|
+
# "properties": {
|
|
2996
|
+
# "class": "DigitalProductDependencyProperties",
|
|
2997
|
+
# "label": "add label here",
|
|
2998
|
+
# "description": "add description here",
|
|
2999
|
+
# "effectiveFrom": "{{$isoTimestamp}}",
|
|
3000
|
+
# "effectiveTo": "{{$isoTimestamp}}"
|
|
3001
|
+
# }
|
|
3002
|
+
# }
|
|
3003
|
+
# """
|
|
3004
|
+
# url = (
|
|
3005
|
+
# f"{self.platform_url}/servers/"
|
|
3006
|
+
# f"{self.view_server}/api/open-metadata/collection-manager/collections/digital-products/"
|
|
3007
|
+
# f"{upstream_digital_prod_guid}/product-dependencies/{downstream_digital_prod_guid}/attach")
|
|
3008
|
+
# await self._async_new_relationship_request(url, ["InformationSupplyChainLinkProperties"], body)
|
|
3009
|
+
# logger.info(f"Linked {upstream_digital_prod_guid} -> {downstream_digital_prod_guid}")
|
|
3010
|
+
#
|
|
3011
|
+
#
|
|
3012
|
+
# def link_digital_product_dependency(self, upstream_digital_prod_guid: str, downstream_digital_prod_guid: str,
|
|
3013
|
+
# body: dict | NewRelationshipRequestBody= None):
|
|
3014
|
+
# """ Link two dependent digital products. The linked elements are of type DigitalProduct.
|
|
3015
|
+
# Request body is optional.
|
|
3016
|
+
#
|
|
3017
|
+
# Parameters
|
|
3018
|
+
# ----------
|
|
3019
|
+
# upstream_digital_prod_guid: str
|
|
3020
|
+
# The guid of the first digital product
|
|
3021
|
+
# downstream_digital_prod_guid: str
|
|
3022
|
+
# The guid of the downstream digital product
|
|
3023
|
+
# body: dict | NewRelationshipRequestBody, optional, default = None
|
|
3024
|
+
# A structure representing the details of the relationship.
|
|
3025
|
+
#
|
|
3026
|
+
# Returns
|
|
3027
|
+
# -------
|
|
3028
|
+
# Nothing
|
|
3029
|
+
#
|
|
3030
|
+
# Raises
|
|
3031
|
+
# ------
|
|
3032
|
+
# PyegeriaInvalidParameterException
|
|
3033
|
+
# If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3034
|
+
# PyegeriaAPIException
|
|
3035
|
+
# Raised by the server when an issue arises in processing a valid request
|
|
3036
|
+
# NotAuthorizedException
|
|
3037
|
+
# The principle specified by the user_id does not have authorization for the requested action
|
|
3038
|
+
#
|
|
3039
|
+
# Notes
|
|
3040
|
+
# -----
|
|
3041
|
+
# JSON Structure looks like:
|
|
3042
|
+
# JSON Structure looks like:
|
|
3043
|
+
# {
|
|
3044
|
+
# "class" : "NewRelationshipRequestBody",
|
|
3045
|
+
# "externalSourceGUID": "add guid here",
|
|
3046
|
+
# "externalSourceName": "add qualified name here",
|
|
3047
|
+
# "effectiveTime" : "{{$isoTimestamp}}",
|
|
3048
|
+
# "forLineage" : false,
|
|
3049
|
+
# "forDuplicateProcessing" : false,
|
|
3050
|
+
# "properties": {
|
|
3051
|
+
# "class": "InformationSupplyChainLinkProperties",
|
|
3052
|
+
# "label": "add label here",
|
|
3053
|
+
# "description": "add description here",
|
|
3054
|
+
# "effectiveFrom": "{{$isoTimestamp}}",
|
|
3055
|
+
# "effectiveTo": "{{$isoTimestamp}}"
|
|
3056
|
+
# }
|
|
3057
|
+
# }
|
|
3058
|
+
# """
|
|
3059
|
+
# loop = asyncio.get_event_loop()
|
|
3060
|
+
# loop.run_until_complete(
|
|
3061
|
+
# self._async_link_digital_product_dependency(upstream_digital_prod_guid, downstream_digital_prod_guid,
|
|
3062
|
+
# body))
|
|
3063
|
+
#
|
|
3064
|
+
#
|
|
3065
|
+
# @dynamic_catch
|
|
3066
|
+
# async def _async_detach_digital_product_dependency(self, upstream_digital_prod_guid: str,
|
|
3067
|
+
# downstream_digital_prod_guid: str,
|
|
3068
|
+
# body: Optional[dict | DeleteRelationshipRequestBody] = None)-> None:
|
|
3069
|
+
# """ Unlink two dependent digital products. The linked elements are of type DigitalProduct.
|
|
3070
|
+
# Request body is optional. Async version.
|
|
3071
|
+
#
|
|
3072
|
+
# Parameters
|
|
3073
|
+
# ----------
|
|
3074
|
+
# upstream_digital_prod_guid: str
|
|
3075
|
+
# The guid of the first digital product
|
|
3076
|
+
# downstream_digital_prod_guid: str
|
|
3077
|
+
# The guid of the downstream digital product
|
|
3078
|
+
# body: dict | DeleteRelationshipRequestBody, optional, default = None
|
|
3079
|
+
# A structure representing the details of the relationship.
|
|
3080
|
+
#
|
|
3081
|
+
# Returns
|
|
3082
|
+
# -------
|
|
3083
|
+
# Nothing
|
|
3084
|
+
#
|
|
3085
|
+
# Raises
|
|
3086
|
+
# ------
|
|
3087
|
+
# PyegeriaInvalidParameterException
|
|
3088
|
+
# If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3089
|
+
# PyegeriaAPIException
|
|
3090
|
+
# Raised by the server when an issue arises in processing a valid request
|
|
3091
|
+
# NotAuthorizedException
|
|
3092
|
+
# The principle specified by the user_id does not have authorization for the requested action
|
|
3093
|
+
#
|
|
3094
|
+
# Notes
|
|
3095
|
+
# -----
|
|
3096
|
+
# JSON Structure looks like:
|
|
3097
|
+
# {
|
|
3098
|
+
# "class": "DeleteRelationshipRequestBody",
|
|
3099
|
+
# "externalSourceGUID": "add guid here",
|
|
3100
|
+
# "externalSourceName": "add qualified name here",
|
|
3101
|
+
# "effectiveTime": "{{$isoTimestamp}}",
|
|
3102
|
+
# "forLineage": false,
|
|
3103
|
+
# "forDuplicateProcessing": false
|
|
3104
|
+
# }
|
|
3105
|
+
#
|
|
3106
|
+
# """
|
|
3107
|
+
#
|
|
3108
|
+
# url = (
|
|
3109
|
+
# f"{self.platform_url}/servers/"
|
|
3110
|
+
# f"{self.view_server}/api/open-metadata/collection-manager/collections/digital-products/"
|
|
3111
|
+
# f"{upstream_digital_prod_guid}/product-dependencies/{downstream_digital_prod_guid}/detach")
|
|
3112
|
+
# await self._async_delete_relationship_request(url, body)
|
|
3113
|
+
# logger.info(f"Detached digital product dependency {upstream_digital_prod_guid} -> {downstream_digital_prod_guid}")
|
|
3114
|
+
#
|
|
3115
|
+
#
|
|
3116
|
+
# def detach_digital_product_dependency(self, upstream_digital_prod_guid: str, downstream_digital_prod_guid: str,
|
|
3117
|
+
# body: dict | DeleteRelationshipRequestBody= None):
|
|
3118
|
+
# """ Unlink two dependent digital products. The linked elements are of type DigitalProduct.
|
|
3119
|
+
# Request body is optional.
|
|
3120
|
+
#
|
|
3121
|
+
# Parameters
|
|
3122
|
+
# ----------
|
|
3123
|
+
# upstream_digital_prod_guid: str
|
|
3124
|
+
# The guid of the first digital product
|
|
3125
|
+
# downstream_digital_prod_guid: str
|
|
3126
|
+
# The guid of the downstream digital product
|
|
3127
|
+
# body: dict | DeleteRelationshipRequestBody, optional, default = None
|
|
3128
|
+
# A structure representing the details of the relationship.
|
|
3129
|
+
#
|
|
3130
|
+
# Returns
|
|
3131
|
+
# -------
|
|
3132
|
+
# Nothing
|
|
3133
|
+
#
|
|
3134
|
+
# Raises
|
|
3135
|
+
# ------
|
|
3136
|
+
# PyegeriaInvalidParameterException
|
|
3137
|
+
# If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3138
|
+
# PyegeriaAPIException
|
|
3139
|
+
# Raised by the server when an issue arises in processing a valid request
|
|
3140
|
+
# NotAuthorizedException
|
|
3141
|
+
# The principle specified by the user_id does not have authorization for the requested action
|
|
3142
|
+
#
|
|
3143
|
+
# Notes
|
|
3144
|
+
# -----
|
|
3145
|
+
# JSON Structure looks like:
|
|
3146
|
+
# {
|
|
3147
|
+
# "class": "DeleteRelationshipRequestBody",
|
|
3148
|
+
# "externalSourceGUID": "add guid here",
|
|
3149
|
+
# "externalSourceName": "add qualified name here",
|
|
3150
|
+
# "effectiveTime": "{{$isoTimestamp}}",
|
|
3151
|
+
# "forLineage": false,
|
|
3152
|
+
# "forDuplicateProcessing": false
|
|
3153
|
+
# }
|
|
3154
|
+
# """
|
|
3155
|
+
# loop = asyncio.get_event_loop()
|
|
3156
|
+
# loop.run_until_complete(
|
|
3157
|
+
# self._async_detach_digital_product_dependency(upstream_digital_prod_guid, downstream_digital_prod_guid,
|
|
3158
|
+
# body))
|
|
3159
|
+
#
|
|
3160
|
+
#
|
|
3008
3161
|
|
|
3009
|
-
Raises
|
|
3010
|
-
------
|
|
3011
|
-
InvalidParameterException
|
|
3012
|
-
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3013
|
-
PropertyServerException
|
|
3014
|
-
Raised by the server when an issue arises in processing a valid request
|
|
3015
|
-
NotAuthorizedException
|
|
3016
|
-
The principle specified by the user_id does not have authorization for the requested action
|
|
3017
3162
|
|
|
3018
|
-
Notes
|
|
3019
|
-
-----
|
|
3020
|
-
JSON Structure looks like:
|
|
3021
|
-
{
|
|
3022
|
-
"class": "DeleteRequestBody",
|
|
3023
|
-
"externalSourceGUID": "add guid here",
|
|
3024
|
-
"externalSourceName": "add qualified name here",
|
|
3025
|
-
"effectiveTime": "{{$isoTimestamp}}",
|
|
3026
|
-
"forLineage": false,
|
|
3027
|
-
"forDuplicateProcessing": false
|
|
3028
|
-
}
|
|
3029
3163
|
|
|
3030
|
-
|
|
3031
|
-
|
|
3032
|
-
|
|
3033
|
-
|
|
3034
|
-
|
|
3164
|
+
# @dynamic_catch
|
|
3165
|
+
# async def _async_link_product_manager(self, digital_prod_guid: str, digital_prod_manager_guid: str,
|
|
3166
|
+
# body: Optional[dict | NewRelationshipRequestBody] = None) -> None:
|
|
3167
|
+
# """ Attach a product manager to a digital product. Request body is optional.
|
|
3168
|
+
# Request body is optional. Async version.
|
|
3169
|
+
#
|
|
3170
|
+
# Parameters
|
|
3171
|
+
# ----------
|
|
3172
|
+
# digital_prod_guid: str
|
|
3173
|
+
# The guid of the digital product
|
|
3174
|
+
# digital_prod_manager_guid: str
|
|
3175
|
+
# The guid of the digital_product_manager
|
|
3176
|
+
# body: dict | NewRelationshipRequestBody, optional, default = None
|
|
3177
|
+
# A structure representing the details of the relationship.
|
|
3178
|
+
#
|
|
3179
|
+
# Returns
|
|
3180
|
+
# -------
|
|
3181
|
+
# Nothing
|
|
3182
|
+
#
|
|
3183
|
+
# Raises
|
|
3184
|
+
# ------
|
|
3185
|
+
# PyegeriaInvalidParameterException
|
|
3186
|
+
# If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3187
|
+
# PyegeriaAPIException
|
|
3188
|
+
# Raised by the server when an issue arises in processing a valid request
|
|
3189
|
+
# NotAuthorizedException
|
|
3190
|
+
# The principle specified by the user_id does not have authorization for the requested action
|
|
3191
|
+
#
|
|
3192
|
+
# Notes
|
|
3193
|
+
# -----
|
|
3194
|
+
# JSON Structure looks like:
|
|
3195
|
+
# {
|
|
3196
|
+
# "class": "NewRelationshipRequestBody",
|
|
3197
|
+
# "properties": {
|
|
3198
|
+
# "assignmentType": "Add type here",
|
|
3199
|
+
# "description": "Add assignment description here"
|
|
3200
|
+
# },
|
|
3201
|
+
# "externalSourceGUID": "add guid here",
|
|
3202
|
+
# "externalSourceName": "add qualified name here",
|
|
3203
|
+
# "effectiveTime": "{{$isoTimestamp}}",
|
|
3204
|
+
# "forLineage": false,
|
|
3205
|
+
# "forDuplicateProcessing": false
|
|
3206
|
+
# }
|
|
3207
|
+
#
|
|
3208
|
+
# """
|
|
3209
|
+
# url = (
|
|
3210
|
+
# f"{self.platform_url}/servers/"
|
|
3211
|
+
# f"{self.view_server}/api/open-metadata/collection-manager/collections/digital"
|
|
3212
|
+
# f"-products/"
|
|
3213
|
+
# f"{digital_prod_guid}/product-managers/{digital_prod_manager_guid}/attach")
|
|
3214
|
+
# await self._async_new_relationship_request(url, "AssignmentScopeProperties",body)
|
|
3215
|
+
# logger.info(f"Attached digital product manager {digital_prod_guid} -> {digital_prod_manager_guid}")
|
|
3216
|
+
#
|
|
3217
|
+
#
|
|
3218
|
+
# def link_product_manager(self, digital_prod_guid: str, digital_prod_manager_guid: str, body: Optional[dict | NewRelationshipRequestBody] = None):
|
|
3219
|
+
# """ Attach a product manager to a digital product. Request body is optional.
|
|
3220
|
+
# Request body is optional.
|
|
3221
|
+
#
|
|
3222
|
+
# Parameters
|
|
3223
|
+
# ----------
|
|
3224
|
+
# digital_prod_guid: str
|
|
3225
|
+
# The guid of the digital product
|
|
3226
|
+
# digital_prod_manager_guid: str
|
|
3227
|
+
# The guid of the digital_product_manager
|
|
3228
|
+
# body: dict | NewRelationshipRequestBody, optional, default = None
|
|
3229
|
+
# A structure representing the details of the relationship.
|
|
3230
|
+
#
|
|
3231
|
+
# Returns
|
|
3232
|
+
# -------
|
|
3233
|
+
# Nothing
|
|
3234
|
+
#
|
|
3235
|
+
# Raises
|
|
3236
|
+
# ------
|
|
3237
|
+
# PyegeriaInvalidParameterException
|
|
3238
|
+
# If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3239
|
+
# PyegeriaAPIException
|
|
3240
|
+
# Raised by the server when an issue arises in processing a valid request
|
|
3241
|
+
# NotAuthorizedException
|
|
3242
|
+
# The principle specified by the user_id does not have authorization for the requested action
|
|
3243
|
+
#
|
|
3244
|
+
# Notes
|
|
3245
|
+
# -----
|
|
3246
|
+
# JSON Structure looks like:
|
|
3247
|
+
# {
|
|
3248
|
+
# "class": "NewRelationshipRequestBody",
|
|
3249
|
+
# "properties": {
|
|
3250
|
+
# "assignmentType": "Add type here",
|
|
3251
|
+
# "description": "Add assignment description here"
|
|
3252
|
+
# },
|
|
3253
|
+
# "externalSourceGUID": "add guid here",
|
|
3254
|
+
# "externalSourceName": "add qualified name here",
|
|
3255
|
+
# "effectiveTime": "{{$isoTimestamp}}",
|
|
3256
|
+
# "forLineage": false,
|
|
3257
|
+
# "forDuplicateProcessing": false
|
|
3258
|
+
# }
|
|
3259
|
+
#
|
|
3260
|
+
# """
|
|
3261
|
+
# loop = asyncio.get_event_loop()
|
|
3262
|
+
# loop.run_until_complete(
|
|
3263
|
+
# self._async_link_product_manager(digital_prod_guid, digital_prod_manager_guid, body))
|
|
3264
|
+
#
|
|
3265
|
+
#
|
|
3266
|
+
# @dynamic_catch
|
|
3267
|
+
# async def _async_detach_product_manager(self, digital_prod_guid: str,
|
|
3268
|
+
# digital_prod_manager_guid: str,
|
|
3269
|
+
# body: Optional[dict | DeleteRelationshipRequestBody] = None)-> None:
|
|
3270
|
+
# """ Detach a digital product manager from a digital product.
|
|
3271
|
+
# Request body is optional. Async version.
|
|
3272
|
+
#
|
|
3273
|
+
# Parameters
|
|
3274
|
+
# ----------
|
|
3275
|
+
# digital_prod_guid: str
|
|
3276
|
+
# The guid of the digital product.
|
|
3277
|
+
# prod_manager: str
|
|
3278
|
+
# The guid of the digital product manager.
|
|
3279
|
+
# body: dict | DeleteRelationshipRequestBody, optional, default = None
|
|
3280
|
+
# A structure representing the details of the relationship.
|
|
3281
|
+
#
|
|
3282
|
+
# Returns
|
|
3283
|
+
# -------
|
|
3284
|
+
# Nothing
|
|
3285
|
+
#
|
|
3286
|
+
# Raises
|
|
3287
|
+
# ------
|
|
3288
|
+
# PyegeriaInvalidParameterException
|
|
3289
|
+
# If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3290
|
+
# PyegeriaAPIException
|
|
3291
|
+
# Raised by the server when an issue arises in processing a valid request
|
|
3292
|
+
# NotAuthorizedException
|
|
3293
|
+
# The principle specified by the user_id does not have authorization for the requested action
|
|
3294
|
+
#
|
|
3295
|
+
# Notes
|
|
3296
|
+
# -----
|
|
3297
|
+
# JSON Structure looks like:
|
|
3298
|
+
# {
|
|
3299
|
+
# "class": "DeleteRelationshipRequestBody",
|
|
3300
|
+
# "externalSourceGUID": "add guid here",
|
|
3301
|
+
# "externalSourceName": "add qualified name here",
|
|
3302
|
+
# "effectiveTime": "{{$isoTimestamp}}",
|
|
3303
|
+
# "forLineage": false,
|
|
3304
|
+
# "forDuplicateProcessing": false
|
|
3305
|
+
# }
|
|
3306
|
+
#
|
|
3307
|
+
# """
|
|
3308
|
+
# url = (
|
|
3309
|
+
# f"{self.platform_url}/servers/"
|
|
3310
|
+
# f"{self.view_server}/api/open-metadata/collection-manager/collections/digital-products/"
|
|
3311
|
+
# f"{digital_prod_guid}/product-dependencies/{digital_prod_manager_guid}/detach")
|
|
3312
|
+
# await self._async_delete_relationship_request(url, body)
|
|
3313
|
+
# logger.info(f"Detached digital product manager {digital_prod_guid} -> {digital_prod_manager_guid}")
|
|
3314
|
+
#
|
|
3315
|
+
# @dynamic_catch
|
|
3316
|
+
# def detach_product_manager(self, digital_prod_guid: str, digital_prod_manager_guid: str,
|
|
3317
|
+
# body: dict | DeleteRelationshipRequestBody= None):
|
|
3318
|
+
# """ Detach a digital product manager from a digital product.
|
|
3319
|
+
# Request body is optional. Async version.
|
|
3320
|
+
#
|
|
3321
|
+
# Parameters
|
|
3322
|
+
# ----------
|
|
3323
|
+
# digital_prod_guid: str
|
|
3324
|
+
# The guid of the digital product.
|
|
3325
|
+
# digital_prod_manager_guid: str
|
|
3326
|
+
# The guid of the digital product manager.
|
|
3327
|
+
# body: dict | DeleteRelationshipRequestBody, optional, default = None
|
|
3328
|
+
# A structure representing the details of the relationship.
|
|
3329
|
+
#
|
|
3330
|
+
# Returns
|
|
3331
|
+
# -------
|
|
3332
|
+
# Nothing
|
|
3333
|
+
#
|
|
3334
|
+
# Raises
|
|
3335
|
+
# ------
|
|
3336
|
+
# PyegeriaInvalidParameterException
|
|
3337
|
+
# If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3338
|
+
# PyegeriaAPIException
|
|
3339
|
+
# Raised by the server when an issue arises in processing a valid request
|
|
3340
|
+
# NotAuthorizedException
|
|
3341
|
+
# The principle specified by the user_id does not have authorization for the requested action
|
|
3342
|
+
#
|
|
3343
|
+
# Notes
|
|
3344
|
+
# -----
|
|
3345
|
+
# JSON Structure looks like:
|
|
3346
|
+
# {
|
|
3347
|
+
# "class": "DeleteRelationshipRequestBody",
|
|
3348
|
+
# "externalSourceGUID": "add guid here",
|
|
3349
|
+
# "externalSourceName": "add qualified name here",
|
|
3350
|
+
# "effectiveTime": "{{$isoTimestamp}}",
|
|
3351
|
+
# "forLineage": false,
|
|
3352
|
+
# "forDuplicateProcessing": false
|
|
3353
|
+
# }
|
|
3354
|
+
#
|
|
3355
|
+
# """
|
|
3356
|
+
# loop = asyncio.get_event_loop()
|
|
3357
|
+
# loop.run_until_complete(
|
|
3358
|
+
# self._async_detach_product_manager(digital_prod_guid, digital_prod_manager_guid,
|
|
3359
|
+
# body))
|
|
3035
3360
|
|
|
3036
3361
|
|
|
3037
3362
|
#
|
|
@@ -3075,7 +3400,7 @@ class CollectionManager(Client2):
|
|
|
3075
3400
|
"properties": {
|
|
3076
3401
|
"class" : "AgreementProperties",
|
|
3077
3402
|
"qualifiedName": "Agreement::Add agreement name here",
|
|
3078
|
-
"
|
|
3403
|
+
"displayName" : "display name",
|
|
3079
3404
|
"description" : "Add description of the agreement here",
|
|
3080
3405
|
"identifier" : "Add agreement identifier here",
|
|
3081
3406
|
"additionalProperties": {
|
|
@@ -3100,7 +3425,7 @@ class CollectionManager(Client2):
|
|
|
3100
3425
|
return await self._async_create_element_body_request(url, "AgreementProperties", body)
|
|
3101
3426
|
|
|
3102
3427
|
@dynamic_catch
|
|
3103
|
-
def create_agreement(self, body: dict | NewElementRequestBody = None) -> str:
|
|
3428
|
+
def create_agreement(self, body: Optional[dict | NewElementRequestBody] = None) -> str:
|
|
3104
3429
|
""" Create a new collection that represents an agreement..
|
|
3105
3430
|
|
|
3106
3431
|
Parameters
|
|
@@ -3137,7 +3462,7 @@ class CollectionManager(Client2):
|
|
|
3137
3462
|
"properties": {
|
|
3138
3463
|
"class" : "AgreementProperties",
|
|
3139
3464
|
"qualifiedName": "Agreement::Add agreement name here",
|
|
3140
|
-
"
|
|
3465
|
+
"displayName" : "display name",
|
|
3141
3466
|
"description" : "Add description of the agreement here",
|
|
3142
3467
|
"identifier" : "Add agreement identifier here",
|
|
3143
3468
|
"additionalProperties": {
|
|
@@ -3202,7 +3527,7 @@ class CollectionManager(Client2):
|
|
|
3202
3527
|
# "properties": {
|
|
3203
3528
|
# "class" : "AgreementProperties",
|
|
3204
3529
|
# "qualifiedName": "Agreement::Add agreement name here",
|
|
3205
|
-
# "
|
|
3530
|
+
# "displayName" : "display name",
|
|
3206
3531
|
# "description" : "Add description of the agreement here",
|
|
3207
3532
|
# "userDefinedStatus" : "NEW",
|
|
3208
3533
|
# "identifier" : "Add agreement identifier here",
|
|
@@ -3229,7 +3554,7 @@ class CollectionManager(Client2):
|
|
|
3229
3554
|
# return await self._async_create_element_body_request(url, "AgreementProperties", body)
|
|
3230
3555
|
#
|
|
3231
3556
|
# @dynamic_catch
|
|
3232
|
-
# def create_data_sharing_agreement(self, body: dict | NewElementRequestBody = None) -> str:
|
|
3557
|
+
# def create_data_sharing_agreement(self, body: Optional[dict | NewElementRequestBody] = None) -> str:
|
|
3233
3558
|
# """ Create a new collection that represents a digital product.
|
|
3234
3559
|
#
|
|
3235
3560
|
# Parameters
|
|
@@ -3266,7 +3591,7 @@ class CollectionManager(Client2):
|
|
|
3266
3591
|
# "properties": {
|
|
3267
3592
|
# "class" : "DigitalProductProperties",
|
|
3268
3593
|
# "qualifiedName": "DigitalProduct::Add product name here",
|
|
3269
|
-
# "
|
|
3594
|
+
# "displayName" : "Product contents",
|
|
3270
3595
|
# "description" : "Add description of product and its expected usage here",
|
|
3271
3596
|
# "identifier" : "Add product identifier here",
|
|
3272
3597
|
# "productName" : "Add product name here",
|
|
@@ -3313,9 +3638,7 @@ class CollectionManager(Client2):
|
|
|
3313
3638
|
|
|
3314
3639
|
body: dict | NewElementRequestBody, optional
|
|
3315
3640
|
A dict or NewElementRequestBody representing the details of the agreement to create.
|
|
3316
|
-
|
|
3317
|
-
If true then property changes will be overlaid on top of existing properties. If false, existing
|
|
3318
|
-
properties will all be replaced by the set provided in the update request.
|
|
3641
|
+
|
|
3319
3642
|
|
|
3320
3643
|
Returns
|
|
3321
3644
|
-------
|
|
@@ -3338,7 +3661,7 @@ class CollectionManager(Client2):
|
|
|
3338
3661
|
"properties": {
|
|
3339
3662
|
"class" : "AgreementProperties",
|
|
3340
3663
|
"qualifiedName": "Agreement::Add agreement name here",
|
|
3341
|
-
"
|
|
3664
|
+
"displayName" : "display name",
|
|
3342
3665
|
"description" : "Add description of the agreement here",
|
|
3343
3666
|
"userDefinedStatus" : "OBSOLETE",
|
|
3344
3667
|
"identifier" : "Add agreement identifier here",
|
|
@@ -3369,9 +3692,7 @@ class CollectionManager(Client2):
|
|
|
3369
3692
|
|
|
3370
3693
|
body: dict | NewElementRequestBody, optional
|
|
3371
3694
|
A dict or NewElementRequestBody representing the details of the agreement to create.
|
|
3372
|
-
|
|
3373
|
-
If true then property changes will be overlaid on top of existing properties. If false, existing
|
|
3374
|
-
properties will all be replaced by the set provided in the update request.
|
|
3695
|
+
|
|
3375
3696
|
|
|
3376
3697
|
Returns
|
|
3377
3698
|
-------
|
|
@@ -3394,7 +3715,7 @@ class CollectionManager(Client2):
|
|
|
3394
3715
|
"properties": {
|
|
3395
3716
|
"class" : "AgreementProperties",
|
|
3396
3717
|
"qualifiedName": "Agreement::Add agreement name here",
|
|
3397
|
-
"
|
|
3718
|
+
"displayName" : "display name",
|
|
3398
3719
|
"description" : "Add description of the agreement here",
|
|
3399
3720
|
"userDefinedStatus" : "OBSOLETE",
|
|
3400
3721
|
"identifier" : "Add agreement identifier here",
|
|
@@ -3415,54 +3736,9 @@ class CollectionManager(Client2):
|
|
|
3415
3736
|
self._async_update_agreement(agreement_guid, body))
|
|
3416
3737
|
|
|
3417
3738
|
|
|
3418
|
-
|
|
3419
|
-
@dynamic_catch
|
|
3420
|
-
def update_agreement_status(self, agreement_guid: str, status: str = None,
|
|
3421
|
-
body: dict | UpdateStatusRequestBody = None):
|
|
3422
|
-
"""Update the status of an agreement.
|
|
3423
|
-
Parameters
|
|
3424
|
-
----------
|
|
3425
|
-
agreement_guid: str
|
|
3426
|
-
The guid of the collection to update.
|
|
3427
|
-
status: str, optional
|
|
3428
|
-
The new lifecycle status for the collection. Ignored, if the body is provided.
|
|
3429
|
-
body: dict | UpdateStatusRequestBody
|
|
3430
|
-
A structure representing the details of the collection to create.
|
|
3431
|
-
|
|
3432
|
-
Returns
|
|
3433
|
-
-------
|
|
3434
|
-
Nothing
|
|
3435
|
-
|
|
3436
|
-
Raises
|
|
3437
|
-
------
|
|
3438
|
-
InvalidParameterException
|
|
3439
|
-
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3440
|
-
PropertyServerException
|
|
3441
|
-
Raised by the server when an issue arises in processing a valid request
|
|
3442
|
-
NotAuthorizedException
|
|
3443
|
-
The principle specified by the user_id does not have authorization for the requested action
|
|
3444
|
-
|
|
3445
|
-
Notes
|
|
3446
|
-
-----
|
|
3447
|
-
JSON Structure looks like:
|
|
3448
|
-
{
|
|
3449
|
-
"class": "UpdateStatusRequestBody",
|
|
3450
|
-
"status": "APPROVED",
|
|
3451
|
-
"externalSourceGUID": "add guid here",
|
|
3452
|
-
"externalSourceName": "add qualified name here",
|
|
3453
|
-
"effectiveTime": "{{$isoTimestamp}}",
|
|
3454
|
-
"forLineage": false,
|
|
3455
|
-
"forDuplicateProcessing": false
|
|
3456
|
-
}
|
|
3457
|
-
"""
|
|
3458
|
-
loop = asyncio.get_event_loop()
|
|
3459
|
-
loop.run_until_complete(self._async_update_collection_status(agreement_guid, status,body))
|
|
3460
|
-
|
|
3461
|
-
|
|
3462
|
-
|
|
3463
3739
|
@dynamic_catch
|
|
3464
3740
|
async def _async_link_agreement_actor(self, agreement_guid: str, actor_guid: str,
|
|
3465
|
-
body: dict | NewRelationshipRequestBody = None) -> None:
|
|
3741
|
+
body: Optional[dict | NewRelationshipRequestBody] = None) -> None:
|
|
3466
3742
|
""" Attach an actor to an agreement. The actor element may be an actor profile (person, team or IT profile);
|
|
3467
3743
|
actor role (person role, team role or IT profile role); or user identity. Request body is optional.
|
|
3468
3744
|
Request body is optional. Async version.
|
|
@@ -3482,9 +3758,9 @@ class CollectionManager(Client2):
|
|
|
3482
3758
|
|
|
3483
3759
|
Raises
|
|
3484
3760
|
------
|
|
3485
|
-
|
|
3761
|
+
PyegeriaInvalidParameterException
|
|
3486
3762
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3487
|
-
|
|
3763
|
+
PyegeriaAPIException
|
|
3488
3764
|
Raised by the server when an issue arises in processing a valid request
|
|
3489
3765
|
NotAuthorizedException
|
|
3490
3766
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -3517,7 +3793,7 @@ class CollectionManager(Client2):
|
|
|
3517
3793
|
logger.info(f"Attached digital product manager {agreement_guid} -> {actor_guid}")
|
|
3518
3794
|
|
|
3519
3795
|
|
|
3520
|
-
def link_agreement_actor(self, agreement_guid: str, actor_guid: str, body: dict | NewRelationshipRequestBody = None):
|
|
3796
|
+
def link_agreement_actor(self, agreement_guid: str, actor_guid: str, body: Optional[dict | NewRelationshipRequestBody] = None):
|
|
3521
3797
|
""" Attach an actor to an agreement. The actor element may be an actor profile (person, team or IT profile);
|
|
3522
3798
|
actor role (person role, team role or IT profile role); or user identity. Request body is optional.
|
|
3523
3799
|
Async version.
|
|
@@ -3537,9 +3813,9 @@ class CollectionManager(Client2):
|
|
|
3537
3813
|
|
|
3538
3814
|
Raises
|
|
3539
3815
|
------
|
|
3540
|
-
|
|
3816
|
+
PyegeriaInvalidParameterException
|
|
3541
3817
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3542
|
-
|
|
3818
|
+
PyegeriaAPIException
|
|
3543
3819
|
Raised by the server when an issue arises in processing a valid request
|
|
3544
3820
|
NotAuthorizedException
|
|
3545
3821
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -3572,7 +3848,7 @@ class CollectionManager(Client2):
|
|
|
3572
3848
|
@dynamic_catch
|
|
3573
3849
|
async def _async_detach_agreement_actor(self, agreement_guid: str,
|
|
3574
3850
|
actor_guid: str,
|
|
3575
|
-
body: dict |
|
|
3851
|
+
body: Optional[dict | DeleteRelationshipRequestBody] = None)-> None:
|
|
3576
3852
|
""" Detach an actor from an agreement.
|
|
3577
3853
|
Request body is optional. Async Version.
|
|
3578
3854
|
|
|
@@ -3582,7 +3858,7 @@ class CollectionManager(Client2):
|
|
|
3582
3858
|
The guid of the agreement.
|
|
3583
3859
|
actor_guid: str
|
|
3584
3860
|
The guid of the actor.
|
|
3585
|
-
body: dict |
|
|
3861
|
+
body: dict | DeleteRelationshipRequestBody, optional, default = None
|
|
3586
3862
|
A structure representing the details of the relationship.
|
|
3587
3863
|
|
|
3588
3864
|
Returns
|
|
@@ -3591,9 +3867,9 @@ class CollectionManager(Client2):
|
|
|
3591
3867
|
|
|
3592
3868
|
Raises
|
|
3593
3869
|
------
|
|
3594
|
-
|
|
3870
|
+
PyegeriaInvalidParameterException
|
|
3595
3871
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3596
|
-
|
|
3872
|
+
PyegeriaAPIException
|
|
3597
3873
|
Raised by the server when an issue arises in processing a valid request
|
|
3598
3874
|
NotAuthorizedException
|
|
3599
3875
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -3602,7 +3878,7 @@ class CollectionManager(Client2):
|
|
|
3602
3878
|
-----
|
|
3603
3879
|
JSON Structure looks like:
|
|
3604
3880
|
{
|
|
3605
|
-
"class": "
|
|
3881
|
+
"class": "DeleteRelationshipRequestBody",
|
|
3606
3882
|
"externalSourceGUID": "add guid here",
|
|
3607
3883
|
"externalSourceName": "add qualified name here",
|
|
3608
3884
|
"effectiveTime": "{{$isoTimestamp}}",
|
|
@@ -3616,12 +3892,12 @@ class CollectionManager(Client2):
|
|
|
3616
3892
|
f"{self.platform_url}/servers/"
|
|
3617
3893
|
f"{self.view_server}/api/open-metadata/collection-manager/collections/agreements/"
|
|
3618
3894
|
f"{agreement_guid}/agreement-actors/{actor_guid}/detach")
|
|
3619
|
-
self.
|
|
3895
|
+
self._async_delete_relationship_request(url, body)
|
|
3620
3896
|
logger.info(f"Detached digital product manager {agreement_guid} -> {actor_guid}")
|
|
3621
3897
|
|
|
3622
3898
|
|
|
3623
3899
|
def detach_agreement_actor(self, agreement_guid: str, actor_guid: str,
|
|
3624
|
-
body: dict |
|
|
3900
|
+
body: dict | DeleteRelationshipRequestBody= None):
|
|
3625
3901
|
""" Detach an actor from an agreement.
|
|
3626
3902
|
Request body is optional.
|
|
3627
3903
|
|
|
@@ -3631,7 +3907,7 @@ class CollectionManager(Client2):
|
|
|
3631
3907
|
The guid of the agreement.
|
|
3632
3908
|
actor_guid: str
|
|
3633
3909
|
The guid of the actor.
|
|
3634
|
-
body: dict |
|
|
3910
|
+
body: dict | DeleteRelationshipRequestBody, optional, default = None
|
|
3635
3911
|
A structure representing the details of the relationship.
|
|
3636
3912
|
|
|
3637
3913
|
Returns
|
|
@@ -3640,9 +3916,9 @@ class CollectionManager(Client2):
|
|
|
3640
3916
|
|
|
3641
3917
|
Raises
|
|
3642
3918
|
------
|
|
3643
|
-
|
|
3919
|
+
PyegeriaInvalidParameterException
|
|
3644
3920
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3645
|
-
|
|
3921
|
+
PyegeriaAPIException
|
|
3646
3922
|
Raised by the server when an issue arises in processing a valid request
|
|
3647
3923
|
NotAuthorizedException
|
|
3648
3924
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -3651,7 +3927,7 @@ class CollectionManager(Client2):
|
|
|
3651
3927
|
-----
|
|
3652
3928
|
JSON Structure looks like:
|
|
3653
3929
|
{
|
|
3654
|
-
"class": "
|
|
3930
|
+
"class": "DeleteRelationshipRequestBody",
|
|
3655
3931
|
"externalSourceGUID": "add guid here",
|
|
3656
3932
|
"externalSourceName": "add qualified name here",
|
|
3657
3933
|
"effectiveTime": "{{$isoTimestamp}}",
|
|
@@ -3690,9 +3966,9 @@ class CollectionManager(Client2):
|
|
|
3690
3966
|
|
|
3691
3967
|
Raises
|
|
3692
3968
|
------
|
|
3693
|
-
|
|
3969
|
+
PyegeriaInvalidParameterException
|
|
3694
3970
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3695
|
-
|
|
3971
|
+
PyegeriaAPIException
|
|
3696
3972
|
Raised by the server when an issue arises in processing a valid request
|
|
3697
3973
|
NotAuthorizedException
|
|
3698
3974
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -3759,9 +4035,9 @@ class CollectionManager(Client2):
|
|
|
3759
4035
|
|
|
3760
4036
|
Raises
|
|
3761
4037
|
------
|
|
3762
|
-
|
|
4038
|
+
PyegeriaInvalidParameterException
|
|
3763
4039
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3764
|
-
|
|
4040
|
+
PyegeriaAPIException
|
|
3765
4041
|
Raised by the server when an issue arises in processing a valid request
|
|
3766
4042
|
NotAuthorizedException
|
|
3767
4043
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -3805,7 +4081,7 @@ class CollectionManager(Client2):
|
|
|
3805
4081
|
|
|
3806
4082
|
@dynamic_catch
|
|
3807
4083
|
async def _async_detach_agreement_item(self, agreement_guid: str, agreement_item_guid: str,
|
|
3808
|
-
body: dict |
|
|
4084
|
+
body: Optional[dict | DeleteRelationshipRequestBody] = None) -> None:
|
|
3809
4085
|
"""Detach an agreement item from an agreement. Request body is optional. Async version.
|
|
3810
4086
|
|
|
3811
4087
|
Parameters
|
|
@@ -3814,7 +4090,7 @@ class CollectionManager(Client2):
|
|
|
3814
4090
|
The guid of the agreement to link.
|
|
3815
4091
|
agreement_item_guid: str
|
|
3816
4092
|
The guid of the element to attach.
|
|
3817
|
-
body: dict |
|
|
4093
|
+
body: dict | DeleteRelationshipRequestBody, optional, default = None
|
|
3818
4094
|
A structure representing the details of the relationship.
|
|
3819
4095
|
|
|
3820
4096
|
Returns
|
|
@@ -3823,9 +4099,9 @@ class CollectionManager(Client2):
|
|
|
3823
4099
|
|
|
3824
4100
|
Raises
|
|
3825
4101
|
------
|
|
3826
|
-
|
|
4102
|
+
PyegeriaInvalidParameterException
|
|
3827
4103
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3828
|
-
|
|
4104
|
+
PyegeriaAPIException
|
|
3829
4105
|
Raised by the server when an issue arises in processing a valid request
|
|
3830
4106
|
NotAuthorizedException
|
|
3831
4107
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -3833,7 +4109,7 @@ class CollectionManager(Client2):
|
|
|
3833
4109
|
Notes
|
|
3834
4110
|
_____
|
|
3835
4111
|
{
|
|
3836
|
-
"class": "
|
|
4112
|
+
"class": "DeleteRelationshipRequestBody",
|
|
3837
4113
|
"externalSourceGUID": "add guid here",
|
|
3838
4114
|
"externalSourceName": "add qualified name here",
|
|
3839
4115
|
"effectiveTime": "{{$isoTimestamp}}",
|
|
@@ -3846,7 +4122,7 @@ class CollectionManager(Client2):
|
|
|
3846
4122
|
f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/collection-manager/collections"
|
|
3847
4123
|
f"/agreements"
|
|
3848
4124
|
f"{agreement_guid}/agreement-items/{agreement_item_guid}/detach")
|
|
3849
|
-
await self.
|
|
4125
|
+
await self._async_delete_relationship_request(url, body)
|
|
3850
4126
|
logger.info(f"Detached agreement item {agreement_item_guid} from {agreement_guid}")
|
|
3851
4127
|
|
|
3852
4128
|
|
|
@@ -3868,9 +4144,9 @@ class CollectionManager(Client2):
|
|
|
3868
4144
|
|
|
3869
4145
|
Raises
|
|
3870
4146
|
------
|
|
3871
|
-
|
|
4147
|
+
PyegeriaInvalidParameterException
|
|
3872
4148
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3873
|
-
|
|
4149
|
+
PyegeriaAPIException
|
|
3874
4150
|
Raised by the server when an issue arises in processing a valid request
|
|
3875
4151
|
NotAuthorizedException
|
|
3876
4152
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -3892,8 +4168,8 @@ class CollectionManager(Client2):
|
|
|
3892
4168
|
|
|
3893
4169
|
|
|
3894
4170
|
@dynamic_catch
|
|
3895
|
-
async def _async_link_contract(self, agreement_guid: str, external_ref_guid: str,
|
|
3896
|
-
body: dict | NewRelationshipRequestBody = None) -> None:
|
|
4171
|
+
async def _async_link_contract(self, agreement_guid: str, external_ref_guid: str,
|
|
4172
|
+
body: Optional[dict | NewRelationshipRequestBody] = None) -> None:
|
|
3897
4173
|
""" Attach an agreement to an external reference element that describes the location of the contract
|
|
3898
4174
|
documents.
|
|
3899
4175
|
Request body is optional. Async version.
|
|
@@ -3913,9 +4189,9 @@ class CollectionManager(Client2):
|
|
|
3913
4189
|
|
|
3914
4190
|
Raises
|
|
3915
4191
|
------
|
|
3916
|
-
|
|
4192
|
+
PyegeriaInvalidParameterException
|
|
3917
4193
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3918
|
-
|
|
4194
|
+
PyegeriaAPIException
|
|
3919
4195
|
Raised by the server when an issue arises in processing a valid request
|
|
3920
4196
|
NotAuthorizedException
|
|
3921
4197
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -3968,9 +4244,9 @@ class CollectionManager(Client2):
|
|
|
3968
4244
|
|
|
3969
4245
|
Raises
|
|
3970
4246
|
------
|
|
3971
|
-
|
|
4247
|
+
PyegeriaInvalidParameterException
|
|
3972
4248
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
3973
|
-
|
|
4249
|
+
PyegeriaAPIException
|
|
3974
4250
|
Raised by the server when an issue arises in processing a valid request
|
|
3975
4251
|
NotAuthorizedException
|
|
3976
4252
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -4020,9 +4296,9 @@ class CollectionManager(Client2):
|
|
|
4020
4296
|
|
|
4021
4297
|
Raises
|
|
4022
4298
|
------
|
|
4023
|
-
|
|
4299
|
+
PyegeriaInvalidParameterException
|
|
4024
4300
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
4025
|
-
|
|
4301
|
+
PyegeriaAPIException
|
|
4026
4302
|
Raised by the server when an issue arises in processing a valid request
|
|
4027
4303
|
NotAuthorizedException
|
|
4028
4304
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -4043,7 +4319,7 @@ class CollectionManager(Client2):
|
|
|
4043
4319
|
url = (
|
|
4044
4320
|
f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/collection-manager/collections"
|
|
4045
4321
|
f"/agreements/{agreement_guid}/contract-links/{external_ref_guid}/detach")
|
|
4046
|
-
await self.
|
|
4322
|
+
await self._async_delete_relationship_request(url, body)
|
|
4047
4323
|
logger.info(f"Detached contract: {external_ref_guid} from {agreement_guid}")
|
|
4048
4324
|
|
|
4049
4325
|
@dynamic_catch
|
|
@@ -4065,9 +4341,9 @@ class CollectionManager(Client2):
|
|
|
4065
4341
|
|
|
4066
4342
|
Raises
|
|
4067
4343
|
------
|
|
4068
|
-
|
|
4344
|
+
PyegeriaInvalidParameterException
|
|
4069
4345
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
4070
|
-
|
|
4346
|
+
PyegeriaAPIException
|
|
4071
4347
|
Raised by the server when an issue arises in processing a valid request
|
|
4072
4348
|
NotAuthorizedException
|
|
4073
4349
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -4107,9 +4383,9 @@ class CollectionManager(Client2):
|
|
|
4107
4383
|
|
|
4108
4384
|
Raises
|
|
4109
4385
|
------
|
|
4110
|
-
|
|
4386
|
+
PyegeriaInvalidParameterException
|
|
4111
4387
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
4112
|
-
|
|
4388
|
+
PyegeriaAPIException
|
|
4113
4389
|
Raised by the server when an issue arises in processing a valid request
|
|
4114
4390
|
NotAuthorizedException
|
|
4115
4391
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -4130,7 +4406,7 @@ class CollectionManager(Client2):
|
|
|
4130
4406
|
"properties": {
|
|
4131
4407
|
"class" : "DigitalSubscriptionProperties",
|
|
4132
4408
|
"qualifiedName": "DigitalSubscription::Add subscription name here",
|
|
4133
|
-
"
|
|
4409
|
+
"displayName" : "display name",
|
|
4134
4410
|
"description" : "Add description of the subscription here",
|
|
4135
4411
|
"userDefinedStatus" : "OBSOLETE",
|
|
4136
4412
|
"identifier" : "Add subscription identifier here",
|
|
@@ -4169,7 +4445,7 @@ class CollectionManager(Client2):
|
|
|
4169
4445
|
"properties": {
|
|
4170
4446
|
"class" : "DigitalSubscriptionProperties",
|
|
4171
4447
|
"qualifiedName": "DigitalSubscription::Add subscription name here",
|
|
4172
|
-
"
|
|
4448
|
+
"displayName" : "display name",
|
|
4173
4449
|
"description" : "Add description of the subscription here",
|
|
4174
4450
|
"userDefinedStatus" : "OBSOLETE",
|
|
4175
4451
|
"identifier" : "Add subscription identifier here",
|
|
@@ -4209,9 +4485,9 @@ class CollectionManager(Client2):
|
|
|
4209
4485
|
|
|
4210
4486
|
Raises
|
|
4211
4487
|
------
|
|
4212
|
-
|
|
4488
|
+
PyegeriaInvalidParameterException
|
|
4213
4489
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
4214
|
-
|
|
4490
|
+
PyegeriaAPIException
|
|
4215
4491
|
Raised by the server when an issue arises in processing a valid request
|
|
4216
4492
|
NotAuthorizedException
|
|
4217
4493
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -4240,7 +4516,7 @@ class CollectionManager(Client2):
|
|
|
4240
4516
|
"properties": {
|
|
4241
4517
|
"class" : "DigitalSubscriptionProperties",
|
|
4242
4518
|
"qualifiedName": "DigitalSubscription::Add subscription name here",
|
|
4243
|
-
"
|
|
4519
|
+
"displayName" : "display name",
|
|
4244
4520
|
"description" : "Add description of the subscription here",
|
|
4245
4521
|
"userDefinedStatus" : "OBSOLETE",
|
|
4246
4522
|
"identifier" : "Add subscription identifier here",
|
|
@@ -4285,9 +4561,9 @@ class CollectionManager(Client2):
|
|
|
4285
4561
|
|
|
4286
4562
|
Raises
|
|
4287
4563
|
------
|
|
4288
|
-
|
|
4564
|
+
PyegeriaInvalidParameterException
|
|
4289
4565
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
4290
|
-
|
|
4566
|
+
PyegeriaAPIException
|
|
4291
4567
|
Raised by the server when an issue arises in processing a valid request
|
|
4292
4568
|
NotAuthorizedException
|
|
4293
4569
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -4300,7 +4576,7 @@ class CollectionManager(Client2):
|
|
|
4300
4576
|
"properties": {
|
|
4301
4577
|
"class" : "DigitalSubscriptionProperties",
|
|
4302
4578
|
"qualifiedName": "DigitalSubscription::Add subscription name here",
|
|
4303
|
-
"
|
|
4579
|
+
"displayName" : "display name",
|
|
4304
4580
|
"description" : "Add description of the subscription here",
|
|
4305
4581
|
"userDefinedStatus" : "OBSOLETE",
|
|
4306
4582
|
"identifier" : "Add subscription identifier here",
|
|
@@ -4336,8 +4612,6 @@ class CollectionManager(Client2):
|
|
|
4336
4612
|
The guid of the digital_subscription to update.
|
|
4337
4613
|
body: dict
|
|
4338
4614
|
A dict representing the details of the collection to create.
|
|
4339
|
-
replace_all_props: bool, optional, defaults to False
|
|
4340
|
-
Whether to replace all properties in the collection.
|
|
4341
4615
|
|
|
4342
4616
|
|
|
4343
4617
|
Returns
|
|
@@ -4346,9 +4620,9 @@ class CollectionManager(Client2):
|
|
|
4346
4620
|
|
|
4347
4621
|
Raises
|
|
4348
4622
|
------
|
|
4349
|
-
|
|
4623
|
+
PyegeriaInvalidParameterException
|
|
4350
4624
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
4351
|
-
|
|
4625
|
+
PyegeriaAPIException
|
|
4352
4626
|
Raised by the server when an issue arises in processing a valid request
|
|
4353
4627
|
NotAuthorizedException
|
|
4354
4628
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -4361,7 +4635,7 @@ class CollectionManager(Client2):
|
|
|
4361
4635
|
"properties": {
|
|
4362
4636
|
"class" : "AgreementProperties",
|
|
4363
4637
|
"qualifiedName": "Agreement::Add digital_subscription name here",
|
|
4364
|
-
"
|
|
4638
|
+
"displayName" : "display name",
|
|
4365
4639
|
"description" : "Add description of the digital_subscription here",
|
|
4366
4640
|
"userDefinedStatus" : "OBSOLETE",
|
|
4367
4641
|
"identifier" : "Add digital_subscription identifier here",
|
|
@@ -4383,99 +4657,9 @@ class CollectionManager(Client2):
|
|
|
4383
4657
|
self._async_update_digital_subscription(digital_subscription_guid, body))
|
|
4384
4658
|
|
|
4385
4659
|
|
|
4386
|
-
@dynamic_catch
|
|
4387
|
-
async def _async_update_digital_subscription_status(self, digital_subscription_guid: str, status: str = None,
|
|
4388
|
-
body: dict | UpdateStatusRequestBody = None)-> None:
|
|
4389
|
-
"""Update the status of a digital_subscription collection. Async version.
|
|
4390
|
-
|
|
4391
|
-
Parameters
|
|
4392
|
-
----------
|
|
4393
|
-
digital_subscription_guid: str
|
|
4394
|
-
The guid of the digital product collection to update.
|
|
4395
|
-
status: str, optional
|
|
4396
|
-
The new status of the digital_subscription collection. Will be used only if body is not provided.
|
|
4397
|
-
body: dict | UpdateStatusRequestBody, optional, defaults to None
|
|
4398
|
-
A structure representing the details of the collection to create.
|
|
4399
|
-
|
|
4400
|
-
Returns
|
|
4401
|
-
-------
|
|
4402
|
-
Nothing
|
|
4403
|
-
|
|
4404
|
-
Raises
|
|
4405
|
-
------
|
|
4406
|
-
InvalidParameterException
|
|
4407
|
-
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
4408
|
-
PropertyServerException
|
|
4409
|
-
Raised by the server when an issue arises in processing a valid request
|
|
4410
|
-
NotAuthorizedException
|
|
4411
|
-
The principle specified by the user_id does not have authorization for the requested action
|
|
4412
|
-
|
|
4413
|
-
Notes
|
|
4414
|
-
-----
|
|
4415
|
-
JSON Structure looks like:
|
|
4416
|
-
{
|
|
4417
|
-
"class": "UpdateStatusRequestBody",
|
|
4418
|
-
"status": "APPROVED",
|
|
4419
|
-
"externalSourceGUID": "add guid here",
|
|
4420
|
-
"externalSourceName": "add qualified name here",
|
|
4421
|
-
"effectiveTime": "{{$isoTimestamp}}",
|
|
4422
|
-
"forLineage": false,
|
|
4423
|
-
"forDuplicateProcessing": false
|
|
4424
|
-
}
|
|
4425
|
-
"""
|
|
4426
|
-
url = (
|
|
4427
|
-
f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/collection-manager/collections"
|
|
4428
|
-
f"/agreements/"
|
|
4429
|
-
f"{digital_subscription_guid}/update-status")
|
|
4430
|
-
await self._async_update_status_request(url, status, body)
|
|
4431
|
-
logger.info(f"Updated status for DigitalProduct {digital_subscription_guid}")
|
|
4432
|
-
|
|
4433
|
-
@dynamic_catch
|
|
4434
|
-
def update_digital_subscription_status(self, digital_subscription_guid: str,
|
|
4435
|
-
body: dict | UpdateStatusRequestBody = None,):
|
|
4436
|
-
"""Update the status of an digital_subscription collection. Async version.
|
|
4437
|
-
|
|
4438
|
-
Parameters
|
|
4439
|
-
----------
|
|
4440
|
-
digital_subscription_guid: str
|
|
4441
|
-
The guid of the digital product collection to update.
|
|
4442
|
-
body: dict
|
|
4443
|
-
A dict representing the details of the collection to create.
|
|
4444
|
-
|
|
4445
|
-
Returns
|
|
4446
|
-
-------
|
|
4447
|
-
Nothing
|
|
4448
|
-
|
|
4449
|
-
Raises
|
|
4450
|
-
------
|
|
4451
|
-
InvalidParameterException
|
|
4452
|
-
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
4453
|
-
PropertyServerException
|
|
4454
|
-
Raised by the server when an issue arises in processing a valid request
|
|
4455
|
-
NotAuthorizedException
|
|
4456
|
-
The principle specified by the user_id does not have authorization for the requested action
|
|
4457
|
-
|
|
4458
|
-
Notes
|
|
4459
|
-
-----
|
|
4460
|
-
JSON Structure looks like:
|
|
4461
|
-
{
|
|
4462
|
-
"class": "AgreementStatusRequestBody",
|
|
4463
|
-
"status": "APPROVED",
|
|
4464
|
-
"externalSourceGUID": "add guid here",
|
|
4465
|
-
"externalSourceName": "add qualified name here",
|
|
4466
|
-
"effectiveTime": "{{$isoTimestamp}}",
|
|
4467
|
-
"forLineage": false,
|
|
4468
|
-
"forDuplicateProcessing": false
|
|
4469
|
-
}
|
|
4470
|
-
|
|
4471
|
-
"""
|
|
4472
|
-
loop = asyncio.get_event_loop()
|
|
4473
|
-
loop.run_until_complete(self._async_update_digital_subscription_status(digital_subscription_guid, body))
|
|
4474
|
-
|
|
4475
|
-
|
|
4476
4660
|
@dynamic_catch
|
|
4477
4661
|
async def _async_link_subscriber(self, subscriber_guid: str, subscription_guid: str,
|
|
4478
|
-
body: dict | NewRelationshipRequestBody = None)-> None:
|
|
4662
|
+
body: Optional[dict | NewRelationshipRequestBody] = None)-> None:
|
|
4479
4663
|
""" Attach a subscriber to a subscription. The subscriber is of type 'Referenceable' to allow digital
|
|
4480
4664
|
products, team or business capabilities to be the subscriber. The subscription is an element of type
|
|
4481
4665
|
DigitalSubscription.
|
|
@@ -4496,9 +4680,9 @@ class CollectionManager(Client2):
|
|
|
4496
4680
|
|
|
4497
4681
|
Raises
|
|
4498
4682
|
------
|
|
4499
|
-
|
|
4683
|
+
PyegeriaInvalidParameterException
|
|
4500
4684
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
4501
|
-
|
|
4685
|
+
PyegeriaAPIException
|
|
4502
4686
|
Raised by the server when an issue arises in processing a valid request
|
|
4503
4687
|
NotAuthorizedException
|
|
4504
4688
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -4530,7 +4714,7 @@ class CollectionManager(Client2):
|
|
|
4530
4714
|
|
|
4531
4715
|
@dynamic_catch
|
|
4532
4716
|
def link_subscriber(self, subscriber_guid: str, subscription_guid: str,
|
|
4533
|
-
body: dict | NewRelationshipRequestBody = None):
|
|
4717
|
+
body: Optional[dict | NewRelationshipRequestBody] = None):
|
|
4534
4718
|
""" Attach a subscriber to a subscription. The subscriber is of type 'Referenceable' to allow digital
|
|
4535
4719
|
products, team or business capabilities to be the subscriber. The subscription is an element of type
|
|
4536
4720
|
DigitalSubscription.
|
|
@@ -4551,9 +4735,9 @@ class CollectionManager(Client2):
|
|
|
4551
4735
|
|
|
4552
4736
|
Raises
|
|
4553
4737
|
------
|
|
4554
|
-
|
|
4738
|
+
PyegeriaInvalidParameterException
|
|
4555
4739
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
4556
|
-
|
|
4740
|
+
PyegeriaAPIException
|
|
4557
4741
|
Raised by the server when an issue arises in processing a valid request
|
|
4558
4742
|
NotAuthorizedException
|
|
4559
4743
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -4582,7 +4766,7 @@ class CollectionManager(Client2):
|
|
|
4582
4766
|
|
|
4583
4767
|
@dynamic_catch
|
|
4584
4768
|
async def _async_detach_subscriber(self, subscriber_guid: str, subscription_guid: str,
|
|
4585
|
-
body: dict |
|
|
4769
|
+
body: Optional[dict | DeleteRelationshipRequestBody] = None) -> None:
|
|
4586
4770
|
""" Detach a subscriber from a subscription Request body is optional. Async version.
|
|
4587
4771
|
|
|
4588
4772
|
Parameters
|
|
@@ -4591,7 +4775,7 @@ class CollectionManager(Client2):
|
|
|
4591
4775
|
The unique identifier of the subscriber.
|
|
4592
4776
|
subscription_guid: str
|
|
4593
4777
|
The unique identifier of the subscription.
|
|
4594
|
-
body: dict |
|
|
4778
|
+
body: dict | DeleteRelationshipRequestBody, optional, default = None
|
|
4595
4779
|
A structure representing the details of the relationship.
|
|
4596
4780
|
|
|
4597
4781
|
Returns
|
|
@@ -4600,9 +4784,9 @@ class CollectionManager(Client2):
|
|
|
4600
4784
|
|
|
4601
4785
|
Raises
|
|
4602
4786
|
------
|
|
4603
|
-
|
|
4787
|
+
PyegeriaInvalidParameterException
|
|
4604
4788
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
4605
|
-
|
|
4789
|
+
PyegeriaAPIException
|
|
4606
4790
|
Raised by the server when an issue arises in processing a valid request
|
|
4607
4791
|
NotAuthorizedException
|
|
4608
4792
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -4623,11 +4807,11 @@ class CollectionManager(Client2):
|
|
|
4623
4807
|
f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/collection-manager/collections"
|
|
4624
4808
|
f"/agreements/"
|
|
4625
4809
|
f"{subscriber_guid}/agreement-actors/{subscription_guid}/detach")
|
|
4626
|
-
await self.
|
|
4810
|
+
await self._async_delete_relationship_request(url, body)
|
|
4627
4811
|
logger.info(f"Detached subscriber {subscriber_guid} from subscription {subscription_guid}")
|
|
4628
4812
|
|
|
4629
4813
|
|
|
4630
|
-
def detach_subscriber(self, subscriber_guid: str, subscription_guid: str, body: dict |
|
|
4814
|
+
def detach_subscriber(self, subscriber_guid: str, subscription_guid: str, body: dict | DeleteRelationshipRequestBody= None):
|
|
4631
4815
|
""" Detach a subscriber from a subscription. Request body is optional.
|
|
4632
4816
|
|
|
4633
4817
|
Parameters
|
|
@@ -4645,9 +4829,9 @@ class CollectionManager(Client2):
|
|
|
4645
4829
|
|
|
4646
4830
|
Raises
|
|
4647
4831
|
------
|
|
4648
|
-
|
|
4832
|
+
PyegeriaInvalidParameterException
|
|
4649
4833
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
4650
|
-
|
|
4834
|
+
PyegeriaAPIException
|
|
4651
4835
|
Raised by the server when an issue arises in processing a valid request
|
|
4652
4836
|
NotAuthorizedException
|
|
4653
4837
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -4693,9 +4877,9 @@ class CollectionManager(Client2):
|
|
|
4693
4877
|
|
|
4694
4878
|
Raises
|
|
4695
4879
|
------
|
|
4696
|
-
|
|
4880
|
+
PyegeriaInvalidParameterException
|
|
4697
4881
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
4698
|
-
|
|
4882
|
+
PyegeriaAPIException
|
|
4699
4883
|
Raised by the server when an issue arises in processing a valid request
|
|
4700
4884
|
NotAuthorizedException
|
|
4701
4885
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -4734,7 +4918,7 @@ class CollectionManager(Client2):
|
|
|
4734
4918
|
|
|
4735
4919
|
@dynamic_catch
|
|
4736
4920
|
def attach_collection(self, parent_guid: str, collection_guid: str,
|
|
4737
|
-
body: dict | NewRelationshipRequestBody = None):
|
|
4921
|
+
body: Optional[dict | NewRelationshipRequestBody] = None):
|
|
4738
4922
|
""" Connect an existing collection to an element using the ResourceList relationship (0019).
|
|
4739
4923
|
|
|
4740
4924
|
Parameters
|
|
@@ -4754,9 +4938,9 @@ class CollectionManager(Client2):
|
|
|
4754
4938
|
|
|
4755
4939
|
Raises
|
|
4756
4940
|
------
|
|
4757
|
-
|
|
4941
|
+
PyegeriaInvalidParameterException
|
|
4758
4942
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
4759
|
-
|
|
4943
|
+
PyegeriaAPIException
|
|
4760
4944
|
Raised by the server when an issue arises in processing a valid request
|
|
4761
4945
|
NotAuthorizedException
|
|
4762
4946
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -4790,7 +4974,7 @@ class CollectionManager(Client2):
|
|
|
4790
4974
|
|
|
4791
4975
|
@dynamic_catch
|
|
4792
4976
|
async def _async_detach_collection(self, parent_guid: str, collection_guid: str,
|
|
4793
|
-
body: dict |
|
|
4977
|
+
body: Optional[dict | DeleteRelationshipRequestBody] = None):
|
|
4794
4978
|
""" Detach an existing collection from an element. If the collection is anchored to the element,
|
|
4795
4979
|
it is delete.
|
|
4796
4980
|
Async version.
|
|
@@ -4801,7 +4985,7 @@ class CollectionManager(Client2):
|
|
|
4801
4985
|
The unique identifier of the parent to detach from.
|
|
4802
4986
|
collection_guid: str
|
|
4803
4987
|
The identifier of the collection being detached.
|
|
4804
|
-
body: dict |
|
|
4988
|
+
body: dict | DeleteRelationshipRequestBody, optional, default = None
|
|
4805
4989
|
A structure representing the details of the relationship.
|
|
4806
4990
|
|
|
4807
4991
|
|
|
@@ -4811,9 +4995,9 @@ class CollectionManager(Client2):
|
|
|
4811
4995
|
|
|
4812
4996
|
Raises
|
|
4813
4997
|
------
|
|
4814
|
-
|
|
4998
|
+
PyegeriaInvalidParameterException
|
|
4815
4999
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
4816
|
-
|
|
5000
|
+
PyegeriaAPIException
|
|
4817
5001
|
Raised by the server when an issue arises in processing a valid request
|
|
4818
5002
|
NotAuthorizedException
|
|
4819
5003
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -4822,7 +5006,7 @@ class CollectionManager(Client2):
|
|
|
4822
5006
|
-----
|
|
4823
5007
|
JSON Structure looks like:
|
|
4824
5008
|
{
|
|
4825
|
-
"class": "
|
|
5009
|
+
"class": "DeleteRelationshipRequestBody",
|
|
4826
5010
|
"externalSourceGUID": "add guid here",
|
|
4827
5011
|
"externalSourceName": "add qualified name here",
|
|
4828
5012
|
"effectiveTime": "{{$isoTimestamp}}",
|
|
@@ -4835,12 +5019,12 @@ class CollectionManager(Client2):
|
|
|
4835
5019
|
f"{self.platform_url}/servers/"
|
|
4836
5020
|
f"{self.view_server}/api/open-metadata/collection-manager/metadata-elements/"
|
|
4837
5021
|
f"{parent_guid}/collections/{collection_guid}/detach")
|
|
4838
|
-
await self.
|
|
5022
|
+
await self._async_delete_relationship_request(url, body)
|
|
4839
5023
|
logger.info(f"Detached collection {collection_guid} from {parent_guid}")
|
|
4840
5024
|
|
|
4841
5025
|
|
|
4842
5026
|
def detach_collection(self, parent_guid: str, collection_guid: str,
|
|
4843
|
-
body: dict |
|
|
5027
|
+
body: Optional[dict | DeleteRelationshipRequestBody] = None):
|
|
4844
5028
|
""" Detach an existing collection from an element. If the collection is anchored to the element,
|
|
4845
5029
|
it is delete.
|
|
4846
5030
|
|
|
@@ -4859,9 +5043,9 @@ class CollectionManager(Client2):
|
|
|
4859
5043
|
|
|
4860
5044
|
Raises
|
|
4861
5045
|
------
|
|
4862
|
-
|
|
5046
|
+
PyegeriaInvalidParameterException
|
|
4863
5047
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
4864
|
-
|
|
5048
|
+
PyegeriaAPIException
|
|
4865
5049
|
Raised by the server when an issue arises in processing a valid request
|
|
4866
5050
|
NotAuthorizedException
|
|
4867
5051
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -4883,7 +5067,7 @@ class CollectionManager(Client2):
|
|
|
4883
5067
|
|
|
4884
5068
|
|
|
4885
5069
|
@dynamic_catch
|
|
4886
|
-
async def _async_delete_collection(self, collection_guid: str, body: dict |
|
|
5070
|
+
async def _async_delete_collection(self, collection_guid: str, body: dict | DeleteElementRequestBody= None,
|
|
4887
5071
|
cascade: bool = False) -> None:
|
|
4888
5072
|
"""Delete a collection. It is detected from all parent elements. If members are anchored to the collection
|
|
4889
5073
|
then they are also deleted. Async version
|
|
@@ -4897,7 +5081,7 @@ class CollectionManager(Client2):
|
|
|
4897
5081
|
cascade: bool, optional, defaults to True
|
|
4898
5082
|
If true, a cascade delete is performed.
|
|
4899
5083
|
|
|
4900
|
-
body: dict |
|
|
5084
|
+
body: dict | DeleteElementRequestBody, optional, default = None
|
|
4901
5085
|
A structure representing the details of the relationship.
|
|
4902
5086
|
|
|
4903
5087
|
Returns
|
|
@@ -4906,9 +5090,9 @@ class CollectionManager(Client2):
|
|
|
4906
5090
|
|
|
4907
5091
|
Raises
|
|
4908
5092
|
------
|
|
4909
|
-
|
|
5093
|
+
PyegeriaInvalidParameterException
|
|
4910
5094
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
4911
|
-
|
|
5095
|
+
PyegeriaAPIException
|
|
4912
5096
|
Raised by the server when an issue arises in processing a valid request
|
|
4913
5097
|
NotAuthorizedException
|
|
4914
5098
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -4917,7 +5101,7 @@ class CollectionManager(Client2):
|
|
|
4917
5101
|
_____
|
|
4918
5102
|
JSON Structure looks like:
|
|
4919
5103
|
{
|
|
4920
|
-
"class": "
|
|
5104
|
+
"class": "DeleteElementRequestBody",
|
|
4921
5105
|
"externalSourceGUID": "add guid here",
|
|
4922
5106
|
"externalSourceName": "add qualified name here",
|
|
4923
5107
|
"effectiveTime": "{{$isoTimestamp}}",
|
|
@@ -4927,12 +5111,14 @@ class CollectionManager(Client2):
|
|
|
4927
5111
|
|
|
4928
5112
|
|
|
4929
5113
|
"""
|
|
5114
|
+
if body is None:
|
|
5115
|
+
body = {"class": "DeleteElementRequestBody"}
|
|
4930
5116
|
url = f"{self.collection_command_root}/{collection_guid}/delete"
|
|
4931
|
-
await self.
|
|
5117
|
+
await self._async_delete_element_request(url, body, cascade)
|
|
4932
5118
|
logger.info(f"Deleted collection {collection_guid} with cascade {cascade}")
|
|
4933
5119
|
|
|
4934
5120
|
|
|
4935
|
-
def delete_collection(self, collection_guid: str, body: dict |
|
|
5121
|
+
def delete_collection(self, collection_guid: str, body: Optional[dict | DeleteElementRequestBody] = None,
|
|
4936
5122
|
cascade: bool = False) -> None:
|
|
4937
5123
|
"""Delete a collection. It is deleted from all parent elements. If members are anchored to the collection
|
|
4938
5124
|
then they are also deleted.
|
|
@@ -4945,7 +5131,7 @@ class CollectionManager(Client2):
|
|
|
4945
5131
|
cascade: bool, optional, defaults to True
|
|
4946
5132
|
If true, a cascade delete is performed.
|
|
4947
5133
|
|
|
4948
|
-
body: dict
|
|
5134
|
+
body: dict | DeleteElementRequestBody, optional, default = None
|
|
4949
5135
|
A dict representing the details of the relationship.
|
|
4950
5136
|
|
|
4951
5137
|
Returns
|
|
@@ -4954,12 +5140,13 @@ class CollectionManager(Client2):
|
|
|
4954
5140
|
|
|
4955
5141
|
Raises
|
|
4956
5142
|
------
|
|
4957
|
-
|
|
4958
|
-
|
|
4959
|
-
|
|
4960
|
-
|
|
4961
|
-
|
|
4962
|
-
|
|
5143
|
+
PyegeriaException
|
|
5144
|
+
One of the pyegeria exceptions will be raised if there are issues in communications, message format, or
|
|
5145
|
+
Egeria errors.
|
|
5146
|
+
ValidationError
|
|
5147
|
+
Pydantic validation errors are raised if the body does not conform to the DeleteElementRequestBody.
|
|
5148
|
+
PyegeriaNotAuthorizedException
|
|
5149
|
+
The principle specified by the user_id does not have authorization for the requested action
|
|
4963
5150
|
|
|
4964
5151
|
Notes
|
|
4965
5152
|
_____
|
|
@@ -4974,7 +5161,7 @@ class CollectionManager(Client2):
|
|
|
4974
5161
|
|
|
4975
5162
|
@dynamic_catch
|
|
4976
5163
|
async def _async_add_to_collection(self, collection_guid: str, element_guid: str,
|
|
4977
|
-
body: dict | NewRelationshipRequestBody = None, ) -> None:
|
|
5164
|
+
body: Optional[dict | NewRelationshipRequestBody] = None, ) -> None:
|
|
4978
5165
|
"""Add an element to a collection. The request body is optional. Async version.
|
|
4979
5166
|
|
|
4980
5167
|
Parameters
|
|
@@ -4992,13 +5179,13 @@ class CollectionManager(Client2):
|
|
|
4992
5179
|
|
|
4993
5180
|
Raises
|
|
4994
5181
|
------
|
|
4995
|
-
|
|
4996
|
-
|
|
4997
|
-
|
|
4998
|
-
|
|
4999
|
-
|
|
5000
|
-
|
|
5001
|
-
|
|
5182
|
+
PyegeriaException
|
|
5183
|
+
One of the pyegeria exceptions will be raised if there are issues in communications, message format, or
|
|
5184
|
+
Egeria errors.
|
|
5185
|
+
ValidationError
|
|
5186
|
+
Pydantic validation errors are raised if the body does not conform to the NewRelationshipRequestBody.
|
|
5187
|
+
PyegeriaNotAuthorizedException
|
|
5188
|
+
The principle specified by the user_id does not have authorization for the requested action
|
|
5002
5189
|
|
|
5003
5190
|
Notes
|
|
5004
5191
|
-----
|
|
@@ -5057,9 +5244,9 @@ class CollectionManager(Client2):
|
|
|
5057
5244
|
Raises
|
|
5058
5245
|
------
|
|
5059
5246
|
|
|
5060
|
-
|
|
5247
|
+
PyegeriaInvalidParameterException
|
|
5061
5248
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
5062
|
-
|
|
5249
|
+
PyegeriaAPIException
|
|
5063
5250
|
Raised by the server when an issue arises in processing a valid request
|
|
5064
5251
|
NotAuthorizedException
|
|
5065
5252
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -5092,10 +5279,10 @@ class CollectionManager(Client2):
|
|
|
5092
5279
|
|
|
5093
5280
|
"""
|
|
5094
5281
|
loop = asyncio.get_event_loop()
|
|
5095
|
-
loop.run_until_complete(self._async_add_to_collection(
|
|
5282
|
+
loop.run_until_complete(self._async_add_to_collection(element_guid, collection_guid, body))
|
|
5096
5283
|
|
|
5097
5284
|
def add_term_to_folder(self, folder_guid: str, term_guid: str,
|
|
5098
|
-
body: dict | NewRelationshipRequestBody = None) -> None:
|
|
5285
|
+
body: Optional[dict | NewRelationshipRequestBody] = None) -> None:
|
|
5099
5286
|
"""Add a term to a category. The request body is optional."""
|
|
5100
5287
|
loop = asyncio.get_event_loop()
|
|
5101
5288
|
loop.run_until_complete(self._async_add_to_collection(folder_guid, term_guid, body))
|
|
@@ -5114,10 +5301,7 @@ class CollectionManager(Client2):
|
|
|
5114
5301
|
Effective time of the query. If not specified will default to any time.
|
|
5115
5302
|
body: dict, optional, defaults to None
|
|
5116
5303
|
The body of the request to add to the collection. See notes.
|
|
5117
|
-
replace_all_props: bool, optional, defaults to False
|
|
5118
|
-
Replace all properties or just update ones specified in body.
|
|
5119
5304
|
|
|
5120
|
-
The name of the server to use.
|
|
5121
5305
|
|
|
5122
5306
|
|
|
5123
5307
|
Returns
|
|
@@ -5127,9 +5311,9 @@ class CollectionManager(Client2):
|
|
|
5127
5311
|
Raises
|
|
5128
5312
|
------
|
|
5129
5313
|
|
|
5130
|
-
|
|
5314
|
+
PyegeriaInvalidParameterException
|
|
5131
5315
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
5132
|
-
|
|
5316
|
+
PyegeriaAPIException
|
|
5133
5317
|
Raised by the server when an issue arises in processing a valid request
|
|
5134
5318
|
NotAuthorizedException
|
|
5135
5319
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -5180,10 +5364,7 @@ class CollectionManager(Client2):
|
|
|
5180
5364
|
Effective time of the query. If not specified will default to any time.
|
|
5181
5365
|
body: dict, optional, defaults to None
|
|
5182
5366
|
The body of the request to add to the collection. See notes.
|
|
5183
|
-
replace_all_props: bool, optional, defaults to False
|
|
5184
|
-
Replace all properties or just update ones specified in body.
|
|
5185
5367
|
|
|
5186
|
-
The name of the server to use.
|
|
5187
5368
|
|
|
5188
5369
|
|
|
5189
5370
|
Returns
|
|
@@ -5193,9 +5374,9 @@ class CollectionManager(Client2):
|
|
|
5193
5374
|
Raises
|
|
5194
5375
|
------
|
|
5195
5376
|
|
|
5196
|
-
|
|
5377
|
+
PyegeriaInvalidParameterException
|
|
5197
5378
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
5198
|
-
|
|
5379
|
+
PyegeriaAPIException
|
|
5199
5380
|
Raised by the server when an issue arises in processing a valid request
|
|
5200
5381
|
NotAuthorizedException
|
|
5201
5382
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -5233,7 +5414,7 @@ class CollectionManager(Client2):
|
|
|
5233
5414
|
|
|
5234
5415
|
@dynamic_catch
|
|
5235
5416
|
async def _async_remove_from_collection(self, collection_guid: str, element_guid: str,
|
|
5236
|
-
body: dict |
|
|
5417
|
+
body: Optional[dict | DeleteRelationshipRequestBody] = None) -> None:
|
|
5237
5418
|
"""Remove an element from a collection. Async version.
|
|
5238
5419
|
|
|
5239
5420
|
Parameters
|
|
@@ -5242,7 +5423,7 @@ class CollectionManager(Client2):
|
|
|
5242
5423
|
identity of the collection to return members for.
|
|
5243
5424
|
element_guid: str
|
|
5244
5425
|
Effective time of the query. If not specified will default to any time.
|
|
5245
|
-
body: dict |
|
|
5426
|
+
body: dict | DeleteRelationshipRequestBody, optional, defaults to None
|
|
5246
5427
|
The body of the request to add to the collection. See notes.
|
|
5247
5428
|
|
|
5248
5429
|
Returns
|
|
@@ -5251,18 +5432,11 @@ class CollectionManager(Client2):
|
|
|
5251
5432
|
|
|
5252
5433
|
Raises
|
|
5253
5434
|
------
|
|
5254
|
-
|
|
5255
|
-
InvalidParameterException
|
|
5256
|
-
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
5257
|
-
PropertyServerException
|
|
5258
|
-
Raised by the server when an issue arises in processing a valid request
|
|
5259
|
-
NotAuthorizedException
|
|
5260
|
-
The principle specified by the user_id does not have authorization for the requested action
|
|
5261
|
-
|
|
5435
|
+
PyegeriaException
|
|
5262
5436
|
Notes
|
|
5263
5437
|
-----
|
|
5264
5438
|
{
|
|
5265
|
-
"class" : "
|
|
5439
|
+
"class" : "DeleteRelationshipRequestBody",
|
|
5266
5440
|
"externalSourceGUID": "add guid here",
|
|
5267
5441
|
"externalSourceName": "add qualified name here",
|
|
5268
5442
|
"effectiveTime" : "{{$isoTimestamp}}",
|
|
@@ -5272,14 +5446,13 @@ class CollectionManager(Client2):
|
|
|
5272
5446
|
|
|
5273
5447
|
"""
|
|
5274
5448
|
|
|
5275
|
-
url =
|
|
5276
|
-
|
|
5277
|
-
await self._async_delete_collection(url, body)
|
|
5449
|
+
url = f"{self.collection_command_root}/{collection_guid}/members/{element_guid}/detach"
|
|
5450
|
+
await self._async_delete_relationship_request(url, body)
|
|
5278
5451
|
logger.info(f"Removed member {element_guid} from collection {collection_guid}")
|
|
5279
5452
|
|
|
5280
5453
|
|
|
5281
5454
|
def remove_from_collection(self, collection_guid: str, element_guid: str,
|
|
5282
|
-
body: dict |
|
|
5455
|
+
body: dict | DeleteRelationshipRequestBody= None) -> None:
|
|
5283
5456
|
"""Remove an element from a collection. Async version.
|
|
5284
5457
|
|
|
5285
5458
|
Parameters
|
|
@@ -5298,9 +5471,9 @@ class CollectionManager(Client2):
|
|
|
5298
5471
|
Raises
|
|
5299
5472
|
------
|
|
5300
5473
|
|
|
5301
|
-
|
|
5474
|
+
PyegeriaInvalidParameterException
|
|
5302
5475
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
5303
|
-
|
|
5476
|
+
PyegeriaAPIException
|
|
5304
5477
|
Raised by the server when an issue arises in processing a valid request
|
|
5305
5478
|
NotAuthorizedException
|
|
5306
5479
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -5326,7 +5499,7 @@ class CollectionManager(Client2):
|
|
|
5326
5499
|
|
|
5327
5500
|
|
|
5328
5501
|
def remove_term_from_category(self, folder_guid: str, term_guid: str,
|
|
5329
|
-
body: dict |
|
|
5502
|
+
body: dict | DeleteRelationshipRequestBody= None) -> None:
|
|
5330
5503
|
"""Remove a term from a category.
|
|
5331
5504
|
|
|
5332
5505
|
Parameters
|
|
@@ -5345,9 +5518,9 @@ class CollectionManager(Client2):
|
|
|
5345
5518
|
Raises
|
|
5346
5519
|
------
|
|
5347
5520
|
|
|
5348
|
-
|
|
5521
|
+
PyegeriaInvalidParameterException
|
|
5349
5522
|
If the client passes incorrect parameters on the request - such as bad URLs or invalid values
|
|
5350
|
-
|
|
5523
|
+
PyegeriaAPIException
|
|
5351
5524
|
Raised by the server when an issue arises in processing a valid request
|
|
5352
5525
|
NotAuthorizedException
|
|
5353
5526
|
The principle specified by the user_id does not have authorization for the requested action
|
|
@@ -5365,8 +5538,8 @@ class CollectionManager(Client2):
|
|
|
5365
5538
|
|
|
5366
5539
|
|
|
5367
5540
|
@dynamic_catch
|
|
5368
|
-
async def _async_get_member_list(self, collection_guid: str = None, collection_name: str = None,
|
|
5369
|
-
collection_qname: str = None, ) -> list | str:
|
|
5541
|
+
async def _async_get_member_list(self, collection_guid: Optional[str] = None, collection_name: Optional[str] = None,
|
|
5542
|
+
collection_qname: Optional[str] = None, ) -> list | str:
|
|
5370
5543
|
"""Get the member list for the collection - async version.
|
|
5371
5544
|
Parameters
|
|
5372
5545
|
----------
|
|
@@ -5387,7 +5560,7 @@ class CollectionManager(Client2):
|
|
|
5387
5560
|
|
|
5388
5561
|
Raises
|
|
5389
5562
|
------
|
|
5390
|
-
|
|
5563
|
+
PyegeriaInvalidParameterException
|
|
5391
5564
|
If the root_collection_name does not have exactly one root collection.
|
|
5392
5565
|
|
|
5393
5566
|
"""
|
|
@@ -5403,10 +5576,11 @@ class CollectionManager(Client2):
|
|
|
5403
5576
|
# finally, construct a list of member information
|
|
5404
5577
|
for member_rel in members:
|
|
5405
5578
|
member_guid = member_rel["elementHeader"]["guid"]
|
|
5406
|
-
member = await self._async_get_element_by_guid_(member_guid)
|
|
5579
|
+
# member = await self._async_get_element_by_guid_(member_guid)
|
|
5580
|
+
member = member_rel
|
|
5407
5581
|
if isinstance(member, dict):
|
|
5408
5582
|
member_instance = {
|
|
5409
|
-
"
|
|
5583
|
+
"displayName": member["properties"].get('displayName', ''),
|
|
5410
5584
|
"qualifiedName": member["properties"]["qualifiedName"], "guid": member["elementHeader"]["guid"],
|
|
5411
5585
|
"description": member["properties"].get("description", ''),
|
|
5412
5586
|
"type": member["elementHeader"]["type"]['typeName'],
|
|
@@ -5416,8 +5590,8 @@ class CollectionManager(Client2):
|
|
|
5416
5590
|
return member_list if len(member_list) > 0 else "No members found"
|
|
5417
5591
|
|
|
5418
5592
|
|
|
5419
|
-
def get_member_list(self, collection_guid: str = None, collection_name: str = None,
|
|
5420
|
-
collection_qname: str = None, ) -> list | bool:
|
|
5593
|
+
def get_member_list(self, collection_guid: Optional[str] = None, collection_name: Optional[str] = None,
|
|
5594
|
+
collection_qname: Optional[str] = None, ) -> list | bool:
|
|
5421
5595
|
"""Get the member list for a collection - async version.
|
|
5422
5596
|
Parameters
|
|
5423
5597
|
----------
|
|
@@ -5437,7 +5611,7 @@ class CollectionManager(Client2):
|
|
|
5437
5611
|
|
|
5438
5612
|
Raises
|
|
5439
5613
|
------
|
|
5440
|
-
|
|
5614
|
+
PyegeriaInvalidParameterException
|
|
5441
5615
|
If the root_collection_name does not have exactly one root collection.
|
|
5442
5616
|
|
|
5443
5617
|
"""
|
|
@@ -5448,7 +5622,12 @@ class CollectionManager(Client2):
|
|
|
5448
5622
|
|
|
5449
5623
|
def _extract_digital_product_properties(self, element: dict, guid: str, output_format: str) -> dict:
|
|
5450
5624
|
props = element["properties"]
|
|
5451
|
-
|
|
5625
|
+
prop_class = props.get("class", "DigitalProductProperties")
|
|
5626
|
+
if prop_class == "DigitalProductFamilyProperties":
|
|
5627
|
+
digital_prod = DigitalProductFamilyProperties.model_validate(props)
|
|
5628
|
+
else:
|
|
5629
|
+
digital_prod = DigitalProductProperties.model_validate(props)
|
|
5630
|
+
|
|
5452
5631
|
added_props = get_defined_field_values(digital_prod)
|
|
5453
5632
|
|
|
5454
5633
|
used_by_digital_products = element.get("usedByDigitalProducts", "")
|
|
@@ -5465,6 +5644,40 @@ class CollectionManager(Client2):
|
|
|
5465
5644
|
uses_digital_products_list += f"{prod["relatedElement"]["properties"]["qualifiedName"]}, "
|
|
5466
5645
|
added_props["uses_digital_products"] = uses_digital_products_list[:-2]
|
|
5467
5646
|
|
|
5647
|
+
resources = element.get("resourceList", "")
|
|
5648
|
+
if isinstance(resources, (list | dict)):
|
|
5649
|
+
resource_list = ""
|
|
5650
|
+
for resource in resources:
|
|
5651
|
+
resource_list += f"{resource.get('properties',{}).get('qualifiedName', None)}, "
|
|
5652
|
+
added_props["resource_list"] = resource_list[:-2] if resource_list else ""
|
|
5653
|
+
|
|
5654
|
+
actors = element.get("assignedActors", "")
|
|
5655
|
+
if isinstance(actors, (list | dict)):
|
|
5656
|
+
actor_list = ""
|
|
5657
|
+
for actor in actors:
|
|
5658
|
+
actor_type = actor['relatedElement']['elementHeader']['type']['typeName']
|
|
5659
|
+
actor_qname = actor['relatedElement']['properties']['qualifiedName']
|
|
5660
|
+
actor_display_name = actor['relatedElement']['properties']['displayName']
|
|
5661
|
+
actor_list += actor_display_name
|
|
5662
|
+
added_props["actor_list"] = actor_list[:-2] if actor_list else ""
|
|
5663
|
+
|
|
5664
|
+
governed_by = element.get("governedBy", "")
|
|
5665
|
+
if isinstance(governed_by, (list | dict)):
|
|
5666
|
+
governed_by_list = ""
|
|
5667
|
+
for gov in governed_by:
|
|
5668
|
+
license_type = gov['relatedElement']['properties'].get('typeName',"")
|
|
5669
|
+
license_type_qname = gov['relatedElement']['properties'].get('qualifiedName','')
|
|
5670
|
+
governed_by_list += license_type_qname
|
|
5671
|
+
added_props["governed_list"] = governed_by_list[:-2] if governed_by_list else ""
|
|
5672
|
+
|
|
5673
|
+
solution_designs = element.get("solutionDesigns", "")
|
|
5674
|
+
if isinstance(solution_designs, (list | dict)):
|
|
5675
|
+
solution_design_list = ""
|
|
5676
|
+
for design in solution_designs:
|
|
5677
|
+
solution_design_qname = design['relatedElement']['properties'].get('qualifiedName', "")
|
|
5678
|
+
solution_design_list += solution_design_qname
|
|
5679
|
+
added_props["solution_design_list"] = solution_design_list[:-2] if solution_design_list else ""
|
|
5680
|
+
|
|
5468
5681
|
return added_props
|
|
5469
5682
|
|
|
5470
5683
|
def _extract_agreement_properties(self, element: dict, guid: str, output_format: str) -> dict:
|
|
@@ -5483,70 +5696,31 @@ class CollectionManager(Client2):
|
|
|
5483
5696
|
return added_props
|
|
5484
5697
|
|
|
5485
5698
|
def _extract_collection_properties(self, element: dict, columns_struct: dict) -> dict:
|
|
5486
|
-
"""
|
|
5487
|
-
Extract common properties from a collection element and populate into the provided columns_struct.
|
|
5699
|
+
"""Populate collection columns for output.
|
|
5488
5700
|
|
|
5489
|
-
|
|
5490
|
-
element (dict): The collection element
|
|
5491
|
-
columns_struct (dict): The columns structure to populate
|
|
5701
|
+
Uses `populate_common_columns` to fill standard fields and derive requested relationships.
|
|
5492
5702
|
|
|
5493
|
-
|
|
5494
|
-
|
|
5495
|
-
|
|
5496
|
-
|
|
5497
|
-
|
|
5498
|
-
|
|
5499
|
-
columns_list = col_data.get("formats", {}).get("columns", [])
|
|
5500
|
-
|
|
5501
|
-
# Populate header-derived values
|
|
5502
|
-
header_props = _extract_referenceable_properties(element)
|
|
5503
|
-
for column in columns_list:
|
|
5504
|
-
key = column.get('key')
|
|
5505
|
-
if key in header_props:
|
|
5506
|
-
column['value'] = header_props.get(key)
|
|
5507
|
-
elif isinstance(key, str) and key.lower() == 'guid':
|
|
5508
|
-
column['value'] = header_props.get('GUID')
|
|
5509
|
-
|
|
5510
|
-
# Derived/computed fields
|
|
5511
|
-
# collectionCategories are classifications
|
|
5512
|
-
classification_names = ""
|
|
5513
|
-
classifications = element.get('elementHeader', {}).get("collectionCategories", [])
|
|
5514
|
-
for classification in classifications:
|
|
5515
|
-
classification_names += f"{classification['classificationName']}, "
|
|
5516
|
-
if classification_names:
|
|
5517
|
-
for column in columns_list:
|
|
5518
|
-
if column.get('key') == 'classifications':
|
|
5519
|
-
column['value'] = classification_names[:-2]
|
|
5520
|
-
break
|
|
5521
|
-
|
|
5522
|
-
# Populate requested relationship-based columns generically from top-level keys
|
|
5523
|
-
col_data = get_required_relationships(element, col_data)
|
|
5524
|
-
|
|
5525
|
-
# Subject area classification
|
|
5526
|
-
subject_area = element.get('elementHeader', {}).get("subjectArea", "") or ""
|
|
5527
|
-
subj_val = ""
|
|
5528
|
-
if isinstance(subject_area, dict):
|
|
5529
|
-
subj_val = subject_area.get("classificationProperties", {}).get("subjectAreaName", "")
|
|
5530
|
-
for column in columns_list:
|
|
5531
|
-
if column.get('key') == 'subject_area':
|
|
5532
|
-
column['value'] = subj_val
|
|
5533
|
-
break
|
|
5534
|
-
|
|
5535
|
-
# Mermaid graph
|
|
5536
|
-
mermaid_val = element.get('mermaidGraph', "") or ""
|
|
5537
|
-
for column in columns_list:
|
|
5538
|
-
if column.get('key') == 'mermaid':
|
|
5539
|
-
column['value'] = mermaid_val
|
|
5540
|
-
break
|
|
5703
|
+
Parameters
|
|
5704
|
+
----------
|
|
5705
|
+
element : dict
|
|
5706
|
+
Raw element from the OMVS.
|
|
5707
|
+
columns_struct : dict
|
|
5708
|
+
Format-set structure whose columns' `value` fields will be populated.
|
|
5541
5709
|
|
|
5710
|
+
Returns
|
|
5711
|
+
-------
|
|
5712
|
+
dict
|
|
5713
|
+
The same columns_struct with populated values.
|
|
5714
|
+
"""
|
|
5715
|
+
# Use centralized common population
|
|
5716
|
+
col_data = populate_common_columns(element, columns_struct)
|
|
5542
5717
|
logger.trace(f"Extracted/Populated columns: {col_data}")
|
|
5543
|
-
|
|
5544
5718
|
return col_data
|
|
5545
5719
|
|
|
5546
5720
|
|
|
5547
|
-
def _generate_collection_output(self, elements: dict|list[dict],
|
|
5721
|
+
def _generate_collection_output(self, elements: dict|list[dict], filter_string: Optional[str],
|
|
5548
5722
|
element_type_name: Optional[str], output_format: str = "DICT",
|
|
5549
|
-
|
|
5723
|
+
report_spec: dict | str = None) -> str | list[dict]:
|
|
5550
5724
|
""" Generate output for collections in the specified format.
|
|
5551
5725
|
|
|
5552
5726
|
Args:
|
|
@@ -5554,7 +5728,7 @@ class CollectionManager(Client2):
|
|
|
5554
5728
|
filter (Optional[str]): The search string used to find the elements
|
|
5555
5729
|
element_type_name (Optional[str]): The type of collection
|
|
5556
5730
|
output_format (str): The desired output format (MD, FORM, REPORT, LIST, DICT, MERMAID, HTML)
|
|
5557
|
-
|
|
5731
|
+
report_spec (Optional[dict], optional): List of dictionaries containing column data. Defaults
|
|
5558
5732
|
to None.
|
|
5559
5733
|
|
|
5560
5734
|
Returns:
|
|
@@ -5564,22 +5738,22 @@ class CollectionManager(Client2):
|
|
|
5564
5738
|
entity_type = "Collections"
|
|
5565
5739
|
else:
|
|
5566
5740
|
entity_type = element_type_name
|
|
5567
|
-
# First see if the user has specified an
|
|
5741
|
+
# First see if the user has specified an report_spec - either a label or a dict
|
|
5568
5742
|
get_additional_props_func = None
|
|
5569
|
-
if
|
|
5570
|
-
if isinstance(
|
|
5571
|
-
output_formats =
|
|
5572
|
-
elif isinstance(
|
|
5573
|
-
output_formats =
|
|
5743
|
+
if report_spec:
|
|
5744
|
+
if isinstance(report_spec, str):
|
|
5745
|
+
output_formats = select_report_spec(report_spec, output_format)
|
|
5746
|
+
elif isinstance(report_spec, dict):
|
|
5747
|
+
output_formats = get_report_spec_match(report_spec, output_format)
|
|
5574
5748
|
|
|
5575
5749
|
# If no output_format was set, then use the element_type_name to lookup the output format
|
|
5576
5750
|
elif element_type_name:
|
|
5577
|
-
output_formats =
|
|
5751
|
+
output_formats = select_report_spec(element_type_name, output_format)
|
|
5578
5752
|
else:
|
|
5579
5753
|
# fallback to collections or entity type
|
|
5580
|
-
output_formats =
|
|
5754
|
+
output_formats = select_report_spec(entity_type,output_format)
|
|
5581
5755
|
if output_formats is None:
|
|
5582
|
-
output_formats =
|
|
5756
|
+
output_formats = select_report_spec("Default", output_format)
|
|
5583
5757
|
|
|
5584
5758
|
if output_formats:
|
|
5585
5759
|
get_additional_props_name = output_formats.get("get_additional_props", {}).get("function", None)
|