pyegeria 5.3.9.4__py3-none-any.whl → 5.3.9.6__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.
- {pyegeria/commands → commands}/cat/Dr-Egeria_md-orig.py +10 -11
- {pyegeria/commands → commands}/cat/dr_egeria_jupyter.py +4 -4
- {pyegeria/commands → commands}/cat/dr_egeria_md.py +36 -16
- {pyegeria/commands → commands}/cat/list_categories.py +3 -3
- {pyegeria/commands → commands}/cat/list_collections.py +59 -16
- commands/cat/list_data_structures.py +223 -0
- {pyegeria/commands → commands}/cat/list_glossaries.py +3 -3
- {pyegeria/commands → commands}/cat/list_terms.py +4 -4
- {pyegeria/commands → commands}/cli/__init__.py +1 -1
- {pyegeria/commands → commands}/cli/egeria.py +91 -87
- {pyegeria/commands → commands}/cli/egeria_cat.py +29 -29
- {pyegeria/commands → commands}/cli/egeria_login_tui.py +1 -1
- {pyegeria/commands → commands}/cli/egeria_my.py +8 -8
- {pyegeria/commands → commands}/cli/egeria_ops.py +24 -24
- {pyegeria/commands → commands}/cli/egeria_tech.py +34 -34
- commands/tech/generic_actions.py +74 -0
- {pyegeria/commands → commands}/tech/list_information_supply_chains.py +3 -1
- pyegeria/__init__.py +10 -9
- pyegeria/_client.py +2 -49
- pyegeria/collection_manager_omvs.py +484 -735
- pyegeria/data_designer_omvs.py +371 -128
- pyegeria/egeria_client.py +5 -0
- pyegeria/egeria_tech_client.py +10 -1
- pyegeria/glossary_browser_omvs.py +144 -260
- pyegeria/md_processing_helpers.py +1 -1
- pyegeria/md_processing_utils.py +114 -32
- pyegeria/md_processing_utils_orig.py +19 -19
- pyegeria/mermaid_utilities.py +3 -3
- pyegeria/output_formatter.py +389 -0
- {pyegeria-5.3.9.4.dist-info → pyegeria-5.3.9.6.dist-info}/METADATA +1 -1
- pyegeria-5.3.9.6.dist-info/RECORD +141 -0
- pyegeria-5.3.9.6.dist-info/entry_points.txt +99 -0
- pyegeria/commands/README.md +0 -47
- pyegeria/commands/__init__.py +0 -30
- pyegeria/commands/cat/dr_egeria_inbox/glossary_creation_experiment.ipynb +0 -341
- pyegeria/commands/doc/README.md +0 -145
- pyegeria/commands/doc/Visual Command Reference/README.md +0 -511
- pyegeria/commands/doc/Visual Command Reference/cat/show/assets/asset-graph 2024-11-20 at 15.56.42.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/assets/assets-in-domain 2024-11-20 at 15.49.55@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/assets/elements-of-type 2024-11-20 at 16.01.35.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/assets/tech-type-elements 2024-11-20 at 16.05.05.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/deployed-data/deployed-data-catalogs 2024-12-17 at 15.43.27@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/deployed-data/deployed-data-catalogs-2024-11-20 at 16.17.43@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/deployed-data/deployed-schemas 2024-11-25 at 20.14.50@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/deployed-data/deployed-schemas 2024-12-17 at 15.48.38@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/deployed-data/deployed-servers 2024-11-25 at 20.21.25@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/deployed-data/deployed-servers 2024-12-17 at 15.52.16@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/deployed-data/deployed_databases 2024-12-16 at 16.40.31@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/glossary/list-glossaries 2024-11-25 at 20.30.02.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/glossary/list-terms 2024-11-25 at 20.32.11.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/info/asset-types 2024-11-25 at 20.34.19@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/info/certification-types 2024-11-25 at 20.37.07.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/info/collection-graph 2024-12-12 at 11.33.18@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/info/list-collections 2024-12-10 at 14.25.51@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/info/list-todos 2024-12-12 at 11.46.30@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/info/list-user-ids 2024-12-12 at 11.51.09@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/info/tech-types 2024-12-12 at 11.37.20@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/projects/project_dependencies 2024-12-14 at 16.24.39@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/projects/project_structure 2024-12-14 at 16.21.35@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/cat/show/projects/projects 2024-12-14 at 16.18.10@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/hey_egeria tui 2024-12-16 at 16.58.22@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/my/show/my_profile 2024-12-14 at 16.29.27@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/my/show/my_roles 2024-12-14 at 16.32.10@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/my/show/my_todos 2024-12-15 at 16.24.13@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/my/show/open_todos 2024-12-14 at 16.36.12@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/ops/show/engines/list_engine_activity compressed 2024-12-15 at 16.48.48@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/ops/show/engines/monitor_engine_activity 2024-12-15 at 16.32.55@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/ops/show/engines/monitor_engine_activity compressed 2024-12-15 at 16.38.29@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/ops/show/engines/monitor_engine_status 2024-12-15 at 16.51.26.jpeg +0 -0
- pyegeria/commands/doc/Visual Command Reference/ops/show/integrations/monitor_integration_daemon_status 2024-12-15 at 16.57.12@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/ops/show/integrations/monitor_integration_targets 2024-12-15 at 17.02.19@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/ops/show/platforms/monitor_platform_status 2024-12-15 at 19.53.18@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/ops/show/servers/monitor_server_status 2024-12-15 at 19.59.39@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/ops/show/servers/monitor_server_status full 2024-12-15 at 20.01.57@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/ops/show/servers/monitor_startup_servers 2024-12-15 at 19.56.07@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/elements/get_anchored_elements 2024-12-15 at 21.25.41@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/elements/get_elements_of_om_type 2024-12-16 at 14.39.59@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/elements/info_for_guid 2024-12-16 at 11.35.29@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/elements/list_elements_by_om-type 2024-12-16 at 14.24.18@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/elements/list_elements_by_om-type extended 2024-12-16 at 14.28.46@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/elements/list_elements_of_om_type_by_classification 2024-12-16 at 14.35.26@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/elements/related_elements 2024-12-16 at 14.55.01@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/elements/show_related_specifications 2024-12-16 at 15.04.55@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/tech-info/asset_types 2024-12-16 at 15.10.16@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/tech-info/detailed_governance_action_processes 2024-12-16 at 15.16.26@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/tech-info/governance_action_processes 2024-12-16 at 15.13.01@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/tech-info/registered_services 2024-12-16 at 16.44.54@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/tech-info/relationship_types 2024-12-16 at 16.20.34@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/tech-info/relationship_types 2024-12-19 at 10.51.54@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/tech-info/valid_metadata_values 2024-12-16 at 15.31.56@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/tech-types/list_tech_type_template_specs 2024-12-16 at 16.03.22@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/tech-types/list_technology_types 2024-12-16 at 15.39.20@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/tech-types/tech_type_details 2024-12-16 at 15.37.21@2x.png +0 -0
- pyegeria/commands/doc/Visual Command Reference/tech/show/tech-types/tech_type_templates 2024-12-16 at 16.11.48@2x.png +0 -0
- pyegeria/commands/doc/glossary/basic-glossary-tui.md +0 -109
- pyegeria/commands/doc/glossary/images/delete-glossary-step1 2024-11-06 at 15.47.23@2x.png +0 -0
- pyegeria/commands/doc/glossary/images/delete-glossary-step2 2024-11-06 at 15.51.29@2x.png +0 -0
- pyegeria/commands/doc/glossary/images/delete-glossary-step3 2024-11-06 at 15.53.19@2x.png +0 -0
- pyegeria/commands/doc/glossary/images/delete-glossary-step4 2024-11-06 at 15.55.11@2x.png +0 -0
- pyegeria/commands/doc/glossary/images/out-create-glossary example 2024-11-05 at 20.38.04@2x.png +0 -0
- pyegeria/commands/doc/glossary/images/out-create-term 2024-11-06 at 20.48.29.png +0 -0
- pyegeria/commands/doc/glossary/images/out-delete-term 2024-11-07 at 03.57.25.png +0 -0
- pyegeria/commands/doc/glossary/images/out-display-terms-for-glossary-test 2024-11-06 at 20.51.28.png +0 -0
- pyegeria/commands/doc/glossary/images/out-export-example 2024-11-07 at 09.54.57.png +0 -0
- pyegeria/commands/doc/glossary/images/out-exported-terms 2024-11-06 at 21.06.32.png +0 -0
- pyegeria/commands/doc/glossary/images/out-glossary-list example 2024-11-05 at 20.41.02@2x.png +0 -0
- pyegeria/commands/doc/glossary/images/out-import-terms 2024-11-07 at 08.15.18.png +0 -0
- pyegeria/commands/doc/glossary/images/out-list-all-terms 2024-11-06 at 16.22.20@2x.png +0 -0
- pyegeria/commands/doc/glossary/images/out-list-terms-for-example 2024-11-06 at 16.40.12.png +0 -0
- pyegeria/commands/doc/glossary/images/out-list-terms-second 2024-11-06 at 16.45.13.png +0 -0
- pyegeria/commands/doc/glossary/images/out-pipx install pyegeria 2024-11-10 at 18.12.21.png +0 -0
- pyegeria/commands/doc/glossary/images/out-server-status-full 2024-11-10 at 18.25.14.png +0 -0
- pyegeria/commands/doc/glossary/images/out-servers-status 2024-11-10 at 18.15.42.png +0 -0
- pyegeria/commands/doc/glossary/images/out-upsert-import 2024-11-07 at 19.37.00.png +0 -0
- pyegeria/commands/doc/glossary/images/tui-2024-11-10 at 18.26.29.png +0 -0
- pyegeria/commands/doc/glossary/images/tui-create-glossary example 2024-11-05 at 20.34.24@2x.png +0 -0
- pyegeria/commands/doc/glossary/images/tui-create-term 2024-11-06 at 20.46.35.png +0 -0
- pyegeria/commands/doc/glossary/images/tui-delete-term 2024-11-07 at 03.51.57.png +0 -0
- pyegeria/commands/doc/glossary/images/tui-display-terms-for-example 2024-11-06 at 20.56.49.png +0 -0
- pyegeria/commands/doc/glossary/images/tui-export-example 2024-11-07 at 09.52.59.png +0 -0
- pyegeria/commands/doc/glossary/images/tui-hey-egeria 2024-11-10 at 18.31.01.png +0 -0
- pyegeria/commands/doc/glossary/images/tui-import-upsert-example 2024-11-07 at 10.08.37.png +0 -0
- pyegeria/commands/doc/glossary/images/tui-list-terms-second 2024-11-06 at 16.46.34.png +0 -0
- pyegeria/commands/doc/glossary/images/tui-load-archive.png +0 -0
- pyegeria/commands/doc/glossary/images/tui-server-status-full 2024-11-10 at 19.14.36.png +0 -0
- pyegeria/commands/doc/glossary/images/tui-show-glossaries 2024-11-07 at 20.00.05.png +0 -0
- pyegeria/commands/doc/glossary/images/tui-show-glossary-terms 2024-11-05 at 19.37.53@2x.png +0 -0
- pyegeria/commands/doc/glossary/images/tui-upsert 2024-11-07 at 11.49.04.png +0 -0
- pyegeria/commands/doc/glossary/images/upsert-example.om-terms 2024-11-07 at 11.44.05.png +0 -0
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/README.md +0 -346
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/images/CleanShot 2024-11-18 at 21.32.03@2x.png +0 -0
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/images/Xmind 1731421782704.png +0 -0
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/images/Xmind 1731422134920.png +0 -0
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/images/hey_egeria 2024-11-12 at 20.38.43.png +0 -0
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/images/hey_egeria cat 2024-11-12 at 21.41.43.png +0 -0
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/images/out-integ-status-list 2024-11-12 at 16.45.26.png +0 -0
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/images/out-integ-status-live 2024-11-12 at 16.44.12@2x.png +0 -0
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/images/out-server-status 2024-11-10 at 18.15.42@2x.png +0 -0
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/images/out-server-status-full 2024-11-10 at 18.25.14@2x.png +0 -0
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/images/short-cut commands 2024-11-12 at 22.22.13.png +0 -0
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/images/tui-hey-egeria.png +0 -0
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/images/tui-integration-status-paging.png +0 -0
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/images/tui-load-archive 2024-11-10 at 19.19.09@2x.png +0 -0
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/images/tui-show-server-status 2024-11-10 at 18.52.01@2x.png +0 -0
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/images/tui-show-server-status-full 2024-11-10.png +0 -0
- pyegeria/commands/doc/hey_egeria: a pyegeria command line interface/images/tui-status-paging 2024-11-12 at 16.26.14@2x.png +0 -0
- pyegeria/dr_egeria_state.py +0 -67
- pyegeria/md_processing/__init__.py +0 -51
- pyegeria/md_processing/commands/__init__.py +0 -3
- pyegeria/md_processing/commands/blueprint_commands.py +0 -307
- pyegeria/md_processing/commands/category_commands.py +0 -242
- pyegeria/md_processing/commands/glossary_commands.py +0 -225
- pyegeria/md_processing/commands/project_commands.py +0 -169
- pyegeria/md_processing/commands/term_commands.py +0 -524
- pyegeria/md_processing/utils/__init__.py +0 -3
- pyegeria/md_processing/utils/common_utils.py +0 -101
- pyegeria/md_processing/utils/display_utils.py +0 -53
- pyegeria/md_processing/utils/extraction_utils.py +0 -177
- pyegeria/md_processing/utils/validation_utils.py +0 -208
- pyegeria-5.3.9.4.dist-info/RECORD +0 -265
- pyegeria-5.3.9.4.dist-info/entry_points.txt +0 -98
- {pyegeria/commands → commands}/cat/README.md +0 -0
- {pyegeria/commands → commands}/cat/__init__.py +0 -0
- {pyegeria/commands → commands}/cat/exp_list_glossaries.py +0 -0
- {pyegeria/commands → commands}/cat/get_asset_graph.py +0 -0
- {pyegeria/commands → commands}/cat/get_collection.py +0 -0
- {pyegeria/commands → commands}/cat/get_project_dependencies.py +0 -0
- {pyegeria/commands → commands}/cat/get_project_structure.py +0 -0
- {pyegeria/commands → commands}/cat/get_tech_type_elements.py +0 -0
- {pyegeria/commands → commands}/cat/glossary_actions.py +0 -0
- {pyegeria/commands → commands}/cat/list_assets.py +0 -0
- {pyegeria/commands → commands}/cat/list_cert_types.py +0 -0
- {pyegeria/commands → commands}/cat/list_deployed_catalogs.py +0 -0
- {pyegeria/commands → commands}/cat/list_deployed_database_schemas.py +0 -0
- {pyegeria/commands → commands}/cat/list_deployed_databases.py +0 -0
- {pyegeria/commands → commands}/cat/list_deployed_servers.py +0 -0
- {pyegeria/commands → commands}/cat/list_projects.py +0 -0
- {pyegeria/commands → commands}/cat/list_tech_type_elements.py +0 -0
- {pyegeria/commands → commands}/cat/list_tech_types.py +0 -0
- {pyegeria/commands → commands}/cat/list_todos.py +0 -0
- {pyegeria/commands → commands}/cat/list_user_ids.py +0 -0
- {pyegeria/commands → commands}/cli/ops_config.py +0 -0
- {pyegeria/commands → commands}/cli/txt_custom_v2.tcss +0 -0
- {pyegeria/commands → commands}/my/README.md +0 -0
- {pyegeria/commands → commands}/my/__init__.py +0 -0
- {pyegeria/commands → commands}/my/list_my_profile.py +0 -0
- {pyegeria/commands → commands}/my/list_my_roles.py +0 -0
- {pyegeria/commands → commands}/my/monitor_my_todos.py +0 -0
- {pyegeria/commands → commands}/my/monitor_open_todos.py +0 -0
- {pyegeria/commands → commands}/my/todo_actions.py +0 -0
- {pyegeria/commands → commands}/ops/README.md +0 -0
- {pyegeria/commands → commands}/ops/__init__.py +0 -0
- {pyegeria/commands → commands}/ops/gov_server_actions.py +0 -0
- {pyegeria/commands → commands}/ops/list_archives.py +0 -0
- {pyegeria/commands → commands}/ops/list_catalog_targets.py +0 -0
- {pyegeria/commands → commands}/ops/load_archive.py +0 -0
- {pyegeria/commands → commands}/ops/monitor_asset_events.py +0 -0
- {pyegeria/commands → commands}/ops/monitor_engine_activity.py +0 -0
- {pyegeria/commands → commands}/ops/monitor_engine_activity_c.py +0 -0
- {pyegeria/commands → commands}/ops/monitor_gov_eng_status.py +0 -0
- {pyegeria/commands → commands}/ops/monitor_integ_daemon_status.py +0 -0
- {pyegeria/commands → commands}/ops/monitor_platform_status.py +0 -0
- {pyegeria/commands → commands}/ops/monitor_server_startup.py +0 -0
- {pyegeria/commands → commands}/ops/monitor_server_status.py +0 -0
- {pyegeria/commands → commands}/ops/orig_monitor_server_list.py +0 -0
- {pyegeria/commands → commands}/ops/orig_monitor_server_status.py +0 -0
- {pyegeria/commands → commands}/ops/refresh_integration_daemon.py +0 -0
- {pyegeria/commands → commands}/ops/restart_integration_daemon.py +0 -0
- {pyegeria/commands → commands}/ops/table_integ_daemon_status.py +0 -0
- {pyegeria/commands → commands}/ops/x_engine_actions.py +0 -0
- {pyegeria/commands → commands}/tech/README.md +0 -0
- {pyegeria/commands → commands}/tech/__init__.py +0 -0
- {pyegeria/commands → commands}/tech/get_element_info.py +0 -0
- {pyegeria/commands → commands}/tech/get_guid_info.py +0 -0
- {pyegeria/commands → commands}/tech/get_tech_details.py +0 -0
- {pyegeria/commands → commands}/tech/get_tech_type_template.py +0 -0
- {pyegeria/commands → commands}/tech/list_all_om_type_elements.py +0 -0
- {pyegeria/commands → commands}/tech/list_all_om_type_elements_x.py +0 -0
- {pyegeria/commands → commands}/tech/list_all_related_elements.py +0 -0
- {pyegeria/commands → commands}/tech/list_anchored_elements.py +0 -0
- {pyegeria/commands → commands}/tech/list_asset_types.py +0 -0
- {pyegeria/commands → commands}/tech/list_elements_by_classification_by_property_value.py +0 -0
- {pyegeria/commands → commands}/tech/list_elements_by_property_value.py +0 -0
- {pyegeria/commands → commands}/tech/list_elements_by_property_value_x.py +0 -0
- {pyegeria/commands → commands}/tech/list_elements_for_classification.py +0 -0
- {pyegeria/commands → commands}/tech/list_gov_action_processes.py +0 -0
- {pyegeria/commands → commands}/tech/list_registered_services.py +0 -0
- {pyegeria/commands → commands}/tech/list_related_elements_with_prop_value.py +0 -0
- {pyegeria/commands → commands}/tech/list_related_specification.py +0 -0
- {pyegeria/commands → commands}/tech/list_relationship_types.py +0 -0
- {pyegeria/commands → commands}/tech/list_relationships.py +0 -0
- {pyegeria/commands → commands}/tech/list_solution_blueprints.py +0 -0
- {pyegeria/commands → commands}/tech/list_solution_components.py +0 -0
- {pyegeria/commands → commands}/tech/list_solution_roles.py +0 -0
- {pyegeria/commands → commands}/tech/list_tech_templates.py +0 -0
- {pyegeria/commands → commands}/tech/list_valid_metadata_values.py +0 -0
- {pyegeria/commands → commands}/tech/table_tech_templates.py +0 -0
- {pyegeria/commands → commands}/tech/x_list_related_elements.py +0 -0
- {pyegeria-5.3.9.4.dist-info → pyegeria-5.3.9.6.dist-info}/LICENSE +0 -0
- {pyegeria-5.3.9.4.dist-info → pyegeria-5.3.9.6.dist-info}/WHEEL +0 -0
@@ -1,53 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
This file contains display-related constants and formatting functions for Egeria Markdown processing
|
3
|
-
"""
|
4
|
-
|
5
|
-
# Constants for element labels
|
6
|
-
GLOSSARY_NAME_LABELS = ["Glossary Name", "Glossary", "Glossaries", "Owning Glossary", "In Glossary"]
|
7
|
-
CATEGORY_NAME_LABELS = ["Glossary Category Name", "Glossary Category", "Glossary Categories", "Category Name",
|
8
|
-
"Category", "Categories"]
|
9
|
-
PARENT_CATEGORY_LABELS = ["Parent Category Name", "Parent Category", "parent category name", "parent category"]
|
10
|
-
CHILD_CATEGORY_LABELS = ["Child Categories", "Child Category", "child category names", "child categories",
|
11
|
-
"Child Category Names"]
|
12
|
-
TERM_NAME_LABELS = ["Glossary Term Name", "Glossary Term", "Glossary Terms", "Term Name", "Term", "Terms", "Term Names"]
|
13
|
-
PROJECT_NAME_LABELS = ["Project Name", "Project", "Project Names", "Projects"]
|
14
|
-
BLUEPRINT_NAME_LABELS = ["Solution Blueprint Name", "Solution Blueprint", "Solution Blueprints", "Blueprint Name",
|
15
|
-
"Blueprint", "Blueprints"]
|
16
|
-
COMPONENT_NAME_LABELS = ["Solution Component Name", "Solution Component", "Solution Components", "Component Name",
|
17
|
-
"Component", "Components", "Parent Components", "Parent Component"]
|
18
|
-
SOLUTION_ROLE_LABELS = ["Solution Role Name", "Solution Role", "Solution Roles", "Role Name", "Role", "Roles"]
|
19
|
-
SOLUTION_ACTOR_ROLE_LABELS = ["Solution Actor Role Name", "Solution Actor Role Names", "Solution Actor Role",
|
20
|
-
"Solution Actor Roles", "Actor Role Name", "Actor Role", "Actor Roles",
|
21
|
-
"Actor Role Names"]
|
22
|
-
SOLUTION_LINKING_ROLE_LABELS = ["Solution Linking Role Name", "Solution Linking Role Names", "Solution Linking Role",
|
23
|
-
"Solution Linking Roles", "Linking Role Name", "Linking Role", "Linking Roles",
|
24
|
-
"Linking Role Names"]
|
25
|
-
OUTPUT_LABELS = ["Output", "Output Format"]
|
26
|
-
SEARCH_LABELS = ['Search String', 'Filter']
|
27
|
-
GUID_LABELS = ['GUID', 'guid']
|
28
|
-
|
29
|
-
# Constants for output formats
|
30
|
-
ELEMENT_OUTPUT_FORMATS = ["LIST", "DICT", "MD", "FORM", "REPORT"]
|
31
|
-
|
32
|
-
# Constants for term relationships
|
33
|
-
TERM_RELATIONSHPS = [
|
34
|
-
"Synonym",
|
35
|
-
"Translation",
|
36
|
-
"PreferredTerm",
|
37
|
-
"TermISATYPEOFRelationship",
|
38
|
-
"TermTYPEDBYRelationship",
|
39
|
-
"Antonym",
|
40
|
-
"ReplacementTerm",
|
41
|
-
"ValidValue",
|
42
|
-
"TermHASARelationship",
|
43
|
-
"RelatedTerm",
|
44
|
-
"ISARelationship"
|
45
|
-
]
|
46
|
-
|
47
|
-
# List of supported commands
|
48
|
-
command_list = ["Provenance", "Create Glossary", "Update Glossary", "Create Term", "Update Term", "List Terms", "List Term Details",
|
49
|
-
"List Glossary Terms", "List Term History", "List Term Revision History", "List Term Update History",
|
50
|
-
"List Glossary Structure", "List Glossaries", "List Categories", "List Glossary Categories",
|
51
|
-
"Create Personal Project", "Update Personal Project", "Create Category", "Update Category",
|
52
|
-
"Create Solution Blueprint", "Update Solution Blueprint", "Create Solution Component",
|
53
|
-
"Update Solution Component", "Create Term-Term Relationship", "Update Term-Term Relationship",]
|
@@ -1,177 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
This file contains functions for extracting data from text for Egeria Markdown processing
|
3
|
-
"""
|
4
|
-
import re
|
5
|
-
from typing import List, Optional, Any, Tuple
|
6
|
-
|
7
|
-
from pyegeria.md_processing.utils.common_utils import print_msg, INFO
|
8
|
-
|
9
|
-
def extract_command_plus(block: str) -> tuple[str, str, str] | None:
|
10
|
-
"""
|
11
|
-
Extracts a multi-word object and its associated action from the given block of text.
|
12
|
-
|
13
|
-
This function searches for a pattern in the format of `#...##` or `#...\n`
|
14
|
-
inside the provided string `block`. The matched pattern is split into
|
15
|
-
two parts: the action and the object type. The action is expected to
|
16
|
-
be the first part, while the rest is treated as the object type. If
|
17
|
-
no match is found, the function returns None.
|
18
|
-
|
19
|
-
Lines beginning with '>' are ignored.
|
20
|
-
|
21
|
-
Args:
|
22
|
-
block: A string containing the block of text to search for the
|
23
|
-
command and action.
|
24
|
-
|
25
|
-
Returns:
|
26
|
-
A tuple containing the command, the object type and the object action if a
|
27
|
-
match is found. Otherwise, returns None.
|
28
|
-
"""
|
29
|
-
# Filter out lines beginning with '>'
|
30
|
-
filtered_lines = [line for line in block.split('\n') if not line.strip().startswith('>')]
|
31
|
-
filtered_block = '\n'.join(filtered_lines)
|
32
|
-
|
33
|
-
match = re.search(r"#(.*?)(?:##|\n|$)", filtered_block) # Using a non capturing group
|
34
|
-
if match:
|
35
|
-
clean_match = match.group(1).strip()
|
36
|
-
if ' ' in clean_match:
|
37
|
-
parts = clean_match.split(' ')
|
38
|
-
object_action = parts[0].strip()
|
39
|
-
# Join the rest of the parts to allow object_type to be one or two words
|
40
|
-
object_type = ' '.join(parts[1:]).strip()
|
41
|
-
else:
|
42
|
-
object_type = clean_match.split(' ')[1].strip()
|
43
|
-
object_action = clean_match.split(' ')[0].strip()
|
44
|
-
|
45
|
-
return clean_match, object_type, object_action
|
46
|
-
return None
|
47
|
-
|
48
|
-
|
49
|
-
def extract_command(block: str) -> str | None:
|
50
|
-
"""
|
51
|
-
Extracts a command from a block of text that is contained between a single hash ('#') and
|
52
|
-
either a double hash ('##'), a newline character, or the end of the string.
|
53
|
-
|
54
|
-
The function searches for a specific pattern within the block of text and extracts the
|
55
|
-
content that appears immediately after a single hash ('#'). Ensures that the extracted
|
56
|
-
content is appropriately trimmed of leading or trailing whitespace, if present.
|
57
|
-
|
58
|
-
Args:
|
59
|
-
block: A string representing the block of text to process. Contains the content
|
60
|
-
in which the command and delimiters are expected to be present.
|
61
|
-
|
62
|
-
Returns:
|
63
|
-
The extracted command as a string if a match is found, otherwise None.
|
64
|
-
"""
|
65
|
-
match = re.search(r"#(.*?)(?:##|\n|$)", block) # Using a non capturing group
|
66
|
-
if match:
|
67
|
-
return match.group(1).strip()
|
68
|
-
return None
|
69
|
-
|
70
|
-
|
71
|
-
def extract_attribute(text: str, labels: list[str]) -> str | None:
|
72
|
-
"""
|
73
|
-
Extracts the attribute value from a string.
|
74
|
-
|
75
|
-
Args:
|
76
|
-
text: The input string.
|
77
|
-
labels: List of equivalent labels to search for
|
78
|
-
|
79
|
-
Returns:
|
80
|
-
The value of the attribute, or None if not found.
|
81
|
-
|
82
|
-
Note:
|
83
|
-
Lines beginning with '>' are ignored.
|
84
|
-
"""
|
85
|
-
# Iterate over the list of labels
|
86
|
-
for label in labels:
|
87
|
-
# Construct pattern for the current label
|
88
|
-
pattern = rf"## {re.escape(label)}\n(.*?)(?:#|___|>|$)" # modified from --- to enable embedded tables
|
89
|
-
match = re.search(pattern, text, re.DOTALL)
|
90
|
-
if match:
|
91
|
-
# Extract matched text
|
92
|
-
matched_text = match.group(1).strip()
|
93
|
-
|
94
|
-
# Filter out lines beginning with '>'
|
95
|
-
filtered_lines = [line for line in matched_text.split('\n') if not line.strip().startswith('>')]
|
96
|
-
filtered_text = '\n'.join(filtered_lines)
|
97
|
-
|
98
|
-
# Replace consecutive \n with a single \n
|
99
|
-
extracted_text = re.sub(r'\n+', '\n', filtered_text)
|
100
|
-
if not extracted_text.isspace() and extracted_text:
|
101
|
-
return extracted_text # Return the cleaned text - I removed the title casing
|
102
|
-
|
103
|
-
return None
|
104
|
-
|
105
|
-
|
106
|
-
def process_simple_attribute(txt: str, labels: list[str], if_missing: str = INFO) -> str | None:
|
107
|
-
"""
|
108
|
-
Processes a simple attribute from a string.
|
109
|
-
|
110
|
-
Args:
|
111
|
-
txt: The input string.
|
112
|
-
labels: List of equivalent labels to search for
|
113
|
-
if_missing: The message level to use if the attribute is missing.
|
114
|
-
|
115
|
-
Returns:
|
116
|
-
The value of the attribute, or None if not found.
|
117
|
-
"""
|
118
|
-
from pyegeria.md_processing.utils.common_utils import debug_level, print_msg
|
119
|
-
|
120
|
-
attribute = extract_attribute(txt, labels)
|
121
|
-
if attribute is None and if_missing:
|
122
|
-
msg = f"No {labels[0]} found"
|
123
|
-
print_msg(if_missing, msg, debug_level)
|
124
|
-
return attribute
|
125
|
-
|
126
|
-
|
127
|
-
def process_name_list(egeria_client, element_type: str, txt: str, element_labels: list[str]) -> tuple[list, list, bool, bool]:
|
128
|
-
"""
|
129
|
-
Processes a list of names from a string.
|
130
|
-
|
131
|
-
Args:
|
132
|
-
egeria_client: The Egeria client to use for validation.
|
133
|
-
element_type: The type of element to process.
|
134
|
-
txt: The input string.
|
135
|
-
element_labels: List of equivalent labels to search for
|
136
|
-
|
137
|
-
Returns:
|
138
|
-
A tuple containing:
|
139
|
-
- A list of element names
|
140
|
-
- A list of element qualified names
|
141
|
-
- A boolean indicating if all elements are valid
|
142
|
-
- A boolean indicating if any elements exist
|
143
|
-
"""
|
144
|
-
from pyegeria.md_processing.utils.common_utils import debug_level, print_msg
|
145
|
-
from pyegeria.md_processing.utils.validation_utils import get_element_by_name
|
146
|
-
|
147
|
-
element_names = []
|
148
|
-
element_q_names = []
|
149
|
-
all_valid = True
|
150
|
-
any_exist = False
|
151
|
-
|
152
|
-
# Get the list of element names
|
153
|
-
element_list = process_simple_attribute(txt, element_labels)
|
154
|
-
if element_list:
|
155
|
-
# Split the list by commas or newlines
|
156
|
-
element_names = list(filter(None, re.split(r'[,\n]+', element_list.strip())))
|
157
|
-
|
158
|
-
# Validate each element
|
159
|
-
for element_name in element_names:
|
160
|
-
element_name = element_name.strip()
|
161
|
-
if element_name:
|
162
|
-
element = get_element_by_name(egeria_client, element_type, element_name)
|
163
|
-
if element:
|
164
|
-
any_exist = True
|
165
|
-
element_q_name = element.get('qualifiedName', None)
|
166
|
-
if element_q_name:
|
167
|
-
element_q_names.append(element_q_name)
|
168
|
-
else:
|
169
|
-
all_valid = False
|
170
|
-
msg = f"Element {element_name} has no qualified name"
|
171
|
-
print_msg("ERROR", msg, debug_level)
|
172
|
-
else:
|
173
|
-
all_valid = False
|
174
|
-
msg = f"Element {element_name} not found"
|
175
|
-
print_msg("ERROR", msg, debug_level)
|
176
|
-
|
177
|
-
return element_names, element_q_names, all_valid, any_exist
|
@@ -1,208 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
This file contains functions for validating data for Egeria Markdown processing
|
3
|
-
"""
|
4
|
-
import re
|
5
|
-
from typing import List, Optional, Any, Tuple
|
6
|
-
|
7
|
-
from pyegeria._globals import NO_ELEMENTS_FOUND
|
8
|
-
from pyegeria.dr_egeria_state import get_element_dictionary, update_element_dictionary, find_key_with_value
|
9
|
-
|
10
|
-
def process_element_identifiers(egeria_client, element_type: str, element_labels: list[str], txt: str, action: str, version: str = None) -> tuple[str, str, bool, bool]:
|
11
|
-
"""
|
12
|
-
Processes element identifiers from a string.
|
13
|
-
|
14
|
-
Args:
|
15
|
-
egeria_client: The Egeria client to use for validation.
|
16
|
-
element_type: The type of element to process.
|
17
|
-
element_labels: List of equivalent labels to search for
|
18
|
-
txt: The input string.
|
19
|
-
action: The action to perform (Create, Update, or Exists Required).
|
20
|
-
version: The version of the element.
|
21
|
-
|
22
|
-
Returns:
|
23
|
-
A tuple containing:
|
24
|
-
- The qualified name of the element
|
25
|
-
- The GUID of the element
|
26
|
-
- A boolean indicating if the element is valid
|
27
|
-
- A boolean indicating if the element exists
|
28
|
-
"""
|
29
|
-
from pyegeria.md_processing.utils.common_utils import debug_level, print_msg, EXISTS_REQUIRED
|
30
|
-
from pyegeria.md_processing.utils.extraction_utils import process_simple_attribute
|
31
|
-
|
32
|
-
element_name = process_simple_attribute(txt, element_labels)
|
33
|
-
if element_name is None:
|
34
|
-
return None, None, False, False
|
35
|
-
|
36
|
-
element = get_element_by_name(egeria_client, element_type, element_name)
|
37
|
-
if element is None:
|
38
|
-
if action == EXISTS_REQUIRED or action == "Update":
|
39
|
-
msg = f"{element_type} {element_name} not found"
|
40
|
-
print_msg("ERROR", msg, debug_level)
|
41
|
-
return None, None, False, False
|
42
|
-
else:
|
43
|
-
return None, None, True, False
|
44
|
-
else:
|
45
|
-
element_guid = element.get('guid', None)
|
46
|
-
element_q_name = element.get('qualifiedName', None)
|
47
|
-
if element_guid and element_q_name:
|
48
|
-
if action == "Create":
|
49
|
-
msg = f"{element_type} {element_name} already exists with GUID {element_guid}"
|
50
|
-
print_msg("WARNING", msg, debug_level)
|
51
|
-
else:
|
52
|
-
msg = f"{element_type} {element_name} exists with GUID {element_guid}"
|
53
|
-
print_msg("INFO", msg, debug_level)
|
54
|
-
return element_q_name, element_guid, True, True
|
55
|
-
else:
|
56
|
-
msg = f"{element_type} {element_name} exists but has no GUID or qualified name"
|
57
|
-
print_msg("ERROR", msg, debug_level)
|
58
|
-
return None, None, False, True
|
59
|
-
|
60
|
-
|
61
|
-
def get_element_by_name(egeria_client, element_type: str, element_name: str) -> dict | None:
|
62
|
-
"""
|
63
|
-
Gets an element by name.
|
64
|
-
|
65
|
-
Args:
|
66
|
-
egeria_client: The Egeria client to use for validation.
|
67
|
-
element_type: The type of element to get.
|
68
|
-
element_name: The name of the element to get.
|
69
|
-
|
70
|
-
Returns:
|
71
|
-
The element if found, otherwise None.
|
72
|
-
"""
|
73
|
-
from pyegeria.md_processing.utils.common_utils import debug_level, print_msg
|
74
|
-
from pyegeria.md_processing.utils.display_utils import (
|
75
|
-
GLOSSARY_NAME_LABELS, CATEGORY_NAME_LABELS, TERM_NAME_LABELS, PROJECT_NAME_LABELS,
|
76
|
-
BLUEPRINT_NAME_LABELS, COMPONENT_NAME_LABELS
|
77
|
-
)
|
78
|
-
|
79
|
-
# Check if we already have this element in our dictionary
|
80
|
-
element_dict = get_element_dictionary()
|
81
|
-
if element_dict:
|
82
|
-
for q_name, details in element_dict.items():
|
83
|
-
if details.get('display_name', '').lower() == element_name.lower():
|
84
|
-
if element_type.lower() in q_name.lower():
|
85
|
-
msg = f"Found {element_type} {element_name} in dictionary with qualified name {q_name}"
|
86
|
-
print_msg("DEBUG-INFO", msg, debug_level)
|
87
|
-
return {'qualifiedName': q_name, 'guid': details.get('guid', None)}
|
88
|
-
|
89
|
-
# If not in dictionary, query Egeria
|
90
|
-
try:
|
91
|
-
if element_type in GLOSSARY_NAME_LABELS:
|
92
|
-
glossaries = egeria_client.list_glossaries()
|
93
|
-
if glossaries == NO_ELEMENTS_FOUND:
|
94
|
-
return None
|
95
|
-
for glossary in glossaries:
|
96
|
-
if glossary.get('displayName', '').lower() == element_name.lower():
|
97
|
-
q_name = glossary.get('qualifiedName', None)
|
98
|
-
guid = glossary.get('guid', None)
|
99
|
-
if q_name and guid:
|
100
|
-
update_element_dictionary(q_name, {'guid': guid, 'display_name': element_name})
|
101
|
-
return {'qualifiedName': q_name, 'guid': guid}
|
102
|
-
elif element_type in CATEGORY_NAME_LABELS:
|
103
|
-
categories = egeria_client.list_categories()
|
104
|
-
if categories == NO_ELEMENTS_FOUND:
|
105
|
-
return None
|
106
|
-
for category in categories:
|
107
|
-
if category.get('displayName', '').lower() == element_name.lower():
|
108
|
-
q_name = category.get('qualifiedName', None)
|
109
|
-
guid = category.get('guid', None)
|
110
|
-
if q_name and guid:
|
111
|
-
update_element_dictionary(q_name, {'guid': guid, 'display_name': element_name})
|
112
|
-
return {'qualifiedName': q_name, 'guid': guid}
|
113
|
-
elif element_type in TERM_NAME_LABELS:
|
114
|
-
terms = egeria_client.list_terms()
|
115
|
-
if terms == NO_ELEMENTS_FOUND:
|
116
|
-
return None
|
117
|
-
for term in terms:
|
118
|
-
if term.get('displayName', '').lower() == element_name.lower():
|
119
|
-
q_name = term.get('qualifiedName', None)
|
120
|
-
guid = term.get('guid', None)
|
121
|
-
if q_name and guid:
|
122
|
-
update_element_dictionary(q_name, {'guid': guid, 'display_name': element_name})
|
123
|
-
return {'qualifiedName': q_name, 'guid': guid}
|
124
|
-
elif element_type in PROJECT_NAME_LABELS:
|
125
|
-
projects = egeria_client.list_projects()
|
126
|
-
if projects == NO_ELEMENTS_FOUND:
|
127
|
-
return None
|
128
|
-
for project in projects:
|
129
|
-
if project.get('displayName', '').lower() == element_name.lower():
|
130
|
-
q_name = project.get('qualifiedName', None)
|
131
|
-
guid = project.get('guid', None)
|
132
|
-
if q_name and guid:
|
133
|
-
update_element_dictionary(q_name, {'guid': guid, 'display_name': element_name})
|
134
|
-
return {'qualifiedName': q_name, 'guid': guid}
|
135
|
-
elif element_type in BLUEPRINT_NAME_LABELS:
|
136
|
-
blueprints = egeria_client.list_solution_blueprints()
|
137
|
-
if blueprints == NO_ELEMENTS_FOUND:
|
138
|
-
return None
|
139
|
-
for blueprint in blueprints:
|
140
|
-
if blueprint.get('displayName', '').lower() == element_name.lower():
|
141
|
-
q_name = blueprint.get('qualifiedName', None)
|
142
|
-
guid = blueprint.get('guid', None)
|
143
|
-
if q_name and guid:
|
144
|
-
update_element_dictionary(q_name, {'guid': guid, 'display_name': element_name})
|
145
|
-
return {'qualifiedName': q_name, 'guid': guid}
|
146
|
-
elif element_type in COMPONENT_NAME_LABELS:
|
147
|
-
components = egeria_client.list_solution_components()
|
148
|
-
if components == NO_ELEMENTS_FOUND:
|
149
|
-
return None
|
150
|
-
for component in components:
|
151
|
-
if component.get('displayName', '').lower() == element_name.lower():
|
152
|
-
q_name = component.get('qualifiedName', None)
|
153
|
-
guid = component.get('guid', None)
|
154
|
-
if q_name and guid:
|
155
|
-
update_element_dictionary(q_name, {'guid': guid, 'display_name': element_name})
|
156
|
-
return {'qualifiedName': q_name, 'guid': guid}
|
157
|
-
except Exception as e:
|
158
|
-
msg = f"Error getting {element_type} {element_name}: {e}"
|
159
|
-
print_msg("ERROR", msg, debug_level)
|
160
|
-
return None
|
161
|
-
|
162
|
-
return None
|
163
|
-
|
164
|
-
|
165
|
-
def update_a_command(txt: str, command: str, obj_type: str, q_name: str, u_guid: str) -> str:
|
166
|
-
"""
|
167
|
-
Updates a command in a string.
|
168
|
-
|
169
|
-
Args:
|
170
|
-
txt: The input string.
|
171
|
-
command: The command to update.
|
172
|
-
obj_type: The type of object to update.
|
173
|
-
q_name: The qualified name of the object.
|
174
|
-
u_guid: The GUID of the object.
|
175
|
-
|
176
|
-
Returns:
|
177
|
-
The updated string.
|
178
|
-
"""
|
179
|
-
# Split the command into action and object
|
180
|
-
parts = command.split()
|
181
|
-
action = parts[0]
|
182
|
-
|
183
|
-
# Determine the new action
|
184
|
-
new_action = "Update" if action == "Create" else "Create"
|
185
|
-
|
186
|
-
# Replace the command
|
187
|
-
new_command = f"{new_action} {obj_type}"
|
188
|
-
pattern = rf"#{command}(?:##|\n|$)"
|
189
|
-
replacement = f"#{new_command}\n"
|
190
|
-
updated_txt = re.sub(pattern, replacement, txt)
|
191
|
-
|
192
|
-
# Add qualified name and GUID if updating
|
193
|
-
if new_action == "Update" and q_name and u_guid:
|
194
|
-
# Check if Qualified Name section exists
|
195
|
-
if "## Qualified Name" not in updated_txt:
|
196
|
-
# Add Qualified Name section before the first ## that's not part of the command
|
197
|
-
pattern = r"(##\s+[^#\n]+)"
|
198
|
-
replacement = f"## Qualified Name\n{q_name}\n\n\\1"
|
199
|
-
updated_txt = re.sub(pattern, replacement, updated_txt, count=1)
|
200
|
-
|
201
|
-
# Check if GUID section exists
|
202
|
-
if "## GUID" not in updated_txt and "## guid" not in updated_txt:
|
203
|
-
# Add GUID section before the first ## that's not part of the command or Qualified Name
|
204
|
-
pattern = r"(##\s+(?!Qualified Name)[^#\n]+)"
|
205
|
-
replacement = f"## GUID\n{u_guid}\n\n\\1"
|
206
|
-
updated_txt = re.sub(pattern, replacement, updated_txt, count=1)
|
207
|
-
|
208
|
-
return updated_txt
|