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
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Copyright Contributors to the ODPi Egeria project.
|
|
5
|
+
|
|
6
|
+
Example script demonstrating how to save and load report specs (formerly called format sets).
|
|
7
|
+
|
|
8
|
+
This script shows how to:
|
|
9
|
+
1. Create custom report specs
|
|
10
|
+
2. Save report specs to a file
|
|
11
|
+
3. Load report specs from a file
|
|
12
|
+
4. Use the loaded report specs
|
|
13
|
+
5. Work with the user report specs directory
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import sys
|
|
17
|
+
import os
|
|
18
|
+
|
|
19
|
+
# Add the parent directory to the path so we can import the modules
|
|
20
|
+
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
21
|
+
|
|
22
|
+
from pyegeria.view._output_format_models import Column, Format, ActionParameter, FormatSet, FormatSetDict
|
|
23
|
+
from pyegeria.view.base_report_formats import (
|
|
24
|
+
report_specs,
|
|
25
|
+
save_report_specs,
|
|
26
|
+
USER_FORMAT_SETS_DIR,
|
|
27
|
+
select_report_spec,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
def create_custom_format_sets():
|
|
31
|
+
"""
|
|
32
|
+
Create custom report specs for the example.
|
|
33
|
+
|
|
34
|
+
Returns:
|
|
35
|
+
FormatSetDict: A dictionary of custom format sets
|
|
36
|
+
"""
|
|
37
|
+
print("\n=== Creating Custom Report Specs ===")
|
|
38
|
+
|
|
39
|
+
# Create common columns that will be used in multiple formats
|
|
40
|
+
common_columns = [
|
|
41
|
+
Column(name="ID", key="id"),
|
|
42
|
+
Column(name="Name", key="name"),
|
|
43
|
+
Column(name="Description", key="description", format=True),
|
|
44
|
+
]
|
|
45
|
+
|
|
46
|
+
# Create additional columns for specific formats
|
|
47
|
+
detail_columns = [
|
|
48
|
+
Column(name="Created By", key="created_by"),
|
|
49
|
+
Column(name="Created Date", key="created_date"),
|
|
50
|
+
Column(name="Modified By", key="modified_by"),
|
|
51
|
+
Column(name="Modified Date", key="modified_date"),
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
technical_columns = [
|
|
55
|
+
Column(name="Type", key="type"),
|
|
56
|
+
Column(name="Status", key="status"),
|
|
57
|
+
Column(name="Version", key="version"),
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
# Create formats that reuse and compose columns
|
|
61
|
+
table_format = Format(
|
|
62
|
+
types=["TABLE"],
|
|
63
|
+
columns=common_columns, # Basic columns for table view
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
detail_format = Format(
|
|
67
|
+
types=["DETAIL", "FORM"],
|
|
68
|
+
columns=common_columns + detail_columns, # Common columns plus detail columns
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
technical_format = Format(
|
|
72
|
+
types=["TECHNICAL", "DICT"],
|
|
73
|
+
columns=common_columns + technical_columns, # Common columns plus technical columns
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
full_format = Format(
|
|
77
|
+
types=["FULL", "REPORT"],
|
|
78
|
+
columns=common_columns + detail_columns + technical_columns, # All columns
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
# Create format sets that include the formats
|
|
82
|
+
product_format_set = FormatSet(
|
|
83
|
+
heading="Product Format Set",
|
|
84
|
+
description="A format set for product information",
|
|
85
|
+
aliases=["Product", "Products"],
|
|
86
|
+
formats=[table_format, detail_format, technical_format],
|
|
87
|
+
action=[
|
|
88
|
+
ActionParameter(
|
|
89
|
+
function="ProductManager.find_products",
|
|
90
|
+
required_params=["search_string"],
|
|
91
|
+
spec_params={},
|
|
92
|
+
)
|
|
93
|
+
],
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
customer_format_set = FormatSet(
|
|
97
|
+
heading="Customer Format Set",
|
|
98
|
+
description="A format set for customer information",
|
|
99
|
+
aliases=["Customer", "Customers"],
|
|
100
|
+
formats=[table_format, detail_format, full_format],
|
|
101
|
+
action=[
|
|
102
|
+
ActionParameter(
|
|
103
|
+
function="CustomerManager.find_customers",
|
|
104
|
+
required_params=["search_string"],
|
|
105
|
+
spec_params={},
|
|
106
|
+
)
|
|
107
|
+
],
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
# Create a FormatSetDict with the custom format sets
|
|
111
|
+
custom_format_sets = FormatSetDict({
|
|
112
|
+
"Product": product_format_set,
|
|
113
|
+
"Customer": customer_format_set,
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
print(f"Created {len(custom_format_sets)} custom format sets:")
|
|
117
|
+
for name, format_set in custom_format_sets.items():
|
|
118
|
+
print(f" - {name}: {format_set.heading}")
|
|
119
|
+
print(f" Description: {format_set.description}")
|
|
120
|
+
print(f" Aliases: {format_set.aliases}")
|
|
121
|
+
print(f" Number of formats: {len(format_set.formats)}")
|
|
122
|
+
|
|
123
|
+
return custom_format_sets
|
|
124
|
+
|
|
125
|
+
def save_format_sets_example(custom_format_sets):
|
|
126
|
+
"""
|
|
127
|
+
Example of saving report specs to a file.
|
|
128
|
+
|
|
129
|
+
Args:
|
|
130
|
+
custom_format_sets: The custom report specs to save
|
|
131
|
+
|
|
132
|
+
Returns:
|
|
133
|
+
str: The path to the saved file
|
|
134
|
+
"""
|
|
135
|
+
print("\n=== Saving Report Specs ===")
|
|
136
|
+
|
|
137
|
+
# Create a directory for the example files
|
|
138
|
+
example_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "format_sets")
|
|
139
|
+
os.makedirs(example_dir, exist_ok=True)
|
|
140
|
+
|
|
141
|
+
# Save all format sets to a file
|
|
142
|
+
all_format_sets_path = os.path.join(example_dir, "all_format_sets.json")
|
|
143
|
+
save_report_specs(all_format_sets_path)
|
|
144
|
+
print(f"Saved all report specs to {all_format_sets_path}")
|
|
145
|
+
|
|
146
|
+
# Save only the custom format sets to a file
|
|
147
|
+
custom_format_sets_path = os.path.join(example_dir, "custom_format_sets.json")
|
|
148
|
+
custom_format_sets.save_to_json(custom_format_sets_path)
|
|
149
|
+
print(f"Saved custom report specs to {custom_format_sets_path}")
|
|
150
|
+
|
|
151
|
+
# Save a subset of the predefined format sets to a file
|
|
152
|
+
subset_format_sets_path = os.path.join(example_dir, "subset_format_sets.json")
|
|
153
|
+
save_report_specs(subset_format_sets_path, format_set_names=["Collections", "DataDictionary"])
|
|
154
|
+
print(f"Saved subset of report specs to {subset_format_sets_path}")
|
|
155
|
+
|
|
156
|
+
return custom_format_sets_path
|
|
157
|
+
|
|
158
|
+
def load_format_sets_example(file_path):
|
|
159
|
+
"""
|
|
160
|
+
Example of loading report specs from a file.
|
|
161
|
+
|
|
162
|
+
Args:
|
|
163
|
+
file_path: The path to the file to load
|
|
164
|
+
|
|
165
|
+
Returns:
|
|
166
|
+
FormatSetDict: The loaded report specs
|
|
167
|
+
"""
|
|
168
|
+
print("\n=== Loading Report Specs ===")
|
|
169
|
+
|
|
170
|
+
# Create a new FormatSetDict to load the report specs into
|
|
171
|
+
loaded_format_sets = FormatSetDict()
|
|
172
|
+
|
|
173
|
+
# Load the report specs from the file
|
|
174
|
+
try:
|
|
175
|
+
loaded_format_sets = FormatSetDict.load_from_json(file_path)
|
|
176
|
+
print(f"Loaded {len(loaded_format_sets)} report specs from {file_path}")
|
|
177
|
+
|
|
178
|
+
# Print information about the loaded report specs
|
|
179
|
+
for name, format_set in loaded_format_sets.items():
|
|
180
|
+
print(f" - {name}: {format_set.heading}")
|
|
181
|
+
print(f" Description: {format_set.description}")
|
|
182
|
+
print(f" Aliases: {format_set.aliases}")
|
|
183
|
+
print(f" Number of formats: {len(format_set.formats)}")
|
|
184
|
+
|
|
185
|
+
return loaded_format_sets
|
|
186
|
+
except Exception as e:
|
|
187
|
+
print(f"Error loading report specs from {file_path}: {e}")
|
|
188
|
+
return None
|
|
189
|
+
|
|
190
|
+
def use_loaded_format_sets(loaded_format_sets):
|
|
191
|
+
"""
|
|
192
|
+
Example of using loaded report specs.
|
|
193
|
+
|
|
194
|
+
Args:
|
|
195
|
+
loaded_format_sets: The loaded report specs to use
|
|
196
|
+
"""
|
|
197
|
+
print("\n=== Using Loaded Report Specs ===")
|
|
198
|
+
|
|
199
|
+
# Add the loaded format sets to the global report_specs
|
|
200
|
+
for name, format_set in loaded_format_sets.items():
|
|
201
|
+
report_specs[name] = format_set
|
|
202
|
+
|
|
203
|
+
# Use the select_report_spec function to get a report spec by name
|
|
204
|
+
product_format_set = select_report_spec("Product", "TABLE")
|
|
205
|
+
if product_format_set:
|
|
206
|
+
print(f"Found report spec for 'Product' with output type 'TABLE'")
|
|
207
|
+
print(f" Heading: {product_format_set['heading']}")
|
|
208
|
+
print(f" Description: {product_format_set['description']}")
|
|
209
|
+
print(f" Number of columns: {len(product_format_set['formats']['columns'])}")
|
|
210
|
+
else:
|
|
211
|
+
print("Format set for 'Product' not found")
|
|
212
|
+
|
|
213
|
+
# Use the select_report_spec function to get a report spec by alias
|
|
214
|
+
customer_format_set = select_report_spec("Customers", "DETAIL")
|
|
215
|
+
if customer_format_set:
|
|
216
|
+
print(f"Found report spec for 'Customers' with output type 'DETAIL'")
|
|
217
|
+
print(f" Heading: {customer_format_set['heading']}")
|
|
218
|
+
print(f" Description: {customer_format_set['description']}")
|
|
219
|
+
print(f" Number of columns: {len(customer_format_set['formats']['columns'])}")
|
|
220
|
+
else:
|
|
221
|
+
print("Format set for 'Customers' not found")
|
|
222
|
+
|
|
223
|
+
def user_format_sets_directory_example(custom_format_sets):
|
|
224
|
+
"""
|
|
225
|
+
Example of working with the user report specs directory.
|
|
226
|
+
|
|
227
|
+
Args:
|
|
228
|
+
custom_format_sets: The custom report specs to save to the user directory
|
|
229
|
+
"""
|
|
230
|
+
print("\n=== Working with User Report Specs Directory ===")
|
|
231
|
+
|
|
232
|
+
# Create the user report specs directory if it doesn't exist
|
|
233
|
+
os.makedirs(USER_FORMAT_SETS_DIR, exist_ok=True)
|
|
234
|
+
print(f"User report specs directory: {USER_FORMAT_SETS_DIR}")
|
|
235
|
+
|
|
236
|
+
# Save a custom report spec to the user directory
|
|
237
|
+
user_format_set = FormatSet(
|
|
238
|
+
heading="User Custom Format Set",
|
|
239
|
+
description="A custom format set for the user directory",
|
|
240
|
+
formats=[
|
|
241
|
+
Format(
|
|
242
|
+
types=["TABLE"],
|
|
243
|
+
columns=[
|
|
244
|
+
Column(name="Column 1", key="column1"),
|
|
245
|
+
Column(name="Column 2", key="column2"),
|
|
246
|
+
],
|
|
247
|
+
),
|
|
248
|
+
],
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
user_format_sets = FormatSetDict({"UserCustomFormatSet": user_format_set})
|
|
252
|
+
user_format_sets_path = os.path.join(USER_FORMAT_SETS_DIR, "user_custom_format_sets.json")
|
|
253
|
+
user_format_sets.save_to_json(user_format_sets_path)
|
|
254
|
+
print(f"Saved user custom report spec to {user_format_sets_path}")
|
|
255
|
+
|
|
256
|
+
# Load the user format sets
|
|
257
|
+
from pyegeria.view.base_report_formats import load_user_report_specs
|
|
258
|
+
load_user_report_specs()
|
|
259
|
+
|
|
260
|
+
# Check if the user report spec was loaded
|
|
261
|
+
if "UserCustomFormatSet" in report_specs:
|
|
262
|
+
print("User custom report spec was successfully loaded")
|
|
263
|
+
print(f" Heading: {report_specs['UserCustomFormatSet'].heading}")
|
|
264
|
+
print(f" Description: {report_specs['UserCustomFormatSet'].description}")
|
|
265
|
+
else:
|
|
266
|
+
print("User custom report spec was not loaded")
|
|
267
|
+
|
|
268
|
+
def main():
|
|
269
|
+
"""Run the example."""
|
|
270
|
+
print("=== Report Specs Save/Load Example ===")
|
|
271
|
+
|
|
272
|
+
# Create custom format sets
|
|
273
|
+
custom_format_sets = create_custom_format_sets()
|
|
274
|
+
|
|
275
|
+
# Save format sets to files
|
|
276
|
+
file_path = save_format_sets_example(custom_format_sets)
|
|
277
|
+
|
|
278
|
+
# Load format sets from a file
|
|
279
|
+
loaded_format_sets = load_format_sets_example(file_path)
|
|
280
|
+
|
|
281
|
+
# Use the loaded format sets
|
|
282
|
+
if loaded_format_sets:
|
|
283
|
+
use_loaded_format_sets(loaded_format_sets)
|
|
284
|
+
|
|
285
|
+
# Work with the user format sets directory
|
|
286
|
+
user_format_sets_directory_example(custom_format_sets)
|
|
287
|
+
|
|
288
|
+
print("\n=== Example Complete ===")
|
|
289
|
+
|
|
290
|
+
if __name__ == "__main__":
|
|
291
|
+
main()
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"""
|
|
2
|
+
PDX-License-Identifier: Apache-2.0
|
|
3
|
+
Copyright Contributors to the ODPi Egeria project.
|
|
4
|
+
|
|
5
|
+
This module contains the Jacquard Data Sets View Service client.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import asyncio
|
|
9
|
+
|
|
10
|
+
from pyegeria.core._server_client import ServerClient
|
|
11
|
+
from pyegeria.models import (
|
|
12
|
+
SearchStringRequestBody,
|
|
13
|
+
)
|
|
14
|
+
from pyegeria.core.utils import dynamic_catch
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class JacquardDataSets(ServerClient):
|
|
18
|
+
"""
|
|
19
|
+
Client for the Jacquard Data Sets View Service.
|
|
20
|
+
|
|
21
|
+
The Jacquard Data Sets View Service provides methods to manage and retrieve tabular data sets.
|
|
22
|
+
Note: Many of these methods are implemented in the Data Engineer View Service.
|
|
23
|
+
|
|
24
|
+
Attributes
|
|
25
|
+
----------
|
|
26
|
+
view_server : str
|
|
27
|
+
The name of the View Server to use.
|
|
28
|
+
platform_url : str
|
|
29
|
+
URL of the server platform to connect to.
|
|
30
|
+
user_id : str
|
|
31
|
+
The identity of the user calling the method.
|
|
32
|
+
user_pwd : str
|
|
33
|
+
The password associated with the user_id. Defaults to None.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
def __init__(
|
|
37
|
+
self,
|
|
38
|
+
view_server: str,
|
|
39
|
+
platform_url: str,
|
|
40
|
+
user_id: str,
|
|
41
|
+
user_pwd: str = None,
|
|
42
|
+
token: str = None,
|
|
43
|
+
):
|
|
44
|
+
super().__init__(view_server, platform_url, user_id, user_pwd, token)
|
|
45
|
+
self.view_server = view_server
|
|
46
|
+
self.platform_url = platform_url
|
|
47
|
+
self.user_id = user_id
|
|
48
|
+
self.user_pwd = user_pwd
|
|
49
|
+
self.url_marker = "data-engineer"
|
|
50
|
+
|
|
51
|
+
@dynamic_catch
|
|
52
|
+
async def _async_find_tabular_data_sets(
|
|
53
|
+
self,
|
|
54
|
+
search_string: str = "*",
|
|
55
|
+
body: dict | SearchStringRequestBody = None,
|
|
56
|
+
) -> list | str:
|
|
57
|
+
url = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/data-engineer/assets/by-search-string"
|
|
58
|
+
if body is None:
|
|
59
|
+
body = {
|
|
60
|
+
"class": "SearchStringRequestBody",
|
|
61
|
+
"searchString": search_string,
|
|
62
|
+
"metadataElementTypeName": "TabularDataSet",
|
|
63
|
+
"skipClassifiedElements": ["Template"],
|
|
64
|
+
}
|
|
65
|
+
response = await self._async_make_request("POST", url, body)
|
|
66
|
+
return response.json().get("elements")
|
|
67
|
+
|
|
68
|
+
def find_tabular_data_sets(
|
|
69
|
+
self,
|
|
70
|
+
search_string: str = "*",
|
|
71
|
+
body: dict | SearchStringRequestBody = None,
|
|
72
|
+
) -> list | str:
|
|
73
|
+
loop = asyncio.get_event_loop()
|
|
74
|
+
return loop.run_until_complete(self._async_find_tabular_data_sets(search_string, body))
|
|
75
|
+
|
|
76
|
+
@dynamic_catch
|
|
77
|
+
async def _async_get_tabular_data_set_report(
|
|
78
|
+
self,
|
|
79
|
+
guid: str,
|
|
80
|
+
start_from_row: int = 0,
|
|
81
|
+
max_row_count: int = 5000,
|
|
82
|
+
) -> dict | str:
|
|
83
|
+
url = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/data-engineer/tabular-data-sets/{guid}/report?startFromRow={start_from_row}&maxRowCount={max_row_count}"
|
|
84
|
+
response = await self._async_make_request("GET", url)
|
|
85
|
+
return response.json()
|
|
86
|
+
|
|
87
|
+
def get_tabular_data_set_report(
|
|
88
|
+
self,
|
|
89
|
+
guid: str,
|
|
90
|
+
start_from_row: int = 0,
|
|
91
|
+
max_row_count: int = 5000,
|
|
92
|
+
) -> dict | str:
|
|
93
|
+
loop = asyncio.get_event_loop()
|
|
94
|
+
return loop.run_until_complete(
|
|
95
|
+
self._async_get_tabular_data_set_report(guid, start_from_row, max_row_count)
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
@dynamic_catch
|
|
99
|
+
async def _async_find_assets_by_name(
|
|
100
|
+
self,
|
|
101
|
+
filter_string: str,
|
|
102
|
+
metadata_element_type_name: str = "ReferenceCodeTable",
|
|
103
|
+
start_from: int = 0,
|
|
104
|
+
page_size: int = 10,
|
|
105
|
+
) -> list | str:
|
|
106
|
+
url = f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/asset-maker/assets/by-name"
|
|
107
|
+
body = {
|
|
108
|
+
"class": "FilterRequestBody",
|
|
109
|
+
"metadataElementTypeName": metadata_element_type_name,
|
|
110
|
+
"filter": filter_string,
|
|
111
|
+
"startFrom": start_from,
|
|
112
|
+
"pageSize": page_size,
|
|
113
|
+
}
|
|
114
|
+
response = await self._async_make_request("POST", url, body)
|
|
115
|
+
return response.json().get("elements")
|
|
116
|
+
|
|
117
|
+
def find_assets_by_name(
|
|
118
|
+
self,
|
|
119
|
+
filter_string: str,
|
|
120
|
+
metadata_element_type_name: str = "ReferenceCodeTable",
|
|
121
|
+
start_from: int = 0,
|
|
122
|
+
page_size: int = 10,
|
|
123
|
+
) -> list | str:
|
|
124
|
+
loop = asyncio.get_event_loop()
|
|
125
|
+
return loop.run_until_complete(
|
|
126
|
+
self._async_find_assets_by_name(
|
|
127
|
+
filter_string, metadata_element_type_name, start_from, page_size
|
|
128
|
+
)
|
|
129
|
+
)
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Copyright Contributors to the ODPi Egeria project.
|
|
5
|
+
|
|
6
|
+
Example script demonstrating how to use the Pydantic models for output report specs.
|
|
7
|
+
|
|
8
|
+
This script shows how to:
|
|
9
|
+
1. Create custom columns, formats, and report specs
|
|
10
|
+
2. Compose formats by reusing columns
|
|
11
|
+
3. Add a custom report spec to the report_specs dictionary
|
|
12
|
+
4. Use the functions in _output_formats.py with the new models
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
import sys
|
|
16
|
+
import os
|
|
17
|
+
|
|
18
|
+
# Add the parent directory to the path so we can import the modules
|
|
19
|
+
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
20
|
+
|
|
21
|
+
from pyegeria.view._output_format_models import Column, Format, ActionParameter, FormatSet
|
|
22
|
+
from pyegeria.view.base_report_formats import (
|
|
23
|
+
report_specs,
|
|
24
|
+
select_report_spec,
|
|
25
|
+
report_spec_list,
|
|
26
|
+
get_report_spec_heading,
|
|
27
|
+
get_report_spec_description,
|
|
28
|
+
get_report_spec_match,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
def create_custom_report_spec():
|
|
32
|
+
"""
|
|
33
|
+
Create a custom format set with multiple formats.
|
|
34
|
+
|
|
35
|
+
This demonstrates how to create columns, formats, and format sets,
|
|
36
|
+
and how to compose formats by reusing columns.
|
|
37
|
+
"""
|
|
38
|
+
print("\n=== Creating a custom report spec ===")
|
|
39
|
+
|
|
40
|
+
# Create common columns that will be used in multiple formats
|
|
41
|
+
common_columns = [
|
|
42
|
+
Column(name="ID", key="id"),
|
|
43
|
+
Column(name="Name", key="name"),
|
|
44
|
+
Column(name="Description", key="description", format=True),
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
# Create additional columns for specific formats
|
|
48
|
+
detail_columns = [
|
|
49
|
+
Column(name="Created By", key="created_by"),
|
|
50
|
+
Column(name="Created Date", key="created_date"),
|
|
51
|
+
Column(name="Modified By", key="modified_by"),
|
|
52
|
+
Column(name="Modified Date", key="modified_date"),
|
|
53
|
+
]
|
|
54
|
+
|
|
55
|
+
technical_columns = [
|
|
56
|
+
Column(name="Type", key="type"),
|
|
57
|
+
Column(name="Status", key="status"),
|
|
58
|
+
Column(name="Version", key="version"),
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
# Create formats that reuse and compose columns
|
|
62
|
+
table_format = Format(
|
|
63
|
+
types=["TABLE"],
|
|
64
|
+
columns=common_columns, # Basic columns for table view
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
detail_format = Format(
|
|
68
|
+
types=["DETAIL", "FORM"],
|
|
69
|
+
columns=common_columns + detail_columns, # Common columns plus detail columns
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
technical_format = Format(
|
|
73
|
+
types=["TECHNICAL", "DICT"],
|
|
74
|
+
columns=common_columns + technical_columns, # Common columns plus technical columns
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
full_format = Format(
|
|
78
|
+
types=["FULL", "REPORT"],
|
|
79
|
+
columns=common_columns + detail_columns + technical_columns, # All columns
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
# Create a report spec (format set) that includes all the formats
|
|
83
|
+
custom_format_set = FormatSet(
|
|
84
|
+
heading="Custom Example Format Set",
|
|
85
|
+
description="A custom format set demonstrating composition of formats",
|
|
86
|
+
aliases=["CustomExample", "Example"],
|
|
87
|
+
annotations={"wikilinks": ["[[Example]]", "[[Custom]]"]},
|
|
88
|
+
formats=[table_format, detail_format, technical_format, full_format],
|
|
89
|
+
action=[
|
|
90
|
+
ActionParameter(
|
|
91
|
+
function="ExampleManager.find_examples",
|
|
92
|
+
required_params=["search_string"],
|
|
93
|
+
spec_params={},
|
|
94
|
+
)
|
|
95
|
+
],
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
# Print information about the report spec
|
|
99
|
+
print(f"Created report spec: {custom_format_set.heading}")
|
|
100
|
+
print(f"Description: {custom_format_set.description}")
|
|
101
|
+
print(f"Aliases: {custom_format_set.aliases}")
|
|
102
|
+
print(f"Number of formats: {len(custom_format_set.formats)}")
|
|
103
|
+
|
|
104
|
+
# Print information about each format
|
|
105
|
+
for i, format in enumerate(custom_format_set.formats):
|
|
106
|
+
print(f"\nFormat {i+1}:")
|
|
107
|
+
print(f" Types: {format.types}")
|
|
108
|
+
print(f" Number of columns: {len(format.columns)}")
|
|
109
|
+
print(f" Columns: {[column.name for column in format.columns]}")
|
|
110
|
+
|
|
111
|
+
return custom_format_set
|
|
112
|
+
|
|
113
|
+
def add_report_spec_to_dictionary(format_set):
|
|
114
|
+
"""
|
|
115
|
+
Add a report spec to the report_specs dictionary.
|
|
116
|
+
|
|
117
|
+
This demonstrates how to add a custom report spec to the
|
|
118
|
+
report_specs dictionary for use with the functions
|
|
119
|
+
in _output_formats.py.
|
|
120
|
+
"""
|
|
121
|
+
print("\n=== Adding report spec to dictionary ===")
|
|
122
|
+
|
|
123
|
+
# Add the report spec to the report_specs dictionary
|
|
124
|
+
report_specs["CustomExample"] = format_set
|
|
125
|
+
|
|
126
|
+
# Verify that the report spec was added
|
|
127
|
+
format_sets = report_spec_list()
|
|
128
|
+
if "CustomExample" in format_sets:
|
|
129
|
+
print("Report spec successfully added to the dictionary!")
|
|
130
|
+
print(f"Available report specs: {format_sets}")
|
|
131
|
+
else:
|
|
132
|
+
print("Failed to add report spec to the dictionary.")
|
|
133
|
+
|
|
134
|
+
def use_output_format_functions():
|
|
135
|
+
"""
|
|
136
|
+
Use the functions in _output_formats.py with the new models.
|
|
137
|
+
|
|
138
|
+
This demonstrates how to use the functions in _output_formats.py
|
|
139
|
+
with the new Pydantic models.
|
|
140
|
+
"""
|
|
141
|
+
print("\n=== Using output format functions ===")
|
|
142
|
+
|
|
143
|
+
# Get a report spec by name
|
|
144
|
+
format_set = select_report_spec("CustomExample", "TABLE")
|
|
145
|
+
if format_set:
|
|
146
|
+
print("Successfully retrieved report spec by name!")
|
|
147
|
+
print(f"Heading: {format_set['heading']}")
|
|
148
|
+
print(f"Description: {format_set['description']}")
|
|
149
|
+
else:
|
|
150
|
+
print("Failed to retrieve report spec by name.")
|
|
151
|
+
|
|
152
|
+
# Get a report spec by alias
|
|
153
|
+
format_set = select_report_spec("Example", "TABLE")
|
|
154
|
+
if format_set:
|
|
155
|
+
print("\nSuccessfully retrieved report spec by alias!")
|
|
156
|
+
print(f"Heading: {format_set['heading']}")
|
|
157
|
+
print(f"Description: {format_set['description']}")
|
|
158
|
+
else:
|
|
159
|
+
print("\nFailed to retrieve report spec by alias.")
|
|
160
|
+
|
|
161
|
+
# Get the heading and description of a report spec
|
|
162
|
+
heading = get_report_spec_heading("CustomExample")
|
|
163
|
+
description = get_report_spec_description("CustomExample")
|
|
164
|
+
print(f"\nHeading: {heading}")
|
|
165
|
+
print(f"Description: {description}")
|
|
166
|
+
|
|
167
|
+
# Match a report spec with a specific output type
|
|
168
|
+
format_set = select_report_spec("CustomExample", "ANY")
|
|
169
|
+
matched_format_set = get_report_spec_match(format_set, "DETAIL")
|
|
170
|
+
if matched_format_set and "formats" in matched_format_set:
|
|
171
|
+
print("\nSuccessfully matched report spec with output type!")
|
|
172
|
+
print(f"Output type: {matched_format_set['formats']['types']}")
|
|
173
|
+
print(f"Number of columns: {len(matched_format_set['formats']['columns'])}")
|
|
174
|
+
else:
|
|
175
|
+
print("\nFailed to match report spec with output type.")
|
|
176
|
+
|
|
177
|
+
def main():
|
|
178
|
+
"""Run the example script."""
|
|
179
|
+
print("=== Output Formats Example ===")
|
|
180
|
+
|
|
181
|
+
# Create a custom report spec
|
|
182
|
+
custom_format_set = create_custom_report_spec()
|
|
183
|
+
|
|
184
|
+
# Add the report spec to the report_specs dictionary
|
|
185
|
+
add_report_spec_to_dictionary(custom_format_set)
|
|
186
|
+
|
|
187
|
+
# Use the functions in _output_formats.py with the new models
|
|
188
|
+
use_output_format_functions()
|
|
189
|
+
|
|
190
|
+
print("\n=== Example Complete ===")
|
|
191
|
+
|
|
192
|
+
if __name__ == "__main__":
|
|
193
|
+
main()
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"""
|
|
2
|
+
PDX-License-Identifier: Apache-2.0
|
|
3
|
+
Copyright Contributors to the ODPi Egeria project.
|
|
4
|
+
|
|
5
|
+
This module tests the JacquardDataSets class and methods from jacquard_data_sets.py
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from rich import print
|
|
9
|
+
from rich.console import Console
|
|
10
|
+
|
|
11
|
+
from pyegeria.core._exceptions import (
|
|
12
|
+
PyegeriaInvalidParameterException,
|
|
13
|
+
PyegeriaConnectionException,
|
|
14
|
+
PyegeriaAPIException,
|
|
15
|
+
PyegeriaNotFoundException,
|
|
16
|
+
)
|
|
17
|
+
from examples.jacquard_data_sets import JacquardDataSets
|
|
18
|
+
from pyegeria.core.logging_configuration import config_logging, init_logging
|
|
19
|
+
|
|
20
|
+
disable_ssl_warnings = True
|
|
21
|
+
|
|
22
|
+
console = Console(width=250)
|
|
23
|
+
|
|
24
|
+
config_logging()
|
|
25
|
+
init_logging(True)
|
|
26
|
+
|
|
27
|
+
VIEW_SERVER = "qs-view-server"
|
|
28
|
+
PLATFORM_URL = "https://localhost:9443"
|
|
29
|
+
USER_ID = "peterprofile"
|
|
30
|
+
USER_PWD = "secret"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class TestJacquardDataSets:
|
|
34
|
+
good_platform1_url = PLATFORM_URL
|
|
35
|
+
good_user_1 = USER_ID
|
|
36
|
+
good_user_2 = USER_ID
|
|
37
|
+
good_view_server_1 = VIEW_SERVER
|
|
38
|
+
|
|
39
|
+
def test_find_tabular_data_sets(self):
|
|
40
|
+
"""Test finding tabular data sets"""
|
|
41
|
+
jds_client = JacquardDataSets(self.good_view_server_1, self.good_platform1_url, user_id=self.good_user_2)
|
|
42
|
+
try:
|
|
43
|
+
jds_client.create_egeria_bearer_token(self.good_user_2, USER_PWD)
|
|
44
|
+
|
|
45
|
+
try:
|
|
46
|
+
response = jds_client.find_tabular_data_sets(search_string="*")
|
|
47
|
+
assert response is not None
|
|
48
|
+
except (PyegeriaInvalidParameterException, PyegeriaNotFoundException, PyegeriaAPIException):
|
|
49
|
+
pass
|
|
50
|
+
|
|
51
|
+
except PyegeriaConnectionException:
|
|
52
|
+
print("Skipping test due to connection error")
|
|
53
|
+
finally:
|
|
54
|
+
jds_client.close_session()
|